blob: 4368612219067901f398ed480fdded8734027ab3 [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Abhishek Singhdfe0f742017-01-03 11:26:38 +05302 * Copyright (c) 2012-2017 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 Kumar9acee012015-08-21 19:58:01 +0530257VOS_STATUS WDA_ProcessEXTScanSetSSIDHotlistReq(tWDA_CbContext *pWDA,
258 tSirEXTScanSetSsidHotListReqParams *wdaRequest);
259VOS_STATUS WDA_ProcessEXTScanResetSSIDHotlistReq(tWDA_CbContext *pWDA,
260 tSirEXTScanResetSsidHotlistReqParams *wdaRequest);
Padma, Santhosh Kumarc1f7f052015-08-26 12:29:01 +0530261VOS_STATUS WDA_ProcessHighPriorityDataInfoInd(tWDA_CbContext *pWDA,
262 tSirHighPriorityDataInfoInd *wdaRequest);
Dino Mycle41bdc942014-06-10 11:30:24 +0530263#endif /* WLAN_FEATURE_EXTSCAN */
264
Sunil Duttbd736ed2014-05-26 21:19:41 +0530265#ifdef WLAN_FEATURE_LINK_LAYER_STATS
266VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
267 tSirLLStatsSetReq *wdaRequest);
268
269VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
270 tSirLLStatsGetReq *wdaRequest);
271
272VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
273 tSirLLStatsClearReq *wdaRequest);
274#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Abhishek Singh85b74712014-10-08 11:38:19 +0530275
276v_VOID_t WDA_ProcessFWStatsGetReq(tWDA_CbContext *pWDA,
277 tSirFWStatsGetReq *wdaRequest);
278
Srinivas Dasari4dae48f2014-11-26 21:14:16 +0530279VOS_STATUS WDA_ProcessEncryptMsgReq(tWDA_CbContext *pWDA,
280 u8 *wdaRequest);
Abhishek Singh41988ba2015-05-25 19:42:29 +0530281VOS_STATUS
282WDA_ProcessSetRtsCtsHTVhtInd(tWDA_CbContext *pWDA,
283 tANI_U32 val);
Srinivas Dasari4dae48f2014-11-26 21:14:16 +0530284
c_manjeecfd1efb2015-09-25 19:32:34 +0530285VOS_STATUS
286WDA_ProcessFwrMemDumpReq(tWDA_CbContext *pWDA,
287 tAniFwrDumpReq* pFwrMemDumpReq);
Srinivas Dasari32a79262015-02-19 13:04:49 +0530288
Katya Nigamf0511f62015-05-05 16:40:57 +0530289VOS_STATUS WDA_ProcessMonStartReq( tWDA_CbContext *pWDA, void* wdaRequest);
290VOS_STATUS WDA_ProcessMonStopReq( tWDA_CbContext *pWDA, void* wdaRequest);
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +0530291VOS_STATUS WDA_ProcessEnableDisableCAEventInd(tWDA_CbContext *pWDA, tANI_U8 val);
Arun Khandavalli7eeb1592015-10-19 21:36:57 +0530292
293VOS_STATUS WDA_ProcessWifiConfigReq(tWDA_CbContext *pWDA,
294 tSetWifiConfigParams *pwdaWificonfig);
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +0530295
296VOS_STATUS WDA_ProcessStartOemDataReqIndNew(tWDA_CbContext *pWDA,
297 tOemDataReqNewConfig *pOemDataReqNewConfig);
298
Mahesh A Saptasagarcfc65ae2015-12-22 15:06:10 +0530299
300v_VOID_t WDA_ProcessAntennaDiversitySelectionReq(tWDA_CbContext *pWDA,
301 tSirAntennaDiversitySelectionReq *pData);
302
Mahesh A Saptasagar7d432952016-02-09 14:01:03 +0530303VOS_STATUS WDA_ProcessBcnMissPenaltyCount(tWDA_CbContext *pWDA,
304 tModifyRoamParamsReqParams *params);
Srinivas Dasari32a79262015-02-19 13:04:49 +0530305/*
306 * FUNCTION: WDA_ProcessNanRequest
307 * Process NAN request
308 */
309VOS_STATUS WDA_ProcessNanRequest(tWDA_CbContext *pWDA,
310 tNanRequest *wdaRequest)
311{
312 WDI_Status status = WDI_STATUS_SUCCESS;
313 tWDA_ReqParams *pWdaParams;
314 WDI_NanRequestType *wdiRequest = NULL;
315 size_t wdiReqLength = sizeof(WDI_NanRequestType)
316 - sizeof(wdiRequest->request_data)
317 + wdaRequest->request_data_len;
318
319 wdiRequest = (WDI_NanRequestType *)vos_mem_malloc(wdiReqLength);
320
321 if (NULL == wdiRequest)
322 {
323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
324 "%s: VOS MEM Alloc Failure, size : %zu", __func__,
325 wdiReqLength);
326 vos_mem_free(wdaRequest);
327 return VOS_STATUS_E_NOMEM;
328 }
329
330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
331 "WDA: Process Nan Request length: %zu", wdiReqLength);
332
333 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
334 if (NULL == pWdaParams)
335 {
336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
337 "%s: VOS MEM Alloc Failure for tWDA_ReqParams", __func__);
338 VOS_ASSERT(0);
339 vos_mem_free(wdaRequest);
340 vos_mem_free(wdiRequest);
341 return VOS_STATUS_E_NOMEM;
342 }
343
344 wdiRequest->request_data_len = wdaRequest->request_data_len;
345
346 vos_mem_copy( wdiRequest->request_data,
347 wdaRequest->request_data,
348 wdaRequest->request_data_len);
349
350 vos_mem_free(wdaRequest);
351
352 pWdaParams->pWdaContext = pWDA;
353 pWdaParams->wdaMsgParam = NULL;
354 pWdaParams->wdaWdiApiMsgParam = wdiRequest;
355
356 status = WDI_NanRequest(wdiRequest, pWdaParams);
357
358 if (IS_WDI_STATUS_FAILURE(status))
359 {
360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
361 "Failure to request. Free all the memory " );
362 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
363 vos_mem_free(pWdaParams);
364 }
365
366 return CONVERT_WDI2VOS_STATUS(status) ;
367}
368
Padma, Santhosh Kumar9093b202015-07-21 15:37:38 +0530369/**
370 * wda_state_info_dump() - prints state information of wda layer
371 */
372static void wda_state_info_dump(void)
373{
374 v_CONTEXT_t vos_ctx_ptr = NULL;
375 tWDA_CbContext *wda = NULL ;
Srinivas Dasari32a79262015-02-19 13:04:49 +0530376
Padma, Santhosh Kumar9093b202015-07-21 15:37:38 +0530377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
378 "<------ %s " ,__func__);
379
380 /* Get the Global VOSS Context */
381 vos_ctx_ptr = vos_get_global_context(VOS_MODULE_ID_VOSS, NULL);
382
383 if (NULL != vos_ctx_ptr)
384 wda = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA,
385 vos_ctx_ptr );
386 else {
387 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
388 "%s: Invalid Global VOSS Context", __func__);
389 VOS_ASSERT(0);
390 return;
391 }
392
393 if (NULL != wda)
394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
395 "wdaState: %d linkState: %d", wda->wdaState,
396 wda->linkState);
397 else {
398 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
399 "%s: Invalid WDA Context", __func__);
400 VOS_ASSERT(0);
401 }
402}
403
404/**
405 * wda_register_debug_callback() - registration function for wda layer
406 * to print wda state information
407 */
408static void wda_register_debug_callback(void)
409{
410 vos_register_debug_callback(VOS_MODULE_ID_WDA, &wda_state_info_dump);
411}
Srinivas Dasari32a79262015-02-19 13:04:49 +0530412
Jeff Johnson295189b2012-06-20 16:38:30 -0700413/*
414 * FUNCTION: WDA_open
415 * Allocate the WDA context
416 */
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530417VOS_STATUS WDA_open(v_PVOID_t pVosContext, v_PVOID_t devHandle,
Jeff Johnson295189b2012-06-20 16:38:30 -0700418 tMacOpenParameters *pMacParams )
419{
420 tWDA_CbContext *wdaContext;
421 VOS_STATUS status;
422 WDI_DeviceCapabilityType wdiDevCapability = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700423 /* Allocate WDA context */
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +0530424 status = vos_alloc_context(pVosContext, VOS_MODULE_ID_WDA,
Jeff Johnson295189b2012-06-20 16:38:30 -0700425 (v_VOID_t **)&wdaContext, sizeof(tWDA_CbContext)) ;
426 if(!VOS_IS_STATUS_SUCCESS(status))
427 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +0530428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "%s: Failed to "
429 "allocate context for WDA - status = %d",__func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700430 return VOS_STATUS_E_NOMEM;
431 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700432 /*__asm int 3;*/
433 vos_mem_zero(wdaContext,sizeof(tWDA_CbContext));
434
435 /* Initialize data structures */
436 wdaContext->pVosContext = pVosContext;
437 wdaContext->wdaState = WDA_INIT_STATE;
438 wdaContext->uTxFlowMask = WDA_TXFLOWMASK;
Sravan Kumar Kairambe037222016-06-19 12:56:24 +0530439 vos_lock_init(&wdaContext->mgmt_pkt_lock);
440
Jeff Johnson295189b2012-06-20 16:38:30 -0700441 /* Initialize WDA-WDI synchronization event */
442 status = vos_event_init(&wdaContext->wdaWdiEvent);
443 if(!VOS_IS_STATUS_SUCCESS(status))
444 {
445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800446 "WDI Sync Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800447 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700448 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700449 /* Init Frame transfer event */
450 status = vos_event_init(&wdaContext->txFrameEvent);
451 if(!VOS_IS_STATUS_SUCCESS(status))
452 {
453 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800454 "VOS Mgmt Frame Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800455 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700456 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700457 status = vos_event_init(&wdaContext->suspendDataTxEvent);
458 if(!VOS_IS_STATUS_SUCCESS(status))
459 {
460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800461 "VOS suspend data tx Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800462 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700463 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700464 status = vos_event_init(&wdaContext->waitOnWdiIndicationCallBack);
465 if(!VOS_IS_STATUS_SUCCESS(status))
466 {
467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800468 "VOS wait On Wdi Ind Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800469 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700470 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700471 vos_trace_setLevel(VOS_MODULE_ID_WDA,VOS_TRACE_LEVEL_ERROR);
Jeff Johnson295189b2012-06-20 16:38:30 -0700472 wdaContext->driverMode = pMacParams->driverType;
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530473 if(WDI_STATUS_SUCCESS != WDI_Init(devHandle, &wdaContext->pWdiContext,
Jeff Johnson295189b2012-06-20 16:38:30 -0700474 &wdiDevCapability, pMacParams->driverType))
475 {
476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
477 "WDI Init failed" );
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800478 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700479 }
480 else
481 {
482 pMacParams->maxStation = wdiDevCapability.ucMaxSTASupported ;
483 pMacParams->maxBssId = wdiDevCapability.ucMaxBSSSupported;
484 pMacParams->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
Jeff Johnson295189b2012-06-20 16:38:30 -0700485 /* update max STA in WDA used for BA */
486 wdaContext->wdaMaxSta = pMacParams->maxStation;
487 /* store the frameTransRequired flag in wdaContext, to send this to HAL
488 * in WDA_Start
489 */
490 wdaContext->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
491 }
Padma, Santhosh Kumar9093b202015-07-21 15:37:38 +0530492
493 wda_register_debug_callback();
494
Jeff Johnson295189b2012-06-20 16:38:30 -0700495 return status;
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800496
497error:
498 vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
499 return VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -0700500}
501
Jeff Johnson295189b2012-06-20 16:38:30 -0700502/*
503 * FUNCTION: WDA_preStart
504 * Trigger DAL-AL to start CFG download
505 */
506VOS_STATUS WDA_preStart(v_PVOID_t pVosContext)
507{
508 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
509 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700510 /*
511 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
512 */
513 wdaMsg.type = WNI_CFG_DNLD_REQ ;
514 wdaMsg.bodyptr = NULL;
515 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700516 /* post the message.. */
517 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
518 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
519 {
520 vosStatus = VOS_STATUS_E_BADMSG;
521 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700522 return( vosStatus );
523}
Jeff Johnson295189b2012-06-20 16:38:30 -0700524/*
525 * FUNCTION: WDA_wdiStartCallback
526 * Once WDI_Start is finished, WDI start callback will be called by WDI
527 * to indicate completion of WDI_Start.
528 */
529void WDA_wdiStartCallback(WDI_StartRspParamsType *wdiRspParams,
530 void *pVosContext)
531{
532 tWDA_CbContext *wdaContext;
533 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700534 if (NULL == pVosContext)
535 {
536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700537 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700538 return;
539 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700540 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
541 if (NULL == wdaContext)
542 {
543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700544 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700545 return;
546 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700547 if (WDI_STATUS_SUCCESS != wdiRspParams->wdiStatus)
548 {
549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700550 "%s: WDI_Start() failure reported", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700551 }
552 else
553 {
554 wdaContext->wdaState = WDA_START_STATE;
555 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700556 /* extract and save version information from the Start Response */
557 wdaContext->wcnssWlanCompiledVersion.major =
558 wdiRspParams->wlanCompiledVersion.major;
559 wdaContext->wcnssWlanCompiledVersion.minor =
560 wdiRspParams->wlanCompiledVersion.minor;
561 wdaContext->wcnssWlanCompiledVersion.version =
562 wdiRspParams->wlanCompiledVersion.version;
563 wdaContext->wcnssWlanCompiledVersion.revision =
564 wdiRspParams->wlanCompiledVersion.revision;
565 wdaContext->wcnssWlanReportedVersion.major =
566 wdiRspParams->wlanReportedVersion.major;
567 wdaContext->wcnssWlanReportedVersion.minor =
568 wdiRspParams->wlanReportedVersion.minor;
569 wdaContext->wcnssWlanReportedVersion.version =
570 wdiRspParams->wlanReportedVersion.version;
571 wdaContext->wcnssWlanReportedVersion.revision =
572 wdiRspParams->wlanReportedVersion.revision;
573 wpalMemoryCopy(wdaContext->wcnssSoftwareVersionString,
574 wdiRspParams->wcnssSoftwareVersion,
575 sizeof(wdaContext->wcnssSoftwareVersionString));
576 wpalMemoryCopy(wdaContext->wcnssHardwareVersionString,
577 wdiRspParams->wcnssHardwareVersion,
578 sizeof(wdaContext->wcnssHardwareVersionString));
Jeff Johnson295189b2012-06-20 16:38:30 -0700579 /* Notify WDA_start that WDI_Start has completed */
580 status = vos_event_set(&wdaContext->wdaWdiEvent);
Jeff Johnson43971f52012-07-17 12:26:56 -0700581 if (VOS_STATUS_SUCCESS != status)
Jeff Johnson295189b2012-06-20 16:38:30 -0700582 {
583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700584 "%s: Unable to unblock WDA_start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700585 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700586 return;
587}
588
Jeff Johnson295189b2012-06-20 16:38:30 -0700589/*
590 * FUNCTION: WDA_start
591 * Prepare TLV configuration and call WDI_Start.
592 */
Jeff Johnson295189b2012-06-20 16:38:30 -0700593VOS_STATUS WDA_start(v_PVOID_t pVosContext)
594{
595 tWDA_CbContext *wdaContext;
596 VOS_STATUS status;
597 WDI_Status wdiStatus;
598 WDI_StartReqParamsType wdiStartParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700599 if (NULL == pVosContext)
600 {
601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700602 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700603 return VOS_STATUS_E_FAILURE;
604 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700605 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
606 if (NULL == wdaContext)
607 {
608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700609 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700610 return VOS_STATUS_E_FAILURE;
611 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700612 /* Non-FTM mode, WDA status for START must be INIT
613 * FTM mode, WDA Status for START can be INIT or STOP */
614 if ( (WDA_INIT_STATE != wdaContext->wdaState) &&
615 (WDA_STOP_STATE != wdaContext->wdaState) )
616 {
617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
618 "%s: Invoked from wrong state %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700619 __func__, wdaContext->wdaState );
Jeff Johnson295189b2012-06-20 16:38:30 -0700620 return VOS_STATUS_E_FAILURE;
621 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700622 /* initialize the wdiStartParam. Note that we can create this on
623 the stack since we won't exit until WDI_Start() completes or
624 times out */
625 vos_mem_set(&wdiStartParam, sizeof(wdiStartParam), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700626 wdiStartParam.wdiDriverType = wdaContext->driverMode;
Jeff Johnson295189b2012-06-20 16:38:30 -0700627 /* prepare the config TLV for the WDI */
628 status = WDA_prepareConfigTLV(pVosContext, &wdiStartParam);
629 if ( !VOS_IS_STATUS_SUCCESS(status) )
630 {
631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700632 "%s: Unable to prepare Config TLV", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700633 return VOS_STATUS_E_FAILURE;
634 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700635 /* note from here onwards if an error occurs we must
636 reclaim the config TLV buffer */
Jeff Johnson295189b2012-06-20 16:38:30 -0700637 wdiStartParam.wdiLowLevelIndCB = WDA_lowLevelIndCallback;
638 wdiStartParam.pIndUserData = (v_PVOID_t *)wdaContext;
639 wdiStartParam.wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700640 /* initialize the WDA-WDI synchronization event */
641 vos_event_reset(&wdaContext->wdaWdiEvent);
Jeff Johnson295189b2012-06-20 16:38:30 -0700642 /* call WDI start */
643 wdiStatus = WDI_Start(&wdiStartParam,
644 (WDI_StartRspCb)WDA_wdiStartCallback,
645 (v_VOID_t *)pVosContext);
646 if ( IS_WDI_STATUS_FAILURE(wdiStatus) )
647 {
648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700649 "%s: WDI Start failed", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700650 vos_mem_free(wdiStartParam.pConfigBuffer);
651 return VOS_STATUS_E_FAILURE;
652 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700653 /* wait for WDI start to invoke our callback */
654 status = vos_wait_single_event( &wdaContext->wdaWdiEvent,
655 WDA_WDI_START_TIMEOUT );
656 if ( !VOS_IS_STATUS_SUCCESS(status) )
657 {
658 if ( VOS_STATUS_E_TIMEOUT == status )
659 {
660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700661 "%s: Timeout occurred during WDI_Start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700662 }
663 else
664 {
665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
666 "%s: Error %d while waiting for WDI_Start",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700667 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700668 }
669 vos_mem_free(wdiStartParam.pConfigBuffer);
Siddharth Bhalbea38ad2014-10-12 14:10:52 +0530670 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700671 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700672 /* WDI_Start() has completed so we can resume our work */
Jeff Johnson295189b2012-06-20 16:38:30 -0700673 /* we no longer need the config TLV */
674 vos_mem_free(wdiStartParam.pConfigBuffer);
Jeff Johnson295189b2012-06-20 16:38:30 -0700675 /* if we are not in the START state then WDI_Start() failed */
676 if (WDA_START_STATE != wdaContext->wdaState)
677 {
678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700679 "%s: WDI_Start() failure detected", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700680 return VOS_STATUS_E_FAILURE;
681 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700682 /* FTM mode does not need to monitor BA activity */
683 if ( eDRIVER_TYPE_MFG != wdaContext->driverMode )
684 {
685 status = wdaCreateTimers(wdaContext) ;
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -0800686 if(VOS_STATUS_SUCCESS == status)
687 {
688 wdaContext->wdaTimersCreated = VOS_TRUE;
689 }
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +0530690 else
691 {
692 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
693 FL("wda create timers failed"));
694 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700695 }
Leo Chang9d76f622013-08-23 16:34:52 -0700696 else
697 {
698 vos_event_init(&wdaContext->ftmStopDoneEvent);
699 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700700 return status;
701}
702
Jeff Johnson295189b2012-06-20 16:38:30 -0700703/*
704 * FUNCTION: WDA_prepareConfigTLV
705 * Function to prepare CFG for DAL(WDA)
706 */
707VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
708 WDI_StartReqParamsType *wdiStartParams )
709{
710 /* get pMac to acess CFG data base */
711 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
712 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
713 tHalCfg *tlvStruct = NULL ;
714 tANI_U8 *tlvStructStart = NULL ;
715 tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
716 v_PVOID_t *configParam;
717 tANI_U32 configParamSize;
718 tANI_U32 *configDataValue;
719 WDI_WlanVersionType wcnssCompiledApiVersion;
Wilson Tsaof8b37942013-09-06 10:49:00 -0700720 tANI_U8 i;
721
Jeff Johnson295189b2012-06-20 16:38:30 -0700722 if ((NULL == pMac)||(NULL == wdaContext))
723 {
724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700725 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700726 VOS_ASSERT(0);
727 return VOS_STATUS_E_FAILURE;
728 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700729 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
730 WNI_CFG_STA_ID_LEN +
731 WNI_CFG_EDCA_WME_ACBK_LEN +
732 WNI_CFG_EDCA_WME_ACBE_LEN +
733 WNI_CFG_EDCA_WME_ACVI_LEN +
734 WNI_CFG_EDCA_WME_ACVO_LEN +
735 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700736 /* malloc memory for all configs in one shot */
737 configParam = vos_mem_malloc(configParamSize);
738
739 if(NULL == configParam )
740 {
741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700742 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700743 VOS_ASSERT(0) ;
744 return VOS_STATUS_E_NOMEM;
745 }
746 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700747 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700748 tlvStruct = (tHalCfg *)configParam;
749 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700750 /* TODO: Remove Later */
751 /* QWLAN_HAL_CFG_STA_ID */
752 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
753 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
754 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
755 eSIR_SUCCESS)
756 {
757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
758 "Failed to get value for WNI_CFG_STA_ID");
759 goto handle_failure;
760 }
761 tlvStruct->length = strLength ;
762 /* calculate the pad bytes to have the CFG in aligned format */
763 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
764 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700765 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
766 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700767 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
768 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
769 tlvStruct->length = sizeof(tANI_U32);
770 configDataValue = (tANI_U32 *)(tlvStruct + 1);
771 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
772 != eSIR_SUCCESS)
773 {
774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
775 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
776 goto handle_failure;
777 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700778 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
779 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700780 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
781 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
782 tlvStruct->length = sizeof(tANI_U32);
783 configDataValue = (tANI_U32 *)(tlvStruct + 1);
784 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
785 eSIR_SUCCESS)
786 {
787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
788 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
789 goto handle_failure;
790 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700791 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
792 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700793 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
794 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
795 tlvStruct->length = sizeof(tANI_U32);
796 configDataValue = (tANI_U32 *)(tlvStruct + 1);
797 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
798 != eSIR_SUCCESS)
799 {
800 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
801 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
802 goto handle_failure;
803 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700804 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
805 + sizeof(tHalCfg) + tlvStruct->length)) ;
806
807 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
808 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
809 tlvStruct->length = sizeof(tANI_U32);
810 configDataValue = (tANI_U32 *)(tlvStruct + 1);
811 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
812 configDataValue ) != eSIR_SUCCESS)
813 {
814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
815 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
816 goto handle_failure;
817 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700818 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
819 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700820 /* QWLAN_HAL_CFG_CAL_PERIOD */
821 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
822 tlvStruct->length = sizeof(tANI_U32);
823 configDataValue = (tANI_U32 *)(tlvStruct + 1);
824 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
825 != eSIR_SUCCESS)
826 {
827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
828 "Failed to get value for WNI_CFG_CAL_PERIOD");
829 goto handle_failure;
830 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700831 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
832 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700833 /* QWLAN_HAL_CFG_CAL_CONTROL */
834 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
835 tlvStruct->length = sizeof(tANI_U32);
836 configDataValue = (tANI_U32 *)(tlvStruct + 1);
837 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
838 != eSIR_SUCCESS)
839 {
840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
841 "Failed to get value for WNI_CFG_CAL_CONTROL");
842 goto handle_failure;
843 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700844 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
845 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700846 /* QWLAN_HAL_CFG_PROXIMITY */
847 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
848 tlvStruct->length = sizeof(tANI_U32);
849 configDataValue = (tANI_U32 *)(tlvStruct + 1);
850 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
851 != eSIR_SUCCESS)
852 {
853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
854 "Failed to get value for WNI_CFG_PROXIMITY");
855 goto handle_failure;
856 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700857 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
858 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700859 /* QWLAN_HAL_CFG_NETWORK_DENSITY */
860 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
861 tlvStruct->length = sizeof(tANI_U32);
862 configDataValue = (tANI_U32 *)(tlvStruct + 1);
863 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
864 != eSIR_SUCCESS)
865 {
866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
867 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
868 goto handle_failure;
869 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700870 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
871 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700872 /* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */
873 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
874 tlvStruct->length = sizeof(tANI_U32);
875 configDataValue = (tANI_U32 *)(tlvStruct + 1);
876 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
877 eSIR_SUCCESS)
878 {
879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
880 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
881 goto handle_failure;
882 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700883 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
884 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700885 /* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */
886 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
887 tlvStruct->length = sizeof(tANI_U32);
888 configDataValue = (tANI_U32 *)(tlvStruct + 1);
889 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
890 configDataValue ) != eSIR_SUCCESS)
891 {
892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
893 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
894 goto handle_failure;
895 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700896 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
897 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700898 /* QWLAN_HAL_CFG_RTS_THRESHOLD */
899 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
900 tlvStruct->length = sizeof(tANI_U32);
901 configDataValue = (tANI_U32 *)(tlvStruct + 1);
902 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
903 eSIR_SUCCESS)
904 {
905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
906 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
907 goto handle_failure;
908 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700909 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
910 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700911 /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
912 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
913 tlvStruct->length = sizeof(tANI_U32);
914 configDataValue = (tANI_U32 *)(tlvStruct + 1);
915 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
916 eSIR_SUCCESS)
917 {
918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
919 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
920 goto handle_failure;
921 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700922 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
923 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700924 /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
925 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
926 tlvStruct->length = sizeof(tANI_U32);
927 configDataValue = (tANI_U32 *)(tlvStruct + 1);
928 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
929 eSIR_SUCCESS)
930 {
931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
932 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
933 goto handle_failure;
934 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700935 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
936 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700937 /* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */
938 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
939 tlvStruct->length = sizeof(tANI_U32);
940 configDataValue = (tANI_U32 *)(tlvStruct + 1);
941 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
942 configDataValue ) != eSIR_SUCCESS)
943 {
944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
945 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
946 goto handle_failure;
947 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700948 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
949 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700950 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
951 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
952 tlvStruct->length = sizeof(tANI_U32);
953 configDataValue = (tANI_U32 *)(tlvStruct + 1);
954 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
955 configDataValue ) != eSIR_SUCCESS)
956 {
957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
958 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
959 goto handle_failure;
960 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700961 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
962 + sizeof(tHalCfg) + tlvStruct->length));
963
964 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
965 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
966 tlvStruct->length = sizeof(tANI_U32);
967 configDataValue = (tANI_U32 *)(tlvStruct + 1);
968 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
969 configDataValue ) != eSIR_SUCCESS)
970 {
971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
972 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
973 goto handle_failure;
974 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700975 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
976 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700977 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
978 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
979 tlvStruct->length = sizeof(tANI_U32);
980 configDataValue = (tANI_U32 *)(tlvStruct + 1);
981 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
982 configDataValue ) != eSIR_SUCCESS)
983 {
984 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
985 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
986 goto handle_failure;
987 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700988 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
989 + sizeof(tHalCfg) + tlvStruct->length));
990
991 /* QWLAN_HAL_CFG_FIXED_RATE */
992 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
993 tlvStruct->length = sizeof(tANI_U32);
994 configDataValue = (tANI_U32 *)(tlvStruct + 1);
995 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
996 != eSIR_SUCCESS)
997 {
998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
999 "Failed to get value for WNI_CFG_FIXED_RATE");
1000 goto handle_failure;
1001 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001002 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
1003 + sizeof(tHalCfg) + tlvStruct->length));
1004
1005 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
1006 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
1007 tlvStruct->length = sizeof(tANI_U32);
1008 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1009 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
1010 != eSIR_SUCCESS)
1011 {
1012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1013 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
1014 goto handle_failure;
1015 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001016 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
1017 + sizeof(tHalCfg) + tlvStruct->length));
1018
1019 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
1020 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
1021 tlvStruct->length = sizeof(tANI_U32);
1022 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1023 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
1024 configDataValue ) != eSIR_SUCCESS)
1025 {
1026 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1027 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
1028 goto handle_failure;
1029 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001030 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
1031 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001032 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
1033 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
1034 tlvStruct->length = sizeof(tANI_U32);
1035 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1036 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
1037 configDataValue ) != eSIR_SUCCESS)
1038 {
1039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1040 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
1041 goto handle_failure;
1042 }
1043 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
1044 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001045 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
1046 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
1047 tlvStruct->length = sizeof(tANI_U32);
1048 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1049 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
1050 configDataValue ) != eSIR_SUCCESS)
1051 {
1052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1053 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
1054 goto handle_failure;
1055 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001056 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1057 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001058 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
1059 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
1060 tlvStruct->length = sizeof(tANI_U32);
1061 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1062 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
1063 configDataValue ) != eSIR_SUCCESS)
1064 {
1065 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1066 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
1067 goto handle_failure;
1068 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001069 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1070 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001071 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
1072 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
1073 tlvStruct->length = sizeof(tANI_U32);
1074 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1075 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
1076 configDataValue ) != eSIR_SUCCESS)
1077 {
1078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1079 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
1080 goto handle_failure;
1081 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001082 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1083 + sizeof(tHalCfg) + tlvStruct->length);
1084
Jeff Johnson295189b2012-06-20 16:38:30 -07001085 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
1086 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
1087 tlvStruct->length = sizeof(tANI_U32);
1088 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1089 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
1090 configDataValue ) != eSIR_SUCCESS)
1091 {
1092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1093 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
1094 goto handle_failure;
1095 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001096 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1097 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001098 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
1099 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
1100 tlvStruct->length = sizeof(tANI_U32);
1101 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1102 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
1103 configDataValue ) != eSIR_SUCCESS)
1104 {
1105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1106 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
1107 goto handle_failure;
1108 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001109 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1110 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001111 /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
1112 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
1113 tlvStruct->length = sizeof(tANI_U32);
1114 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1115 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
1116 eSIR_SUCCESS)
1117 {
1118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1119 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
1120 goto handle_failure;
1121 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001122 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1123 + sizeof(tHalCfg) + tlvStruct->length);
1124
1125 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
1126 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
1127 tlvStruct->length = sizeof(tANI_U32);
1128 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1129 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
1130 configDataValue ) != eSIR_SUCCESS)
1131 {
1132 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1133 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
1134 goto handle_failure;
1135 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001136 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1137 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001138 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
1139 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
1140 tlvStruct->length = sizeof(tANI_U32);
1141 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1142 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
1143 configDataValue ) != eSIR_SUCCESS)
1144 {
1145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1146 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
1147 goto handle_failure;
1148 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001149 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1150 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001151 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
1152 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
1153 tlvStruct->length = sizeof(tANI_U32);
1154 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1155 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
1156 configDataValue ) != eSIR_SUCCESS)
1157 {
1158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1159 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
1160 goto handle_failure;
1161 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001162 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1163 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001164 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
1165 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
1166 tlvStruct->length = sizeof(tANI_U32);
1167 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1168 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
1169 configDataValue ) != eSIR_SUCCESS)
1170 {
1171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1172 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
1173 goto handle_failure;
1174 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001175 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1176 + sizeof(tHalCfg) + tlvStruct->length);
1177
1178 /* QWLAN_HAL_CFG_STATS_PERIOD */
1179 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
1180 tlvStruct->length = sizeof(tANI_U32);
1181 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1182 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
1183 eSIR_SUCCESS)
1184 {
1185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1186 "Failed to get value for WNI_CFG_STATS_PERIOD");
1187 goto handle_failure;
1188 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001189 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1190 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001191 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
1192 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
1193 tlvStruct->length = sizeof(tANI_U32);
1194 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1195 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
1196 eSIR_SUCCESS)
1197 {
1198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1199 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
1200 goto handle_failure;
1201 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001202 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1203 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001204 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
1205 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
1206 tlvStruct->length = sizeof(tANI_U32);
1207 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1208 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
1209 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -07001210 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1211 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001212 /* QWLAN_HAL_CFG_DTIM_PERIOD */
1213 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
1214 tlvStruct->length = sizeof(tANI_U32);
1215 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1216 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
1217 != eSIR_SUCCESS)
1218 {
1219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1220 "Failed to get value for WNI_CFG_DTIM_PERIOD");
1221 goto handle_failure;
1222 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001223 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1224 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001225 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
1226 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
1227 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
1228 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1229 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
1230 &strLength) != eSIR_SUCCESS)
1231 {
1232 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1233 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1234 goto handle_failure;
1235 }
1236 tlvStruct->length = strLength;
1237 /* calculate the pad bytes to have the CFG in aligned format */
1238 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1239 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001240 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1241 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001242 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1243 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1244 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1245 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1246 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1247 &strLength) != eSIR_SUCCESS)
1248 {
1249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1250 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1251 goto handle_failure;
1252 }
1253 tlvStruct->length = strLength;
1254 /* calculate the pad bytes to have the CFG in aligned format */
1255 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1256 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001257 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1258 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001259 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1260 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1261 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1262 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1263 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1264 &strLength) != eSIR_SUCCESS)
1265 {
1266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1267 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1268 goto handle_failure;
1269 }
1270 tlvStruct->length = strLength;
1271 /* calculate the pad bytes to have the CFG in aligned format */
1272 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1273 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001274 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1275 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001276 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1277 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1278 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1279 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1280 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1281 &strLength) != eSIR_SUCCESS)
1282 {
1283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1284 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1285 goto handle_failure;
1286 }
1287 tlvStruct->length = strLength;
1288 /* calculate the pad bytes to have the CFG in aligned format */
1289 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1290 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001291 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1292 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001293 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1294 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1295 tlvStruct->length = sizeof(tANI_U32);
1296 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1297 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1298 != eSIR_SUCCESS)
1299 {
1300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1301 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1302 goto handle_failure;
1303 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001304 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1305 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001306 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1307 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1308 tlvStruct->length = sizeof(tANI_U32);
1309 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1310 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1311 != eSIR_SUCCESS)
1312 {
1313 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1314 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1315 goto handle_failure;
1316 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001317 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1318 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001319 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1320 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1321 tlvStruct->length = sizeof(tANI_U32);
1322 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1323 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1324 != eSIR_SUCCESS)
1325 {
1326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1327 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1328 goto handle_failure;
1329 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001330 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1331 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001332 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1333 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1334 tlvStruct->length = sizeof(tANI_U32);
1335 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1336 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1337 != eSIR_SUCCESS)
1338 {
1339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1340 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1341 goto handle_failure;
1342 }
1343 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1344 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001345 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1346 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1347 tlvStruct->length = sizeof(tANI_U32);
1348 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1349 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1350 != eSIR_SUCCESS)
1351 {
1352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1353 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1354 goto handle_failure;
1355 }
1356 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1357 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001358 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1359 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1360 tlvStruct->length = sizeof(tANI_U32);
1361 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1362 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1363 != eSIR_SUCCESS)
1364 {
1365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1366 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1367 goto handle_failure;
1368 }
1369 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1370 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001371 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1372 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1373 tlvStruct->length = sizeof(tANI_U32);
1374 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1375 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1376 != eSIR_SUCCESS)
1377 {
1378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1379 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1380 goto handle_failure;
1381 }
1382 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1383 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001384 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1385 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1386 tlvStruct->length = sizeof(tANI_U32);
1387 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1388 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
1389 != eSIR_SUCCESS)
1390 {
1391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1392 "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
1393 goto handle_failure;
1394 }
1395 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1396 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001397 /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
1398 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1399 tlvStruct->length = sizeof(tANI_U32);
1400 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1401 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1402 != eSIR_SUCCESS)
1403 {
1404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1405 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1406 goto handle_failure;
1407 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001408 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1409 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001410 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1411 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1412 tlvStruct->length = sizeof(tANI_U32);
1413 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1414 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1415 != eSIR_SUCCESS)
1416 {
1417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1418 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1419 goto handle_failure;
1420 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001421 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1422 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001423 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1424 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1425 tlvStruct->length = sizeof(tANI_U32);
1426 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1427 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1428 != eSIR_SUCCESS)
1429 {
1430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1431 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1432 goto handle_failure;
1433 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001434 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1435 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001436 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1437 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1438 * into FW, so the parameters are added here.
1439 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001440 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1441 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1442 tlvStruct->length = sizeof(tANI_U32);
1443 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1444 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1445 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1446 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001447 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1448 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1449 tlvStruct->length = sizeof(tANI_U32);
1450 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1451 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1452 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1453 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001454 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1455 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1456 tlvStruct->length = sizeof(tANI_U32);
1457 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1458 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1459 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1460 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001461 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1462 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1463 tlvStruct->length = sizeof(tANI_U32);
1464 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1465 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1466 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1467 + sizeof(tHalCfg) + tlvStruct->length) ;
1468
1469 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1470 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1471 tlvStruct->length = sizeof(tANI_U32);
1472 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1473 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1474 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1475 + sizeof(tHalCfg) + tlvStruct->length) ;
1476
1477 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1478 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1479 tlvStruct->length = sizeof(tANI_U32);
1480 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1481 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1482 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1483 + sizeof(tHalCfg) + tlvStruct->length) ;
1484
1485 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1486 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1487 tlvStruct->length = sizeof(tANI_U32);
1488 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1489 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1490 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1491 + sizeof(tHalCfg) + tlvStruct->length) ;
1492
1493 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1494 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1495 tlvStruct->length = sizeof(tANI_U32);
1496 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1497 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1498 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1499 + sizeof(tHalCfg) + tlvStruct->length) ;
1500
1501 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1502 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1503 tlvStruct->length = sizeof(tANI_U32);
1504 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1505 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1506 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1507 + sizeof(tHalCfg) + tlvStruct->length) ;
1508
1509 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1510 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1511 tlvStruct->length = sizeof(tANI_U32);
1512 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1513 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1514 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1515 + sizeof(tHalCfg) + tlvStruct->length) ;
1516
1517 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1518 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1519 tlvStruct->length = sizeof(tANI_U32);
1520 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1521 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1522 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1523 + sizeof(tHalCfg) + tlvStruct->length) ;
1524
1525 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1526 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1527 tlvStruct->length = sizeof(tANI_U32);
1528 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1529 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1530 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1531 + sizeof(tHalCfg) + tlvStruct->length) ;
1532
1533 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1534 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1535 tlvStruct->length = sizeof(tANI_U32);
1536 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1537 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1538 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1539 + sizeof(tHalCfg) + tlvStruct->length) ;
1540
1541 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1542 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1543 tlvStruct->length = sizeof(tANI_U32);
1544 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1545 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1546 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1547 + sizeof(tHalCfg) + tlvStruct->length) ;
1548
1549 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1550 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1551 tlvStruct->length = sizeof(tANI_U32);
1552 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1553 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1554 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1555 + sizeof(tHalCfg) + tlvStruct->length) ;
1556
1557 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1558 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1559 tlvStruct->length = sizeof(tANI_U32);
1560 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1561 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1562 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1563 + sizeof(tHalCfg) + tlvStruct->length) ;
1564
Wilson Tsaof8b37942013-09-06 10:49:00 -07001565 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_VICTIM; i++)
1566 {
1567 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WAN_FREQ */
1568 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WAN_FREQ + i*4;
1569 tlvStruct->length = sizeof(tANI_U32);
1570 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1571 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWANFreq[i];
1572 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1573 + sizeof(tHalCfg) + tlvStruct->length) ;
1574
1575 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WLAN_FREQ */
1576 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WLAN_FREQ + i*4;
1577 tlvStruct->length = sizeof(tANI_U32);
1578 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1579 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWLANFreq[i];
1580 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1581 + sizeof(tHalCfg) + tlvStruct->length) ;
1582
1583 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG */
1584 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG + i*4;
1585 tlvStruct->length = sizeof(tANI_U32);
1586 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1587 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig[i];
1588 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1589 + sizeof(tHalCfg) + tlvStruct->length) ;
1590
1591 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG2 */
1592 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG2 + i*4;
1593 tlvStruct->length = sizeof(tANI_U32);
1594 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1595 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig2[i];
1596 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1597 + sizeof(tHalCfg) + tlvStruct->length) ;
1598 }
1599
1600 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF */
1601 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF ;
1602 tlvStruct->length = sizeof(tANI_U32);
1603 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1604 *configDataValue = pMac->btc.btcConfig.mwsCoexModemBackoff;
1605 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1606 + sizeof(tHalCfg) + tlvStruct->length) ;
1607
1608 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_CONFIG; i++)
1609 {
1610 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_CONFIGX */
1611 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_CONFIG1 + i;
1612 tlvStruct->length = sizeof(tANI_U32);
1613 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1614 *configDataValue = pMac->btc.btcConfig.mwsCoexConfig[i];
1615 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1616 + sizeof(tHalCfg) + tlvStruct->length) ;
1617 }
1618
1619 /* [COEX] QWLAN_HAL_CFG_SAR_POWER_BACKOFF */
1620 tlvStruct->type = QWLAN_HAL_CFG_SAR_POWER_BACKOFF ;
1621 tlvStruct->length = sizeof(tANI_U32);
1622 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1623 *configDataValue = pMac->btc.btcConfig.SARPowerBackoff;
1624 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1625 + sizeof(tHalCfg) + tlvStruct->length) ;
1626
Jeff Johnson32d95a32012-09-10 13:15:23 -07001627 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001628 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1629 tlvStruct->length = sizeof(tANI_U32);
1630 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1631 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1632 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1633 wcnssCompiledApiVersion.minor,
1634 wcnssCompiledApiVersion.version,
1635 wcnssCompiledApiVersion.revision);
1636 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1637 + sizeof(tHalCfg) + tlvStruct->length) ;
1638
Jeff Johnsond13512a2012-07-17 11:42:19 -07001639 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1640 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1641 tlvStruct->length = sizeof(tANI_U32);
1642 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1643 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1644 configDataValue ) != eSIR_SUCCESS)
1645 {
1646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1647 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1648 goto handle_failure;
1649 }
1650
1651 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1652 + sizeof(tHalCfg) + tlvStruct->length) ;
1653 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1654 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1655 tlvStruct->length = sizeof(tANI_U32);
1656 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1657 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1658 configDataValue ) != eSIR_SUCCESS)
1659 {
1660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1661 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1662 goto handle_failure;
1663 }
1664
1665 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1666 + sizeof(tHalCfg) + tlvStruct->length) ;
1667
1668 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1669 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1670 tlvStruct->length = sizeof(tANI_U32);
1671 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1672 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1673 != eSIR_SUCCESS)
1674 {
1675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1676 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1677 goto handle_failure;
1678 }
1679
1680 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1681 + sizeof(tHalCfg) + tlvStruct->length) ;
1682
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08001683 /* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */
1684 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION ;
1685 tlvStruct->length = sizeof(tANI_U32);
1686 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1687 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION, configDataValue)
1688 != eSIR_SUCCESS)
1689 {
1690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1691 "Failed to get value for WNI_CFG_ENABLE_LPWR_IMG_TRANSITION");
1692 goto handle_failure;
1693 }
AnjaneeDevi Kapparapu5cdb72a2016-10-19 15:16:09 +05301694
1695 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1696 + sizeof(tHalCfg) + tlvStruct->length);
1697
Gopichand Nakkala976e3252013-01-03 15:45:56 -08001698#ifdef WLAN_SOFTAP_VSTA_FEATURE
1699 tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
1700 tlvStruct->length = sizeof(tANI_U32);
1701 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1702 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
1703 != eSIR_SUCCESS)
1704 {
1705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1706 "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
1707 goto handle_failure;
1708 }
1709
1710 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1711 + sizeof(tHalCfg) + tlvStruct->length) ;
1712#endif
1713
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08001714 /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
1715 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
1716 tlvStruct->length = sizeof(tANI_U32);
1717 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1718
1719 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
1720 != eSIR_SUCCESS)
1721 {
1722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1723 "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
1724 goto handle_failure;
1725 }
1726
1727 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1728 + sizeof(tHalCfg) + tlvStruct->length) ;
1729
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301730/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */
1731 tlvStruct->type = QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT ;
1732 tlvStruct->length = sizeof(tANI_U32);
1733 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1734 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
1735 configDataValue ) != eSIR_SUCCESS)
1736 {
1737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1738 "Failed to get value for WNI_CFG_AP_LINK_MONITOR_TIMEOUT");
1739 goto handle_failure;
1740 }
1741
1742 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1743 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301744#ifdef FEATURE_WLAN_TDLS
1745 /* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */
1746 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_MASK;
1747 tlvStruct->length = sizeof(tANI_U32);
1748 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1749 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK,
1750 configDataValue ) != eSIR_SUCCESS)
1751 {
1752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1753 "Failed to get value for WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK");
1754 goto handle_failure;
1755 }
1756 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1757 + sizeof(tHalCfg) + tlvStruct->length) ;
1758
1759 /* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */
1760 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE;
1761 tlvStruct->length = sizeof(tANI_U32);
1762 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1763 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_BUF_STA_ENABLED,
1764 configDataValue ) != eSIR_SUCCESS)
1765 {
1766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1767 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1768 goto handle_failure;
1769 }
1770 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1771 + sizeof(tHalCfg) + tlvStruct->length) ;
1772 /* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */
1773 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME;
1774 tlvStruct->length = sizeof(tANI_U32);
1775 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1776 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_PUAPSD_INACT_TIME,
1777 configDataValue ) != eSIR_SUCCESS)
1778 {
1779 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1780 "Failed to get value for WNI_CFG_TDLS_PUAPSD_INACT_TIME");
1781 goto handle_failure;
1782 }
1783 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1784 + sizeof(tHalCfg) + tlvStruct->length) ;
1785 /* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */
1786 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP;
1787 tlvStruct->length = sizeof(tANI_U32);
1788 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1789 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_RX_FRAME_THRESHOLD,
1790 configDataValue ) != eSIR_SUCCESS)
1791 {
1792 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1793 "Failed to get value for WNI_CFG_TDLS_RX_FRAME_THRESHOLD");
1794 goto handle_failure;
1795 }
1796 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1797 + sizeof(tHalCfg) + tlvStruct->length) ;
Naresh Jayaramf73f3762014-02-04 16:13:20 +05301798 /* QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE */
1799 tlvStruct->type = QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE;
1800 tlvStruct->length = sizeof(tANI_U32);
1801 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1802 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_OFF_CHANNEL_ENABLED,
1803 configDataValue ) != eSIR_SUCCESS)
1804 {
1805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1806 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1807 goto handle_failure;
1808 }
1809 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1810 + sizeof(tHalCfg) + tlvStruct->length) ;
1811
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301812#endif
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301813
Sudhir Sattayappa Kohallida1be202013-07-11 12:04:30 -07001814 /* QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN */
1815 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE ;
1816 tlvStruct->length = sizeof(tANI_U32);
1817 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1818 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_ADAPT_RX_DRAIN,
1819 configDataValue ) != eSIR_SUCCESS)
1820 {
1821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1822 "Failed to get value for WNI_CFG_ENABLE_ADAPT_RX_DRAIN");
1823 goto handle_failure;
1824 }
1825
1826 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1827 + sizeof(tHalCfg) + tlvStruct->length) ;
Yue Ma0fd23872013-08-01 15:56:47 -07001828
1829 /* QWLAN_HAL_CFG_FLEX_CONNECT_POWER_FACTOR */
1830 tlvStruct->type = QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR;
1831 tlvStruct->length = sizeof(tANI_U32);
1832 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1833 if(wlan_cfgGetInt(pMac, WNI_CFG_FLEX_CONNECT_POWER_FACTOR, configDataValue)
1834 != eSIR_SUCCESS)
1835 {
1836 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1837 "Failed to get value for WNI_CFG_FLEX_CONNECT_POWER_FACTOR");
1838 goto handle_failure;
1839 }
1840 tlvStruct = (tHalCfg *)(((tANI_U8 *) tlvStruct
1841 + sizeof(tHalCfg) + tlvStruct->length));
1842
Madan Mohan Koyyalamudica454572013-08-07 19:57:03 +05301843 /* QWLAN_HAL_CFG_ANTENNA_DIVERSITY */
1844 tlvStruct->type = QWLAN_HAL_CFG_ANTENNA_DIVERSITY;
1845 tlvStruct->length = sizeof(tANI_U32);
1846 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1847 if (wlan_cfgGetInt(pMac, WNI_CFG_ANTENNA_DIVESITY,
1848 configDataValue ) != eSIR_SUCCESS)
1849 {
1850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1851 "Failed to get value for WNI_CFG_ANTENNA_DIVESITY");
1852 goto handle_failure;
1853 }
1854
1855 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1856 + sizeof(tHalCfg) + tlvStruct->length) ;
1857
Madan Mohan Koyyalamudi2558bc92013-08-24 16:54:31 +05301858 /* QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT */
1859 tlvStruct->type = QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT ;
1860 tlvStruct->length = sizeof(tANI_U32);
1861 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1862 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_LINK_MONITOR_TIMEOUT,
1863 configDataValue ) != eSIR_SUCCESS)
1864 {
1865 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1866 "Failed to get value for WNI_CFG_GO_LINK_MONITOR_TIMEOUT");
1867 goto handle_failure;
1868 }
1869 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1870 + sizeof(tHalCfg) + tlvStruct->length) ;
1871
Kiet Lam4bbd3cb2013-11-07 20:03:49 +05301872 /* QWLAN_HAL_CFG_ATH_DISABLE */
1873 tlvStruct->type = QWLAN_HAL_CFG_ATH_DISABLE ;
1874 tlvStruct->length = sizeof(tANI_U32);
1875 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1876 if(wlan_cfgGetInt(pMac, WNI_CFG_ATH_DISABLE,
1877 configDataValue ) != eSIR_SUCCESS)
1878 {
1879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1880 "Failed to get value for WNI_CFG_ATH_DISABLE");
1881 goto handle_failure;
1882 }
1883 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1884 + sizeof(tHalCfg) + tlvStruct->length) ;
1885
c_hpothu6d7dc922013-12-02 12:36:41 +05301886 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_WLAN_LEN */
1887 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1888 tlvStruct->length = sizeof(tANI_U32);
1889 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1890 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_WLAN_LEN,
1891 configDataValue ) != eSIR_SUCCESS)
1892 {
1893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1894 "Failed to get value for WNI_CFG_BTC_ACTIVE_WLAN_LEN");
1895 goto handle_failure;
1896 }
1897 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1898 + sizeof(tHalCfg) + tlvStruct->length) ;
1899
1900 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1901 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1902 tlvStruct->length = sizeof(tANI_U32);
1903 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1904 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_BT_LEN,
1905 configDataValue ) != eSIR_SUCCESS)
1906 {
1907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1908 "Failed to get value for WNI_CFG_BTC_ACTIVE_BT_LEN");
1909 goto handle_failure;
1910 }
1911 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1912 + sizeof(tHalCfg) + tlvStruct->length) ;
1913
1914 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN */
1915 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1916 tlvStruct->length = sizeof(tANI_U32);
1917 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1918 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN,
1919 configDataValue ) != eSIR_SUCCESS)
1920 {
1921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1922 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN");
1923 goto handle_failure;
1924 }
1925 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1926 + sizeof(tHalCfg) + tlvStruct->length) ;
1927
1928 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1929 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1930 tlvStruct->length = sizeof(tANI_U32);
1931 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1932 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_BT_LEN,
1933 configDataValue ) != eSIR_SUCCESS)
1934 {
1935 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1936 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_BT_LEN");
1937 goto handle_failure;
1938 }
1939 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1940 + sizeof(tHalCfg) + tlvStruct->length) ;
1941
AnjaneeDevi Kapparapu50239e32014-01-07 18:09:33 +05301942 /* QWLAN_HAL_CFG_ASD_PROBE_INTERVAL */
1943 tlvStruct->type = QWLAN_HAL_CFG_ASD_PROBE_INTERVAL ;
1944 tlvStruct->length = sizeof(tANI_U32);
1945 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1946 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_PROBE_INTERVAL,
1947 configDataValue ) != eSIR_SUCCESS)
1948 {
1949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1950 "Failed to get value for WNI_CFG_ASD_PROBE_INTERVAL");
1951 goto handle_failure;
1952 }
1953 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1954 + sizeof(tHalCfg) + tlvStruct->length) ;
1955
1956 /* QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD */
1957 tlvStruct->type = QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD ;
1958 tlvStruct->length = sizeof(tANI_U32);
1959 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1960 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_TRIGGER_THRESHOLD,
1961 configDataValue ) != eSIR_SUCCESS)
1962 {
1963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1964 "Failed to get value for WNI_CFG_ASD_TRIGGER_THRESHOLD");
1965 goto handle_failure;
1966 }
1967 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1968 + sizeof(tHalCfg) + tlvStruct->length) ;
1969
1970 /* QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD */
1971 tlvStruct->type = QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD ;
1972 tlvStruct->length = sizeof(tANI_U32);
1973 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1974 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD,
1975 configDataValue ) != eSIR_SUCCESS)
1976 {
1977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1978 "Failed to get value for WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD");
1979 goto handle_failure;
1980 }
1981 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1982 + sizeof(tHalCfg) + tlvStruct->length) ;
1983
Leela Venkata Kiran Kumar Reddy Chirala22c159b2013-12-23 18:19:13 -08001984 /* QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO */
1985 tlvStruct->type = QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO ;
1986 tlvStruct->length = sizeof(tANI_U32);
1987 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1988 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CTS2S_DURING_SCO,
1989 configDataValue ) != eSIR_SUCCESS)
1990 {
1991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1992 "Failed to get value for WNI_CFG_BTC_CTS2S_DURING_SCO");
1993 goto handle_failure;
1994 }
1995 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1996 + sizeof(tHalCfg) + tlvStruct->length) ;
1997
c_hpothu5bd1ae42014-03-07 20:28:22 +05301998 /* QWLAN_HAL_CFG_RA_FILTER_ENABLE */
1999 tlvStruct->type = QWLAN_HAL_CFG_RA_FILTER_ENABLE ;
2000 tlvStruct->length = sizeof(tANI_U32);
2001 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2002
2003 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_FILTER_ENABLE,
2004 configDataValue ) != eSIR_SUCCESS)
2005 {
2006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2007 "Failed to get value for WNI_CFG_RA_FILTER_ENABLE");
2008 goto handle_failure;
2009 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05302010 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2011 + sizeof(tHalCfg) + tlvStruct->length) ;
2012
2013 /* QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL */
2014 tlvStruct->type = QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL ;
2015 tlvStruct->length = sizeof(tANI_U32);
2016 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2017
2018 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_RATE_LIMIT_INTERVAL,
2019 configDataValue ) != eSIR_SUCCESS)
2020 {
2021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2022 "Failed to get value for WNI_CFG_RA_RATE_LIMIT_INTERVAL");
2023 goto handle_failure;
2024 }
c_hpothu2d0f1c42014-04-01 18:38:51 +05302025 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2026 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu5bd1ae42014-03-07 20:28:22 +05302027
c_hpothu2d0f1c42014-04-01 18:38:51 +05302028 /* QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE */
2029 tlvStruct->type = QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE ;
2030 tlvStruct->length = sizeof(tANI_U32);
2031 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2032
2033 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE,
2034 configDataValue ) != eSIR_SUCCESS)
2035 {
2036 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2037 "Failed to get value for WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE");
2038 goto handle_failure;
2039 }
2040 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2041 + sizeof(tHalCfg) + tlvStruct->length) ;
2042
2043 /* QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE */
2044 tlvStruct->type = QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE ;
2045 tlvStruct->length = sizeof(tANI_U32);
2046 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2047
2048 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE,
2049 configDataValue ) != eSIR_SUCCESS)
2050 {
2051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2052 "Failed to get value for WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE");
2053 goto handle_failure;
2054 }
2055 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2056 + sizeof(tHalCfg) + tlvStruct->length) ;
2057
2058 /* QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD */
2059 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD ;
2060 tlvStruct->length = sizeof(tANI_U32);
2061 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2062
2063 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD,
2064 configDataValue ) != eSIR_SUCCESS)
2065 {
2066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2067 "Failed to get value for WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD");
2068 goto handle_failure;
2069 }
2070 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2071 + sizeof(tHalCfg) + tlvStruct->length) ;
2072
2073 /* QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD */
2074 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD ;
2075 tlvStruct->length = sizeof(tANI_U32);
2076 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2077
2078 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD,
2079 configDataValue ) != eSIR_SUCCESS)
2080 {
2081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2082 "Failed to get value for WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD");
2083 goto handle_failure;
2084 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05302085 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2086 + sizeof(tHalCfg) + tlvStruct->length) ;
2087
Mihir Shetec34258c2014-07-30 17:50:27 +05302088 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP */
2089 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP ;
2090 tlvStruct->length = sizeof(tANI_U32);
2091 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2092
2093 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_SP,
2094 configDataValue ) != eSIR_SUCCESS)
2095 {
2096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2097 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_SP");
2098 goto handle_failure;
2099 }
2100 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2101 + sizeof(tHalCfg) + tlvStruct->length) ;
2102
2103 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT */
2104 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT ;
2105 tlvStruct->length = sizeof(tANI_U32);
2106 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2107
2108 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT,
2109 configDataValue ) != eSIR_SUCCESS)
2110 {
2111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2112 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT");
2113 goto handle_failure;
2114 }
2115 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2116 + sizeof(tHalCfg) + tlvStruct->length) ;
2117
2118 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT */
2119 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT ;
2120 tlvStruct->length = sizeof(tANI_U32);
2121 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2122
2123 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT,
2124 configDataValue ) != eSIR_SUCCESS)
2125 {
2126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2127 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT");
2128 goto handle_failure;
2129 }
2130 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2131 + sizeof(tHalCfg) + tlvStruct->length) ;
2132
2133 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW */
2134 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW ;
2135 tlvStruct->length = sizeof(tANI_U32);
2136 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2137
2138 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW,
2139 configDataValue ) != eSIR_SUCCESS)
2140 {
2141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2142 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW");
2143 goto handle_failure;
2144 }
2145 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2146 + sizeof(tHalCfg) + tlvStruct->length) ;
2147
2148 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW */
2149 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW ;
2150 tlvStruct->length = sizeof(tANI_U32);
2151 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2152
2153 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW,
2154 configDataValue ) != eSIR_SUCCESS)
2155 {
2156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2157 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW");
2158 goto handle_failure;
2159 }
2160 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2161 + sizeof(tHalCfg) + tlvStruct->length) ;
2162
2163 /* QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE */
2164 tlvStruct->type = QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE ;
2165 tlvStruct->length = sizeof(tANI_U32);
2166 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2167
2168 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE,
2169 configDataValue ) != eSIR_SUCCESS)
2170 {
2171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2172 "Failed to get value for WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE");
2173 goto handle_failure;
2174 }
2175 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2176 + sizeof(tHalCfg) + tlvStruct->length) ;
2177
2178 /* QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS */
2179 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS ;
2180 tlvStruct->length = sizeof(tANI_U32);
2181 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2182
2183 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS,
2184 configDataValue ) != eSIR_SUCCESS)
2185 {
2186 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2187 "Failed to get value for WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS");
2188 goto handle_failure;
2189 }
2190 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2191 + sizeof(tHalCfg) + tlvStruct->length) ;
2192
2193 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS */
2194 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS ;
2195 tlvStruct->length = sizeof(tANI_U32);
2196 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2197
2198 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_WMMPS,
2199 configDataValue ) != eSIR_SUCCESS)
2200 {
2201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2202 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_WMMPS");
2203 goto handle_failure;
2204 }
2205 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2206 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu03d961b2014-09-19 16:45:00 +05302207
2208 /* QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE */
2209 tlvStruct->type = QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE ;
2210 tlvStruct->length = sizeof(tANI_U32);
2211 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2212
2213 if (wlan_cfgGetInt(pMac, WNI_CFG_BURST_MODE_BE_TXOP_VALUE,
2214 configDataValue ) != eSIR_SUCCESS)
2215 {
2216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2217 "Failed to get value for WNI_CFG_BURST_MODE_BE_TXOP_VALUE");
2218 goto handle_failure;
2219 }
2220 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2221 + sizeof(tHalCfg) + tlvStruct->length) ;
2222
Deepthi Gowri9025aa62014-11-07 19:45:36 +05302223 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE */
2224 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE ;
2225 tlvStruct->length = sizeof(tANI_U32);
2226 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2227
2228 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE,
2229 configDataValue ) != eSIR_SUCCESS)
2230 {
2231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2232 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE");
2233 goto handle_failure;
2234 }
2235 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2236 + sizeof(tHalCfg) + tlvStruct->length) ;
2237
Naresh Jayaramf5bbe3f2014-12-29 18:32:47 +05302238 /* QWLAN_HAL_CFG_BTC_FAST_WLAN_CONN_PREF */
2239 tlvStruct->type = QWLAN_HAL_CFG_BTC_FAST_WLAN_CONN_PREF ;
2240 tlvStruct->length = sizeof(tANI_U32);
2241 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2242
2243 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FAST_WLAN_CONN_PREF,
2244 configDataValue ) != eSIR_SUCCESS)
2245 {
2246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2247 "Failed to get value for WNI_CFG_BTC_FAST_WLAN_CONN_PREF");
2248 goto handle_failure;
2249 }
2250 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2251 + sizeof(tHalCfg) + tlvStruct->length) ;
Deepthi Gowri9025aa62014-11-07 19:45:36 +05302252
jagadeeshaf2d0ce2015-03-31 11:45:30 +05302253 /* QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT */
2254 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT;
2255 tlvStruct->length = sizeof(tANI_U32);
2256 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2257
2258 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_RTSCTS_HTVHT,
2259 configDataValue ) != eSIR_SUCCESS)
2260 {
2261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2262 "Failed to get value for WNI_CFG_ENABLE_RTSCTS_HTVHT");
2263 goto handle_failure;
2264 }
2265 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2266 + sizeof(tHalCfg) + tlvStruct->length) ;
2267
Sachin Ahuja41b61902015-06-18 18:32:15 +05302268
2269 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN */
2270 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN ;
2271 tlvStruct->length = sizeof(tANI_U32);
2272 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2273
2274 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN,
2275 configDataValue ) != eSIR_SUCCESS)
2276 {
2277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2278 "Failed to get value for WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN");
2279 goto handle_failure;
2280 }
2281 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2282 + sizeof(tHalCfg) + tlvStruct->length) ;
2283
2284 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN */
2285 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN ;
2286 tlvStruct->length = sizeof(tANI_U32);
2287 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2288
2289 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN,
2290 configDataValue ) != eSIR_SUCCESS)
2291 {
2292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2293 "Failed to get value for WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN");
2294 goto handle_failure;
2295 }
Sachin Ahuja41b61902015-06-18 18:32:15 +05302296 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2297 + sizeof(tHalCfg) + tlvStruct->length) ;
2298
Hanumantha Reddy Pothula9a8ccab2015-07-03 14:33:17 +05302299 /* QWLAN_HAL_CFG_LINK_FAIL_TIMEOUT */
2300 tlvStruct->type = QWLAN_HAL_CFG_LINK_FAIL_TIMEOUT ;
2301 tlvStruct->length = sizeof(tANI_U32);
2302 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2303
2304 if (wlan_cfgGetInt(pMac, WNI_CFG_LINK_FAIL_TIMEOUT,
2305 configDataValue ) != eSIR_SUCCESS)
2306 {
2307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2308 "Failed to get value for WNI_CFG_LINK_FAIL_TIMEOUT");
2309 goto handle_failure;
2310 }
2311 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2312 + sizeof(tHalCfg) + tlvStruct->length) ;
2313
2314 /* QWLAN_HAL_CFG_LINK_FAIL_TX_CNT */
2315 tlvStruct->type = QWLAN_HAL_CFG_LINK_FAIL_TX_CNT ;
2316 tlvStruct->length = sizeof(tANI_U32);
2317 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2318
2319 if (wlan_cfgGetInt(pMac, WNI_CFG_LINK_FAIL_TX_CNT,
2320 configDataValue ) != eSIR_SUCCESS)
2321 {
2322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2323 "Failed to get value for WNI_CFG_LINK_FAIL_TX_CNT");
2324 goto handle_failure;
2325 }
2326 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2327 + sizeof(tHalCfg) + tlvStruct->length) ;
Sachin Ahuja41b61902015-06-18 18:32:15 +05302328
Hanumantha Reddy Pothulae0216f92015-08-11 18:30:06 +05302329 /* QWLAN_HAL_CFG_TOGGLE_ARP_BDRATES */
2330 tlvStruct->type = QWLAN_HAL_CFG_TOGGLE_ARP_BDRATES;
2331 tlvStruct->length = sizeof(tANI_U32);
2332 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2333
2334 if (wlan_cfgGetInt(pMac, WNI_CFG_TOGGLE_ARP_BDRATES,
2335 configDataValue ) != eSIR_SUCCESS)
2336 {
2337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2338 "Failed to get value for WNI_CFG_TOGGLE_ARP_BDRATES");
2339 goto handle_failure;
2340 }
2341 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2342 + sizeof(tHalCfg) + tlvStruct->length) ;
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +05302343 /* QWLAN_HAL_CFG_OPTIMIZE_CA_EVENT */
2344 tlvStruct->type = QWLAN_HAL_CFG_OPTIMIZE_CA_EVENT ;
2345 tlvStruct->length = sizeof(tANI_U32);
2346 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2347 if (wlan_cfgGetInt(pMac, WNI_CFG_OPTIMIZE_CA_EVENT,
2348 configDataValue ) != eSIR_SUCCESS)
2349 {
2350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2351 "Failed to get value for WNI_CFG_OPTIMIZE_CA_EVENT");
2352 goto handle_failure;
2353 }
2354 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2355 + sizeof(tHalCfg) + tlvStruct->length) ;
Hanumantha Reddy Pothulae0216f92015-08-11 18:30:06 +05302356
Padma, Santhosh Kumare2eb0fa2015-08-26 13:40:47 +05302357 /* QWLAN_HAL_CFG_EXT_SCAN_CONC_MODE */
2358 tlvStruct->type = QWLAN_HAL_CFG_EXT_SCAN_CONC_MODE ;
2359 tlvStruct->length = sizeof(tANI_U32);
2360 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2361
2362 if (wlan_cfgGetInt(pMac, WNI_CFG_EXT_SCAN_CONC_MODE,
2363 configDataValue ) != eSIR_SUCCESS)
2364 {
2365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2366 "Failed to get value for WNI_CFG_EXT_SCAN_CONC_MODE");
2367 goto handle_failure;
2368 }
2369 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2370 + sizeof(tHalCfg) + tlvStruct->length) ;
2371
Sachin Ahujae9f85aa2015-12-08 19:57:04 +05302372 /* QWLAN_HAL_CFG_BAR_WAKEUP_HOST_DISABLE */
2373 tlvStruct->type = QWLAN_HAL_CFG_BAR_WAKEUP_HOST_DISABLE;
2374 tlvStruct->length = sizeof(tANI_U32);
2375 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2376
2377 if (wlan_cfgGetInt(pMac, WNI_CFG_DISABLE_BAR_WAKE_UP_HOST,
2378 configDataValue ) != eSIR_SUCCESS)
2379 {
2380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2381 "Failed to get value for WNI_CFG_DISABLE_BAR_WAKE_UP_HOST");
2382 goto handle_failure;
2383 }
2384 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2385 + sizeof(tHalCfg) + tlvStruct->length) ;
Manjeet Singh3d8e0942016-02-09 19:06:08 +05302386
2387 /* QWLAN_HAL_CFG_SAR_BOFFSET_CORRECTION_ENABLE */
2388 tlvStruct->type = QWLAN_HAL_CFG_SAR_BOFFSET_CORRECTION_ENABLE;
2389 tlvStruct->length = sizeof(tANI_U32);
2390 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2391
2392 if (wlan_cfgGetInt(pMac, WNI_CFG_SAR_BOFFSET_SET_CORRECTION,
2393 configDataValue ) != eSIR_SUCCESS)
2394 {
2395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2396 "Failed to get value for WNI_CFG_SAR_BOFFSET_SET_CORRECTION");
2397 goto handle_failure;
2398 }
2399 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2400 + sizeof(tHalCfg) + tlvStruct->length) ;
Manjeet Singh67024b02016-10-26 15:34:20 +05302401 /* QWLAN_HAL_CFG_BTC_DISABLE_WLAN_LINK_CRITICAL */
2402 tlvStruct->type = QWLAN_HAL_CFG_BTC_DISABLE_WLAN_LINK_CRITICAL ;
2403 tlvStruct->length = sizeof(tANI_U32);
2404 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2405
2406 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DISABLE_WLAN_LINK_CRITICAL,
2407 configDataValue ) != eSIR_SUCCESS)
2408 {
2409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2410 "Failed to get value for WNI_CFG_BTC_DISABLE_WLAN_LINK_CRITICAL");
2411 goto handle_failure;
2412 }
2413 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2414 + sizeof(tHalCfg) + tlvStruct->length) ;
Manjeet Singh3d8e0942016-02-09 19:06:08 +05302415
Jeff Johnson295189b2012-06-20 16:38:30 -07002416 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Padma, Santhosh Kumar36183352016-11-08 17:48:34 +05302417
2418 /* QWLAN_HAL_CFG_DISABLE_SCAN_DURING_SCO */
2419 tlvStruct->type = QWLAN_HAL_CFG_DISABLE_SCAN_DURING_SCO ;
2420 tlvStruct->length = sizeof(tANI_U32);
2421 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2422
2423 if (wlan_cfgGetInt(pMac, WNI_CFG_DISABLE_SCAN_DURING_SCO,
2424 configDataValue ) != eSIR_SUCCESS)
2425 {
2426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2427 "Failed to get value for WNI_CFG_DISABLE_SCAN_DURING_SCO");
2428 goto handle_failure;
2429 }
2430 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2431 + sizeof(tHalCfg) + tlvStruct->length) ;
Anurag Chouhana9116af2016-11-23 00:03:08 +05302432
2433 /* QWLAN_HAL_CFG_CONS_BCNMISS_COUNT */
2434 tlvStruct->type = QWLAN_HAL_CFG_CONS_BCNMISS_COUNT;
2435 tlvStruct->length = sizeof(tANI_U32);
2436 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2437 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CONC_BMISS, configDataValue)
2438 != eSIR_SUCCESS)
2439 {
2440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2441 "Failed to get value for WNI_CFG_ENABLE_CONC_BMISS");
2442 goto handle_failure;
2443 }
2444
2445 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2446 + sizeof(tHalCfg) + tlvStruct->length);
2447
2448 /* QWLAN_HAL_CFG_UNITS_OF_BCN_WAIT_TIME */
2449 tlvStruct->type = QWLAN_HAL_CFG_UNITS_OF_BCN_WAIT_TIME;
2450 tlvStruct->length = sizeof(tANI_U32);
2451 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2452 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_UNITS_BWAIT, configDataValue)
2453 != eSIR_SUCCESS)
2454 {
2455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2456 "Failed to get value for WNI_CFG_ENABLE_UNITS_BWAIT");
2457 goto handle_failure;
2458 }
2459
2460 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2461 + sizeof(tHalCfg) + tlvStruct->length);
2462
Jeff Johnson295189b2012-06-20 16:38:30 -07002463#ifdef WLAN_DEBUG
2464 {
2465 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07002466 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2467 "****** Dumping CFG TLV ***** ");
2468 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
2469 {
2470 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2471 "%02x %02x %02x %02x %02x %02x %02x %02x",
2472 tlvStructStart[i],
2473 tlvStructStart[i+1],
2474 tlvStructStart[i+2],
2475 tlvStructStart[i+3],
2476 tlvStructStart[i+4],
2477 tlvStructStart[i+5],
2478 tlvStructStart[i+6],
2479 tlvStructStart[i+7]);
2480 }
2481 /* Dump the bytes in the last line*/
2482 for (; i < wdiStartParams->usConfigBufferLen; i++)
2483 {
2484 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2485 "%02x ",tlvStructStart[i]);
2486 }
2487 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2488 "**************************** ");
2489 }
2490#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002491 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002492handle_failure:
2493 vos_mem_free(configParam);
2494 return VOS_STATUS_E_FAILURE;
2495}
Anurag Chouhan83026002016-12-13 22:46:21 +05302496
2497#ifdef DHCP_SERVER_OFFLOAD
2498/**
2499 * wda_dhcp_server_offload_rsp_callback() - response to the dhcp server offload
2500 * @wdi_rsp: pointer to the dhcp server offload response
2501 * @user_data: pointer to user data
2502 *
2503 * Return: None
2504 */
2505void wda_dhcp_server_offload_rsp_callback(wdi_dhcp_server_offload_rsp_param_t*
2506 wdi_rsp,
2507 void* user_data)
2508{
2509 tWDA_ReqParams *wda_params = (tWDA_ReqParams *)user_data;
2510 sir_dhcp_srv_offload_info_t *dhcp_srv_offload_info;
2511 VOS_STATUS status;
2512
2513 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2514 "<------ %s " ,__func__);
2515
2516 if(NULL == wda_params)
2517 {
2518 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2519 "%s: pWdaParams received NULL", __func__);
2520 VOS_ASSERT(0);
2521 return;
2522 }
2523
2524 if(NULL == wda_params->wdaMsgParam)
2525 {
2526 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2527 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
2528 VOS_ASSERT(0);
2529 vos_mem_free(wda_params->wdaWdiApiMsgParam);
2530 vos_mem_free(wda_params);
2531 return;
2532 }
2533
2534 dhcp_srv_offload_info = (sir_dhcp_srv_offload_info_t *)
2535 wda_params->wdaMsgParam;
2536
2537 if(dhcp_srv_offload_info->dhcp_offload_callback)
2538 {
2539 dhcp_srv_offload_info->dhcp_offload_callback(
2540 dhcp_srv_offload_info->dhcp_server_offload_cb_context,
2541 CONVERT_WDI2VOS_STATUS(wdi_rsp->status));
2542 }
2543 else
2544 {
2545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2546 "%s: pFWLoggingInitParams callback is NULL", __func__);
2547 }
2548
2549 status = CONVERT_WDI2VOS_STATUS(wdi_rsp->status);
2550 if (status)
2551 {
2552 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2553 "%s: DHCP server offload failed with status=%d", __func__, status);
2554 VOS_ASSERT(0);
2555 }
2556
2557 vos_mem_free(wda_params->wdaWdiApiMsgParam);
2558 vos_mem_free(wda_params->wdaMsgParam);
2559 vos_mem_free(wda_params);
2560 return;
2561}
2562#endif /* DHCP_SERVER_OFFLOAD */
2563
Anurag Chouhan0b29de02016-12-16 13:18:40 +05302564#ifdef MDNS_OFFLOAD
2565/**
2566 * wda_mdns_enable_rsp_callback() - response to the mdns enable server offload
2567 * @wdi_rsp: pointer to the mdns enable offload response
2568 * @user_data: pointer to user data
2569 *
2570 * Return: None
2571 */
2572void wda_mdns_enable_rsp_callback(wdi_mdns_enable_offload_rsp_param_t*
2573 wdi_rsp,
2574 void* user_data)
2575{
2576 tWDA_ReqParams *wda_params = (tWDA_ReqParams *)user_data;
2577 sir_mdns_offload_info_t *mdns_offload_info;
2578 VOS_STATUS status;
2579
2580 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2581 "<------ %s " ,__func__);
2582
2583 if(NULL == wda_params)
2584 {
2585 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2586 "%s: pWdaParams received NULL", __func__);
2587 VOS_ASSERT(0);
2588 return ;
2589 }
2590
2591 if(NULL == wda_params->wdaMsgParam)
2592 {
2593 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2594 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
2595 VOS_ASSERT(0);
2596 vos_mem_free(wda_params->wdaWdiApiMsgParam);
2597 vos_mem_free(wda_params);
2598 return ;
2599 }
2600
2601 mdns_offload_info = (sir_mdns_offload_info_t *)
2602 wda_params->wdaMsgParam;
2603
2604 if(mdns_offload_info->mdns_enable_callback)
2605 {
2606 mdns_offload_info->mdns_enable_callback(mdns_offload_info->
2607 mdns_enable_cb_context,
2608 CONVERT_WDI2VOS_STATUS(wdi_rsp->
2609 status));
2610 }
2611 else
2612 {
2613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2614 "%s: mdns_enable callback is NULL", __func__);
2615 }
2616
2617 status = CONVERT_WDI2VOS_STATUS(wdi_rsp->status);
2618 if (status)
2619 {
2620 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2621 "%s: MDNS offload failed with status=%d", __func__, status);
2622 VOS_ASSERT(0);
2623 }
2624
2625 vos_mem_free(wda_params->wdaWdiApiMsgParam);
2626 vos_mem_free(wda_params->wdaMsgParam);
2627 vos_mem_free(wda_params);
2628
2629 return;
2630}
2631
2632/**
2633 * wda_mdns_fqdn_rsp_callback() - response to the mdns fqdn offload
2634 * @wdi_rsp: pointer to the mdns fqdn offload response
2635 * @user_data: pointer to user data
2636 *
2637 * Return: None
2638 */
2639void wda_mdns_fqdn_rsp_callback(wdi_mdns_set_fqdn_rsp_param_t*
2640 wdi_rsp,
2641 void* user_data)
2642{
2643 tWDA_ReqParams *wda_params = (tWDA_ReqParams *)user_data;
2644 sir_mdns_fqdn_info_t *mdns_fqdn_info;
2645 VOS_STATUS status;
2646
2647 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2648 "<------ %s " ,__func__);
2649
2650 if(NULL == wda_params)
2651 {
2652 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2653 "%s: pWdaParams received NULL", __func__);
2654 VOS_ASSERT(0);
2655 return ;
2656 }
2657
2658 if(NULL == wda_params->wdaMsgParam)
2659 {
2660 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2661 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
2662 VOS_ASSERT(0);
2663 vos_mem_free(wda_params->wdaWdiApiMsgParam);
2664 vos_mem_free(wda_params);
2665 return ;
2666 }
2667
2668 mdns_fqdn_info = (sir_mdns_fqdn_info_t *)
2669 wda_params->wdaMsgParam;
2670
2671 if(mdns_fqdn_info->mdns_fqdn_callback)
2672 {
2673 mdns_fqdn_info->mdns_fqdn_callback(mdns_fqdn_info->
2674 mdns_fqdn_cb_context,
2675 CONVERT_WDI2VOS_STATUS(wdi_rsp->
2676 status));
2677 }
2678 else
2679 {
2680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2681 "%s: mdns_fqdn callback is NULL", __func__);
2682 }
2683
2684 status = CONVERT_WDI2VOS_STATUS(wdi_rsp->status);
2685 if (status)
2686 {
2687 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2688 "%s: MDNS FQDN offload failed with status=%d", __func__, status);
2689 VOS_ASSERT(0);
2690 }
2691
2692 vos_mem_free(wda_params->wdaWdiApiMsgParam);
2693 vos_mem_free(wda_params->wdaMsgParam);
2694 vos_mem_free(wda_params);
2695
2696 return;
2697}
2698
2699/**
2700 * wda_mdns_resp_rsp_callback() - response to the mdns resp offload
2701 * @wdi_rsp: pointer to the mdns fqdn offload response
2702 * @user_data: pointer to user data
2703 *
2704 * Return: None
2705 */
2706void wda_mdns_resp_rsp_callback
2707(
2708 wdi_mdns_set_rsp_param_t*
2709 wdi_rsp,
2710 void* user_data)
2711{
2712 tWDA_ReqParams *wda_params = (tWDA_ReqParams *)user_data;
2713 sir_mdns_resp_info_t *mdns_resp_info;
2714 VOS_STATUS status;
2715
2716 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2717 "<------ %s " ,__func__);
2718
2719 if(NULL == wda_params)
2720 {
2721 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2722 "%s: pWdaParams received NULL", __func__);
2723 VOS_ASSERT(0);
2724 return ;
2725 }
2726
2727 if(NULL == wda_params->wdaMsgParam)
2728 {
2729 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2730 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
2731 VOS_ASSERT(0);
2732 vos_mem_free(wda_params->wdaWdiApiMsgParam);
2733 vos_mem_free(wda_params);
2734 return ;
2735 }
2736
2737 mdns_resp_info = (sir_mdns_resp_info_t *)
2738 wda_params->wdaMsgParam;
2739
2740 if(mdns_resp_info->mdns_resp_callback)
2741 {
2742 mdns_resp_info->mdns_resp_callback(mdns_resp_info->
2743 mdns_resp_cb_context,
2744 CONVERT_WDI2VOS_STATUS(wdi_rsp->
2745 status));
2746 }
2747 else
2748 {
2749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2750 "%s: mdns_fqdn callback is NULL", __func__);
2751 }
2752
2753 status = CONVERT_WDI2VOS_STATUS(wdi_rsp->status);
2754 if (status)
2755 {
2756 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2757 "%s: MDNS FQDN offload failed with status=%d", __func__, status);
2758 VOS_ASSERT(0);
2759 }
2760
2761 vos_mem_free(wda_params->wdaWdiApiMsgParam);
2762 vos_mem_free(wda_params->wdaMsgParam);
2763 vos_mem_free(wda_params);
2764
2765 return;
2766}
2767
2768/**
2769 * wda_get_stats_rsp_callback() - response to the mdns stats offload
2770 * @wdi_rsp: pointer to the mdns fqdn offload response
2771 * @user_data: pointer to user data
2772 *
2773 * Return: None
2774 */
2775void wda_get_stats_rsp_callback
2776(
2777 wdi_mdns_stats_rsp_param_t*
2778 wdi_rsp,
2779 void* user_data)
2780{
2781 tWDA_ReqParams *wda_params = (tWDA_ReqParams *)user_data;
2782 sir_get_mdns_stats_info_t *mdns_stats_info;
2783 VOS_STATUS status;
2784
2785 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2786 "<------ %s " ,__func__);
2787
2788 if(NULL == wda_params)
2789 {
2790 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2791 "%s: pWdaParams received NULL", __func__);
2792 VOS_ASSERT(0);
2793 return ;
2794 }
2795
2796 if(NULL == wda_params->wdaMsgParam)
2797 {
2798 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2799 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
2800 VOS_ASSERT(0);
2801 vos_mem_free(wda_params->wdaWdiApiMsgParam);
2802 vos_mem_free(wda_params);
2803 return ;
2804 }
2805
2806 mdns_stats_info = (sir_get_mdns_stats_info_t *)
2807 wda_params->wdaMsgParam;
2808
2809 status = CONVERT_WDI2VOS_STATUS(wdi_rsp->status);
2810 if (status)
2811 {
2812 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2813 "%s: MDNS FQDN offload failed with status=%d", __func__, status);
2814 VOS_ASSERT(0);
2815 }
2816
2817 vos_mem_free(wda_params->wdaWdiApiMsgParam);
2818 vos_mem_free(wda_params->wdaMsgParam);
2819 vos_mem_free(wda_params);
2820
2821 return;
2822}
2823#endif /* MDNS_OFFLOAD */
2824
Jeff Johnson295189b2012-06-20 16:38:30 -07002825/*
2826 * FUNCTION: WDA_wdiCompleteCB
2827 * call the voss call back function
Anurag Chouhan0b29de02016-12-16 13:18:40 +05302828 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002829void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07002830{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002831 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2832 tWDA_CbContext *wdaContext;
2833
2834 if(NULL == pWdaParams)
2835 {
2836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002837 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002838 VOS_ASSERT(0) ;
2839 return ;
2840 }
2841
2842 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
2843
Jeff Johnson295189b2012-06-20 16:38:30 -07002844 if (NULL == wdaContext)
2845 {
2846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002847 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002848 return ;
2849 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002850
Jeff Johnson295189b2012-06-20 16:38:30 -07002851 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002852 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07002853 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002854 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002855 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002856 vos_mem_free(pWdaParams);
2857
Jeff Johnson295189b2012-06-20 16:38:30 -07002858 if(WDI_STATUS_SUCCESS != status)
2859 {
2860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2861 "WDI stop callback returned failure" );
2862 VOS_ASSERT(0) ;
2863 }
2864 else
2865 {
2866 wdaContext->wdaState = WDA_STOP_STATE;
2867 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002868
Leo Chang9d76f622013-08-23 16:34:52 -07002869 /* FTM Driver stop procedure should be synced.
2870 * Stop and Close will happen on same context */
2871 if (eDRIVER_TYPE_MFG == wdaContext->driverMode)
2872 {
2873 if (VOS_STATUS_SUCCESS != vos_event_set(&wdaContext->ftmStopDoneEvent))
2874 {
2875 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2876 "%s: FTM Stop Event Set Fail", __func__);
2877 VOS_ASSERT(0);
2878 }
2879 }
2880
Jeff Johnson295189b2012-06-20 16:38:30 -07002881 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002882 vos_WDAComplete_cback(wdaContext->pVosContext);
2883
Jeff Johnson295189b2012-06-20 16:38:30 -07002884 return ;
2885}
Jeff Johnson295189b2012-06-20 16:38:30 -07002886/*
2887 * FUNCTION: WDA_stop
2888 * call WDI_stop
2889 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002890VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
2891{
2892 WDI_Status wdiStatus;
2893 VOS_STATUS status = VOS_STATUS_SUCCESS;
2894 WDI_StopReqParamsType *wdiStopReq;
2895 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002896 tWDA_ReqParams *pWdaParams ;
2897
Jeff Johnson295189b2012-06-20 16:38:30 -07002898 if (NULL == pWDA)
2899 {
2900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002901 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002902 VOS_ASSERT(0);
2903 return VOS_STATUS_E_FAILURE;
2904 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002905 if (pWDA->wdiFailed == true)
2906 {
2907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002908 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002909 return VOS_STATUS_E_ALREADY;
2910 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002911
Jeff Johnson295189b2012-06-20 16:38:30 -07002912 /* FTM mode stay START_STATE */
2913 if( (WDA_READY_STATE != pWDA->wdaState) &&
2914 (WDA_INIT_STATE != pWDA->wdaState) &&
2915 (WDA_START_STATE != pWDA->wdaState) )
2916 {
2917 VOS_ASSERT(0);
2918 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002919 wdiStopReq = (WDI_StopReqParamsType *)
2920 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
2921 if(NULL == wdiStopReq)
2922 {
2923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002924 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002925 VOS_ASSERT(0);
2926 return VOS_STATUS_E_NOMEM;
2927 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002928
Jeff Johnson295189b2012-06-20 16:38:30 -07002929 wdiStopReq->wdiStopReason = reason;
2930 wdiStopReq->wdiReqStatusCB = NULL;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302931
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002932 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2933 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07002934 {
2935 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002936 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002937 VOS_ASSERT(0);
2938 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002939 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07002940 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002941
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002942 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
2943 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07002944 {
2945 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002946 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002947 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002948
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002949 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
2950 pWdaParams->wdaMsgParam = NULL;
2951 pWdaParams->pWdaContext = pWDA;
2952
Jeff Johnson295189b2012-06-20 16:38:30 -07002953 /* call WDI stop */
2954 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002955 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
2956
Jeff Johnson295189b2012-06-20 16:38:30 -07002957 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
2958 {
2959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2960 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002961 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2962 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002963 status = VOS_STATUS_E_FAILURE;
2964 }
Leo Chang9d76f622013-08-23 16:34:52 -07002965
2966 /* FTM Driver stop procedure should be synced.
2967 * Stop and Close will happen on same context */
2968 if (eDRIVER_TYPE_MFG == pWDA->driverMode)
2969 {
2970 status = vos_wait_single_event(&pWDA->ftmStopDoneEvent,
2971 WDI_RESPONSE_TIMEOUT);
2972 if (status != VOS_STATUS_SUCCESS)
2973 {
2974 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2975 "%s: FTM Stop Timepoout", __func__);
2976 VOS_ASSERT(0);
Leo Chang9d76f622013-08-23 16:34:52 -07002977 }
c_hpothu0d36bc42014-07-03 17:43:45 +05302978 vos_event_destroy(&pWDA->ftmStopDoneEvent);
Leo Chang9d76f622013-08-23 16:34:52 -07002979 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002980 return status;
2981}
Jeff Johnson295189b2012-06-20 16:38:30 -07002982/*
2983 * FUNCTION: WDA_close
2984 * call WDI_close and free the WDA context
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302985 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002986VOS_STATUS WDA_close(v_PVOID_t pVosContext)
2987{
Jeff Johnson43971f52012-07-17 12:26:56 -07002988 VOS_STATUS status = VOS_STATUS_SUCCESS;
2989 WDI_Status wstatus;
2990 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07002991 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07002992 if (NULL == wdaContext)
2993 {
2994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002995 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002996 return VOS_STATUS_E_FAILURE;
2997 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002998 if((WDA_INIT_STATE != wdaContext->wdaState) &&
2999 (WDA_STOP_STATE != wdaContext->wdaState))
3000 {
3001 VOS_ASSERT(0);
3002 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003003 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07003004 wstatus = WDI_Close();
3005 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07003006 {
3007 status = VOS_STATUS_E_FAILURE;
3008 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003009 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07003010 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07003011 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
3012 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003013 {
3014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08003015 "WDI Sync Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07003016 status = VOS_STATUS_E_FAILURE;
3017 }
3018
Jeff Johnson43971f52012-07-17 12:26:56 -07003019 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07003020 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003021 {
3022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08003023 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07003024 status = VOS_STATUS_E_FAILURE;
3025 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003026 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07003027 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003028 {
3029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08003030 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07003031 status = VOS_STATUS_E_FAILURE;
3032 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003033 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07003034 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003035 {
3036 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08003037 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07003038 status = VOS_STATUS_E_FAILURE;
3039 }
Sravan Kumar Kairam38017112016-10-12 13:32:32 +05303040
3041 vos_lock_destroy(&wdaContext->mgmt_pkt_lock);
3042
Jeff Johnson295189b2012-06-20 16:38:30 -07003043 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07003044 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07003045 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07003046 {
3047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3048 "error in WDA close " );
3049 status = VOS_STATUS_E_FAILURE;
3050 }
Sravan Kumar Kairam38017112016-10-12 13:32:32 +05303051
Jeff Johnson295189b2012-06-20 16:38:30 -07003052 return status;
3053}
Jeff Johnson295189b2012-06-20 16:38:30 -07003054/*
3055 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
3056 * returns 1 if the compiled version is greater than or equal to the input version
3057 */
3058
3059uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
3060{
3061 VOS_STATUS status = VOS_STATUS_SUCCESS;
3062 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
3063 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07003064 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07003065 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
3066 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
3067 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
3068 (compiledVersion.revision >= revision)))
3069 return 1;
3070 else
3071 return 0;
3072}
Jeff Johnson295189b2012-06-20 16:38:30 -07003073/*
3074 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
3075 * returns 1 if the compiled version is greater than or equal to the input version
3076 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003077uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
3078{
3079 VOS_STATUS status = VOS_STATUS_SUCCESS;
3080 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
3081 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07003082 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07003083 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
3084 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
3085 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
3086 (reportedVersion.revision >= revision)))
3087 return 1;
3088 else
3089 return 0;
3090}
Jeff Johnson295189b2012-06-20 16:38:30 -07003091/*
3092 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
3093 * Returns the version of the WCNSS WLAN API with which the HOST
3094 * device driver was compiled
3095 */
3096VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
3097 tSirVersionType *pVersion)
3098{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05303099 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003100 if ((NULL == pvosGCtx) || (NULL == pVersion))
3101 {
3102 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003103 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003104 VOS_ASSERT(0);
3105 return VOS_STATUS_E_FAILURE;
3106 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003107 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
3108 if (NULL == pWDA )
3109 {
3110 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003111 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003112 VOS_ASSERT(0);
3113 return VOS_STATUS_E_FAILURE;
3114 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003115 *pVersion = pWDA->wcnssWlanCompiledVersion;
3116 return VOS_STATUS_SUCCESS;
3117}
Jeff Johnson295189b2012-06-20 16:38:30 -07003118/*
3119 * FUNCTION: WDA_GetWcnssWlanReportedVersion
3120 * Returns the version of the WCNSS WLAN API with which the WCNSS
3121 * device driver was compiled
3122 */
3123VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
3124 tSirVersionType *pVersion)
3125{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05303126 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003127 if ((NULL == pvosGCtx) || (NULL == pVersion))
3128 {
3129 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003130 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003131 VOS_ASSERT(0);
3132 return VOS_STATUS_E_FAILURE;
3133 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003134 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
3135 if (NULL == pWDA )
3136 {
3137 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003138 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003139 VOS_ASSERT(0);
3140 return VOS_STATUS_E_FAILURE;
3141 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003142 *pVersion = pWDA->wcnssWlanReportedVersion;
3143 return VOS_STATUS_SUCCESS;
3144}
Jeff Johnson295189b2012-06-20 16:38:30 -07003145/*
3146 * FUNCTION: WDA_GetWcnssSoftwareVersion
3147 * Returns the WCNSS Software version string
3148 */
3149VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
3150 tANI_U8 *pVersion,
3151 tANI_U32 versionBufferSize)
3152{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05303153 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003154 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003155 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003156 if ((NULL == pvosGCtx) || (NULL == pVersion))
3157 {
3158 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003159 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003160 VOS_ASSERT(0);
3161 return VOS_STATUS_E_FAILURE;
3162 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003163 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
3164 if (NULL == pWDA )
3165 {
3166 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003167 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003168 VOS_ASSERT(0);
3169 return VOS_STATUS_E_FAILURE;
3170 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003171 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
3172 return VOS_STATUS_SUCCESS;
3173}
Jeff Johnson295189b2012-06-20 16:38:30 -07003174/*
3175 * FUNCTION: WDA_GetWcnssHardwareVersion
3176 * Returns the WCNSS Hardware version string
3177 */
3178VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
3179 tANI_U8 *pVersion,
3180 tANI_U32 versionBufferSize)
3181{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05303182 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003183 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003184 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003185 if ((NULL == pvosGCtx) || (NULL == pVersion))
3186 {
3187 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003188 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003189 VOS_ASSERT(0);
3190 return VOS_STATUS_E_FAILURE;
3191 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003192 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
3193 if (NULL == pWDA )
3194 {
3195 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003196 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003197 VOS_ASSERT(0);
3198 return VOS_STATUS_E_FAILURE;
3199 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003200 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
3201 return VOS_STATUS_SUCCESS;
3202}
Jeff Johnson295189b2012-06-20 16:38:30 -07003203/*
3204 * FUNCTION: WDA_WniCfgDnld
3205 * Trigger CFG Download
3206 */
3207VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
3208{
3209 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05303210 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnsonab81a082013-04-03 16:00:31 -07003211
Jeff Johnson295189b2012-06-20 16:38:30 -07003212 if (NULL == pMac )
3213 {
3214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003215 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003216 VOS_ASSERT(0);
3217 return VOS_STATUS_E_FAILURE;
3218 }
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05303219 processCfgDownloadReq(pMac);
Jeff Johnson295189b2012-06-20 16:38:30 -07003220 return vosStatus;
3221}
Jeff Johnson295189b2012-06-20 16:38:30 -07003222/* -----------------------------------------------------------------
3223 * WDI interface
3224 * -----------------------------------------------------------------
3225 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003226/*
3227 * FUNCTION: WDA_suspendDataTxCallback
3228 * call back function called from TL after suspend Transmission
3229 */
3230VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
3231 v_U8_t* ucSTAId,
3232 VOS_STATUS vosStatus)
3233{
3234 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07003235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003236 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003237 if (NULL == pWDA )
3238 {
3239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003240 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003241 VOS_ASSERT(0);
3242 return VOS_STATUS_E_FAILURE;
3243 }
3244 if(VOS_IS_STATUS_SUCCESS(vosStatus))
3245 {
3246 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
3247 }
3248 else
3249 {
3250 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
3251 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003252 /* Trigger the event to bring the WDA TL suspend function to come
3253 * out of wait*/
3254 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
3255 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
3256 {
3257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08003258 "NEW VOS Event Set failed - status = %d", vosStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003259 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003260 /* If TL suspended had timedout before this callback was called, resume back
3261 * TL.*/
3262 if (pWDA->txSuspendTimedOut)
3263 {
3264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08003265 "Late TLSuspendCallback, resuming TL back again");
Jeff Johnson295189b2012-06-20 16:38:30 -07003266 WDA_ResumeDataTx(pWDA);
3267 pWDA->txSuspendTimedOut = FALSE;
3268 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003269 return VOS_STATUS_SUCCESS;
3270}
Jeff Johnson295189b2012-06-20 16:38:30 -07003271/*
3272 * FUNCTION: WDA_suspendDataTx
3273 * Update TL to suspend the data Transmission
3274 */
3275VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
3276{
3277 VOS_STATUS status = VOS_STATUS_E_FAILURE;
3278 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07003279
3280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003281 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003282 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07003283 if (pWDA->txSuspendTimedOut)
3284 {
3285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08003286 "TL suspend timedout previously, CB not called yet");
Jeff Johnson295189b2012-06-20 16:38:30 -07003287 return status;
3288 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003289 /* Reset the event to be not signalled */
3290 status = vos_event_reset(&pWDA->suspendDataTxEvent);
3291 if(!VOS_IS_STATUS_SUCCESS(status))
3292 {
3293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08003294 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -07003295 return VOS_STATUS_E_FAILURE;
3296 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003297 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07003298 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07003299 WDA_SuspendDataTxCallback);
3300 if(status != VOS_STATUS_SUCCESS)
3301 {
3302 return status;
3303 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003304 /* Wait for the event to be set by the TL, to get the response of
3305 * suspending the TX queues, this event should be set by the Callback
3306 * function called by TL*/
3307 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
3308 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
3309 if(!VOS_IS_STATUS_SUCCESS(status))
3310 {
3311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3312 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003313 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07003314 /* Set this flag to true when TL suspend times out, so that when TL
3315 * suspend eventually happens and calls the callback, TL can be resumed
3316 * right away by looking at this flag when true.*/
3317 pWDA->txSuspendTimedOut = TRUE;
3318 }
3319 else
3320 {
3321 pWDA->txSuspendTimedOut = FALSE;
3322 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003323 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
3324 {
3325 status = VOS_STATUS_SUCCESS;
3326 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003327 return status;
3328}
Jeff Johnson295189b2012-06-20 16:38:30 -07003329/*
3330 * FUNCTION: WDA_resumeDataTx
3331 * Update TL to resume the data Transmission
3332 */
3333VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
3334{
3335 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07003336
3337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003338 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07003339
3340 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07003341 return status;
3342}
Jeff Johnson295189b2012-06-20 16:38:30 -07003343/*
3344 * FUNCTION: WDA_InitScanReqCallback
3345 * Trigger Init SCAN callback
3346 */
3347void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
3348{
3349 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3350 tWDA_CbContext *pWDA;
3351 tInitScanParams *pWDA_ScanParam ;
3352 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003354 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003355 if(NULL == pWdaParams)
3356 {
3357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003358 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003359 VOS_ASSERT(0) ;
3360 return ;
3361 }
3362 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3363 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003364 if(NULL == pWDA_ScanParam)
3365 {
3366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003367 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07003368 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003369 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3370 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003371 return ;
3372 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003373 if(WDI_STATUS_SUCCESS != wdiStatus)
3374 {
3375 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003376 if(VOS_STATUS_SUCCESS != status)
3377 {
3378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003379 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003380 }
3381 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003382 /* free WDI command buffer */
3383 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003384 vos_mem_free(pWdaParams) ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05303385
3386
Jeff Johnson295189b2012-06-20 16:38:30 -07003387 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003388 /* without converting the Status to Failure or Success Just
3389 pass the same status to lim */
3390 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003391 /* send SCAN RSP message back to PE */
3392 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003393 return ;
3394}
3395
3396/*
3397 * FUNCTION: WDA_ProcessInitScanReq
3398 * Trigger Init SCAN in DAL
3399 */
3400VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
3401 tInitScanParams *initScanParams)
3402{
3403 WDI_Status status = WDI_STATUS_SUCCESS ;
3404 WDI_InitScanReqParamsType *wdiInitScanParam =
3405 (WDI_InitScanReqParamsType *)vos_mem_malloc(
3406 sizeof(WDI_InitScanReqParamsType)) ;
3407 tWDA_ReqParams *pWdaParams;
3408 tANI_U8 i = 0;
3409
3410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003411 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003412 if(NULL == wdiInitScanParam)
3413 {
3414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003415 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003416 VOS_ASSERT(0);
3417 return VOS_STATUS_E_NOMEM;
3418 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003419 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3420 if(NULL == pWdaParams)
3421 {
3422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003423 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003424 VOS_ASSERT(0);
3425 vos_mem_free(wdiInitScanParam);
3426 return VOS_STATUS_E_NOMEM;
3427 }
3428
3429 /* Copy init Scan params to WDI structure */
3430 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
3431 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
3432 sizeof(tSirMacAddr)) ;
3433 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
3434 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
3435 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003436 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
3437 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07003438 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
3439 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003440 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
3441 {
3442 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
3443 initScanParams->scanEntry.bssIdx[i] ;
3444 }
3445
3446 /* if Frame length, copy macMgmtHdr or WDI structure */
3447 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
3448 {
3449 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
3450 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
3451 }
3452 wdiInitScanParam->wdiReqStatusCB = NULL ;
3453
Jeff Johnson295189b2012-06-20 16:38:30 -07003454 /* Store Init Req pointer, as this will be used for response */
3455 pWdaParams->pWdaContext = pWDA;
3456 pWdaParams->wdaMsgParam = initScanParams;
3457 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003458 /* first try to suspend TX */
3459 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003460 if(WDI_STATUS_SUCCESS != status)
3461 {
3462 goto handleWdiFailure;
3463 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003464 /* call DAL API to pass init scan request to DAL */
3465 status = WDI_InitScanReq(wdiInitScanParam,
3466 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003467 if(IS_WDI_STATUS_FAILURE(status))
3468 {
3469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3470 "error in WDA Init Scan, Resume Tx " );
3471 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003472 VOS_ASSERT(0) ;
3473
3474 goto handleWdiFailure;
3475 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003476 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003477handleWdiFailure:
3478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3479 "Failure in WDI Api, free all the memory " );
3480 /* free WDI command buffer */
3481 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3482 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003483 /* send Failure to PE */
3484 initScanParams->status = eSIR_FAILURE ;
3485 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003486 return CONVERT_WDI2VOS_STATUS(status) ;
3487}
3488
Jeff Johnson295189b2012-06-20 16:38:30 -07003489/*
3490 * FUNCTION: WDA_StartScanReqCallback
3491 * send Start SCAN RSP back to PE
3492 */
3493void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
3494 void* pUserData)
3495{
3496 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3497 tWDA_CbContext *pWDA;
3498 tStartScanParams *pWDA_ScanParam;
3499 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003500 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003501 if(NULL == pWdaParams)
3502 {
3503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003504 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003505 VOS_ASSERT(0) ;
3506 return ;
3507 }
3508 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3509 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003510 if(NULL == pWDA_ScanParam)
3511 {
3512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003513 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003514 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003515 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003516 return ;
3517 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003518 if(NULL == pWdaParams->wdaWdiApiMsgParam)
3519 {
3520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003521 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003522 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003523 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003524 return ;
3525 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003526 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3527 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003528
Jeff Johnson295189b2012-06-20 16:38:30 -07003529
3530 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003531 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003532 /* send SCAN RSP message back to PE */
3533 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003534 return ;
3535}
3536
Jeff Johnson295189b2012-06-20 16:38:30 -07003537/*
3538 * FUNCTION: WDA_ProcessStartScanReq
3539 * Trigger start SCAN in WDI
3540 */
3541VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
3542 tStartScanParams *startScanParams)
3543{
3544 WDI_Status status = WDI_STATUS_SUCCESS;
3545 WDI_StartScanReqParamsType *wdiStartScanParams =
3546 (WDI_StartScanReqParamsType *)vos_mem_malloc(
3547 sizeof(WDI_StartScanReqParamsType)) ;
3548 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003550 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003551 if(NULL == wdiStartScanParams)
3552 {
3553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003554 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003555 VOS_ASSERT(0);
3556 return VOS_STATUS_E_NOMEM;
3557 }
3558 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3559 if(NULL == pWdaParams)
3560 {
3561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003562 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003563 VOS_ASSERT(0);
3564 vos_mem_free(wdiStartScanParams);
3565 return VOS_STATUS_E_NOMEM;
3566 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003567 /* Copy init Scan params to WDI structure */
3568 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
3569 wdiStartScanParams->wdiReqStatusCB = NULL ;
3570
Jeff Johnson295189b2012-06-20 16:38:30 -07003571 /* Store Init Req pointer, as this will be used for response */
3572 /* store Params pass it to WDI */
3573 pWdaParams->pWdaContext = pWDA;
3574 pWdaParams->wdaMsgParam = startScanParams;
3575 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003576 /* call DAL API to pass init scan request to DAL */
3577 status = WDI_StartScanReq(wdiStartScanParams,
3578 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003579 /* failure returned by WDI API */
3580 if(IS_WDI_STATUS_FAILURE(status))
3581 {
3582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3583 "Failure in Start Scan WDI API, free all the memory "
3584 "It should be due to previous abort scan." );
3585 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3586 vos_mem_free(pWdaParams) ;
3587 startScanParams->status = eSIR_FAILURE ;
3588 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
3589 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003590 return CONVERT_WDI2VOS_STATUS(status) ;
3591}
Jeff Johnson295189b2012-06-20 16:38:30 -07003592/*
3593 * FUNCTION: WDA_EndScanReqCallback
3594 * END SCAN callback
3595 */
3596void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
3597{
3598 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3599 tWDA_CbContext *pWDA;
3600 tEndScanParams *endScanParam;
3601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003602 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003603 if(NULL == pWdaParams)
3604 {
3605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003606 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003607 VOS_ASSERT(0) ;
3608 return ;
3609 }
3610 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3611 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003612 if(NULL == endScanParam)
3613 {
3614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003615 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003616 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003617 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3618 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003619 return ;
3620 }
3621
3622 /* Free WDI command buffer */
3623 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3624 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003625 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003626 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003627 /* send response back to PE */
3628 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
3629 return ;
3630}
3631
Jeff Johnson295189b2012-06-20 16:38:30 -07003632/*
3633 * FUNCTION: WDA_ProcessEndScanReq
3634 * Trigger END SCAN in WDI
3635 */
3636VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
3637 tEndScanParams *endScanParams)
3638{
3639 WDI_Status status = WDI_STATUS_SUCCESS;
3640 WDI_EndScanReqParamsType *wdiEndScanParams =
3641 (WDI_EndScanReqParamsType *)vos_mem_malloc(
3642 sizeof(WDI_EndScanReqParamsType)) ;
3643 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003645 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003646 if(NULL == wdiEndScanParams)
3647 {
3648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003649 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003650 VOS_ASSERT(0);
3651 return VOS_STATUS_E_NOMEM;
3652 }
3653 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3654 if(NULL == pWdaParams)
3655 {
3656 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003657 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003658 VOS_ASSERT(0);
3659 vos_mem_free(wdiEndScanParams);
3660 return VOS_STATUS_E_NOMEM;
3661 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003662 /* Copy init Scan params to WDI structure */
3663 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
3664 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003665 /* Store Init Req pointer, as this will be used for response */
3666 /* store Params pass it to WDI */
3667 pWdaParams->pWdaContext = pWDA;
3668 pWdaParams->wdaMsgParam = endScanParams;
3669 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003670 /* call DAL API to pass init scan request to DAL */
3671 status = WDI_EndScanReq(wdiEndScanParams,
3672 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003673 if(IS_WDI_STATUS_FAILURE(status))
3674 {
3675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3676 "Failure in End Scan WDI API, free all the memory "
3677 "It should be due to previous abort scan." );
3678 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3679 vos_mem_free(pWdaParams) ;
3680 endScanParams->status = eSIR_FAILURE ;
3681 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
3682 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003683 return CONVERT_WDI2VOS_STATUS(status) ;
3684}
Jeff Johnson295189b2012-06-20 16:38:30 -07003685/*
3686 * FUNCTION: WDA_FinishScanReqCallback
3687 * Trigger Finish SCAN callback
3688 */
3689void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
3690{
3691 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3692 tWDA_CbContext *pWDA;
3693 tFinishScanParams *finishScanParam;
3694 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003696 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003697 if(NULL == pWdaParams)
3698 {
3699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003700 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003701 VOS_ASSERT(0) ;
3702 return ;
3703 }
3704
3705 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3706 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003707 if(NULL == finishScanParam)
3708 {
3709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003710 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003711 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003712 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3713 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003714 return ;
3715 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003716 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3717 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003718 /*
3719 * Now Resume TX, if we reached here means, TX is already suspended, we
3720 * have to resume it unconditionaly
3721 */
3722 status = WDA_ResumeDataTx(pWDA) ;
3723
3724 if(VOS_STATUS_SUCCESS != status)
3725 {
3726 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003727 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003728 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003729 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003730 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
3731 return ;
3732}
Jeff Johnson295189b2012-06-20 16:38:30 -07003733/*
3734 * FUNCTION: WDA_ProcessFinshScanReq
3735 * Trigger Finish SCAN in WDI
3736 */
3737VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
3738 tFinishScanParams *finishScanParams)
3739{
3740 WDI_Status status = WDI_STATUS_SUCCESS;
3741 WDI_FinishScanReqParamsType *wdiFinishScanParams =
3742 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
3743 sizeof(WDI_FinishScanReqParamsType)) ;
3744 tWDA_ReqParams *pWdaParams ;
3745 tANI_U8 i = 0;
3746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003747 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003748 if(NULL == wdiFinishScanParams)
3749 {
3750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003751 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003752 VOS_ASSERT(0);
3753 return VOS_STATUS_E_NOMEM;
3754 }
3755 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3756 if(NULL == pWdaParams)
3757 {
3758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003759 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003760 VOS_ASSERT(0);
3761 vos_mem_free(wdiFinishScanParams);
3762 return VOS_STATUS_E_NOMEM;
3763 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003764 /* Copy init Scan params to WDI structure */
3765 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
3766 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
3767 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003768 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
3769 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
3770 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
3771 finishScanParams->frameLength ;
3772 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
3773 finishScanParams->currentOperChannel ;
3774 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
3775 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
3776 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003777 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
3778 {
3779 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
3780 finishScanParams->scanEntry.bssIdx[i] ;
3781 }
3782
3783
Jeff Johnson295189b2012-06-20 16:38:30 -07003784 /* if Frame length, copy macMgmtHdr ro WDI structure */
3785 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
3786 {
3787 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
3788 &finishScanParams->macMgmtHdr,
3789 sizeof(WDI_MacMgmtHdr)) ;
3790 }
3791 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003792 /* Store Init Req pointer, as this will be used for response */
3793 /* store Params pass it to WDI */
3794 pWdaParams->pWdaContext = pWDA;
3795 pWdaParams->wdaMsgParam = finishScanParams;
3796 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003797 /* call DAL API to pass init scan request to DAL */
3798 status = WDI_FinishScanReq(wdiFinishScanParams,
3799 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003800
Jeff Johnson295189b2012-06-20 16:38:30 -07003801
3802 /*
3803 * WDI API returns failure..
3804 */
3805 if(IS_WDI_STATUS_FAILURE( status))
3806 {
3807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3808 "Failure in Finish Scan WDI API, free all the memory " );
3809 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3810 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003811 finishScanParams->status = eSIR_FAILURE ;
3812 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
3813 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003814 return CONVERT_WDI2VOS_STATUS(status) ;
3815}
Jeff Johnson295189b2012-06-20 16:38:30 -07003816/*---------------------------------------------------------------------
3817 * ASSOC API's
3818 *---------------------------------------------------------------------
3819 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003820/*
Sachin Ahuja935eda782014-07-30 14:57:41 +05303821 * FUNCTION: WDA_JoinRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07003822 * Trigger Init SCAN callback
3823 */
Sachin Ahuja935eda782014-07-30 14:57:41 +05303824void WDA_JoinRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07003825{
3826 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3827 tWDA_CbContext *pWDA;
3828 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003830 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003831 if(NULL == pWdaParams)
3832 {
3833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003834 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003835 VOS_ASSERT(0) ;
3836 return ;
3837 }
3838 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3839 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003840 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3841 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003842 /* reset macBSSID */
3843 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07003844 /* reset macSTASelf */
3845 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003846 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003847 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003848 return ;
3849}
Sachin Ahuja935eda782014-07-30 14:57:41 +05303850
3851/*
3852 * FUNCTION: WDA_JoinReqCallback
3853 * Free memory and send SWITCH CHANNEL RSP back to PE.
3854 * Invoked when Enter JOIN REQ failed in WDI and no RSP callback is generated.
3855 */
3856void WDA_JoinReqCallback(WDI_Status wdiStatus, void* pUserData)
3857{
3858 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3859 tWDA_CbContext *pWDA;
3860 tSwitchChannelParams *joinReqParam;
3861
3862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3863 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
3864
3865 if(NULL == pWdaParams)
3866 {
3867 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3868 "%s: pWdaParams received NULL", __func__);
3869 VOS_ASSERT(0);
3870 return;
3871 }
3872
3873 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3874 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3875 joinReqParam->status = wdiStatus;
3876
3877 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3878 {
3879 /* reset macBSSID */
3880 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
3881 /* reset macSTASelf */
3882 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
3883
3884 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3885 vos_mem_free(pWdaParams);
3886 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
3887 }
3888
3889 return;
3890}
3891
Jeff Johnson295189b2012-06-20 16:38:30 -07003892/*
3893 * FUNCTION: WDA_ProcessJoinReq
3894 * Trigger Join REQ in WDI
3895 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003896VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
3897 tSwitchChannelParams* joinReqParam)
3898{
3899 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003900 WDI_JoinReqParamsType *wdiJoinReqParam =
3901 (WDI_JoinReqParamsType *)vos_mem_malloc(
3902 sizeof(WDI_JoinReqParamsType)) ;
3903 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003905 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003906 if(NULL == wdiJoinReqParam)
3907 {
3908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003909 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003910 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003911 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003912 return VOS_STATUS_E_NOMEM;
3913 }
3914 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3915 if(NULL == pWdaParams)
3916 {
3917 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003918 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003919 VOS_ASSERT(0);
3920 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003921 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003922 return VOS_STATUS_E_NOMEM;
3923 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003924
3925 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
3926 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
3927 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
3928 {
3929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3930 "%s: received join request when BSSID or self-STA is NULL "
3931 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003932 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003933 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
3934 VOS_ASSERT(0);
3935 vos_mem_free(wdiJoinReqParam);
3936 vos_mem_free(pWdaParams);
3937 joinReqParam->status = eSIR_FAILURE ;
3938 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3939 return VOS_STATUS_E_INVAL;
3940 }
3941
Jeff Johnson295189b2012-06-20 16:38:30 -07003942 /* copy the BSSID for pWDA */
3943 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
3944 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003945 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
3946 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003947 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
3948 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07003949#ifdef WLAN_FEATURE_VOWIFI
3950 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
3951 joinReqParam->maxTxPower ;
3952#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003953 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
3954 joinReqParam->localPowerConstraint ;
3955#endif
3956 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
3957 joinReqParam->secondaryChannelOffset ;
3958 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
3959
Sachin Ahuja935eda782014-07-30 14:57:41 +05303960 wdiJoinReqParam->wdiReqStatusCB = WDA_JoinReqCallback;
3961 wdiJoinReqParam->pUserData = pWdaParams;
3962
Jeff Johnson295189b2012-06-20 16:38:30 -07003963 /* Store Init Req pointer, as this will be used for response */
3964 /* store Params pass it to WDI */
3965 pWdaParams->pWdaContext = pWDA;
3966 pWdaParams->wdaMsgParam = joinReqParam;
3967 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003968 status = WDI_JoinReq(wdiJoinReqParam,
Sachin Ahuja935eda782014-07-30 14:57:41 +05303969 (WDI_JoinRspCb )WDA_JoinRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003970 if(IS_WDI_STATUS_FAILURE(status))
3971 {
3972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3973 "Failure in Join WDI API, free all the memory " );
3974 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3975 vos_mem_free(pWdaParams) ;
3976 joinReqParam->status = eSIR_FAILURE ;
3977 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3978 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003979 return CONVERT_WDI2VOS_STATUS(status) ;
3980}
Jeff Johnson295189b2012-06-20 16:38:30 -07003981/*
3982 * FUNCTION: WDA_SwitchChannelReqCallback
3983 * send Switch channel RSP back to PE
3984 */
3985void WDA_SwitchChannelReqCallback(
3986 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
3987{
3988 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3989 tWDA_CbContext *pWDA;
3990 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003992 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003993 if(NULL == pWdaParams)
3994 {
3995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003996 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003997 VOS_ASSERT(0) ;
3998 return ;
3999 }
4000 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4001 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
4002
4003#ifdef WLAN_FEATURE_VOWIFI
4004 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
4005#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004006 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4007 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004008 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004009 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004010 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004011 return ;
4012}
Jeff Johnson295189b2012-06-20 16:38:30 -07004013/*
4014 * FUNCTION: WDA_ProcessChannelSwitchReq
4015 * Request to WDI to switch channel REQ params.
4016 */
4017VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
4018 tSwitchChannelParams *pSwitchChanParams)
4019{
4020 WDI_Status status = WDI_STATUS_SUCCESS ;
4021 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
4022 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
4023 sizeof(WDI_SwitchChReqParamsType)) ;
4024 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004026 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004027 if(NULL == wdiSwitchChanParam)
4028 {
4029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004030 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004031 VOS_ASSERT(0);
4032 return VOS_STATUS_E_NOMEM;
4033 }
4034 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4035 if(NULL == pWdaParams)
4036 {
4037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004038 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004039 VOS_ASSERT(0);
4040 vos_mem_free(wdiSwitchChanParam);
4041 return VOS_STATUS_E_NOMEM;
4042 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004043 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
4044#ifndef WLAN_FEATURE_VOWIFI
4045 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
4046 pSwitchChanParams->localPowerConstraint;
4047#endif
4048 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
4049 pSwitchChanParams->secondaryChannelOffset;
4050 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004051 /* Store req pointer, as this will be used for response */
4052 /* store Params pass it to WDI */
4053 pWdaParams->pWdaContext = pWDA;
4054 pWdaParams->wdaMsgParam = pSwitchChanParams;
4055 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004056#ifdef WLAN_FEATURE_VOWIFI
4057 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
4058 = pSwitchChanParams->maxTxPower;
4059 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
4060 pSwitchChanParams ->selfStaMacAddr,
4061 sizeof(tSirMacAddr));
4062#endif
4063 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
4064 pSwitchChanParams->bssId,
4065 sizeof(tSirMacAddr));
4066
4067 status = WDI_SwitchChReq(wdiSwitchChanParam,
4068 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004069 if(IS_WDI_STATUS_FAILURE(status))
4070 {
4071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4072 "Failure in process channel switch Req WDI API, free all the memory " );
4073 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4074 vos_mem_free(pWdaParams) ;
4075 pSwitchChanParams->status = eSIR_FAILURE ;
4076 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
4077 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004078 return CONVERT_WDI2VOS_STATUS(status) ;
4079}
Kalikinkar dhara1e83b772014-02-06 12:59:22 -08004080
4081/*
4082 * FUNCTION: WDA_SwitchChannelReqCallback_V1
4083 * send Switch channel RSP back to PE
4084 */
4085void WDA_SwitchChannelReqCallback_V1(
4086 WDI_SwitchChRspParamsType_V1 *wdiSwitchChanRsp,
4087 void* pUserData)
4088{
4089 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
4090 tWDA_CbContext *pWDA;
4091 tSwitchChannelParams *pSwitchChanParams;
4092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4093 "<------ %s " ,__func__);
4094
4095 if (NULL == pWdaParams)
4096 {
4097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4098 "%s: pWdaParams received NULL", __func__);
4099 VOS_ASSERT(0);
4100 return ;
4101 }
4102 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4103 pSwitchChanParams =
4104 (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
4105 pSwitchChanParams->channelSwitchSrc =
4106 wdiSwitchChanRsp->channelSwitchSrc;
4107#ifdef WLAN_FEATURE_VOWIFI
4108 pSwitchChanParams->txMgmtPower =
4109 wdiSwitchChanRsp->ucTxMgmtPower;
4110#endif
4111 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4112 vos_mem_free(pWdaParams);
4113 pSwitchChanParams->status =
4114 wdiSwitchChanRsp->wdiStatus ;
4115 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
4116 (void *)pSwitchChanParams , 0);
4117 return;
4118}
4119
4120/*
4121 * FUNCTION: WDA_ProcessChannelSwitchReq_V1
4122 * Request to WDI to switch channel REQ params.
4123 */
4124VOS_STATUS WDA_ProcessChannelSwitchReq_V1(tWDA_CbContext *pWDA,
4125 tSwitchChannelParams *pSwitchChanParams)
4126{
4127 WDI_Status status = WDI_STATUS_SUCCESS ;
4128 WDI_SwitchChReqParamsType_V1 *wdiSwitchChanParam =
4129 (WDI_SwitchChReqParamsType_V1 *)vos_mem_malloc(
4130 sizeof(WDI_SwitchChReqParamsType_V1)) ;
4131 tWDA_ReqParams *pWdaParams ;
4132 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4133 "------> %s " ,__func__);
4134 if (NULL == wdiSwitchChanParam)
4135 {
4136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4137 "%s: VOS MEM Alloc Failure", __func__);
4138 VOS_ASSERT(0);
4139 return VOS_STATUS_E_NOMEM;
4140 }
4141 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4142 if (NULL == pWdaParams)
4143 {
4144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4145 "%s: VOS MEM Alloc Failure", __func__);
4146 VOS_ASSERT(0);
4147 vos_mem_free(wdiSwitchChanParam);
4148 return VOS_STATUS_E_NOMEM;
4149 }
4150 wdiSwitchChanParam->wdiChInfo.channelSwitchSrc =
4151 pSwitchChanParams->channelSwitchSrc;
4152
4153 wdiSwitchChanParam->wdiChInfo.ucChannel =
4154 pSwitchChanParams->channelNumber;
4155#ifndef WLAN_FEATURE_VOWIFI
4156 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
4157 pSwitchChanParams->localPowerConstraint;
4158#endif
4159 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
4160 pSwitchChanParams->secondaryChannelOffset;
4161 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
4162 /* Store req pointer, as this will be used for response */
4163 /* store Params pass it to WDI */
4164 pWdaParams->pWdaContext = pWDA;
4165 pWdaParams->wdaMsgParam = pSwitchChanParams;
4166 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
4167#ifdef WLAN_FEATURE_VOWIFI
4168 wdiSwitchChanParam->wdiChInfo.cMaxTxPower =
4169 pSwitchChanParams->maxTxPower;
4170 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
4171 pSwitchChanParams ->selfStaMacAddr,
4172 sizeof(tSirMacAddr));
4173#endif
4174 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
4175 pSwitchChanParams->bssId,
4176 sizeof(tSirMacAddr));
4177
4178 status = WDI_SwitchChReq_V1(wdiSwitchChanParam,
4179 (WDI_SwitchChRspCb_V1)WDA_SwitchChannelReqCallback_V1,
4180 pWdaParams);
4181 if (IS_WDI_STATUS_FAILURE(status))
4182 {
4183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4184 "Failure in process channel switch Req WDI "
4185 "API, free all the memory " );
4186 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4187 vos_mem_free(pWdaParams) ;
4188 pSwitchChanParams->status = eSIR_FAILURE ;
4189 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
4190 (void *)pSwitchChanParams, 0) ;
4191 }
4192 return CONVERT_WDI2VOS_STATUS(status) ;
4193}
4194
Jeff Johnson295189b2012-06-20 16:38:30 -07004195/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304196 * FUNCTION: WDA_ConfigBssRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004197 * config BSS Req Callback, called by WDI
4198 */
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304199void WDA_ConfigBssRspCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
Jeff Johnson295189b2012-06-20 16:38:30 -07004200 ,void* pUserData)
4201{
4202 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4203 tWDA_CbContext *pWDA;
4204 tAddBssParams *configBssReqParam;
4205 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004206 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004207 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004208 if(NULL == pWdaParams)
4209 {
4210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004211 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004212 VOS_ASSERT(0) ;
4213 return ;
4214 }
4215 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4216 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
4217 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004218 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004219 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004220 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
4221 {
4222 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
4223 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07004224 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
4225 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
4226 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
4227
4228 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
4229 {
4230 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
4231 {
4232 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
4233 staConfigBssParam->staType = STA_ENTRY_BSSID;
4234 }
4235 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
4236 (staConfigBssParam->staType == STA_ENTRY_SELF))
4237 {
4238 /* This is the 1st add BSS Req for the BTAMP STA */
4239 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
4240 staConfigBssParam->staType = STA_ENTRY_BSSID;
4241 }
4242 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
4243 (staConfigBssParam->staType == STA_ENTRY_PEER))
4244 {
4245 /* This is the 2nd ADD BSS Request that is sent
4246 * on the BTAMP STA side. The Sta type is
4247 * set to STA_ENTRY_PEER here.*/
4248 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
4249 }
4250 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
4251 (staConfigBssParam->staType == STA_ENTRY_SELF))
4252 {
4253 /* statype is already set by PE.
4254 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
4255 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
4256 staConfigBssParam->staType = STA_ENTRY_BSSID;
4257 }
4258 else
4259 {
4260 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
4261 staConfigBssParam->staType = STA_ENTRY_PEER;
4262 }
4263 }
4264 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
4265 {
4266 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
4267 staConfigBssParam->staType = STA_ENTRY_SELF;
4268 }
4269 else
4270 {
4271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4272 "Invalid operation mode specified");
4273 VOS_ASSERT(0);
4274 }
4275
4276 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004277 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004278 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07004279 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07004280 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
4281 sizeof(tSirMacAddr));
4282 staConfigBssParam->txChannelWidthSet =
4283 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07004284 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
4285 staConfigBssParam->htCapable)
4286 {
4287 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
4288 wdiConfigBssRsp->ucBSSIdx;
4289 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
4290 WDA_VALID_STA_INDEX ;
Abhishek Singh0644e482014-10-06 18:38:23 +05304291 pWDA->wdaStaInfo[staConfigBssParam->staIdx].currentOperChan =
4292 configBssReqParam->currentOperChannel;
Jeff Johnson295189b2012-06-20 16:38:30 -07004293 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004294 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
4295 wdiConfigBssRsp->ucBSSIdx,
4296 wdiConfigBssRsp->ucSTAIdx))
4297 {
4298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004299 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004300 VOS_ASSERT(0) ;
4301 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004302 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
4303 {
4304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004305 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004306 VOS_ASSERT(0) ;
4307 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004308#ifdef WLAN_FEATURE_VOWIFI
4309 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
4310#endif
4311 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304312 else
4313 {
4314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4315 "%s: Failure with status %d", __func__,
4316 wdiConfigBssRsp->wdiStatus);
4317 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4318 WLAN_LOG_INDICATOR_HOST_DRIVER,
4319 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4320 FALSE, TRUE);
4321 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05304322 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
4323 sizeof(WDI_ConfigBSSReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004324 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4325 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004326 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004327 return ;
4328}
Jeff Johnson295189b2012-06-20 16:38:30 -07004329/*
4330 * FUNCTION: WDA_UpdateEdcaParamsForAC
4331 * Update WDI EDCA params with PE edca params
4332 */
4333void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
4334 WDI_EdcaParamRecord *wdiEdcaParam,
4335 tSirMacEdcaParamRecord *macEdcaParam)
4336{
4337 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
4338 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
4339 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
4340 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
4341 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
4342 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
4343}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304344void WDA_ConfigBssReqCallback(WDI_Status wdiStatus,
4345 void* pUserData)
4346{
4347 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4348 tWDA_CbContext *pWDA;
4349 tAddBssParams *addBssParams;
4350
4351 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4352 "<------ %s, wdiStatus: %d",
4353 __func__, wdiStatus);
4354
4355 if (NULL == pWdaParams)
4356 {
4357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4358 "%s: Invalid pWdaParams pointer", __func__);
4359 VOS_ASSERT(0);
4360 return;
4361 }
4362
4363 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4364 addBssParams = (tAddBssParams *)pWdaParams->wdaMsgParam;
4365
4366 addBssParams->status = wdiStatus;
4367
4368 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4369 {
4370 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4371 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304372 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4373 WLAN_LOG_INDICATOR_HOST_DRIVER,
4374 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4375 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304376 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)addBssParams , 0);
4377 }
4378
4379 return ;
4380}
4381
Jeff Johnson295189b2012-06-20 16:38:30 -07004382/*
4383 * FUNCTION: WDA_ProcessConfigBssReq
4384 * Configure BSS before starting Assoc with AP
4385 */
4386VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
4387 tAddBssParams* configBssReqParam)
4388{
4389 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05304390 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004391 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004393 "------> %s " ,__func__);
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05304394 if (NULL == configBssReqParam)
4395 {
4396 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
4397 "%s: configBssReqParam is NULL", __func__);
4398 return VOS_STATUS_E_INVAL;
4399 }
4400
4401 wdiConfigBssReqParam = (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
4402 sizeof(WDI_ConfigBSSReqParamsType)) ;
4403
Jeff Johnson295189b2012-06-20 16:38:30 -07004404 if(NULL == wdiConfigBssReqParam)
4405 {
4406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004407 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004408 VOS_ASSERT(0);
4409 return VOS_STATUS_E_NOMEM;
4410 }
4411 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4412 if(NULL == pWdaParams)
4413 {
4414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004415 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004416 VOS_ASSERT(0);
4417 vos_mem_free(wdiConfigBssReqParam);
4418 return VOS_STATUS_E_NOMEM;
4419 }
Kiran4a17ebe2013-01-31 10:43:43 -08004420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4421 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07004422 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004423 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
4424 configBssReqParam) ;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304425 wdiConfigBssReqParam->wdiReqStatusCB = WDA_ConfigBssReqCallback;
4426 wdiConfigBssReqParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004427 /* Store Init Req pointer, as this will be used for response */
4428 /* store Params pass it to WDI */
4429 pWdaParams->pWdaContext = pWDA;
4430 pWdaParams->wdaMsgParam = configBssReqParam;
4431 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004432 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304433 (WDI_ConfigBSSRspCb )WDA_ConfigBssRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004434 if(IS_WDI_STATUS_FAILURE(status))
4435 {
4436 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4437 "Failure in Config BSS WDI API, free all the memory " );
4438 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4439 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004440 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004441 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
4442 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004443 return CONVERT_WDI2VOS_STATUS(status) ;
4444}
Jeff Johnson295189b2012-06-20 16:38:30 -07004445#ifdef ENABLE_HAL_COMBINED_MESSAGES
4446/*
4447 * FUNCTION: WDA_PostAssocReqCallback
4448 * Post ASSOC req callback, send RSP back to PE
4449 */
4450void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
4451 void* pUserData)
4452{
4453 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4454 tPostAssocParams *postAssocReqParam =
4455 (tPostAssocParams *)pWDA->wdaMsgParam ;
4456 /*STA context within the BSS Params*/
4457 tAddStaParams *staPostAssocParam =
4458 &postAssocReqParam->addBssParams.staContext ;
4459 /*STA Params for self STA*/
4460 tAddStaParams *selfStaPostAssocParam =
4461 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004463 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004464 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004465 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004466 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
4467 {
4468 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
4469 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
4470 sizeof(tSirMacAddr)) ;
4471 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
4472 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
4473 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004474 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
4475 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05304476 vos_mem_zero(pWDA->wdaWdiApiMsgParam, sizeof(WDI_PostAssocReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004477 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
4478 pWDA->wdaWdiApiMsgParam = NULL;
4479 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004480 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004481 return ;
4482}
Jeff Johnson295189b2012-06-20 16:38:30 -07004483/*
4484 * FUNCTION: WDA_ProcessPostAssocReq
4485 * Trigger POST ASSOC processing in WDI
4486 */
4487VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
4488 tPostAssocParams *postAssocReqParam)
4489{
Jeff Johnson295189b2012-06-20 16:38:30 -07004490 WDI_Status status = WDI_STATUS_SUCCESS ;
4491
4492 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
4493 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
4494 sizeof(WDI_PostAssocReqParamsType)) ;
4495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004496 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004497
Jeff Johnson295189b2012-06-20 16:38:30 -07004498 if(NULL == wdiPostAssocReqParam)
4499 {
4500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004501 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004502 VOS_ASSERT(0);
4503 return VOS_STATUS_E_NOMEM;
4504 }
4505
4506 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
4507 {
4508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004509 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004510 VOS_ASSERT(0);
4511 return VOS_STATUS_E_FAILURE;
4512 }
4513
Jeff Johnson295189b2012-06-20 16:38:30 -07004514 /* update BSS params into WDI structure */
4515 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
4516 &postAssocReqParam->addBssParams) ;
4517 /* update STA params into WDI structure */
4518 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
4519 &postAssocReqParam->addStaParams) ;
4520
4521 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
4522 postAssocReqParam->addBssParams.highPerformance;
4523 WDA_UpdateEdcaParamsForAC(pWDA,
4524 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
4525 &postAssocReqParam->addBssParams.acbe);
4526 WDA_UpdateEdcaParamsForAC(pWDA,
4527 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
4528 &postAssocReqParam->addBssParams.acbk);
4529 WDA_UpdateEdcaParamsForAC(pWDA,
4530 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
4531 &postAssocReqParam->addBssParams.acvi);
4532 WDA_UpdateEdcaParamsForAC(pWDA,
4533 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
4534 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07004535 /* Store Init Req pointer, as this will be used for response */
4536 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004537 /* store Params pass it to WDI */
4538 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004539 status = WDI_PostAssocReq(wdiPostAssocReqParam,
4540 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004541 if(IS_WDI_STATUS_FAILURE(status))
4542 {
4543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4544 "Failure in Post Assoc WDI API, free all the memory " );
4545 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
4546 pWDA->wdaWdiApiMsgParam = NULL;
4547 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004548 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004549 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
4550 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004551 return CONVERT_WDI2VOS_STATUS(status) ;
4552}
4553#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004554/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304555 * FUNCTION: WDA_AddStaRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004556 * ADD STA req callback, send RSP back to PE
4557 */
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304558void WDA_AddStaRspCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -07004559 void* pUserData)
4560{
4561 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4562 tWDA_CbContext *pWDA;
4563 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004565 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004566 if(NULL == pWdaParams)
4567 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004569 VOS_ASSERT(0) ;
4570 return ;
4571 }
4572 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4573 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004574 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004575 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004576 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
4577 {
4578 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
4579 /*TODO: UMAC structure doesn't have these fields*/
4580 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
4581 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
4582 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
4583 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
4584 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
4585 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08004586#ifdef FEATURE_WLAN_TDLS
4587 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
4588 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
4589#else
Jeff Johnson295189b2012-06-20 16:38:30 -07004590 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08004591#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004592 {
4593 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
4594 wdiConfigStaRsp->ucBssIdx;
4595 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
4596 WDA_VALID_STA_INDEX ;
Abhishek Singhf08a82b2014-10-07 11:00:42 +05304597 pWDA->wdaStaInfo[addStaReqParam->staIdx].currentOperChan =
4598 addStaReqParam->currentOperChan;
Jeff Johnson295189b2012-06-20 16:38:30 -07004599 }
4600 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
4601 {
4602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004603 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004604 VOS_ASSERT(0) ;
4605 return ;
4606 }
4607 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304608 else
4609 {
4610 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4611 "%s: Failure with status %d", __func__,
4612 wdiConfigStaRsp->wdiStatus);
4613 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4614 WLAN_LOG_INDICATOR_HOST_DRIVER,
4615 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4616 FALSE, TRUE);
4617 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004618 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4619 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004620 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004621 return ;
4622}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304623void WDA_AddStaReqCallback(WDI_Status wdiStatus,
4624 void* pUserData)
4625{
4626 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4627 tWDA_CbContext *pWDA;
4628 tAddStaParams *addStaParams;
4629
4630 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4631 "<------ %s, wdiStatus: %d",
4632 __func__, wdiStatus);
4633
4634 if (NULL == pWdaParams)
4635 {
4636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4637 "%s: Invalid pWdaParams pointer", __func__);
4638 VOS_ASSERT(0);
4639 return;
4640 }
4641
4642 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4643 addStaParams = (tAddStaParams *)pWdaParams->wdaMsgParam;
4644
4645 addStaParams->status = wdiStatus;
4646
4647 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4648 {
4649 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4650 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304651 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4652 WLAN_LOG_INDICATOR_HOST_DRIVER,
4653 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4654 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304655 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaParams , 0);
4656 }
4657
4658 return ;
4659}
4660
Jeff Johnson295189b2012-06-20 16:38:30 -07004661/*
4662 * FUNCTION: WDA_ConfigStaReq
4663 * Trigger Config STA processing in WDI
4664 */
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304665VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
Jeff Johnson295189b2012-06-20 16:38:30 -07004666 tAddStaParams *addStaReqParam)
4667{
Jeff Johnson295189b2012-06-20 16:38:30 -07004668 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004669 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
4670 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
4671 sizeof(WDI_ConfigSTAReqParamsType)) ;
4672 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004674 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004675 if(NULL == wdiConfigStaReqParam)
4676 {
4677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004678 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004679 VOS_ASSERT(0);
4680 return VOS_STATUS_E_NOMEM;
4681 }
4682 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4683 if(NULL == pWdaParams)
4684 {
4685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004686 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004687 VOS_ASSERT(0);
4688 vos_mem_free(wdiConfigStaReqParam);
4689 return VOS_STATUS_E_NOMEM;
4690 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004691 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004692 /* update STA params into WDI structure */
4693 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
4694 addStaReqParam) ;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304695 wdiConfigStaReqParam->wdiReqStatusCB = WDA_AddStaReqCallback;
4696 wdiConfigStaReqParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004697 /* Store Init Req pointer, as this will be used for response */
4698 /* store Params pass it to WDI */
4699 pWdaParams->pWdaContext = pWDA;
4700 pWdaParams->wdaMsgParam = addStaReqParam;
4701 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304702
Jeff Johnson295189b2012-06-20 16:38:30 -07004703 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304704 (WDI_ConfigSTARspCb )WDA_AddStaRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004705 if(IS_WDI_STATUS_FAILURE(status))
4706 {
4707 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4708 "Failure in Config STA WDI API, free all the memory " );
4709 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4710 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004711 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004712 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
4713 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004714 return CONVERT_WDI2VOS_STATUS(status) ;
4715}
Agrawal Ashisha8e8a722016-10-18 19:07:45 +05304716#ifdef SAP_AUTH_OFFLOAD
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304717
Agrawal Ashisha8e8a722016-10-18 19:07:45 +05304718/**
4719 * WDA_ProcessSapAuthOffloadAddStaReq(): process add sta command.
4720 *
4721 * @pWDA: WDA Call back context
4722 * @addStaReqParam: Add sta request params
4723 *
4724 * This function process sta params and store them to WDA layer.
4725 * It will register station entry to mempool as well.
4726 * As station is already in associated state in firmware this
4727 * function doesnt send any request to firmware and wait for response,
4728 * instead of that this function will send response from here.
4729 *
4730 * Return: Return VOS_STATUS
4731 */
4732VOS_STATUS WDA_ProcessSapAuthOffloadAddStaReq(tWDA_CbContext *pWDA,
4733 tAddStaParams *addStaReqParam)
4734{
4735 WDI_Status status = WDI_STATUS_SUCCESS ;
4736 WDI_AddStaParams wdiAddSTAParam = {0};
4737 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
4738 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
4739 sizeof(WDI_ConfigSTAReqParamsType)) ;
4740
4741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4742 "------> %s " ,__func__);
4743
4744 if (NULL == wdiConfigStaReqParam)
4745 {
4746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4747 "%s: VOS MEM Alloc Failure", __func__);
4748 VOS_ASSERT(0);
4749 return VOS_STATUS_E_NOMEM;
4750 }
4751
4752 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
4753 /* update STA params into WDI structure */
4754 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
4755 addStaReqParam);
4756 wdiAddSTAParam.ucSTAIdx = wdiConfigStaReqParam->wdiReqInfo.staIdx;
4757 wdiAddSTAParam.ucStaType = WDI_STA_ENTRY_PEER;
4758 /* MAC Address of STA */
4759 wpalMemoryCopy(wdiAddSTAParam.staMacAddr,
4760 wdiConfigStaReqParam->wdiReqInfo.macSTA,
4761 WDI_MAC_ADDR_LEN);
4762
4763 wpalMemoryCopy(wdiAddSTAParam.macBSSID,
4764 wdiConfigStaReqParam->wdiReqInfo.macBSSID,
4765 WDI_MAC_ADDR_LEN);
4766
4767 wdiAddSTAParam.dpuIndex = addStaReqParam->dpuIndex;
4768 wdiAddSTAParam.dpuSig = addStaReqParam->ucUcastSig;
4769 wdiAddSTAParam.bcastDpuIndex = addStaReqParam->bcastDpuIndex;
4770 wdiAddSTAParam.bcastDpuSignature = addStaReqParam->ucBcastSig;
4771 wdiAddSTAParam.bcastMgmtDpuIndex = addStaReqParam->bcastMgmtDpuIdx;
4772 wdiAddSTAParam.bcastMgmtDpuSignature = addStaReqParam->ucMgmtSig;
Agrawal Ashishedd0f622016-12-19 20:27:02 +05304773 wdiAddSTAParam.ucWmmEnabled = addStaReqParam->wmmEnabled;
4774 wdiAddSTAParam.ucRmfEnabled = addStaReqParam->rmfEnabled;
4775 wdiAddSTAParam.ucBSSIdx = addStaReqParam->bssIdx;
4776 wdiAddSTAParam.ucHTCapable = addStaReqParam->htCapable;
4777
Agrawal Ashisha8e8a722016-10-18 19:07:45 +05304778
4779 WDI_STATableAddSta(pWDA->pWdiContext, &wdiAddSTAParam);
4780 pWDA->wdaStaInfo[wdiConfigStaReqParam->wdiReqInfo.staIdx].ucValidStaIndex =
4781 WDA_VALID_STA_INDEX;
4782 pWDA->wdaStaInfo[wdiConfigStaReqParam->wdiReqInfo.staIdx].currentOperChan =
4783 addStaReqParam->currentOperChan;
4784
4785 if (WDI_STATUS_SUCCESS !=
4786 WDI_STATableFindStaidByAddr(pWDA->pWdiContext,
4787 wdiConfigStaReqParam->wdiReqInfo.macSTA,
4788 (wpt_uint8 *)&wdiConfigStaReqParam->wdiReqInfo.staIdx))
4789 {
4790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4791 "%s: Failed to get selfStaIdx!", __func__);
4792 }
4793 if (WDI_DS_AddSTAMemPool(pWDA->pWdiContext,
4794 wdiConfigStaReqParam->wdiReqInfo.staIdx))
4795 {
4796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4797 "%s: add STA into mempool fail", __func__);
4798 VOS_ASSERT(0) ;
4799 }
4800 vos_mem_free(wdiConfigStaReqParam);
4801 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
4802 return status;
4803}
4804#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004805/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304806 * FUNCTION: WDA_DelBSSRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004807 * Dens DEL BSS RSP back to PE
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304808 */
4809void WDA_DelBSSRspCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -07004810 void* pUserData)
4811{
4812 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4813 tWDA_CbContext *pWDA;
4814 tDeleteBssParams *delBssReqParam;
4815 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07004816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004817 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004818 if(NULL == pWdaParams)
4819 {
4820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004821 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004822 VOS_ASSERT(0) ;
4823 return ;
4824 }
4825 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4826 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004827 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004828 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
4829 {
4830 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
4831 sizeof(tSirMacAddr)) ;
4832 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304833 else
4834 {
4835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4836 "%s: Failure with status %d", __func__,
4837 wdiDelBssRsp->wdiStatus);
4838 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4839 WLAN_LOG_INDICATOR_HOST_DRIVER,
4840 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4841 FALSE, TRUE);
4842 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004843 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
4844 {
4845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004846 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004847 VOS_ASSERT(0) ;
4848 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004849 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
4850 {
4851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004852 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004853 VOS_ASSERT(0) ;
4854 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004855 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
4856 {
4857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004858 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004859 VOS_ASSERT(0) ;
4860 }
Mihir Shete2ab1d492014-06-04 14:21:05 +05304861
4862 WLANTL_StartForwarding(staIdx,0,0);
4863
Jeff Johnson295189b2012-06-20 16:38:30 -07004864 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4865 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004866 /* reset the the system role*/
4867 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
4868
4869 /* Reset the BA related information */
4870 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
4871 {
4872 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
4873 {
4874 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
4875 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05304876 pWDA->wdaStaInfo[staIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004877 /* Reset framesTxed counters here */
4878 for(tid = 0; tid < STACFG_MAX_TC; tid++)
4879 {
4880 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
4881 }
4882 }
4883 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304884
Jeff Johnson295189b2012-06-20 16:38:30 -07004885 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004886 return ;
4887}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304888void WDA_DelBSSReqCallback(WDI_Status wdiStatus,
4889 void* pUserData)
4890{
4891 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4892 tWDA_CbContext *pWDA;
4893 tDeleteBssParams *delbssParams;
4894
4895 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4896 "<------ %s, wdiStatus: %d",
4897 __func__, wdiStatus);
4898
4899 if (NULL == pWdaParams)
4900 {
4901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4902 "%s: Invalid pWdaParams pointer", __func__);
4903 VOS_ASSERT(0);
4904 return;
4905 }
4906
4907 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4908 delbssParams = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
4909
4910 delbssParams->status = wdiStatus ;
4911
4912 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4913 {
4914 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4915 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304916 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4917 WLAN_LOG_INDICATOR_HOST_DRIVER,
4918 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4919 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304920 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delbssParams , 0) ;
4921 }
4922
4923 return ;
4924}
Jeff Johnson295189b2012-06-20 16:38:30 -07004925
Jeff Johnson295189b2012-06-20 16:38:30 -07004926/*
4927 * FUNCTION: WDA_ProcessDelBssReq
4928 * Init DEL BSS req with WDI
4929 */
4930VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
4931 tDeleteBssParams *delBssParam)
4932{
4933 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004934 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
4935 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
4936 sizeof(WDI_DelBSSReqParamsType)) ;
4937 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004939 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004940 if(NULL == wdiDelBssReqParam)
4941 {
4942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304943 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004944 VOS_ASSERT(0);
4945 return VOS_STATUS_E_NOMEM;
4946 }
4947 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4948 if(NULL == pWdaParams)
4949 {
4950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004951 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004952 VOS_ASSERT(0);
4953 vos_mem_free(wdiDelBssReqParam);
4954 return VOS_STATUS_E_NOMEM;
4955 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004956 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304957 wdiDelBssReqParam->wdiReqStatusCB = WDA_DelBSSReqCallback ;
4958 wdiDelBssReqParam->pUserData = pWdaParams;
4959
Jeff Johnson295189b2012-06-20 16:38:30 -07004960 /* Store Init Req pointer, as this will be used for response */
4961 /* store Params pass it to WDI */
4962 pWdaParams->pWdaContext = pWDA;
4963 pWdaParams->wdaMsgParam = delBssParam;
4964 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304965
Jeff Johnson295189b2012-06-20 16:38:30 -07004966 status = WDI_DelBSSReq(wdiDelBssReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304967 (WDI_DelBSSRspCb )WDA_DelBSSRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004968 if(IS_WDI_STATUS_FAILURE(status))
4969 {
4970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4971 "Failure in Del BSS WDI API, free all the memory " );
4972 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4973 vos_mem_free(pWdaParams) ;
4974 delBssParam->status = eSIR_FAILURE ;
4975 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
4976 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004977 return CONVERT_WDI2VOS_STATUS(status) ;
4978}
Jeff Johnson295189b2012-06-20 16:38:30 -07004979/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304980 * FUNCTION: WDA_DelSTARspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004981 * Dens DEL STA RSP back to PE
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304982 */
4983void WDA_DelSTARspCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -07004984 void* pUserData)
4985{
4986 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4987 tWDA_CbContext *pWDA;
4988 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004990 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004991 if(NULL == pWdaParams)
4992 {
4993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004994 "%s: pWdaParams received NULL", __func__);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304995 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004996 return ;
4997 }
4998 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4999 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005000 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005001 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
5002 {
5003 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
5004 {
5005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005006 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005007 VOS_ASSERT(0) ;
5008 }
5009 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
Mihir Shete2ab1d492014-06-04 14:21:05 +05305010 WLANTL_StartForwarding(delStaReqParam->staIdx,0,0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005011 }
Abhishek Singh837adf22015-10-01 17:37:37 +05305012 else
5013 {
5014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5015 "%s: Failure with status %d", __func__,
5016 wdiDelStaRsp->wdiStatus);
5017 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
5018 WLAN_LOG_INDICATOR_HOST_DRIVER,
5019 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
5020 FALSE, TRUE);
5021 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005022 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5023 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005024 /*Reset the BA information corresponding to this STAIdx */
5025 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
5026 WDA_INVALID_STA_INDEX;
5027 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05305028 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005029 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005030 return ;
5031}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05305032void WDA_DelSTAReqCallback(WDI_Status wdiStatus,
5033 void* pUserData)
5034{
5035 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5036 tWDA_CbContext *pWDA;
5037 tDeleteStaParams *delStaParams;
5038
5039 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5040 "<------ %s, wdiStatus: %d",
5041 __func__, wdiStatus);
5042
5043 if (NULL == pWdaParams)
5044 {
5045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5046 "%s: Invalid pWdaParams pointer", __func__);
5047 VOS_ASSERT(0);
5048 return;
5049 }
5050
5051 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5052 delStaParams = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
5053
5054 delStaParams->status = wdiStatus ;
5055
5056 if (IS_WDI_STATUS_FAILURE(wdiStatus))
5057 {
5058 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5059 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05305060 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
5061 WLAN_LOG_INDICATOR_HOST_DRIVER,
5062 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
5063 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05305064 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParams , 0) ;
5065 }
5066
5067 return ;
5068}
5069
Agrawal Ashisha8e8a722016-10-18 19:07:45 +05305070#ifdef SAP_AUTH_OFFLOAD
5071/**
5072 * WDA_ProcessSapAuthOffloadDelStaReq(): process del sta command.
5073 *
5074 * @pWDA: WDA Call back context
5075 * @delStaParam: Del sta request params
5076 *
5077 * This function process sta params and remove entry from WDA layer.
5078 * It will unregister station entry from mempool as well.
5079 * As station is already in disassociated state in firmware this
5080 * function doesn't send any request to firmware and wait for response,
5081 * instead of that this function will send response from here.
5082 *
5083 * Return: Return VOS_STATUS
5084 */
5085void WDA_ProcessSapAuthOffloadDelStaReq(tWDA_CbContext *pWDA,
5086 tDeleteStaParams *delStaParam)
5087
5088{
5089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5090 "------> %s " ,__func__);
5091
5092 if (WDI_DS_DelSTAMemPool(pWDA->pWdiContext, delStaParam->staIdx))
5093 {
5094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5095 "%s: DEL STA from MemPool Fail", __func__);
5096 // VOS_ASSERT(0) ;
5097 }
Agrawal Ashishbc69baa2016-12-16 13:39:34 +05305098 WLANTL_StartForwarding(delStaParam->staIdx, 0, 0);
Agrawal Ashisha8e8a722016-10-18 19:07:45 +05305099 WDI_STATableDelSta(pWDA->pWdiContext, delStaParam->staIdx);
5100 pWDA->wdaStaInfo[delStaParam->staIdx].ucValidStaIndex =
5101 WDA_INVALID_STA_INDEX;
5102 pWDA->wdaStaInfo[delStaParam->staIdx].currentOperChan = 0;
Agrawal Ashishbc69baa2016-12-16 13:39:34 +05305103 pWDA->wdaStaInfo[delStaParam->staIdx].ucUseBaBitmap = 0;
Agrawal Ashisha8e8a722016-10-18 19:07:45 +05305104 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0);
5105 return ;
5106}
5107#endif
5108
Jeff Johnson295189b2012-06-20 16:38:30 -07005109/*
5110 * FUNCTION: WDA_ProcessDelStaReq
5111 * Init DEL STA req with WDI
5112 */
5113VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
5114 tDeleteStaParams *delStaParam)
5115{
5116 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005117 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
5118 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
5119 sizeof(WDI_DelSTAReqParamsType)) ;
5120 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005122 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005123 if(NULL == wdiDelStaReqParam)
5124 {
5125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005126 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005127 VOS_ASSERT(0);
5128 return VOS_STATUS_E_NOMEM;
5129 }
5130 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5131 if(NULL == pWdaParams)
5132 {
5133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005134 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005135 VOS_ASSERT(0);
5136 vos_mem_free(wdiDelStaReqParam);
5137 return VOS_STATUS_E_NOMEM;
5138 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005139 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05305140 wdiDelStaReqParam->wdiReqStatusCB = WDA_DelSTAReqCallback ;
5141 wdiDelStaReqParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005142 /* Store Init Req pointer, as this will be used for response */
5143 /* store Params pass it to WDI */
5144 pWdaParams->pWdaContext = pWDA;
5145 pWdaParams->wdaMsgParam = delStaParam;
5146 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05305147
Jeff Johnson295189b2012-06-20 16:38:30 -07005148 status = WDI_DelSTAReq(wdiDelStaReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05305149 (WDI_DelSTARspCb )WDA_DelSTARspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005150 if(IS_WDI_STATUS_FAILURE(status))
5151 {
5152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5153 "Failure in Del STA WDI API, free all the memory status = %d",
5154 status );
5155 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5156 vos_mem_free(pWdaParams) ;
5157 delStaParam->status = eSIR_FAILURE ;
5158 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
5159 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005160 return CONVERT_WDI2VOS_STATUS(status) ;
5161}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05305162void WDA_ProcessAddStaSelfRspCallback(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07005163{
5164 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5165 tWDA_CbContext *pWDA;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05305166 tAddStaSelfParams *pAddStaSelfRsp = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07005167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005168 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005169 if(NULL == pWdaParams)
5170 {
5171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005172 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005173 VOS_ASSERT(0) ;
5174 return ;
5175 }
5176 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5177 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005178 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5179 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005180 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
5181 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
5182 pwdiAddSTASelfRsp->macSelfSta,
5183 sizeof(pAddStaSelfRsp->selfMacAddr));
Siddharth Bhal85f99b12014-05-09 08:09:07 +05305184 pWDA->wdaAddSelfStaParams.ucSTASelfIdx = pwdiAddSTASelfRsp->ucSTASelfIdx;
5185 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaRspCounter++;
5186 if (pAddStaSelfRsp->status == eSIR_FAILURE)
5187 {
5188 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_RSP_WDI_FAIL;
5189 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Abhishek Singh837adf22015-10-01 17:37:37 +05305190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5191 "%s: Failure with status %d failcnter %d", __func__,
5192 pwdiAddSTASelfRsp->wdiStatus,
5193 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter);
5194 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
5195 WLAN_LOG_INDICATOR_HOST_DRIVER,
5196 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
5197 FALSE, TRUE);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05305198 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005199 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005200 return ;
5201}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05305202void WDA_ProcessAddStaSelfReqCallback(WDI_Status wdiStatus,
5203 void* pUserData)
5204{
5205 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5206 tWDA_CbContext *pWDA;
5207 tAddStaSelfParams *addStaSelfParams;
5208
5209 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5210 "<------ %s, wdiStatus: %d",
5211 __func__, wdiStatus);
5212
5213 if (NULL == pWdaParams)
5214 {
5215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5216 "%s: Invalid pWdaParams pointer", __func__);
5217 VOS_ASSERT(0);
5218 return;
5219 }
5220
5221 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5222 addStaSelfParams = (tAddStaSelfParams *)pWdaParams->wdaMsgParam;
5223
5224 addStaSelfParams->status = wdiStatus ;
5225
5226 if (IS_WDI_STATUS_FAILURE(wdiStatus))
5227 {
5228 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5229 vos_mem_free(pWdaParams) ;
5230 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason
5231 = WDA_ADDSTA_REQ_WDI_FAIL;
5232 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Abhishek Singh837adf22015-10-01 17:37:37 +05305233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5234 "%s: Failure with status %d failcnter %d", __func__,
5235 wdiStatus,
5236 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter);
5237 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
5238 WLAN_LOG_INDICATOR_HOST_DRIVER,
5239 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
5240 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05305241 WDA_SendMsg(pWDA, WDA_ADD_STA_SELF_RSP, (void *)addStaSelfParams , 0);
5242 }
5243
5244 return ;
5245}
Siddharth Bhal85f99b12014-05-09 08:09:07 +05305246
Jeff Johnson295189b2012-06-20 16:38:30 -07005247/*
5248 * FUNCTION: WDA_ProcessAddStaSelfReq
5249 *
5250 */
5251VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
5252{
5253 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07005254 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005255 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
5256 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
5257 sizeof(WDI_AddSTASelfReqParamsType)) ;
5258 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005260 "------> %s " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05305261 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaReqCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07005262 if( NULL == wdiAddStaSelfReq )
5263 {
5264 VOS_ASSERT( 0 );
5265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005266 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05305267 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
5268 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07005269 return( VOS_STATUS_E_NOMEM );
5270 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005271 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005272 if( NULL == pWdaParams )
5273 {
5274 VOS_ASSERT( 0 );
5275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005276 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05305277 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
5278 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07005279 vos_mem_free(wdiAddStaSelfReq) ;
5280 return( VOS_STATUS_E_NOMEM );
5281 }
Abhishek Singhf1221ab2015-08-04 16:38:39 +05305282 wdiAddStaSelfReq->wdiReqStatusCB = WDA_ProcessAddStaSelfReqCallback;
5283 wdiAddStaSelfReq->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005284 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
Kiran Kumar Lokere0ad5cd32013-06-25 11:26:22 -07005285 wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07005286 /* Store Init Req pointer, as this will be used for response */
5287 /* store Params pass it to WDI */
5288 pWdaParams->pWdaContext = pWDA;
5289 pWdaParams->wdaMsgParam = pAddStaSelfReq;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05305290 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
5291
5292 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq,
5293 WDA_ProcessAddStaSelfRspCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005294
Jeff Johnson43971f52012-07-17 12:26:56 -07005295 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07005296 {
5297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5298 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07005299 wstatus );
5300 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07005301 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5302 vos_mem_free(pWdaParams) ;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05305303 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_WDI_FAIL;
5304 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07005305 pAddStaSelfReq->status = eSIR_FAILURE ;
5306 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
5307 }
Jeff Johnson43971f52012-07-17 12:26:56 -07005308 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07005309}
Jeff Johnson295189b2012-06-20 16:38:30 -07005310/*
5311 * FUNCTION: WDA_DelSTASelfRespCallback
5312 *
5313 */
5314void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
5315 wdiDelStaSelfRspParams , void* pUserData)
5316{
5317 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5318 tWDA_CbContext *pWDA;
5319 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005321 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005322 if (NULL == pWdaParams)
5323 {
5324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005325 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005326 VOS_ASSERT(0);
5327 return;
5328 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005329 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5330 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005331 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005332 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005333
5334 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5335 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05305336 if (WDI_STATUS_SUCCESS != delStaSelfParams->status)
Abhishek Singh1c6ee5d2015-12-14 12:31:42 +05305337 {
Abhishek Singh837adf22015-10-01 17:37:37 +05305338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5339 "%s: Failure with status %d", __func__,
5340 wdiDelStaSelfRspParams->wdiStatus);
5341 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
5342 WLAN_LOG_INDICATOR_HOST_DRIVER,
5343 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
5344 FALSE, TRUE);
Abhishek Singh1c6ee5d2015-12-14 12:31:42 +05305345 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005346 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005347 return ;
5348}
Jeff Johnson295189b2012-06-20 16:38:30 -07005349/*
5350 * FUNCTION: WDA_DelSTASelfReqCallback
5351 *
5352 */
5353void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
5354 void* pUserData)
5355{
5356 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5357 tWDA_CbContext *pWDA;
5358 tDelStaSelfParams *delStaSelfParams;
5359
5360 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05305361 "<------ %s, wdiStatus: %d pWdaParams: %p",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005362 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005363
5364 if (NULL == pWdaParams)
5365 {
5366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005367 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005368 VOS_ASSERT(0);
5369 return;
5370 }
5371
5372 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5373 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
5374
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005375 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005376
5377 if(IS_WDI_STATUS_FAILURE(wdiStatus))
5378 {
5379 VOS_ASSERT(0);
5380 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5381 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05305382 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
5383 WLAN_LOG_INDICATOR_HOST_DRIVER,
5384 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
5385 FALSE, TRUE);
Jeff Johnson295189b2012-06-20 16:38:30 -07005386 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
5387 }
5388
5389 return ;
5390}
5391
5392/*
5393 * FUNCTION: WDA_DelSTASelfReq
5394 * Trigger Config STA processing in WDI
5395 */
5396VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
5397 tDelStaSelfParams* pDelStaSelfReqParam)
5398{
5399 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07005400 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005401 tWDA_ReqParams *pWdaParams = NULL;
5402 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
5403 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
5404 sizeof(WDI_DelSTASelfReqParamsType)) ;
5405
Jeff Johnson295189b2012-06-20 16:38:30 -07005406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005407 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005408 if( NULL == wdiDelStaSelfReq )
5409 {
5410 VOS_ASSERT( 0 );
5411 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005412 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005413 return( VOS_STATUS_E_NOMEM );
5414 }
5415
5416 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5417 if( NULL == pWdaParams )
5418 {
5419 VOS_ASSERT( 0 );
5420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005421 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005422 vos_mem_free(wdiDelStaSelfReq) ;
5423 return( VOS_STATUS_E_NOMEM );
5424 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005425 pWdaParams->pWdaContext = pWDA;
5426 /* Store param pointer as passed in by caller */
5427 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
5428 /* store Params pass it to WDI */
5429 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07005430 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
5431 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
5432
5433 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
5434 wdiDelStaSelfReq->pUserData = pWdaParams;
5435
Jeff Johnson43971f52012-07-17 12:26:56 -07005436 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07005437 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
5438
Jeff Johnson43971f52012-07-17 12:26:56 -07005439 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07005440 {
5441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
5442 "Failure in Del Sta Self REQ WDI API, free all the memory " );
5443 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07005444 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07005445 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5446 vos_mem_free(pWdaParams) ;
5447 pDelStaSelfReqParam->status = eSIR_FAILURE ;
5448 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
5449 }
Jeff Johnson43971f52012-07-17 12:26:56 -07005450 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07005451}
5452
Jeff Johnson295189b2012-06-20 16:38:30 -07005453/*
5454 * FUNCTION: WDA_SendMsg
5455 * Send Message back to PE
5456 */
5457void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
5458 void *pBodyptr, tANI_U32 bodyVal)
5459{
5460 tSirMsgQ msg = {0} ;
5461 tANI_U32 status = VOS_STATUS_SUCCESS ;
5462 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07005463 msg.type = msgType;
5464 msg.bodyval = bodyVal;
5465 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07005466 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07005467 if (VOS_STATUS_SUCCESS != status)
5468 {
5469 if(NULL != pBodyptr)
5470 {
5471 vos_mem_free(pBodyptr);
5472 }
5473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005474 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005475 VOS_ASSERT(0) ;
5476 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005477 return ;
5478}
Jeff Johnson295189b2012-06-20 16:38:30 -07005479/*
5480 * FUNCTION: WDA_UpdateBSSParams
5481 * Translated WDA/PE BSS info into WDI BSS info..
5482 */
5483void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
5484 WDI_ConfigBSSReqInfoType *wdiBssParams,
5485 tAddBssParams *wdaBssParams)
5486{
5487 v_U8_t keyIndex = 0;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05305488 v_U8_t i = 0;
5489
Jeff Johnson295189b2012-06-20 16:38:30 -07005490 /* copy bssReq Params to WDI structure */
5491 vos_mem_copy(wdiBssParams->macBSSID,
5492 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
5493 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
5494 sizeof(tSirMacAddr)) ;
5495 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
5496 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
5497 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005498 wdiBssParams->ucShortSlotTimeSupported =
5499 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005500 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
5501 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
5502 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
5503 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
5504 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
5505
5506 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
5507 wdiBssParams->ucTXOPProtectionFullSupport =
5508 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005509 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
5510 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005511 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005512 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
5513 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
5514 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
5515 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
5516
Chet Lanctot186b5732013-03-18 10:26:30 -07005517 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
5518
Jeff Johnson295189b2012-06-20 16:38:30 -07005519 /* copy SSID into WDI structure */
5520 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
5521 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
5522 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005523 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
5524 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005525 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07005526#ifdef WLAN_FEATURE_VOWIFI
5527 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
5528#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005529 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07005530 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07005531#ifdef WLAN_FEATURE_VOWIFI_11R
5532 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07005533 if(wdiBssParams->bExtSetStaKeyParamValid)
5534 {
5535 /* copy set STA key params to WDI structure */
5536 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
5537 wdaBssParams->extSetStaKeyParam.staIdx;
5538 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
5539 wdaBssParams->extSetStaKeyParam.encType;
5540 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
5541 wdaBssParams->extSetStaKeyParam.wepType;
5542 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
5543 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005544 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
5545 {
Jeff Johnson43971f52012-07-17 12:26:56 -07005546 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005547 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
5548 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
5549 {
5550 WDA_GetWepKeysFromCfg( pWDA,
5551 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
5552 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
5553 wdiBssParams->wdiExtSetKeyParam.wdiKey );
5554 }
5555 else
5556 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005557 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5558 keyIndex++)
5559 {
5560 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
5561 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
5562 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
5563 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
5564 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
5565 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05305566
5567 if(WDA_getHostWlanFeatCaps(DISA) && WDA_getFwWlanFeatCaps(DISA))
5568 {
5569 for (i = 0; i < WLAN_MAX_KEY_RSC_LEN; i ++)
5570 {
5571 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc[i] =
5572 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc[i]);
5573 }
5574
5575 for (i = 0; i < SIR_MAC_MAX_KEY_LENGTH; i++)
5576 {
5577 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key[i] =
5578 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].key[i]);
5579 }
5580 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5581 FL("%s: Negated Keys"), __func__);
5582 }
5583 else
5584 {
5585 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5586 FL("%s: No change in Keys "), __func__);
5587 vos_mem_copy(
5588 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
5589 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc,
5590 WLAN_MAX_KEY_RSC_LEN);
5591 vos_mem_copy(
5592 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
5593 wdaBssParams->extSetStaKeyParam.key[keyIndex].key,
5594 SIR_MAC_MAX_KEY_LENGTH);
5595 }
5596
Jeff Johnson295189b2012-06-20 16:38:30 -07005597 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
5598 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
5599 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
5600 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07005601 }
Srinivas Dasari9b57b112014-11-27 12:25:23 +05305602 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
Jeff Johnson295189b2012-06-20 16:38:30 -07005603 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005604 }
5605 }
5606 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
5607 }
5608 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
5609 {
5610 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
5611 sizeof(wdaBssParams->extSetStaKeyParam) );
5612 }
5613#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07005614#ifdef WLAN_FEATURE_11AC
5615 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
5616 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
5617#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005618
5619 return ;
5620}
Jeff Johnson295189b2012-06-20 16:38:30 -07005621/*
5622 * FUNCTION: WDA_UpdateSTAParams
5623 * Translated WDA/PE BSS info into WDI BSS info..
5624 */
5625void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
5626 WDI_ConfigStaReqInfoType *wdiStaParams,
5627 tAddStaParams *wdaStaParams)
5628{
5629 tANI_U8 i = 0;
5630 /* Update STA params */
5631 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
5632 sizeof(tSirMacAddr)) ;
5633 wdiStaParams->usAssocId = wdaStaParams->assocId;
5634 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07005635 wdiStaParams->staIdx = wdaStaParams->staIdx;
5636
Jeff Johnson295189b2012-06-20 16:38:30 -07005637 wdiStaParams->ucShortPreambleSupported =
5638 wdaStaParams->shortPreambleSupported;
5639 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
5640 sizeof(tSirMacAddr)) ;
5641 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
5642
5643 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
5644
5645 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
5646 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
5647 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
5648 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
5649 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
5650 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
5651 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
5652
5653 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
5654 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07005655 wdiStaParams->wdiSupportedRates.opRateMode =
5656 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07005657 for(i = 0;i < WDI_NUM_11B_RATES;i++)
5658 {
5659 wdiStaParams->wdiSupportedRates.llbRates[i] =
5660 wdaStaParams->supportedRates.llbRates[i];
5661 }
5662 for(i = 0;i < WDI_NUM_11A_RATES;i++)
5663 {
5664 wdiStaParams->wdiSupportedRates.llaRates[i] =
5665 wdaStaParams->supportedRates.llaRates[i];
5666 }
5667 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
5668 {
5669 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
5670 wdaStaParams->supportedRates.aniLegacyRates[i];
5671 }
5672 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
5673 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07005674#ifdef WLAN_FEATURE_11AC
5675 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
5676 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
5677 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
5678 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
5679#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005680 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
5681 {
5682 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
5683 wdaStaParams->supportedRates.supportedMCSSet[i];
5684 }
5685 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
5686 wdaStaParams->supportedRates.rxHighestDataRate;
5687
5688 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
5689
5690 wdiStaParams->wdiAction = wdaStaParams->updateSta;
5691
5692 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
5693 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
5694 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
5695
5696 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
5697 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
5698 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
5699 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07005700 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07005701#ifdef WLAN_FEATURE_11AC
5702 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
5703 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08005704 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Abhishek Singh6927fa02014-06-27 17:19:55 +05305705 wdiStaParams->vhtTxMUBformeeCapable = wdaStaParams->vhtTxMUBformeeCapable;
5706 /* When MU vhtTxMUBformeeCapable is set, SU ucVhtTxBFEnabled
5707 * must be set by default */
5708 if ( wdiStaParams->vhtTxMUBformeeCapable )
5709 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxMUBformeeCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07005710#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08005711 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
5712 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07005713 return ;
5714}
Jeff Johnson295189b2012-06-20 16:38:30 -07005715/*
5716 * -------------------------------------------------------------------------
5717 * CFG update to WDI
5718 * -------------------------------------------------------------------------
5719 */
5720
5721 /*
5722 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
5723 * Convert the WNI CFG ID to HAL CFG ID
5724 */
mukul sharma6b53e202016-11-23 19:29:18 +05305725static inline tANI_U16 WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07005726{
5727 switch(wniCfgId)
5728 {
5729 case WNI_CFG_STA_ID:
5730 return QWLAN_HAL_CFG_STA_ID;
5731 case WNI_CFG_CURRENT_TX_ANTENNA:
5732 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
5733 case WNI_CFG_CURRENT_RX_ANTENNA:
5734 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
5735 case WNI_CFG_LOW_GAIN_OVERRIDE:
5736 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
5737 case WNI_CFG_POWER_STATE_PER_CHAIN:
5738 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
5739 case WNI_CFG_CAL_PERIOD:
5740 return QWLAN_HAL_CFG_CAL_PERIOD;
5741 case WNI_CFG_CAL_CONTROL:
5742 return QWLAN_HAL_CFG_CAL_CONTROL;
5743 case WNI_CFG_PROXIMITY:
5744 return QWLAN_HAL_CFG_PROXIMITY;
5745 case WNI_CFG_NETWORK_DENSITY:
5746 return QWLAN_HAL_CFG_NETWORK_DENSITY;
5747 case WNI_CFG_MAX_MEDIUM_TIME:
5748 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
5749 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
5750 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
5751 case WNI_CFG_RTS_THRESHOLD:
5752 return QWLAN_HAL_CFG_RTS_THRESHOLD;
5753 case WNI_CFG_SHORT_RETRY_LIMIT:
5754 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
5755 case WNI_CFG_LONG_RETRY_LIMIT:
5756 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
5757 case WNI_CFG_FRAGMENTATION_THRESHOLD:
5758 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
5759 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
5760 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
5761 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
5762 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
5763 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
5764 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
5765 case WNI_CFG_FIXED_RATE:
5766 return QWLAN_HAL_CFG_FIXED_RATE;
5767 case WNI_CFG_RETRYRATE_POLICY:
5768 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
5769 case WNI_CFG_RETRYRATE_SECONDARY:
5770 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
5771 case WNI_CFG_RETRYRATE_TERTIARY:
5772 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
5773 case WNI_CFG_FORCE_POLICY_PROTECTION:
5774 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
5775 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
5776 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
5777 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
5778 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
5779 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
5780 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
5781 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
5782 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
5783 case WNI_CFG_MAX_BA_SESSIONS:
5784 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
5785 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
5786 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
5787 case WNI_CFG_PS_ENABLE_BCN_FILTER:
5788 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
5789 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
5790 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
5791 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
5792 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
5793 case WNI_CFG_STATS_PERIOD:
5794 return QWLAN_HAL_CFG_STATS_PERIOD;
5795 case WNI_CFG_CFP_MAX_DURATION:
5796 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
5797#if 0 /*This is not part of CFG*/
5798 case WNI_CFG_FRAME_TRANS_ENABLED:
5799 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
5800#endif
5801 case WNI_CFG_DTIM_PERIOD:
5802 return QWLAN_HAL_CFG_DTIM_PERIOD;
5803 case WNI_CFG_EDCA_WME_ACBK:
5804 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
5805 case WNI_CFG_EDCA_WME_ACBE:
5806 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
5807 case WNI_CFG_EDCA_WME_ACVI:
5808 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
5809 case WNI_CFG_EDCA_WME_ACVO:
5810 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
5811#if 0
5812 case WNI_CFG_TELE_BCN_WAKEUP_EN:
5813 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
5814 case WNI_CFG_TELE_BCN_TRANS_LI:
5815 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
5816 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
5817 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
5818 case WNI_CFG_TELE_BCN_MAX_LI:
5819 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
5820 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
5821 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
5822#endif
5823 case WNI_CFG_ENABLE_CLOSE_LOOP:
5824 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08005825 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
5826 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
AnjaneeDevi Kapparapu5cdb72a2016-10-19 15:16:09 +05305827 case WNI_CFG_ENABLE_CONC_BMISS:
5828 return QWLAN_HAL_CFG_CONS_BCNMISS_COUNT;
5829 case WNI_CFG_ENABLE_UNITS_BWAIT:
5830 return QWLAN_HAL_CFG_UNITS_OF_BCN_WAIT_TIME;
jagadeeshaf2d0ce2015-03-31 11:45:30 +05305831 case WNI_CFG_ENABLE_RTSCTS_HTVHT:
5832 return QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT;
mukul sharma6b53e202016-11-23 19:29:18 +05305833 case WNI_CFG_ENABLE_MC_ADDR_LIST:
5834 return QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
Ravi Kumar bokka7d032762016-12-12 23:33:01 +05305835 case WNI_CFG_HEART_BEAT_THRESHOLD:
5836 return QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
5837
Jeff Johnson295189b2012-06-20 16:38:30 -07005838 default:
5839 {
5840 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005841 "There is no HAL CFG Id corresponding to WNI CFG Id: %d",
Jeff Johnson295189b2012-06-20 16:38:30 -07005842 wniCfgId);
mukul sharma6b53e202016-11-23 19:29:18 +05305843 return QWLAN_HAL_CFG_MAX_PARAMS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005844 }
5845 }
5846}
Jeff Johnson295189b2012-06-20 16:38:30 -07005847/*
5848 * FUNCTION: WDA_UpdateCfgCallback
5849 *
5850 */
5851void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
5852{
5853 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
5854 WDI_UpdateCfgReqParamsType *wdiCfgParam =
5855 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005857 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005858 /*
5859 * currently there is no response message is expected between PE and
5860 * WDA, Failure return from WDI is a ASSERT condition
5861 */
5862 if(WDI_STATUS_SUCCESS != wdiStatus)
5863 {
5864 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005865 "%s: CFG (%d) config failure", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07005866 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
5867 }
5868
5869 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
5870 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5871 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07005872 return ;
5873}
Jeff Johnson295189b2012-06-20 16:38:30 -07005874/*
5875 * FUNCTION: WDA_UpdateCfg
5876 *
5877 */
5878VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
5879{
5880
5881 WDI_Status status = WDI_STATUS_SUCCESS ;
5882 tANI_U32 val =0;
5883 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
5884 tHalCfg *configData;
5885 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
5886 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07005887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005888 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005889 if (NULL == pMac )
5890 {
5891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005892 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07005893 return VOS_STATUS_E_FAILURE;
5894 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005895 if(WDA_START_STATE != pWDA->wdaState)
5896 {
5897 return VOS_STATUS_E_FAILURE;
5898 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005899 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
5900 {
5901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005902 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005903 VOS_ASSERT(0);
5904 return VOS_STATUS_E_FAILURE;
5905 }
mukul sharma6b53e202016-11-23 19:29:18 +05305906
Jeff Johnson295189b2012-06-20 16:38:30 -07005907 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
5908 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005909 if(NULL == wdiCfgReqParam)
5910 {
5911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005912 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005913 VOS_ASSERT(0);
5914 return VOS_STATUS_E_NOMEM;
5915 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005916 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
5917 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005918 if(NULL == wdiCfgReqParam->pConfigBuffer)
5919 {
5920 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005921 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005922 vos_mem_free(wdiCfgReqParam);
5923 VOS_ASSERT(0);
5924 return VOS_STATUS_E_NOMEM;
5925 }
mukul sharma6b53e202016-11-23 19:29:18 +05305926
Jeff Johnson295189b2012-06-20 16:38:30 -07005927 /*convert the WNI CFG Id to HAL CFG Id*/
5928 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
5929 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
5930
5931 /*TODO: revisit this for handling string parameters */
5932 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
5933 &val) != eSIR_SUCCESS)
5934 {
5935 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005936 "Failed to cfg get id %d", cfgParam->bodyval);
Jeff Johnson295189b2012-06-20 16:38:30 -07005937 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
5938 vos_mem_free(wdiCfgReqParam);
5939 return eSIR_FAILURE;
5940 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005941 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
5942 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
5943 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
5944 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
5945 wdiCfgReqParam->wdiReqStatusCB = NULL ;
5946
5947 /* store Params pass it to WDI */
5948 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005949#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
5950 status = WDI_UpdateCfgReq(wdiCfgReqParam,
5951 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005952 if(IS_WDI_STATUS_FAILURE(status))
5953 {
5954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5955 "Failure in Update CFG WDI API, free all the memory " );
5956 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
5957 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5958 pWDA->wdaWdiCfgApiMsgParam = NULL;
5959 /* Failure is not expected */
5960 VOS_ASSERT(0) ;
5961 }
5962#else
5963 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
5964 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5965 pWDA->wdaWdiCfgApiMsgParam = NULL;
5966#endif
5967 return CONVERT_WDI2VOS_STATUS(status) ;
5968}
5969
mukul sharma6b53e202016-11-23 19:29:18 +05305970/*
5971 * FUNCTION: WDA_UpdateCfgIntParamCb
5972 *
5973 */
5974void WDA_UpdateCfgIntParamCb(WDI_Status wdiStatus, void* pUserData)
5975{
5976 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
5977 WDI_UpdateCfgReqParamsType *wdiCfgParam =
5978 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgUpdateIntMsg ;
5979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5980 "<------ %s " ,__func__);
5981 /*
5982 * currently there is no response message is expected between PE and
5983 * WDA, Failure return from WDI is a ASSERT condition
5984 */
5985 if (WDI_STATUS_SUCCESS != wdiStatus)
5986 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5987 "%s: CFG (%d) config failure", __func__,
5988 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
5989
5990 if (wdiCfgParam && wdiCfgParam->pConfigBuffer)
5991 {
5992 vos_mem_free(wdiCfgParam->pConfigBuffer);
5993 wdiCfgParam->pConfigBuffer = NULL;
5994 }
5995
5996 if (pWDA->wdaWdiCfgUpdateIntMsg)
5997 {
5998 vos_mem_free(pWDA->wdaWdiCfgUpdateIntMsg);
5999 pWDA->wdaWdiCfgUpdateIntMsg = NULL;
6000 }
6001
6002 return ;
6003}
6004
6005/*
6006 * FUNCTION: WDA_UpdateCfgIntParam
6007 *
6008 */
6009VOS_STATUS WDA_UpdateCfgIntParam(tWDA_CbContext *pWDA,
6010 tSirUpdateCfgIntParam *cfgParam)
6011{
6012
6013 WDI_Status status = WDI_STATUS_SUCCESS ;
6014 tANI_U32 val =0;
6015 tpAniSirGlobal pMac;
6016 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
6017 tHalCfg *tlvStruct = NULL ;
6018 tANI_U8 *tlvStructStart = NULL ;
6019 v_PVOID_t *configParam;
6020 tANI_U32 configParamSize;
6021 tANI_U32 *configDataValue;
6022 tANI_U32 cfgId;
6023 tANI_U32 tlv_type = QWLAN_HAL_CFG_MAX_PARAMS;
6024
6025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6026 " ------> %s " ,__func__);
6027
6028 if (cfgParam)
6029 {
6030 cfgId = cfgParam->cfgId;
6031 }
6032 else
6033 {
6034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6035 FL("Invoked with NULL cfgParam"));
6036 return VOS_STATUS_E_FAILURE;
6037 }
6038
6039 if (!pWDA)
6040 {
6041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6042 FL("Invoked with invalid WDA context"));
6043 return VOS_STATUS_E_FAILURE;
6044 }
6045
6046 if (NULL != pWDA->wdaWdiCfgUpdateIntMsg)
6047 {
6048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6049 FL("wdaWdiCfgApiMsgParam is not NULL"));
6050
6051 return VOS_STATUS_E_FAILURE;
6052 }
6053
6054 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
6055 if (NULL == pMac)
6056 {
6057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6058 FL("Invoked with invalid MAC context "));
6059 return VOS_STATUS_E_FAILURE;
6060 }
6061
6062 if (wlan_cfgGetInt(pMac, (tANI_U16)cfgId , &val) != eSIR_SUCCESS)
6063 {
6064 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6065 FL("Fail to cfg get id %d"), cfgId);
6066 return VOS_STATUS_E_FAILURE;
6067 }
6068
6069 /* Get TLV type */
6070 tlv_type = WDA_ConvertWniCfgIdToHALCfgId(cfgId);
6071 if (tlv_type == QWLAN_HAL_CFG_MAX_PARAMS)
6072 {
6073 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6074 "Failed to Convert cfg to hal id %d", cfgId);
6075 return VOS_STATUS_E_FAILURE;
6076 }
6077
6078 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
6079 sizeof(WDI_UpdateCfgReqParamsType)) ;
6080 if (NULL == wdiCfgReqParam)
6081 {
6082 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6083 "%s: VOS MEM Alloc Failure", __func__);
6084 return VOS_STATUS_E_NOMEM;
6085 }
6086
6087 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * 1;
6088 configParam = vos_mem_malloc(configParamSize);
6089 if (NULL == configParam)
6090 {
6091 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6092 "%s: VOS MEM Alloc Failure", __func__);
6093 vos_mem_free(wdiCfgReqParam);
6094 return VOS_STATUS_E_NOMEM;
6095 }
6096
6097 vos_mem_set(configParam, configParamSize, 0);
6098 wdiCfgReqParam->pConfigBuffer = configParam;
6099 tlvStruct = (tHalCfg *)configParam;
6100 tlvStructStart = (tANI_U8 *)configParam;
6101 /* Set TLV type */
6102 tlvStruct->type = tlv_type;
6103 tlvStruct->length = sizeof(tANI_U32);
6104 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6105 *configDataValue = (tANI_U32)val;
6106 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6107 "cfg_id %d tlv_type %d tlv_value %d \n",
6108 cfgId, tlvStruct->type, val);
6109 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6110 + sizeof(tHalCfg) + tlvStruct->length)) ;
6111 wdiCfgReqParam->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
6112 wdiCfgReqParam->wdiReqStatusCB = NULL;
6113 /* store Params pass it to WDI */
6114 pWDA->wdaWdiCfgUpdateIntMsg = (void *)wdiCfgReqParam ;
6115 status = WDI_UpdateCfgReq(wdiCfgReqParam,
6116 (WDI_UpdateCfgRspCb )WDA_UpdateCfgIntParamCb, pWDA) ;
6117 if (IS_WDI_STATUS_FAILURE(status))
6118 {
6119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6120 "Failure in WDA_UpdateCfgIntParam WDI API, free memory ");
6121 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
6122 wdiCfgReqParam->pConfigBuffer = NULL;
6123 vos_mem_free(pWDA->wdaWdiCfgUpdateIntMsg);
6124 pWDA->wdaWdiCfgUpdateIntMsg = NULL;
6125 }
6126
6127 return CONVERT_WDI2VOS_STATUS(status);
6128}
6129
Jeff Johnson295189b2012-06-20 16:38:30 -07006130VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
6131 v_U8_t *pDefaultKeyId,
6132 v_U8_t *pNumKeys,
6133 WDI_KeysType *pWdiKeys )
6134{
6135 v_U32_t i, j, defKeyId = 0;
6136 v_U32_t val = SIR_MAC_KEY_LENGTH;
6137 VOS_STATUS status = WDI_STATUS_SUCCESS;
6138 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006139 if (NULL == pMac )
6140 {
6141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006142 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07006143 return VOS_STATUS_E_FAILURE;
6144 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006145 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
6146 &defKeyId ))
6147 {
6148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6149 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
6150 }
6151
6152 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07006153 /* Need to extract ALL of the configured WEP Keys */
6154 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
6155 {
6156 val = SIR_MAC_KEY_LENGTH;
6157 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
6158 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
6159 pWdiKeys[j].key,
6160 &val ))
6161 {
6162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08006163 "WEP Key index [%d] may not configured in CFG",i);
Jeff Johnson295189b2012-06-20 16:38:30 -07006164 }
6165 else
6166 {
6167 pWdiKeys[j].keyId = (tANI_U8) i;
6168 /*
6169 * Actually, a DC (Don't Care) because
6170 * this is determined (and set) by PE/MLME
6171 */
6172 pWdiKeys[j].unicast = 0;
6173 /*
6174 * Another DC (Don't Care)
6175 */
6176 pWdiKeys[j].keyDirection = eSIR_TX_RX;
6177 /* Another DC (Don't Care). Unused for WEP */
6178 pWdiKeys[j].paeRole = 0;
6179 /* Determined from wlan_cfgGetStr() above.*/
6180 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07006181 j++;
6182 *pNumKeys = (tANI_U8) j;
6183 }
6184 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006185 return status;
6186}
Jeff Johnson295189b2012-06-20 16:38:30 -07006187/*
6188 * FUNCTION: WDA_SetBssKeyReqCallback
6189 * send SET BSS key RSP back to PE
6190 */
6191void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
6192{
6193 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6194 tWDA_CbContext *pWDA;
6195 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006197 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006198 if(NULL == pWdaParams)
6199 {
6200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006201 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006202 VOS_ASSERT(0) ;
6203 return ;
6204 }
6205 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6206 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05306207 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
6208 sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006209 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6210 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006211 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006212 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006213 return ;
6214}
Jeff Johnson295189b2012-06-20 16:38:30 -07006215/*
6216 * FUNCTION: WDA_ProcessSetBssKeyReq
6217 * Request to WDI for programming the BSS key( key for
6218 * broadcast/multicast frames Encryption)
6219 */
6220VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
6221 tSetBssKeyParams *setBssKeyParams )
6222{
6223 WDI_Status status = WDI_STATUS_SUCCESS ;
6224 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
6225 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
6226 sizeof(WDI_SetBSSKeyReqParamsType)) ;
6227 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006228 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07006229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006230 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006231 if(NULL == wdiSetBssKeyParam)
6232 {
6233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006234 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006235 VOS_ASSERT(0);
6236 return VOS_STATUS_E_NOMEM;
6237 }
6238 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6239 if(NULL == pWdaParams)
6240 {
6241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006242 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006243 VOS_ASSERT(0);
6244 vos_mem_free(wdiSetBssKeyParam);
6245 return VOS_STATUS_E_NOMEM;
6246 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006247 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006248 /* copy set BSS params to WDI structure */
6249 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
6250 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
6251 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07006252 if(setBssKeyParams->encType != eSIR_ED_NONE)
6253 {
6254 if( setBssKeyParams->numKeys == 0 &&
6255 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
6256 setBssKeyParams->encType == eSIR_ED_WEP104))
6257 {
6258 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07006259 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
6260 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
6261 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
6262 }
6263 else
6264 {
6265 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
6266 {
6267 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
6268 setBssKeyParams->key[keyIndex].keyId;
6269 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
6270 setBssKeyParams->key[keyIndex].unicast;
6271 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
6272 setBssKeyParams->key[keyIndex].keyDirection;
6273 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
6274 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
6275 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
6276 setBssKeyParams->key[keyIndex].paeRole;
6277 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
6278 setBssKeyParams->key[keyIndex].keyLength;
6279 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
6280 setBssKeyParams->key[keyIndex].key,
6281 SIR_MAC_MAX_KEY_LENGTH);
6282 }
6283 }
6284 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006285 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
6286 setBssKeyParams->singleTidRc;
6287 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006288 /* Store set key pointer, as this will be used for response */
6289 /* store Params pass it to WDI */
6290 pWdaParams->pWdaContext = pWDA;
6291 pWdaParams->wdaMsgParam = setBssKeyParams;
6292 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006293 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
6294 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
6295
6296 if(IS_WDI_STATUS_FAILURE(status))
6297 {
6298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6299 "Failure in Set BSS Key Req WDI API, free all the memory " );
6300 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6301 vos_mem_free(pWdaParams) ;
6302 setBssKeyParams->status = eSIR_FAILURE ;
6303 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
6304 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006305 return CONVERT_WDI2VOS_STATUS(status) ;
6306}
Jeff Johnson295189b2012-06-20 16:38:30 -07006307/*
6308 * FUNCTION: WDA_RemoveBssKeyReqCallback
6309 * send SET BSS key RSP back to PE
6310 */
6311void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
6312{
6313 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6314 tWDA_CbContext *pWDA;
6315 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006317 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006318 if(NULL == pWdaParams)
6319 {
6320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006321 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006322 VOS_ASSERT(0) ;
6323 return ;
6324 }
6325 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6326 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006327 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6328 vos_mem_free(pWdaParams) ;
6329
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006330 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006331 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006332 return ;
6333}
Siddharth Bhal171788a2014-09-29 21:02:40 +05306334
6335/*
Siddharth Bhal64246172015-02-27 01:04:37 +05306336 * FUNCTION: WDA_GetFrameLogRspCallback
6337 * recieves get frame log response from FW
6338 */
6339void WDA_GetFrameLogRspCallback(WDI_GetFrameLogRspParamType* wdiRsp,
6340 void* pUserData)
6341{
6342 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6343 tWDA_CbContext *pWDA = NULL;
6344 tAniGetFrameLogReq *pGetFrameLogReqParams = NULL;
6345
6346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6347 "<------ Entering: %s " ,__func__);
6348 if(NULL == pWdaParams)
6349 {
6350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6351 "%s: pWdaParams received NULL", __func__);
6352 VOS_ASSERT(0) ;
6353 return ;
6354 }
6355
6356 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6357 if (NULL == pWDA)
6358 {
6359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6360 "%s:pWDA is NULL", __func__);
6361 VOS_ASSERT(0);
6362 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6363 vos_mem_free(pWdaParams);
6364 return ;
6365 }
6366
6367 pGetFrameLogReqParams = (tAniGetFrameLogReq *)pWdaParams->wdaMsgParam;
6368 if(NULL == pGetFrameLogReqParams)
6369 {
6370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6371 "%s: pGetFrameLogReqParams received NULL", __func__);
6372 VOS_ASSERT(0);
6373 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6374 vos_mem_free(pWdaParams);
6375 return;
6376 }
6377
Siddharth Bhal64246172015-02-27 01:04:37 +05306378 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
6379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Abhishek Singh611295e2015-07-09 11:11:54 +05306380 "%s:GetFrameLog with rsp status %d flag %d", __func__,
6381 wdiRsp->wdiStatus,pGetFrameLogReqParams->getFrameLogCmdFlag);
Siddharth Bhal64246172015-02-27 01:04:37 +05306382 }
6383
6384 /* free WDI command buffer only */
6385 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6386 vos_mem_free(pWdaParams->wdaMsgParam);
6387 vos_mem_free(pWdaParams);
6388
6389 return ;
6390
6391}
Gupta, Kapil7c34b322015-09-30 13:12:35 +05306392
6393/*
6394 * FUNCTION: WDA_RssiMonitorStopRspCallback
6395 * recieves Rssi Monitor stop response from FW
6396 */
6397void WDA_RssiMonitorStopRspCallback(WDI_RssiMonitorStopRspParamType *wdiRsp,
6398 void* pUserData)
6399{
6400 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6401 tSirRssiMonitorReq *pRssiMonitorReqParams;
6402
6403 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6404 "<------ %s " ,__func__);
6405
6406 if(NULL == pWdaParams)
6407 {
6408 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6409 "%s: pWdaParams received NULL", __func__);
6410 VOS_ASSERT(0);
6411 return ;
6412 }
6413
6414 if(NULL == pWdaParams->wdaMsgParam)
6415 {
6416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6417 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
6418 VOS_ASSERT(0);
6419 vos_mem_free(pWdaParams);
6420 return ;
6421 }
6422
6423 pRssiMonitorReqParams = (tSirRssiMonitorReq *)pWdaParams->wdaMsgParam;
6424
6425 if(pRssiMonitorReqParams->rssiMonitorCallback)
6426 {
6427 pRssiMonitorReqParams->rssiMonitorCallback(
6428 pRssiMonitorReqParams->rssiMonitorCbContext,
6429 CONVERT_WDI2VOS_STATUS(wdiRsp->status));
6430 }
6431 else
6432 {
6433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6434 "%s: pFWLoggingInitParams callback is NULL", __func__);
6435 }
6436
6437 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6438 vos_mem_free(pWdaParams->wdaMsgParam);
6439 vos_mem_free(pWdaParams);
6440
6441 return;
6442}
6443
6444/*
6445 * FUNCTION: WDA_RssiMonitorStartRspCallback
6446 * recieves Rssi Monitor start response from FW
6447 */
6448void WDA_RssiMonitorStartRspCallback(WDI_RssiMonitorStartRspParamType* wdiRsp,
6449 void* pUserData)
6450{
6451 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6452 tSirRssiMonitorReq *pRssiMonitorReqParams;
6453
6454 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6455 "<------ %s " ,__func__);
6456
6457 if(NULL == pWdaParams)
6458 {
6459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6460 "%s: pWdaParams received NULL", __func__);
6461 VOS_ASSERT(0);
6462 return ;
6463 }
6464
6465 if(NULL == pWdaParams->wdaMsgParam)
6466 {
6467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6468 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
6469 VOS_ASSERT(0);
6470 vos_mem_free(pWdaParams);
6471 return ;
6472 }
6473
6474 pRssiMonitorReqParams = (tSirRssiMonitorReq *)pWdaParams->wdaMsgParam;
6475
6476 if(pRssiMonitorReqParams->rssiMonitorCallback)
6477 {
6478 pRssiMonitorReqParams->rssiMonitorCallback(
6479 pRssiMonitorReqParams->rssiMonitorCbContext,
6480 CONVERT_WDI2VOS_STATUS(wdiRsp->status));
6481 }
6482 else
6483 {
6484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6485 "%s: pFWLoggingInitParams callback is NULL", __func__);
6486 }
6487
6488 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6489 vos_mem_free(pWdaParams->wdaMsgParam);
6490 vos_mem_free(pWdaParams);
6491
6492 return;
6493}
6494
Siddharth Bhal64246172015-02-27 01:04:37 +05306495/*
Siddharth Bhald1be97f2015-05-27 22:39:59 +05306496 * FUNCTION: WDA_FWLoggingInitRspCallback
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05306497 * recieves Mgmt Logging init response from FW
6498 */
Siddharth Bhald1be97f2015-05-27 22:39:59 +05306499void WDA_FWLoggingInitRspCallback(WDI_FWLoggingInitRspParamType* wdiRsp,
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05306500 void* pUserData)
6501{
6502 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Siddharth Bhald1be97f2015-05-27 22:39:59 +05306503 tSirFWLoggingInitParam *pFWLoggingInitParams;
c_manjeecfd1efb2015-09-25 19:32:34 +05306504 tAniLoggingInitRsp *pLoggingInitRsp;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05306505
6506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6507 "<------ %s " ,__func__);
6508
6509 if(NULL == pWdaParams)
6510 {
6511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6512 "%s: pWdaParams received NULL", __func__);
6513 VOS_ASSERT(0);
6514 return ;
6515 }
6516
6517 if(NULL == pWdaParams->wdaMsgParam)
6518 {
6519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6520 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
6521 VOS_ASSERT(0);
6522 vos_mem_free(pWdaParams);
6523 return ;
6524 }
6525
c_manjeecfd1efb2015-09-25 19:32:34 +05306526 pLoggingInitRsp = (tAniLoggingInitRsp *)vos_mem_malloc(sizeof(tAniLoggingInitRsp)) ;
6527 if(NULL == pWdaParams)
6528 {
6529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6530 "%s: VOS MEM Alloc Failure for pLoggingInitRsp", __func__);
6531 VOS_ASSERT(0);
6532 vos_mem_free(pWdaParams);
6533 return;
6534 }
6535
Siddharth Bhald1be97f2015-05-27 22:39:59 +05306536 pFWLoggingInitParams = (tSirFWLoggingInitParam *)pWdaParams->wdaMsgParam;
c_manjeecfd1efb2015-09-25 19:32:34 +05306537 vos_mem_copy(pLoggingInitRsp, wdiRsp, sizeof(tAniLoggingInitRsp));
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05306538
Siddharth Bhald1be97f2015-05-27 22:39:59 +05306539 if(pFWLoggingInitParams->fwlogInitCallback)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05306540 {
Siddharth Bhald1be97f2015-05-27 22:39:59 +05306541 pFWLoggingInitParams->fwlogInitCallback(
6542 pFWLoggingInitParams->fwlogInitCbContext,
c_manjeecfd1efb2015-09-25 19:32:34 +05306543 pLoggingInitRsp);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05306544 }
6545 else
6546 {
6547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +05306548 "%s: pFWLoggingInitParams callback is NULL", __func__);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05306549 }
6550
c_manjeecfd1efb2015-09-25 19:32:34 +05306551 vos_mem_free(pLoggingInitRsp);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05306552 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6553 vos_mem_free(pWdaParams->wdaMsgParam);
6554 vos_mem_free(pWdaParams);
6555
6556 return;
6557}
6558
6559/*
Siddharth Bhal171788a2014-09-29 21:02:40 +05306560 * FUNCTION: WDA_SpoofMacAddrRspCallback
6561 * recieves spoof mac addr response from FW
6562 */
6563void WDA_SpoofMacAddrRspCallback(WDI_SpoofMacAddrRspParamType* wdiRsp, void* pUserData)
6564{
6565 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6566 tWDA_CbContext *pWDA;
Siddharth Bhal029d6732014-10-09 21:31:23 +05306567
Siddharth Bhal171788a2014-09-29 21:02:40 +05306568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6569 "<------ %s " ,__func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05306570
Siddharth Bhal171788a2014-09-29 21:02:40 +05306571 if(NULL == pWdaParams)
6572 {
6573 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6574 "%s: pWdaParams received NULL", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05306575 VOS_ASSERT(0);
Siddharth Bhal171788a2014-09-29 21:02:40 +05306576 return ;
6577 }
Siddharth Bhal171788a2014-09-29 21:02:40 +05306578 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Siddharth Bhal171788a2014-09-29 21:02:40 +05306579
Siddharth Bhal029d6732014-10-09 21:31:23 +05306580 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
Siddharth Bhal171788a2014-09-29 21:02:40 +05306581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhal029d6732014-10-09 21:31:23 +05306582 "%s:Spoofing with rsp status %d", __func__, wdiRsp->wdiStatus);
Siddharth Bhal171788a2014-09-29 21:02:40 +05306583 }
Siddharth Bhal029d6732014-10-09 21:31:23 +05306584 WDA_SendMsg(pWDA, WDA_SPOOF_MAC_ADDR_RSP, NULL,
6585 CONVERT_WDI2SIR_STATUS(wdiRsp->wdiStatus));
Siddharth Bhal171788a2014-09-29 21:02:40 +05306586
Siddharth Bhal171788a2014-09-29 21:02:40 +05306587 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Siddharth Bhal029d6732014-10-09 21:31:23 +05306588 vos_mem_free(pWdaParams->wdaMsgParam);
Siddharth Bhal171788a2014-09-29 21:02:40 +05306589 vos_mem_free(pWdaParams);
Siddharth Bhal029d6732014-10-09 21:31:23 +05306590
6591 return;
Siddharth Bhal171788a2014-09-29 21:02:40 +05306592}
6593
Jeff Johnson295189b2012-06-20 16:38:30 -07006594/*
6595 * FUNCTION: WDA_ProcessRemoveBssKeyReq
6596 * Request to WDI to remove the BSS key( key for broadcast/multicast
6597 * frames Encryption)
6598 */
6599VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
6600 tRemoveBssKeyParams *removeBssKeyParams )
6601{
6602 WDI_Status status = WDI_STATUS_SUCCESS ;
6603 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
6604 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
6605 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
6606 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006608 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006609 if(NULL == wdiRemoveBssKeyParam)
6610 {
6611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006612 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006613 VOS_ASSERT(0);
6614 return VOS_STATUS_E_NOMEM;
6615 }
6616 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6617 if(NULL == pWdaParams)
6618 {
6619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006620 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006621 VOS_ASSERT(0);
6622 vos_mem_free(wdiRemoveBssKeyParam);
6623 return VOS_STATUS_E_NOMEM;
6624 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006625 /* copy Remove BSS key params to WDI structure*/
6626 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
6627 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
6628 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
6629 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
6630 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006631 /* Store remove key pointer, as this will be used for response */
6632 /* store Params pass it to WDI */
6633 pWdaParams->pWdaContext = pWDA;
6634 pWdaParams->wdaMsgParam = removeBssKeyParams;
6635 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006636 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
6637 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006638 if(IS_WDI_STATUS_FAILURE(status))
6639 {
6640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6641 "Failure in Remove BSS Key Req WDI API, free all the memory " );
6642 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6643 vos_mem_free(pWdaParams) ;
6644 removeBssKeyParams->status = eSIR_FAILURE ;
6645 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
6646 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006647 return CONVERT_WDI2VOS_STATUS(status) ;
6648}
Jeff Johnson295189b2012-06-20 16:38:30 -07006649/*
6650 * FUNCTION: WDA_SetBssKeyReqCallback
6651 * send SET BSS key RSP back to PE
6652 */
6653void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
6654{
6655 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6656 tWDA_CbContext *pWDA;
6657 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006659 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006660 if(NULL == pWdaParams)
6661 {
6662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006663 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006664 VOS_ASSERT(0) ;
6665 return ;
6666 }
6667 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6668 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05306669 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
6670 sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006671 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6672 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006673 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006674 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006675 return ;
6676}
Jeff Johnson295189b2012-06-20 16:38:30 -07006677/*
6678 * FUNCTION: WDA_ProcessSetStaKeyReq
6679 * Request to WDI for programming the STA key( key for Unicast frames
6680 * Encryption)
6681 */
6682VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
6683 tSetStaKeyParams *setStaKeyParams )
6684{
6685 WDI_Status status = WDI_STATUS_SUCCESS ;
6686 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
6687 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
6688 sizeof(WDI_SetSTAKeyReqParamsType)) ;
6689 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006690 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07006691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006692 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006693 if(NULL == wdiSetStaKeyParam)
6694 {
6695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006696 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006697 VOS_ASSERT(0);
6698 return VOS_STATUS_E_NOMEM;
6699 }
6700 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6701 if(NULL == pWdaParams)
6702 {
6703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006704 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006705 VOS_ASSERT(0);
6706 vos_mem_free(wdiSetStaKeyParam);
6707 return VOS_STATUS_E_NOMEM;
6708 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006709 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006710 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006711 /* copy set STA key params to WDI structure */
6712 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
6713 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
6714 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
6715 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006716 if(setStaKeyParams->encType != eSIR_ED_NONE)
6717 {
Jeff Johnson43971f52012-07-17 12:26:56 -07006718 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07006719 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
6720 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
6721 {
6722 WDA_GetWepKeysFromCfg( pWDA,
6723 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
6724 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
6725 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
6726 }
6727 else
6728 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006729 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
6730 keyIndex++)
6731 {
6732 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
6733 setStaKeyParams->key[keyIndex].keyId;
6734 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
6735 setStaKeyParams->key[keyIndex].unicast;
6736 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
6737 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07006738 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
6739 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
6740 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
6741 setStaKeyParams->key[keyIndex].paeRole;
6742 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
6743 setStaKeyParams->key[keyIndex].keyLength;
6744 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
6745 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
6746 /* set default index to index which have key direction as WDI_TX_DEFAULT */
6747 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
6748 {
6749 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
6750 }
6751 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006752 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
6753 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07006754 }
6755 }
6756 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
6757 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006758 /* Store set key pointer, as this will be used for response */
6759 /* store Params pass it to WDI */
6760 pWdaParams->pWdaContext = pWDA;
6761 pWdaParams->wdaMsgParam = setStaKeyParams;
6762 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006763 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
6764 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006765 if(IS_WDI_STATUS_FAILURE(status))
6766 {
6767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6768 "Failure in set STA Key Req WDI API, free all the memory " );
6769 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6770 vos_mem_free(pWdaParams) ;
6771 setStaKeyParams->status = eSIR_FAILURE ;
6772 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
6773 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006774 return CONVERT_WDI2VOS_STATUS(status) ;
6775}
Jeff Johnson295189b2012-06-20 16:38:30 -07006776/*
6777 * FUNCTION: WDA_SetBcastStaKeyReqCallback
6778 * send SET Bcast STA key RSP back to PE
6779 */
6780void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
6781{
6782 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6783 tWDA_CbContext *pWDA;
6784 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006786 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006787 if(NULL == pWdaParams)
6788 {
6789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006790 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006791 VOS_ASSERT(0) ;
6792 return ;
6793 }
6794 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6795 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006796 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6797 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006798 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006799 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006800 return ;
6801}
6802
Jeff Johnson295189b2012-06-20 16:38:30 -07006803/*
6804 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
6805 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
6806 * Encryption)
6807 */
6808VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
6809 tSetStaKeyParams *setStaKeyParams )
6810{
6811 WDI_Status status = WDI_STATUS_SUCCESS ;
6812 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
6813 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
6814 sizeof(WDI_SetSTAKeyReqParamsType)) ;
6815 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006816 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07006817 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006818 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006819 if(NULL == wdiSetStaKeyParam)
6820 {
6821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006822 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006823 VOS_ASSERT(0);
6824 return VOS_STATUS_E_NOMEM;
6825 }
6826 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6827 if(NULL == pWdaParams)
6828 {
6829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006830 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006831 VOS_ASSERT(0);
6832 vos_mem_free(wdiSetStaKeyParam);
6833 return VOS_STATUS_E_NOMEM;
6834 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006835 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006836 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006837 /* copy set STA key params to WDI structure */
6838 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
6839 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
6840 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
6841 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006842 if(setStaKeyParams->encType != eSIR_ED_NONE)
6843 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006844 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
6845 keyIndex++)
6846 {
6847 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
6848 setStaKeyParams->key[keyIndex].keyId;
6849 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
6850 setStaKeyParams->key[keyIndex].unicast;
6851 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
6852 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07006853 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
6854 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
6855 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
6856 setStaKeyParams->key[keyIndex].paeRole;
6857 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
6858 setStaKeyParams->key[keyIndex].keyLength;
6859 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
6860 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
6861 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006862 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
6863 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07006864 }
6865 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07006866 /* Store set key pointer, as this will be used for response */
6867 /* store Params pass it to WDI */
6868 pWdaParams->pWdaContext = pWDA;
6869 pWdaParams->wdaMsgParam = setStaKeyParams;
6870 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006871 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
6872 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006873 if(IS_WDI_STATUS_FAILURE(status))
6874 {
6875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6876 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
6877 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6878 vos_mem_free(pWdaParams) ;
6879 setStaKeyParams->status = eSIR_FAILURE ;
6880 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
6881 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006882 return CONVERT_WDI2VOS_STATUS(status) ;
6883}
Jeff Johnson295189b2012-06-20 16:38:30 -07006884/*
6885 * FUNCTION: WDA_RemoveStaKeyReqCallback
6886 * send SET BSS key RSP back to PE
6887 */
6888void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
6889{
6890 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6891 tWDA_CbContext *pWDA;
6892 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006894 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006895 if(NULL == pWdaParams)
6896 {
6897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006898 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006899 VOS_ASSERT(0) ;
6900 return ;
6901 }
6902 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6903 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006904 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6905 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006906 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006907 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006908 return ;
6909}
6910
Jeff Johnson295189b2012-06-20 16:38:30 -07006911/*
6912 * FUNCTION: WDA_ProcessRemoveStaKeyReq
6913 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
6914 */
6915VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
6916 tRemoveStaKeyParams *removeStaKeyParams )
6917{
6918 WDI_Status status = WDI_STATUS_SUCCESS ;
6919 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
6920 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
6921 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
6922 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006924 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006925 if(NULL == wdiRemoveStaKeyParam)
6926 {
6927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006928 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006929 VOS_ASSERT(0);
6930 return VOS_STATUS_E_NOMEM;
6931 }
6932 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6933 if(NULL == pWdaParams)
6934 {
6935 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006936 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006937 VOS_ASSERT(0);
6938 vos_mem_free(wdiRemoveStaKeyParam);
6939 return VOS_STATUS_E_NOMEM;
6940 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006941 /* copy remove STA key params to WDI structure*/
6942 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
6943 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
6944 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
6945 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
6946 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006947 /* Store remove key pointer, as this will be used for response */
6948 /* store Params pass it to WDI */
6949 pWdaParams->pWdaContext = pWDA;
6950 pWdaParams->wdaMsgParam = removeStaKeyParams;
6951 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006952 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
6953 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006954 if(IS_WDI_STATUS_FAILURE(status))
6955 {
6956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6957 "Failure in remove STA Key Req WDI API, free all the memory " );
6958 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6959 vos_mem_free(pWdaParams) ;
6960 removeStaKeyParams->status = eSIR_FAILURE ;
6961 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
6962 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006963 return CONVERT_WDI2VOS_STATUS(status) ;
6964}
Jeff Johnson295189b2012-06-20 16:38:30 -07006965/*
6966 * FUNCTION: WDA_IsHandleSetLinkStateReq
6967 * Update the WDA state and return the status to handle this message or not
6968 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006969WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
6970 tWDA_CbContext *pWDA,
6971 tLinkStateParams *linkStateParams)
6972{
6973 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006974 switch(linkStateParams->state)
6975 {
6976 case eSIR_LINK_PREASSOC_STATE:
6977 case eSIR_LINK_BTAMP_PREASSOC_STATE:
6978 /*
6979 * set the WDA state to PRE ASSOC
6980 * copy the BSSID into pWDA to use it in join request and return,
6981 * No need to handle these messages.
6982 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006983 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
6984 {
6985 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07006986 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006987 }
6988 else
6989 {
6990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006991 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006992 VOS_ASSERT(0);
6993 }
6994
6995 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
6996 {
6997 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07006998 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006999 }
7000 else
7001 {
7002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007003 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07007004 VOS_ASSERT(0);
7005 }
7006
Jeff Johnson295189b2012-06-20 16:38:30 -07007007 /* UMAC is issuing the setlink state with PREASSOC twice (before set
7008 *channel and after ) so reset the WDA state to ready when the second
7009 * time UMAC issue the link state with PREASSOC
7010 */
7011 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
7012 {
7013 /* RESET WDA state back to WDA_READY_STATE */
7014 pWDA->wdaState = WDA_READY_STATE;
7015 }
7016 else
7017 {
7018 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
7019 }
7020 //populate linkState info in WDACbCtxt
7021 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07007022 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07007023 default:
7024 if(pWDA->wdaState != WDA_READY_STATE)
7025 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07007026 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
7027 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
7028 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
7029 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
7030 *the ASSERT in WDA_Stop during module unload.*/
7031 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
7032 {
7033 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07007034 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07007035 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07007036 else
7037 {
7038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07007039 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07007040 status = WDA_IGNORE_SET_LINK_STATE;
7041 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007042 }
7043 break;
7044 }
7045
7046 return status;
7047}
Jeff Johnson295189b2012-06-20 16:38:30 -07007048/*
7049 * FUNCTION: WDA_SetLinkStateCallback
7050 * call back function for set link state from WDI
7051 */
7052void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
7053{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307054 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007055 tLinkStateParams *linkStateParams;
7056 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007058 "<------ %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307059 if (NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007060 {
7061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007062 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007063 VOS_ASSERT(0) ;
7064 return ;
7065 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007066 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307067 if (NULL == pWDA)
7068 {
7069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7070 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307071 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7072 vos_mem_free(pWdaParams->wdaMsgParam);
7073 vos_mem_free(pWdaParams);
7074
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307075 VOS_ASSERT(0);
7076 return ;
7077 }
7078
Jeff Johnson295189b2012-06-20 16:38:30 -07007079 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007080 /*
7081 * In STA mode start the BA activity check timer after association
7082 * and in AP mode start BA activity check timer after BSS start */
7083 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
7084 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07007085 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
7086 ((status == WDI_STATUS_SUCCESS) &&
7087 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07007088 {
7089 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
7090 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007091 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007092 /*
7093 * No respone required for WDA_SET_LINK_STATE so free the request
7094 * param here
7095 */
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307096 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7097 vos_mem_free(pWdaParams);
7098
Jeff Johnson295189b2012-06-20 16:38:30 -07007099 return ;
7100}
Jeff Johnson295189b2012-06-20 16:38:30 -07007101/*
7102 * FUNCTION: WDA_ProcessSetLinkState
7103 * Request to WDI to set the link status.
7104 */
7105VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
7106 tLinkStateParams *linkStateParams)
7107{
7108 WDI_Status status = WDI_STATUS_SUCCESS ;
7109 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
7110 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
7111 sizeof(WDI_SetLinkReqParamsType)) ;
7112 tWDA_ReqParams *pWdaParams ;
7113 tpAniSirGlobal pMac;
7114 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
7115
7116 if(NULL == pMac)
7117 {
7118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007119 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007120 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07007121 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007122 return VOS_STATUS_E_FAILURE;
7123 }
7124
7125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007126 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007127 if(NULL == wdiSetLinkStateParam)
7128 {
7129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007130 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007131 VOS_ASSERT(0);
7132 return VOS_STATUS_E_NOMEM;
7133 }
7134 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7135 if(NULL == pWdaParams)
7136 {
7137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007138 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007139 VOS_ASSERT(0);
7140 vos_mem_free(wdiSetLinkStateParam);
7141 return VOS_STATUS_E_NOMEM;
7142 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007143 if(WDA_IGNORE_SET_LINK_STATE ==
7144 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
7145 {
7146 status = WDI_STATUS_E_FAILURE;
7147 }
7148 else
7149 {
7150 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
7151 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007152 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
7153 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007154 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
7155 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007156 pWdaParams->pWdaContext = pWDA;
7157 /* Store remove key pointer, as this will be used for response */
7158 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007159 /* store Params pass it to WDI */
7160 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
7161 /* Stop Timer only other than GO role and concurrent session */
7162 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07007163 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07007164 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
7165 {
7166 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
7167 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007168 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
7169 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007170 if(IS_WDI_STATUS_FAILURE(status))
7171 {
7172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7173 "Failure in set link state Req WDI API, free all the memory " );
7174 }
7175 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007176 if(IS_WDI_STATUS_FAILURE(status))
7177 {
7178 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07007179 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07007180 vos_mem_free(pWdaParams);
7181 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007182 return CONVERT_WDI2VOS_STATUS(status) ;
7183}
Jeff Johnson295189b2012-06-20 16:38:30 -07007184/*
7185 * FUNCTION: WDA_GetStatsReqParamsCallback
7186 * send the response to PE with Stats received from WDI
7187 */
7188void WDA_GetStatsReqParamsCallback(
7189 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
7190 void* pUserData)
7191{
Jeff Johnson295189b2012-06-20 16:38:30 -07007192 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05307193 vos_msg_t vosMsg;
Jeff Johnson295189b2012-06-20 16:38:30 -07007194
7195 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007196 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007197 pGetPEStatsRspParams =
7198 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
7199 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
7200
7201 if(NULL == pGetPEStatsRspParams)
7202 {
7203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007204 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007205 VOS_ASSERT(0);
7206 return;
7207 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007208 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05307209 pGetPEStatsRspParams->msgType = eWNI_SME_GET_STATISTICS_RSP;
Jeff Johnson295189b2012-06-20 16:38:30 -07007210 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
7211 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07007212
7213 //Fill the Session Id Properly in PE
7214 pGetPEStatsRspParams->sessionId = 0;
7215 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007216 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007217 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
7218 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07007219 vos_mem_copy( pGetPEStatsRspParams + 1,
7220 wdiGetStatsRsp + 1,
7221 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05307222
7223 vosMsg.type = eWNI_SME_GET_STATISTICS_RSP;
7224 vosMsg.bodyptr = (void *)pGetPEStatsRspParams;
7225 vosMsg.bodyval = 0;
7226 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME,
7227 (vos_msg_t*)&vosMsg))
7228 {
7229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7230 "%s: fail to post eWNI_SME_GET_STATISTICS_RSP", __func__);
7231 vos_mem_free(pGetPEStatsRspParams);
7232 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007233
7234 return;
7235}
7236
Jeff Johnson295189b2012-06-20 16:38:30 -07007237/*
7238 * FUNCTION: WDA_ProcessGetStatsReq
7239 * Request to WDI to get the statistics
7240 */
7241VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
7242 tAniGetPEStatsReq *pGetStatsParams)
7243{
7244 WDI_Status status = WDI_STATUS_SUCCESS ;
7245 WDI_GetStatsReqParamsType wdiGetStatsParam;
7246 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05307247 vos_msg_t vosMsg;
7248
Jeff Johnson295189b2012-06-20 16:38:30 -07007249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007250 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007251 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
7252 pGetStatsParams->staId;
7253 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
7254 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07007255 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007256 status = WDI_GetStatsReq(&wdiGetStatsParam,
7257 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007258 if(IS_WDI_STATUS_FAILURE(status))
7259 {
7260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7261 "Failure in Get Stats Req WDI API, free all the memory " );
7262 pGetPEStatsRspParams =
7263 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
7264 if(NULL == pGetPEStatsRspParams)
7265 {
7266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007267 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007268 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007269 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007270 return VOS_STATUS_E_NOMEM;
7271 }
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05307272 pGetPEStatsRspParams->msgType = eWNI_SME_GET_STATISTICS_RSP;
Jeff Johnson295189b2012-06-20 16:38:30 -07007273 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
7274 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
7275 pGetPEStatsRspParams->rc = eSIR_FAILURE;
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05307276
7277 vosMsg.type = eWNI_SME_GET_STATISTICS_RSP;
7278 vosMsg.bodyptr = (void *)pGetPEStatsRspParams;
7279 vosMsg.bodyval = 0;
7280 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME,
7281 (vos_msg_t*)&vosMsg))
7282 {
7283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7284 "%s: fail to post eWNI_SME_GET_STATISTICS_RSP", __func__);
7285 vos_mem_free(pGetPEStatsRspParams);
7286 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007287 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007288 /* Free the request message */
7289 vos_mem_free(pGetStatsParams);
7290 return CONVERT_WDI2VOS_STATUS(status);
7291}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08007292
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08007293#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08007294/*
7295 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
7296 * send the response to PE with roam Rssi received from WDI
7297 */
7298void WDA_GetRoamRssiReqParamsCallback(
7299 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
7300 void* pUserData)
7301{
7302 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7303 tWDA_CbContext *pWDA = NULL;
7304 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
7305 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
7306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7307 "<------ %s " ,__func__);
7308 if(NULL == pWdaParams)
7309 {
7310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7311 "%s: pWdaParams received NULL", __func__);
7312 VOS_ASSERT(0) ;
7313 return ;
7314 }
7315 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7316 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
7317
7318 if(NULL == pGetRoamRssiReqParams)
7319 {
7320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7321 "%s: pGetRoamRssiReqParams received NULL", __func__);
7322 VOS_ASSERT(0);
7323 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7324 vos_mem_free(pWdaParams);
7325 return ;
7326 }
7327 pGetRoamRssiRspParams =
7328 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
7329
7330 if(NULL == pGetRoamRssiRspParams)
7331 {
7332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7333 "%s: VOS MEM Alloc Failure", __func__);
7334 VOS_ASSERT(0);
7335 return;
7336 }
7337 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
7338 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007339 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08007340 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
7341 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
7342
7343 /* Assign get roam rssi req (backup) in to the response */
7344 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
7345
7346 /* free WDI command buffer */
7347 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7348 vos_mem_free(pWdaParams) ;
7349
7350 /* send response to UMAC*/
7351 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
7352
7353 return;
7354}
7355
7356
7357
7358/*
7359 * FUNCTION: WDA_ProcessGetRoamRssiReq
7360 * Request to WDI to get the statistics
7361 */
7362VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
7363 tAniGetRssiReq *pGetRoamRssiParams)
7364{
7365 WDI_Status status = WDI_STATUS_SUCCESS ;
7366 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
7367 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
7368 tWDA_ReqParams *pWdaParams = NULL;
7369
7370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7371 "------> %s " ,__func__);
7372 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
7373 pGetRoamRssiParams->staId;
7374 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
7375
7376 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7377 if(NULL == pWdaParams)
7378 {
7379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7380 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05307381 vos_mem_free(pGetRoamRssiParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08007382 VOS_ASSERT(0);
7383 return VOS_STATUS_E_NOMEM;
7384 }
7385
7386 /* Store Init Req pointer, as this will be used for response */
7387 pWdaParams->pWdaContext = pWDA;
7388
7389 /* Take Get roam Rssi req backup as it stores the callback to be called after
7390 receiving the response */
7391 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
7392 pWdaParams->wdaWdiApiMsgParam = NULL;
7393
7394 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
7395 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
7396 if(IS_WDI_STATUS_FAILURE(status))
7397 {
7398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7399 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
7400 pGetRoamRssiRspParams =
7401 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
7402 if(NULL == pGetRoamRssiRspParams)
7403 {
7404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7405 "%s: VOS MEM Alloc Failure", __func__);
7406 VOS_ASSERT(0);
Abhishek Singh1e2bfa32014-01-02 15:44:15 +05307407 vos_mem_free(pGetRoamRssiParams);
7408 vos_mem_free(pWdaParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08007409 return VOS_STATUS_E_NOMEM;
7410 }
7411 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
7412 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
7413 pGetRoamRssiRspParams->rssi = 0;
7414 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
7415 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
7416 (void *)pGetRoamRssiRspParams, 0) ;
7417 }
7418 return CONVERT_WDI2VOS_STATUS(status);
7419}
7420#endif
7421
7422
Jeff Johnson295189b2012-06-20 16:38:30 -07007423/*
7424 * FUNCTION: WDA_UpdateEDCAParamCallback
7425 * call back function for Update EDCA params from WDI
7426 */
7427void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
7428{
7429 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7430 tEdcaParams *pEdcaParams;
7431
7432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007433 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007434 if(NULL == pWdaParams)
7435 {
7436 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007437 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007438 VOS_ASSERT(0) ;
7439 return ;
7440 }
7441 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007442 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7443 vos_mem_free(pWdaParams);
7444 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007445 return ;
7446}
Jeff Johnson295189b2012-06-20 16:38:30 -07007447/*
7448 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
7449 * Request to WDI to Update the EDCA params.
7450 */
7451VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
7452 tEdcaParams *pEdcaParams)
7453{
7454 WDI_Status status = WDI_STATUS_SUCCESS ;
7455 WDI_UpdateEDCAParamsType *wdiEdcaParam =
7456 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
7457 sizeof(WDI_UpdateEDCAParamsType)) ;
7458 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007460 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007461 if(NULL == wdiEdcaParam)
7462 {
7463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007464 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007465 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007466 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007467 return VOS_STATUS_E_NOMEM;
7468 }
7469 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7470 if(NULL == pWdaParams)
7471 {
7472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007473 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007474 VOS_ASSERT(0);
7475 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007476 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007477 return VOS_STATUS_E_NOMEM;
7478 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007479 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
Bansidhar Gopalachari5dcf9e02013-07-29 19:53:58 -07007480 /*
7481 Since firmware is not using highperformance flag, we have removed
7482 this flag from wdiEDCAInfo structure to match sizeof the structure
7483 between host and firmware.In future if we are planning to use
7484 highperformance flag then Please define this flag in wdiEDCAInfo
7485 structure, update it here and send it to firmware. i.e.
7486 Following is the original line which we removed as part of the fix
7487 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid =
7488 pEdcaParams->highPerformance;
7489 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007490 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
7491 &pEdcaParams->acbe);
7492 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
7493 &pEdcaParams->acbk);
7494 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
7495 &pEdcaParams->acvi);
7496 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
7497 &pEdcaParams->acvo);
7498 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007499 pWdaParams->pWdaContext = pWDA;
7500 /* Store remove key pointer, as this will be used for response */
7501 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007502 /* store Params pass it to WDI */
7503 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007504 status = WDI_UpdateEDCAParams(wdiEdcaParam,
7505 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007506 if(IS_WDI_STATUS_FAILURE(status))
7507 {
7508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7509 "Failure in Update EDCA Params WDI API, free all the memory " );
7510 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7511 vos_mem_free(pWdaParams);
7512 vos_mem_free(pEdcaParams);
7513 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007514 return CONVERT_WDI2VOS_STATUS(status) ;
7515}
Jeff Johnson295189b2012-06-20 16:38:30 -07007516/*
7517 * FUNCTION: WDA_AddBAReqCallback
7518 * send ADD BA RSP back to PE
7519 */
7520void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
7521 void* pUserData)
7522{
7523 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7524 tWDA_CbContext *pWDA;
7525 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007527 "<------ %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307528 if (NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007529 {
7530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007531 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007532 VOS_ASSERT(0) ;
7533 return ;
7534 }
7535 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307536 if (NULL == pWDA)
7537 {
7538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7539 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307540 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7541 vos_mem_free(pWdaParams->wdaMsgParam);
7542 vos_mem_free(pWdaParams);
7543
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307544 VOS_ASSERT(0);
7545 return ;
7546 }
7547
Jeff Johnson295189b2012-06-20 16:38:30 -07007548 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007549 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7550 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007551 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007552 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007553 return ;
7554}
7555
Jeff Johnson295189b2012-06-20 16:38:30 -07007556/*
7557 * FUNCTION: WDA_ProcessAddBAReq
7558 * Request to WDI to Update the ADDBA REQ params.
7559 */
7560VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
Abhishek Singh01c73d12015-03-12 15:13:44 +05307561 tANI_U16 baSessionID, tANI_U8 staIdx, tANI_U8 ucWinSize, tAddBAParams *pAddBAReqParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007562{
Jeff Johnson43971f52012-07-17 12:26:56 -07007563 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007564 WDI_AddBAReqParamsType *wdiAddBAReqParam =
7565 (WDI_AddBAReqParamsType *)vos_mem_malloc(
7566 sizeof(WDI_AddBAReqParamsType)) ;
7567 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007569 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007570 if(NULL == wdiAddBAReqParam)
7571 {
7572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007573 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007574 VOS_ASSERT(0);
7575 return VOS_STATUS_E_NOMEM;
7576 }
7577 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7578 if(NULL == pWdaParams)
7579 {
7580 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007581 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007582 VOS_ASSERT(0);
7583 vos_mem_free(wdiAddBAReqParam);
7584 return VOS_STATUS_E_NOMEM;
7585 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007586 do
7587 {
7588 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007589 wdiAddBaInfo->ucSTAIdx = staIdx ;
7590 wdiAddBaInfo->ucBaSessionID = baSessionID ;
Abhishek Singh01c73d12015-03-12 15:13:44 +05307591 wdiAddBaInfo->ucWinSize = ucWinSize ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007592 } while(0) ;
7593 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007594 pWdaParams->pWdaContext = pWDA;
7595 /* store Params pass it to WDI */
7596 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
7597 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07007598 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
7599 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007600
Jeff Johnson43971f52012-07-17 12:26:56 -07007601 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007602 {
7603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07007604 "Failure in ADD BA REQ Params WDI API, free all the memory" );
7605 status = CONVERT_WDI2VOS_STATUS(wstatus);
7606 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007607 vos_mem_free(pWdaParams);
7608 pAddBAReqParams->status = eSIR_FAILURE;
7609 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
7610 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007611 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007612}
Jeff Johnson295189b2012-06-20 16:38:30 -07007613/*
7614 * FUNCTION: WDA_AddBASessionReqCallback
7615 * send ADD BA SESSION RSP back to PE/(or TL)
7616 */
7617void WDA_AddBASessionReqCallback(
7618 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
7619{
7620 VOS_STATUS status = VOS_STATUS_SUCCESS ;
7621 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307622 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007623 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007625 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007626 if(NULL == pWdaParams)
7627 {
7628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007629 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007630 VOS_ASSERT(0) ;
7631 return ;
7632 }
7633 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307634 if (NULL == pWDA)
7635 {
7636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7637 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307638 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7639 vos_mem_free(pWdaParams->wdaMsgParam);
7640 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307641 VOS_ASSERT(0);
7642 return ;
7643 }
7644
Jeff Johnson295189b2012-06-20 16:38:30 -07007645 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007646 if( NULL == pAddBAReqParams )
7647 {
Jeff Johnson295189b2012-06-20 16:38:30 -07007648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007649 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007650 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007651 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7652 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007653 return ;
7654 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007655 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7656 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007657 /*
Deepthi Gowriba794fc2015-03-27 17:14:01 +05307658 * if BA direction is for recipient, update TL with BA session params and send
Jeff Johnson295189b2012-06-20 16:38:30 -07007659 * another request to HAL(/WDI) (ADD_BA_REQ)
7660 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007661 if((VOS_STATUS_SUCCESS ==
7662 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
Deepthi Gowriba794fc2015-03-27 17:14:01 +05307663 (eBA_RECIPIENT == pAddBAReqParams->baDirection))
Jeff Johnson295189b2012-06-20 16:38:30 -07007664 {
7665 /* Update TL with BA info received from HAL/WDI */
7666 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
7667 wdiAddBaSession->usBaSessionID,
7668 wdiAddBaSession->ucSTAIdx,
7669 wdiAddBaSession->ucBaTID,
7670 wdiAddBaSession->ucBaBufferSize,
7671 wdiAddBaSession->ucWinSize,
7672 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07007673 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
Abhishek Singh01c73d12015-03-12 15:13:44 +05307674 wdiAddBaSession->ucSTAIdx,
7675 wdiAddBaSession->ucWinSize, pAddBAReqParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007676 }
7677 else
7678 {
7679 pAddBAReqParams->status =
7680 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
7681
7682 /* Setting Flag to indicate that Set BA is success */
7683 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
7684 {
7685 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
7686 tANI_U8 tid = wdiAddBaSession->ucBaTID;
7687 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
7688 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007689 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
7690 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007691 /*Reset the WDA state to READY */
7692 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07007693 return ;
7694}
7695
Jeff Johnson295189b2012-06-20 16:38:30 -07007696/*
7697 * FUNCTION: WDA_ProcessAddBASessionReq
7698 * Request to WDI to Update the ADDBA REQ params.
7699 */
7700VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
7701 tAddBAParams *pAddBAReqParams)
7702{
7703 WDI_Status status = WDI_STATUS_SUCCESS ;
7704 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
7705 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
7706 sizeof(WDI_AddBASessionReqParamsType)) ;
7707 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07007708 WLANTL_STAStateType tlSTAState = 0;
7709
Jeff Johnson295189b2012-06-20 16:38:30 -07007710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007711 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007712 if(NULL == wdiAddBASessionReqParam)
7713 {
7714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007715 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007716 VOS_ASSERT(0);
7717 return VOS_STATUS_E_NOMEM;
7718 }
7719 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7720 if(NULL == pWdaParams)
7721 {
7722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007723 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007724 VOS_ASSERT(0);
7725 vos_mem_free(wdiAddBASessionReqParam);
7726 return VOS_STATUS_E_NOMEM;
7727 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007728 /*
7729 * Populate ADD BA parameters and pass these paarmeters to WDI.
7730 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
7731 * the state to track if these is BA recipient case or BA initiator
7732 * case.
7733 */
7734 do
7735 {
7736 WDI_AddBASessionReqinfoType *wdiBAInfoType =
7737 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
7738 /* vos_mem_copy(wdiBAInfoType->macBSSID,
7739 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
7740 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
7741 vos_mem_copy(wdiBAInfoType->macPeerAddr,
7742 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007743 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07007744 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
7745 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
7746 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
7747 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
7748 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Deepthi Gowriba794fc2015-03-27 17:14:01 +05307749
Jeff Johnson295189b2012-06-20 16:38:30 -07007750 }while(0) ;
7751 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007752 pWdaParams->pWdaContext = pWDA;
7753 /* Store ADD BA pointer, as this will be used for response */
7754 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
7755 /* store Params pass it to WDI */
7756 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07007757
7758 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
7759 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
7760 */
7761 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
7762 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
7763 {
SaidiReddy Yenugaa8b32f92016-07-27 19:29:18 +05307764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007765 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.", pAddBAReqParams->staIdx, tlSTAState );
Hoonki Leea0631ce2013-04-15 16:59:08 -07007766 status = WDI_STATUS_E_NOT_ALLOWED;
7767 pAddBAReqParams->status =
7768 CONVERT_WDI2SIR_STATUS(status) ;
7769 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
7770 /*Reset the WDA state to READY */
7771 pWDA->wdaState = WDA_READY_STATE;
7772 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7773 vos_mem_free(pWdaParams);
7774
7775 return CONVERT_WDI2VOS_STATUS(status) ;
7776 }
7777
Jeff Johnson295189b2012-06-20 16:38:30 -07007778 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
7779 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007780 if(IS_WDI_STATUS_FAILURE(status))
7781 {
7782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007783 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d", status);
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07007784 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007785 "Send ADD BA failure response to PE");
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07007786 pAddBAReqParams->status =
7787 CONVERT_WDI2SIR_STATUS(status) ;
7788 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07007789 /*Reset the WDA state to READY */
7790 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07007791 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007792 vos_mem_free(pWdaParams);
7793 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007794 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007795}
Jeff Johnson295189b2012-06-20 16:38:30 -07007796/*
7797 * FUNCTION: WDA_DelBANotifyTL
7798 * send DEL BA IND to TL
7799 */
7800void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
7801 tDelBAParams *pDelBAReqParams)
7802{
7803 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
7804 //tSirMsgQ msg;
7805 vos_msg_t vosMsg;
7806 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07007807 if(NULL == pDelBAInd)
7808 {
7809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007810 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007811 VOS_ASSERT(0) ;
7812 return;
7813 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007814 pDelBAInd->mesgType = WDA_DELETEBA_IND;
7815 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
7816 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
7817 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07007818
Jeff Johnson295189b2012-06-20 16:38:30 -07007819
7820 vosMsg.type = WDA_DELETEBA_IND;
7821 vosMsg.bodyptr = pDelBAInd;
7822 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
7823 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
7824 {
7825 vosStatus = VOS_STATUS_E_BADMSG;
7826 }
7827}
Jeff Johnson295189b2012-06-20 16:38:30 -07007828/*
7829 * FUNCTION: WDA_DelBAReqCallback
7830 * send DEL BA RSP back to PE
7831 */
7832void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
7833{
7834 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7835 tWDA_CbContext *pWDA;
7836 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007838 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007839 if(NULL == pWdaParams)
7840 {
7841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007842 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007843 VOS_ASSERT(0) ;
7844 return ;
7845 }
7846 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307847
Jeff Johnson295189b2012-06-20 16:38:30 -07007848 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007849 /* Notify TL about DEL BA in case of recipinet */
7850 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
7851 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
7852 {
7853 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
7854 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007855 /*
7856 * No respone required for WDA_DELBA_IND so just free the request
7857 * param here
7858 */
7859 vos_mem_free(pDelBAReqParams);
7860 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7861 vos_mem_free(pWdaParams);
7862 return ;
7863}
7864
Jeff Johnson295189b2012-06-20 16:38:30 -07007865/*
7866 * FUNCTION: WDA_ProcessDelBAReq
7867 * Request to WDI to Update the DELBA REQ params.
7868 */
7869VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
7870 tDelBAParams *pDelBAReqParams)
7871{
7872 WDI_Status status = WDI_STATUS_SUCCESS ;
7873 WDI_DelBAReqParamsType *wdiDelBAReqParam =
7874 (WDI_DelBAReqParamsType *)vos_mem_malloc(
7875 sizeof(WDI_DelBAReqParamsType)) ;
7876 tWDA_ReqParams *pWdaParams ;
7877 tANI_U16 staIdx = 0;
7878 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07007879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007880 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007881 if(NULL == wdiDelBAReqParam)
7882 {
7883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007884 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007885 VOS_ASSERT(0);
7886 return VOS_STATUS_E_NOMEM;
7887 }
7888 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7889 if(NULL == pWdaParams)
7890 {
7891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007892 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007893 VOS_ASSERT(0);
7894 vos_mem_free(wdiDelBAReqParam);
7895 return VOS_STATUS_E_NOMEM;
7896 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007897 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
7898 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
7899 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
7900 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007901 pWdaParams->pWdaContext = pWDA;
7902 /* Store DEL BA pointer, as this will be used for response */
7903 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007904 /* store Params pass it to WDI */
7905 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007906 /* if BA exchange over the air is failed, clear this tid in BaBitmap
7907 * maintained in WDA, so that WDA can retry for another BA session
7908 */
7909 staIdx = pDelBAReqParams->staIdx;
7910 tid = pDelBAReqParams->baTID;
7911 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07007912 status = WDI_DelBAReq(wdiDelBAReqParam,
7913 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007914 if(IS_WDI_STATUS_FAILURE(status))
7915 {
7916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7917 "Failure in DEL BA REQ Params WDI API, free all the memory " );
7918 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7919 vos_mem_free(pWdaParams->wdaMsgParam);
7920 vos_mem_free(pWdaParams);
7921 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007922 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007923}
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007924
7925/*
7926 * FUNCTION: WDA_UpdateChReqCallback
7927 *
7928 */
7929void WDA_UpdateChReqCallback(WDI_Status status, void* pUserData)
7930{
Siddharth Bhala006c122014-05-03 12:13:27 +05307931 tWDA_ReqParams *pWdaParams;
7932 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
7933 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
7934 WDI_UpdateChannelReqinfoType *pChanInfoType;
7935 tSirUpdateChanList *pChanList;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007936
7937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7938 "<------ %s " ,__func__);
Siddharth Bhala006c122014-05-03 12:13:27 +05307939 if(NULL == pUserData)
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007940 {
7941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhala006c122014-05-03 12:13:27 +05307942 "%s: pUserData received NULL", __func__);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007943 VOS_ASSERT(0);
7944 return;
7945 }
7946
Siddharth Bhala006c122014-05-03 12:13:27 +05307947 pWdaParams = (tWDA_ReqParams *)pUserData;
7948 pwdiUpdateChReqParam =
7949 (WDI_UpdateChReqParamsType *)pWdaParams->wdaWdiApiMsgParam;
7950 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
7951 pChanInfoType = pwdiUpdateChanReqType->pchanParam;
7952 pChanList = (tSirUpdateChanList *)pWdaParams->wdaMsgParam;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007953 /*
7954 * currently there is no response message is expected between PE and
7955 * WDA, Failure return from WDI is a ASSERT condition
7956 */
7957 vos_mem_free(pChanInfoType);
7958 vos_mem_free(pChanList);
7959 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7960 vos_mem_free(pWdaParams);
7961
7962 return;
7963}
7964
7965/*
7966 * FUNCTION: WDA_ProcessUpdateChannelList
7967 * Request to WDI to Update the ChannelList params.
7968 */
7969VOS_STATUS WDA_ProcessUpdateChannelList(tWDA_CbContext *pWDA,
7970 tSirUpdateChanList *pChanList)
7971{
7972 WDI_Status status = WDI_STATUS_SUCCESS;
7973 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
7974 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
7975 WDI_UpdateChannelReqinfoType *pChanInfoType;
7976 tWDA_ReqParams *pWdaParams;
7977 wpt_uint8 i;
7978
7979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7980 "------> %s " ,__func__);
7981 if(NULL == pChanList)
7982 {
7983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7984 "%s: NULL pChanList", __func__);
7985 VOS_ASSERT(0);
7986 return VOS_STATUS_E_INVAL;
7987 }
7988
7989 if(!WDA_getFwWlanFeatCaps(UPDATE_CHANNEL_LIST))
7990 {
Ratheesh S P36dbc932015-08-07 14:28:57 +05307991 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007992 "Update channel list capability Not Supported");
7993 vos_mem_free(pChanList);
7994 return VOS_STATUS_E_INVAL;
7995 }
7996
7997 pwdiUpdateChReqParam = (WDI_UpdateChReqParamsType *)vos_mem_malloc(
7998 sizeof(WDI_UpdateChReqParamsType));
7999 if(NULL == pwdiUpdateChReqParam)
8000 {
8001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8002 "%s: VOS MEM Alloc Failed for WDI_UpdateChReqParamsType",
8003 __func__);
8004 VOS_ASSERT(0);
8005 vos_mem_free(pChanList);
8006 return VOS_STATUS_E_NOMEM;
8007 }
8008 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
8009 pChanInfoType = (WDI_UpdateChannelReqinfoType *)
8010 vos_mem_malloc(sizeof(WDI_UpdateChannelReqinfoType) *
8011 pChanList->numChan);
8012 if(NULL == pChanInfoType)
8013 {
8014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8015 "%s: VOS MEM Alloc Failure", __func__);
8016 VOS_ASSERT(0);
8017 vos_mem_free(pChanList);
8018 vos_mem_free(pwdiUpdateChReqParam);
8019 return VOS_STATUS_E_NOMEM;
8020 }
8021 vos_mem_zero(pChanInfoType, sizeof(WDI_UpdateChannelReqinfoType)
8022 * pChanList->numChan);
8023 pwdiUpdateChanReqType->pchanParam = pChanInfoType;
8024
8025 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8026 if(NULL == pWdaParams)
8027 {
8028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8029 "%s: VOS MEM Alloc Failure", __func__);
8030 VOS_ASSERT(0);
8031 vos_mem_free(pChanList);
8032 vos_mem_free(pChanInfoType);
8033 vos_mem_free(pwdiUpdateChReqParam);
8034 return VOS_STATUS_E_NOMEM;
8035 }
8036 pwdiUpdateChanReqType->numchan = pChanList->numChan;
8037
8038 for(i = 0; i < pwdiUpdateChanReqType->numchan; i++)
8039 {
8040 pChanInfoType->mhz =
8041 vos_chan_to_freq(pChanList->chanParam[i].chanId);
8042
8043 pChanInfoType->band_center_freq1 = pChanInfoType->mhz;
8044 pChanInfoType->band_center_freq2 = 0;
8045
8046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8047 "chan[%d] = %u", i, pChanInfoType->mhz);
8048 if (pChanList->chanParam[i].dfsSet)
8049 {
8050 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_PASSIVE);
8051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8052 "chan[%d] DFS[%d]", pChanList->chanParam[i].chanId,
8053 pChanList->chanParam[i].dfsSet);
8054 }
8055
8056 if (pChanInfoType->mhz < WDA_2_4_GHZ_MAX_FREQ)
8057 {
8058 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11G);
8059 }
8060 else
8061 {
8062 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11A);
8063 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_HT);
8064 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_VHT);
8065 }
8066
8067 WDA_SET_CHANNEL_MAX_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
8068 WDA_SET_CHANNEL_REG_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
Sachin Ahujacb64fc82015-01-12 17:01:05 +05308069 WDA_SET_CUURENT_REG_DOMAIN(pChanInfoType, pChanList->regId);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08008070 pChanInfoType++;
8071 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08008072 pwdiUpdateChReqParam->wdiReqStatusCB = NULL;
8073 pWdaParams->pWdaContext = pWDA;
8074 pWdaParams->wdaMsgParam = (void *)pChanList;
8075 /* store Params pass it to WDI */
8076 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiUpdateChReqParam;
8077 status = WDI_UpdateChannelReq(pwdiUpdateChReqParam,
8078 (WDI_UpdateChannelRspCb)WDA_UpdateChReqCallback, pWdaParams);
8079 if(IS_WDI_STATUS_FAILURE(status))
8080 {
8081 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8082 "Failure in Update Channel REQ Params WDI API, free all the memory");
8083 vos_mem_free(pwdiUpdateChanReqType->pchanParam);
8084 vos_mem_free(pwdiUpdateChReqParam);
8085 vos_mem_free(pWdaParams->wdaMsgParam);
8086 vos_mem_free(pWdaParams);
8087 }
8088 return CONVERT_WDI2VOS_STATUS(status);
8089}
8090
Jeff Johnson295189b2012-06-20 16:38:30 -07008091/*
8092 * FUNCTION: WDA_AddTSReqCallback
8093 * send ADD TS RSP back to PE
8094 */
8095void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
8096{
8097 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308098 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008099 tAddTsParams *pAddTsReqParams;
8100
8101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008102 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008103 if(NULL == pWdaParams)
8104 {
8105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008106 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008107 VOS_ASSERT(0) ;
8108 return ;
8109 }
8110 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308111 if (NULL == pWDA)
8112 {
8113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8114 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308115 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8116 vos_mem_free(pWdaParams->wdaMsgParam);
8117 vos_mem_free(pWdaParams);
8118
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308119 VOS_ASSERT(0);
8120 return ;
8121 }
8122
Jeff Johnson295189b2012-06-20 16:38:30 -07008123 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
8124 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8125 vos_mem_free(pWdaParams);
8126
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008127 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008128 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008129 return ;
8130}
8131
Jeff Johnson295189b2012-06-20 16:38:30 -07008132/*
8133 * FUNCTION: WDA_ProcessAddTSReq
8134 * Request to WDI to Update the ADD TS REQ params.
8135 */
8136VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
8137 tAddTsParams *pAddTsReqParams)
8138{
8139 WDI_Status status = WDI_STATUS_SUCCESS ;
8140 WDI_AddTSReqParamsType *wdiAddTSReqParam =
8141 (WDI_AddTSReqParamsType *)vos_mem_malloc(
8142 sizeof(WDI_AddTSReqParamsType)) ;
8143 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008145 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008146 if(NULL == wdiAddTSReqParam)
8147 {
8148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008149 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008150 VOS_ASSERT(0);
8151 return VOS_STATUS_E_NOMEM;
8152 }
8153 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8154 if(NULL == pWdaParams)
8155 {
8156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008157 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008158 VOS_ASSERT(0);
8159 vos_mem_free(wdiAddTSReqParam);
8160 return VOS_STATUS_E_NOMEM;
8161 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008162 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
8163 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008164 //TS IE
8165 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
8166 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
8167 pAddTsReqParams->tspec.length;
8168
8169 //TS IE : TS INFO : TRAFFIC
8170 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
8171 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
8172 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
8173 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
8174 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
8175 pAddTsReqParams->tspec.tsinfo.traffic.psb;
8176 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
8177 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
8178 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
8179 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
8180 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
8181 pAddTsReqParams->tspec.tsinfo.traffic.direction;
8182 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
8183 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
8184 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
8185 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
8186
8187 //TS IE : TS INFO : SCHEDULE
8188 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
8189 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
8190 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
8191 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07008192 //TS IE
8193 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
8194 pAddTsReqParams->tspec.nomMsduSz;
8195 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
8196 pAddTsReqParams->tspec.maxMsduSz;
8197 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
8198 pAddTsReqParams->tspec.minSvcInterval;
8199 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
8200 pAddTsReqParams->tspec.maxSvcInterval;
8201 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
8202 pAddTsReqParams->tspec.inactInterval;
8203 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
8204 pAddTsReqParams->tspec.suspendInterval;
8205 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
8206 pAddTsReqParams->tspec.svcStartTime;
8207 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
8208 pAddTsReqParams->tspec.minDataRate;
8209 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
8210 pAddTsReqParams->tspec.meanDataRate;
8211 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
8212 pAddTsReqParams->tspec.peakDataRate;
8213 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
8214 pAddTsReqParams->tspec.maxBurstSz;
8215 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
8216 pAddTsReqParams->tspec.delayBound;
8217 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
8218 pAddTsReqParams->tspec.minPhyRate;
8219 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
8220 pAddTsReqParams->tspec.surplusBw;
8221 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
8222 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07008223 /* TODO: tAddTsParams doesn't have the following fields */
8224#if 0
8225 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
8226 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
8227 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
8228 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
8229#endif
8230 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
8231
8232 pWdaParams->pWdaContext = pWDA;
8233 /* Store ADD TS pointer, as this will be used for response */
8234 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008235 /* store Params pass it to WDI */
8236 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008237 status = WDI_AddTSReq(wdiAddTSReqParam,
8238 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008239 if(IS_WDI_STATUS_FAILURE(status))
8240 {
8241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8242 "Failure in ADD TS REQ Params WDI API, free all the memory " );
8243 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8244 vos_mem_free(pWdaParams);
8245 pAddTsReqParams->status = eSIR_FAILURE ;
8246 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
8247 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008248 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008249}
8250
Jeff Johnson295189b2012-06-20 16:38:30 -07008251/*
8252 * FUNCTION: WDA_DelTSReqCallback
8253 * send DEL TS RSP back to PE
8254 */
8255void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
8256{
8257 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008259 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008260 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8261 vos_mem_free(pWdaParams->wdaMsgParam) ;
8262 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008263 /*
8264 * No respone required for WDA_DEL_TS_REQ so just free the request
8265 * param here
8266 */
Jeff Johnson295189b2012-06-20 16:38:30 -07008267 return ;
8268}
8269
Jeff Johnson295189b2012-06-20 16:38:30 -07008270/*
8271 * FUNCTION: WDA_ProcessDelTSReq
8272 * Request to WDI to Update the DELTS REQ params.
8273 */
8274VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
8275 tDelTsParams *pDelTSReqParams)
8276{
8277 WDI_Status status = WDI_STATUS_SUCCESS ;
8278 WDI_DelTSReqParamsType *wdiDelTSReqParam =
8279 (WDI_DelTSReqParamsType *)vos_mem_malloc(
8280 sizeof(WDI_DelTSReqParamsType)) ;
8281 tWDA_ReqParams *pWdaParams ;
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 if(NULL == wdiDelTSReqParam)
8285 {
8286 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008287 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008288 VOS_ASSERT(0);
8289 return VOS_STATUS_E_NOMEM;
8290 }
8291 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8292 if(NULL == pWdaParams)
8293 {
8294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008295 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008296 VOS_ASSERT(0);
8297 vos_mem_free(wdiDelTSReqParam);
8298 return VOS_STATUS_E_NOMEM;
8299 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008300 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
8301 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
8302 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
8303 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
8304 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008305 pWdaParams->pWdaContext = pWDA;
8306 /* Store DEL TS pointer, as this will be used for response */
8307 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008308 /* store Params pass it to WDI */
8309 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008310 status = WDI_DelTSReq(wdiDelTSReqParam,
8311 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008312 if(IS_WDI_STATUS_FAILURE(status))
8313 {
8314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8315 "Failure in DEL TS REQ Params WDI API, free all the memory " );
8316 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8317 vos_mem_free(pWdaParams->wdaMsgParam);
8318 vos_mem_free(pWdaParams);
8319 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008320 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008321}
Jeff Johnson295189b2012-06-20 16:38:30 -07008322/*
8323 * FUNCTION: WDA_UpdateBeaconParamsCallback
8324 * Free the memory. No need to send any response to PE in this case
8325 */
8326void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
8327{
8328 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008330 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008331 if(NULL == pWdaParams)
8332 {
8333 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008334 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008335 VOS_ASSERT(0) ;
8336 return ;
8337 }
8338 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8339 vos_mem_free(pWdaParams->wdaMsgParam) ;
8340 vos_mem_free(pWdaParams);
8341 /*
8342 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
8343 * param here
8344 */
Jeff Johnson295189b2012-06-20 16:38:30 -07008345 return ;
8346}
Jeff Johnson295189b2012-06-20 16:38:30 -07008347/*
8348 * FUNCTION: WDA_ProcessUpdateBeaconParams
8349 * Request to WDI to send the beacon parameters to HAL to update the Hardware
8350 */
8351VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
8352 tUpdateBeaconParams *pUpdateBeaconParams)
8353{
8354 WDI_Status status = WDI_STATUS_SUCCESS ;
8355 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
8356 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
8357 sizeof(WDI_UpdateBeaconParamsType)) ;
8358 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008360 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008361 if(NULL == wdiUpdateBeaconParams)
8362 {
8363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008364 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008365 VOS_ASSERT(0);
8366 return VOS_STATUS_E_NOMEM;
8367 }
8368 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8369 if(NULL == pWdaParams)
8370 {
8371 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008372 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008373 VOS_ASSERT(0);
8374 vos_mem_free(wdiUpdateBeaconParams);
8375 return VOS_STATUS_E_NOMEM;
8376 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008377 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
8378 pUpdateBeaconParams->bssIdx;
8379 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
8380 pUpdateBeaconParams->fShortPreamble;
8381 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
8382 pUpdateBeaconParams->fShortSlotTime;
8383 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
8384 pUpdateBeaconParams->beaconInterval;
8385 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
8386 pUpdateBeaconParams->llaCoexist;
8387 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
8388 pUpdateBeaconParams->llbCoexist;
8389 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
8390 pUpdateBeaconParams->llgCoexist;
8391 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
8392 pUpdateBeaconParams->ht20MhzCoexist;
8393 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
8394 pUpdateBeaconParams->llnNonGFCoexist;
8395 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
8396 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
8397 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
8398 pUpdateBeaconParams->fRIFSMode;
8399 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
8400 pUpdateBeaconParams->paramChangeBitmap;
8401 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
8402
8403 pWdaParams->pWdaContext = pWDA;
8404 /* Store UpdateBeacon Req pointer, as this will be used for response */
8405 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008406 /* store Params pass it to WDI */
8407 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008408 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
8409 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
8410 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008411 if(IS_WDI_STATUS_FAILURE(status))
8412 {
8413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8414 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
8415 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8416 vos_mem_free(pWdaParams->wdaMsgParam);
8417 vos_mem_free(pWdaParams);
8418 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008419 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008420}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08008421#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -07008422/*
8423 * FUNCTION: WDA_TSMStatsReqCallback
8424 * send TSM Stats RSP back to PE
8425 */
8426void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
8427{
8428 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8429 tWDA_CbContext *pWDA = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07008430 tpAniGetTsmStatsRsp pTsmRspParams = NULL;
8431 tpAniGetTsmStatsReq pGetTsmStatsReqParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008432
8433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008434 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008435 if(NULL == pWdaParams)
8436 {
8437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008438 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008439 VOS_ASSERT(0) ;
8440 return ;
8441 }
8442 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308443 if (NULL == pWDA)
8444 {
8445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8446 "%s:pWDA is NULL", __func__);
8447 VOS_ASSERT(0);
8448 return ;
8449 }
8450
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07008451 pGetTsmStatsReqParams = (tAniGetTsmStatsReq *)pWdaParams->wdaMsgParam;
8452
8453 if(NULL == pGetTsmStatsReqParams)
8454 {
8455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8456 "%s: pGetTsmStatsReqParams received NULL", __func__);
8457 VOS_ASSERT(0);
8458 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8459 vos_mem_free(pWdaParams);
8460 return;
8461 }
8462
8463 pTsmRspParams =
8464 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
Jeff Johnson295189b2012-06-20 16:38:30 -07008465 if( NULL == pTsmRspParams )
8466 {
8467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008468 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008469 VOS_ASSERT( 0 );
8470 return ;
8471 }
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07008472 vos_mem_set(pTsmRspParams, sizeof(tAniGetTsmStatsRsp), 0);
8473 pTsmRspParams->rc = pwdiTSMStatsRspParams->wdiStatus;
8474 pTsmRspParams->staId = pGetTsmStatsReqParams->staId;
8475
Jeff Johnson295189b2012-06-20 16:38:30 -07008476 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
8477 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
8478 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
8479 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
8480 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
8481 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
8482 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
8483 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
8484 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
8485 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07008486
8487 /* Assign get tsm stats req req (backup) in to the response */
8488 pTsmRspParams->tsmStatsReq = pGetTsmStatsReqParams;
8489
8490 /* free WDI command buffer */
8491 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8492 vos_mem_free(pWdaParams);
8493
Jeff Johnson295189b2012-06-20 16:38:30 -07008494 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008495 return ;
8496}
8497
8498
Jeff Johnson295189b2012-06-20 16:38:30 -07008499/*
8500 * FUNCTION: WDA_ProcessTsmStatsReq
8501 * Request to WDI to get the TSM Stats params.
8502 */
8503VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07008504 tpAniGetTsmStatsReq pTsmStats)
Jeff Johnson295189b2012-06-20 16:38:30 -07008505{
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07008506 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008507 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07008508 tWDA_ReqParams *pWdaParams = NULL;
8509 tAniGetTsmStatsRsp *pGetTsmStatsRspParams = NULL;
8510
Jeff Johnson295189b2012-06-20 16:38:30 -07008511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008512 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008513 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
8514 sizeof(WDI_TSMStatsReqParamsType));
8515 if(NULL == wdiTSMReqParam)
8516 {
8517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008518 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008519 VOS_ASSERT(0);
8520 return VOS_STATUS_E_NOMEM;
8521 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008522 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8523 if(NULL == pWdaParams)
8524 {
8525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008526 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008527 VOS_ASSERT(0);
8528 vos_mem_free(wdiTSMReqParam);
8529 return VOS_STATUS_E_NOMEM;
8530 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008531 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
8532 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
8533 pTsmStats->bssId,
8534 sizeof(wpt_macAddr));
8535 wdiTSMReqParam->wdiReqStatusCB = NULL ;
8536
8537 pWdaParams->pWdaContext = pWDA;
8538 /* Store TSM Stats pointer, as this will be used for response */
8539 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07008540 pWdaParams->wdaWdiApiMsgParam = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008541 status = WDI_TSMStatsReq(wdiTSMReqParam,
8542 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008543 if(IS_WDI_STATUS_FAILURE(status))
8544 {
8545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8546 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07008547 vos_mem_free(pWdaParams);
8548
8549 pGetTsmStatsRspParams =
8550 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
8551 if(NULL == pGetTsmStatsRspParams)
8552 {
8553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8554 "%s: VOS MEM Alloc Failure", __func__);
8555 VOS_ASSERT(0);
8556 vos_mem_free(pTsmStats);
8557 return VOS_STATUS_E_NOMEM;
8558 }
8559 pGetTsmStatsRspParams->staId = pTsmStats->staId;
8560 pGetTsmStatsRspParams->rc = eSIR_FAILURE;
8561 pGetTsmStatsRspParams->tsmStatsReq = pTsmStats;
8562
8563 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pGetTsmStatsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008564 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008565 return CONVERT_WDI2VOS_STATUS(status) ;
8566}
8567#endif
8568/*
8569 * FUNCTION: WDA_SendBeaconParamsCallback
8570 * No need to send any response to PE in this case
8571 */
8572void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
8573{
8574
Jeff Johnson295189b2012-06-20 16:38:30 -07008575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008576 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008577 return ;
8578}
Jeff Johnson295189b2012-06-20 16:38:30 -07008579/*
8580 * FUNCTION: WDA_ProcessSendBeacon
8581 * Request to WDI to send the beacon template to HAL to update the TPE memory and
8582 * start beacon trasmission
8583 */
8584VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
8585 tSendbeaconParams *pSendbeaconParams)
8586{
8587 WDI_Status status = WDI_STATUS_SUCCESS ;
8588 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008590 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008591 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
8592 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
8593 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
8594 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07008595 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
8596 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05308597 /* p2pIeOffset should be atleast greater than timIeOffset */
8598 if ((pSendbeaconParams->p2pIeOffset != 0) &&
8599 (pSendbeaconParams->p2pIeOffset <
8600 pSendbeaconParams->timIeOffset))
8601 {
8602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8603 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308604 vos_mem_free(pSendbeaconParams);
Gopichand Nakkala81aef732013-03-22 11:15:19 +05308605 VOS_ASSERT( 0 );
8606 return WDI_STATUS_E_FAILURE;
8607 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008608 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
8609 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07008610 /* Copy the beacon template to local buffer */
8611 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
8612 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
8613 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
8614
Jeff Johnson295189b2012-06-20 16:38:30 -07008615 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
8616 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07008617 if(IS_WDI_STATUS_FAILURE(status))
8618 {
8619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8620 "Failure in SEND BEACON REQ Params WDI API" );
8621 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008622 vos_mem_free(pSendbeaconParams);
8623 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07008624}
Jeff Johnson295189b2012-06-20 16:38:30 -07008625/*
8626 * FUNCTION: WDA_UpdateProbeRspParamsCallback
8627 * No need to send any response to PE in this case
8628 */
8629void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
8630{
Jeff Johnson295189b2012-06-20 16:38:30 -07008631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008632 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008633 return ;
8634}
8635
Jeff Johnson295189b2012-06-20 16:38:30 -07008636/*
8637 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
8638 * Request to WDI to send the probe response template to HAL to update the TPE memory and
8639 * send probe response
8640 */
8641VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
8642 tSendProbeRespParams *pSendProbeRspParams)
8643{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008644 WDI_Status status = WDI_STATUS_SUCCESS;
8645 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
8646 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07008647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008648 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008649
8650 if (!wdiSendProbeRspParam)
Ratheesh S P62439fe2015-06-11 15:53:31 +05308651 {
8652 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008653 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308654 }
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008655
Jeff Johnson295189b2012-06-20 16:38:30 -07008656 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008657 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07008658 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008659 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07008660 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07008661 /* Copy the Probe Response template to local buffer */
8662 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008663 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07008664 pSendProbeRspParams->pProbeRespTemplate,
8665 pSendProbeRspParams->probeRespTemplateLen);
8666 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008667 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07008668 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
8669 WDI_PROBE_REQ_BITMAP_IE_LEN);
8670
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008671 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008672
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008673 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07008674 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07008675 if(IS_WDI_STATUS_FAILURE(status))
8676 {
8677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8678 "Failure in SEND Probe RSP Params WDI API" );
8679 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008680 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008681 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07008682 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07008683}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08008684#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -07008685/*
8686 * FUNCTION: WDA_SetMaxTxPowerCallBack
8687 * send the response to PE with power value received from WDI
8688 */
8689void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
8690 void* pUserData)
8691{
8692 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8693 tWDA_CbContext *pWDA = NULL;
8694 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
8695
8696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008697 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008698 if(NULL == pWdaParams)
8699 {
8700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008701 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008702 VOS_ASSERT(0) ;
8703 return ;
8704 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008705 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308706 if (NULL == pWDA)
8707 {
8708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8709 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308710 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8711 vos_mem_free(pWdaParams->wdaMsgParam);
8712 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308713 VOS_ASSERT(0);
8714 return ;
8715 }
8716
Jeff Johnson295189b2012-06-20 16:38:30 -07008717 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008718 if( NULL == pMaxTxPowerParams )
8719 {
8720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008721 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07008722 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008723 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8724 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008725 return ;
8726 }
Jeff Johnsone7245742012-09-05 17:12:55 -07008727
Jeff Johnson295189b2012-06-20 16:38:30 -07008728
8729 /*need to free memory for the pointers used in the
8730 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008731 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8732 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008733 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07008734
Jeff Johnson295189b2012-06-20 16:38:30 -07008735
8736 /* send response to UMAC*/
8737 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
8738
8739 return;
8740}
Jeff Johnson295189b2012-06-20 16:38:30 -07008741/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008742 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07008743 * Request to WDI to send set Max Tx Power Request
8744 */
8745 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
8746 tMaxTxPowerParams *MaxTxPowerParams)
8747{
8748 WDI_Status status = WDI_STATUS_SUCCESS;
8749 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
8750 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008751
Jeff Johnson295189b2012-06-20 16:38:30 -07008752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008753 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008754
Jeff Johnson295189b2012-06-20 16:38:30 -07008755 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
8756 sizeof(WDI_SetMaxTxPowerParamsType));
8757 if(NULL == wdiSetMaxTxPowerParams)
8758 {
8759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008760 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008761 VOS_ASSERT(0);
8762 return VOS_STATUS_E_NOMEM;
8763 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008764 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8765 if(NULL == pWdaParams)
8766 {
8767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008768 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008769 vos_mem_free(wdiSetMaxTxPowerParams);
8770 VOS_ASSERT(0);
8771 return VOS_STATUS_E_NOMEM;
8772 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008773 /* Copy.Max.Tx.Power Params to WDI structure */
8774 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
8775 MaxTxPowerParams->bssId,
8776 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008777 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
8778 MaxTxPowerParams->selfStaMacAddr,
8779 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008780 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
8781 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07008782 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008783 pWdaParams->pWdaContext = pWDA;
8784 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008785 /* store Params pass it to WDI */
8786 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008787 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
8788 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008789 if(IS_WDI_STATUS_FAILURE(status))
8790 {
8791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8792 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
8793 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8794 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008795 /* send response to UMAC*/
8796 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008797 }
8798 return CONVERT_WDI2VOS_STATUS(status);
8799
8800}
Jeff Johnson295189b2012-06-20 16:38:30 -07008801#endif
schang86c22c42013-03-13 18:41:24 -07008802
8803/*
Arif Hussaina5ebce02013-08-09 15:09:58 -07008804 * FUNCTION: WDA_SetMaxTxPowerPerBandCallBack
8805 * send the response to PE with power value received from WDI
8806 */
8807void WDA_SetMaxTxPowerPerBandCallBack(WDI_SetMaxTxPowerPerBandRspMsg
8808 *pwdiSetMaxTxPowerPerBandRsp,
8809 void* pUserData)
8810{
8811 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8812 tWDA_CbContext *pWDA = NULL;
8813 tMaxTxPowerPerBandParams *pMxTxPwrPerBandParams = NULL;
8814
8815 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8816 "<------ %s ", __func__);
8817 if (NULL == pWdaParams)
8818 {
8819 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8820 "%s: pWdaParams received NULL", __func__);
8821 VOS_ASSERT(0);
8822 return ;
8823 }
8824 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308825 if (NULL == pWDA)
8826 {
8827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8828 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308829 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8830 vos_mem_free(pWdaParams->wdaMsgParam);
8831 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308832 VOS_ASSERT(0);
8833 return ;
8834 }
8835
Arif Hussaina5ebce02013-08-09 15:09:58 -07008836 pMxTxPwrPerBandParams = (tMaxTxPowerPerBandParams*)pWdaParams->wdaMsgParam;
8837 if ( NULL == pMxTxPwrPerBandParams )
8838 {
8839 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8840 "%s: pMxTxPwrPerBandParams received NULL ", __func__);
8841 VOS_ASSERT(0);
8842 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8843 vos_mem_free(pWdaParams);
8844 return;
8845 }
8846
8847 /*need to free memory for the pointers used in the
8848 WDA Process.Set Max Tx Power Req function*/
8849 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8850 vos_mem_free(pWdaParams);
8851 pMxTxPwrPerBandParams->power = pwdiSetMaxTxPowerPerBandRsp->ucPower;
8852
8853 /* send response to UMAC*/
8854 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
8855 pMxTxPwrPerBandParams, 0);
8856
8857 return;
8858}
8859
8860/*
8861 * FUNCTION: WDA_ProcessSetMaxTxPowerPerBandReq
8862 * Request to WDI to send set Max Tx Power Per band Request
8863 */
8864 VOS_STATUS WDA_ProcessSetMaxTxPowerPerBandReq(tWDA_CbContext *pWDA,
8865 tMaxTxPowerPerBandParams
8866 *MaxTxPowerPerBandParams)
8867{
8868 WDI_Status status = WDI_STATUS_SUCCESS;
8869 WDI_SetMaxTxPowerPerBandParamsType *wdiSetMxTxPwrPerBandParams = NULL;
8870 tWDA_ReqParams *pWdaParams = NULL;
8871
8872 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8873 "------> %s ", __func__);
8874
8875 wdiSetMxTxPwrPerBandParams = vos_mem_malloc(
8876 sizeof(WDI_SetMaxTxPowerPerBandParamsType));
8877
8878 if (NULL == wdiSetMxTxPwrPerBandParams)
8879 {
8880 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8881 "%s: VOS MEM Alloc Failure", __func__);
8882 VOS_ASSERT(0);
8883 return VOS_STATUS_E_NOMEM;
8884 }
8885 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8886 if (NULL == pWdaParams)
8887 {
8888 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8889 "%s: VOS MEM Alloc Failure", __func__);
8890 vos_mem_free(wdiSetMxTxPwrPerBandParams);
8891 VOS_ASSERT(0);
8892 return VOS_STATUS_E_NOMEM;
8893 }
8894 /* Copy.Max.Tx.Power.Per.Band Params to WDI structure */
8895 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.bandInfo = \
8896 MaxTxPowerPerBandParams->bandInfo;
8897 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.ucPower = \
8898 MaxTxPowerPerBandParams->power;
8899 wdiSetMxTxPwrPerBandParams->wdiReqStatusCB = NULL;
8900 pWdaParams->pWdaContext = pWDA;
8901 pWdaParams->wdaMsgParam = (void *)MaxTxPowerPerBandParams;
8902 /* store Params pass it to WDI */
8903 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMxTxPwrPerBandParams;
8904 status = WDI_SetMaxTxPowerPerBandReq(wdiSetMxTxPwrPerBandParams,
8905 WDA_SetMaxTxPowerPerBandCallBack,
8906 pWdaParams);
8907 if (IS_WDI_STATUS_FAILURE(status))
8908 {
8909 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8910 "Failure in SET MAX TX Power REQ Params WDI API,"
8911 " free all the memory");
8912 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8913 vos_mem_free(pWdaParams);
8914 /* send response to UMAC*/
8915 WDA_SendMsg(pWDA,
8916 WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
8917 MaxTxPowerPerBandParams, 0);
8918 }
8919 return CONVERT_WDI2VOS_STATUS(status);
8920}
8921
8922/*
schang86c22c42013-03-13 18:41:24 -07008923 * FUNCTION: WDA_SetTxPowerCallBack
8924 * send the response to PE with power value received from WDI
8925 */
8926void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
8927 void* pUserData)
8928{
8929 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8930 tWDA_CbContext *pWDA = NULL;
8931 tSirSetTxPowerReq *pTxPowerParams = NULL;
8932
8933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8934 "<------ %s ", __func__);
8935 if(NULL == pWdaParams)
8936 {
8937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8938 "%s: pWdaParams received NULL", __func__);
8939 VOS_ASSERT(0) ;
8940 return ;
8941 }
8942 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308943 if (NULL == pWDA)
8944 {
8945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8946 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308947 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8948 vos_mem_free(pWdaParams->wdaMsgParam);
8949 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308950 VOS_ASSERT(0);
8951 return ;
8952 }
8953
schang86c22c42013-03-13 18:41:24 -07008954 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
8955 if(NULL == pTxPowerParams)
8956 {
8957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8958 "%s: pTxPowerParams received NULL " ,__func__);
8959 VOS_ASSERT(0);
8960 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8961 vos_mem_free(pWdaParams);
8962 return ;
8963 }
8964
8965 /*need to free memory for the pointers used in the
8966 WDA Process.Set Max Tx Power Req function*/
8967 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8968 vos_mem_free(pWdaParams);
8969
8970 /* send response to UMAC*/
8971 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
8972 return;
8973}
8974
8975/*
8976 * FUNCTION: WDA_ProcessSetTxPowerReq
8977 * Request to WDI to send set Tx Power Request
8978 */
8979 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
8980 tSirSetTxPowerReq *txPowerParams)
8981{
8982 WDI_Status status = WDI_STATUS_SUCCESS;
8983 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
8984 tWDA_ReqParams *pWdaParams = NULL;
8985
8986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8987 "------> %s ", __func__);
8988
8989 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
8990 sizeof(WDI_SetTxPowerParamsType));
8991 if(NULL == wdiSetTxPowerParams)
8992 {
8993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8994 "%s: VOS MEM Alloc Failure", __func__);
8995 VOS_ASSERT(0);
8996 return VOS_STATUS_E_NOMEM;
8997 }
8998 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8999 if(NULL == pWdaParams)
9000 {
9001 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9002 "%s: VOS MEM Alloc Failure", __func__);
9003 vos_mem_free(wdiSetTxPowerParams);
9004 VOS_ASSERT(0);
9005 return VOS_STATUS_E_NOMEM;
9006 }
9007 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
9008 txPowerParams->bssIdx;
9009 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
9010 txPowerParams->mwPower;
9011 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
9012 pWdaParams->pWdaContext = pWDA;
9013 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
9014 /* store Params pass it to WDI */
9015 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
9016 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
9017 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
9018 if(IS_WDI_STATUS_FAILURE(status))
9019 {
9020 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9021 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
9022 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9023 vos_mem_free(pWdaParams);
9024 /* send response to UMAC*/
9025 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
9026 }
9027 return CONVERT_WDI2VOS_STATUS(status);
9028}
9029
Jeff Johnson295189b2012-06-20 16:38:30 -07009030/*
9031 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
9032 * Free the memory. No need to send any response to PE in this case
9033 */
9034void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
9035{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009036 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9037
Jeff Johnson295189b2012-06-20 16:38:30 -07009038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009039 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009040
9041 if(NULL == pWdaParams)
9042 {
9043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009044 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009045 VOS_ASSERT(0) ;
9046 return ;
9047 }
9048
9049 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9050 vos_mem_free(pWdaParams->wdaMsgParam) ;
9051 vos_mem_free(pWdaParams);
9052
Jeff Johnson295189b2012-06-20 16:38:30 -07009053 /*
9054 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
9055 * so just free the request param here
9056 */
Jeff Johnson295189b2012-06-20 16:38:30 -07009057 return ;
9058}
9059
Jeff Johnson295189b2012-06-20 16:38:30 -07009060/*
9061 * FUNCTION: WDA_ProcessSetP2PGONOAReq
9062 * Request to WDI to set the P2P Group Owner Notice of Absence Req
9063 */
9064VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
9065 tP2pPsParams *pP2pPsConfigParams)
9066{
9067 WDI_Status status = WDI_STATUS_SUCCESS ;
9068 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
9069 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
9070 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009071 tWDA_ReqParams *pWdaParams = NULL;
9072
Jeff Johnson295189b2012-06-20 16:38:30 -07009073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009074 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009075 if(NULL == wdiSetP2PGONOAReqParam)
9076 {
9077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009078 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05309079 vos_mem_free(pP2pPsConfigParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009080 VOS_ASSERT(0);
9081 return VOS_STATUS_E_NOMEM;
9082 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009083
9084 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9085 if(NULL == pWdaParams)
9086 {
9087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009088 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009089 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009090 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009091 VOS_ASSERT(0);
9092 return VOS_STATUS_E_NOMEM;
9093 }
9094
Jeff Johnson295189b2012-06-20 16:38:30 -07009095 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
9096 pP2pPsConfigParams->opp_ps;
9097 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
9098 pP2pPsConfigParams->ctWindow;
9099 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
9100 pP2pPsConfigParams->count;
9101 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
9102 pP2pPsConfigParams->duration;
9103 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
9104 pP2pPsConfigParams->interval;
9105 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
9106 pP2pPsConfigParams->single_noa_duration;
9107 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
9108 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009109
Jeff Johnson295189b2012-06-20 16:38:30 -07009110 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
9111 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009112 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
9113
Jeff Johnson295189b2012-06-20 16:38:30 -07009114 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009115 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
9116 pWdaParams->pWdaContext = pWDA;
9117
Jeff Johnson295189b2012-06-20 16:38:30 -07009118 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009119 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
9120
Jeff Johnson295189b2012-06-20 16:38:30 -07009121 if(IS_WDI_STATUS_FAILURE(status))
9122 {
9123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9124 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009125 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9126 vos_mem_free(pWdaParams->wdaMsgParam);
9127 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009128 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009129 return CONVERT_WDI2VOS_STATUS(status);
9130
Jeff Johnson295189b2012-06-20 16:38:30 -07009131}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309132
9133#ifdef FEATURE_WLAN_TDLS
9134/*
9135 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
9136 * Free the memory. No need to send any response to PE in this case
9137 */
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05309138void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
9139 void* pUserData)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309140{
9141 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9142 tWDA_CbContext *pWDA = NULL;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05309143 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309144
9145
9146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9147 "<------ %s " ,__func__);
9148 if(NULL == pWdaParams)
9149 {
9150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9151 "%s: pWdaParams received NULL", __func__);
9152 VOS_ASSERT(0) ;
9153 return ;
9154 }
9155 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
9156
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309157 if (NULL == pWDA)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309158 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9160 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05309161 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9162 vos_mem_free(pWdaParams->wdaMsgParam);
9163 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309164 VOS_ASSERT(0);
9165 return ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309166 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309167
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05309168 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
9169 if( NULL == pTdlsLinkEstablishParams )
9170 {
9171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9172 "%s: pTdlsLinkEstablishParams "
9173 "received NULL " ,__func__);
9174 VOS_ASSERT(0);
9175 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9176 vos_mem_free(pWdaParams);
9177 return ;
9178 }
9179 pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
9180 wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309181 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309182 vos_mem_free(pWdaParams);
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05309183 /* send response to UMAC*/
9184 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
9185
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309186 return ;
9187}
9188
9189VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
9190 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
9191{
9192 WDI_Status status = WDI_STATUS_SUCCESS ;
9193 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
9194 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
9195 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
9196 tWDA_ReqParams *pWdaParams = NULL;
9197 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9198 "------> %s " ,__func__);
9199 if(NULL == wdiSetTDLSLinkEstablishReqParam)
9200 {
9201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9202 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05309203 vos_mem_free(pTdlsLinkEstablishParams);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309204 VOS_ASSERT(0);
9205 return VOS_STATUS_E_NOMEM;
9206 }
9207 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9208 if(NULL == pWdaParams)
9209 {
9210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9211 "%s: VOS MEM Alloc Failure", __func__);
9212 vos_mem_free(pTdlsLinkEstablishParams);
9213 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
9214 VOS_ASSERT(0);
9215 return VOS_STATUS_E_NOMEM;
9216 }
9217 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05309218 pTdlsLinkEstablishParams->staIdx;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309219 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05309220 pTdlsLinkEstablishParams->isResponder;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309221 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05309222 pTdlsLinkEstablishParams->uapsdQueues;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309223 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05309224 pTdlsLinkEstablishParams->maxSp;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309225 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05309226 pTdlsLinkEstablishParams->isBufsta;
Naresh Jayaramc7cbd782014-02-04 17:38:23 +05309227 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsOffChannelSupported =
9228 pTdlsLinkEstablishParams->isOffChannelSupported;
9229
9230 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannels,
9231 pTdlsLinkEstablishParams->validChannels,
9232 pTdlsLinkEstablishParams->validChannelsLen);
9233
9234 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannelsLen =
9235 pTdlsLinkEstablishParams->validChannelsLen;
9236
9237 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClasses,
9238 pTdlsLinkEstablishParams->validOperClasses,
9239 pTdlsLinkEstablishParams->validOperClassesLen);
9240 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClassesLen =
9241 pTdlsLinkEstablishParams->validOperClassesLen;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309242
9243 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
9244 /* Store msg pointer from PE, as this will be used for response */
9245 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
9246 /* store Params pass it to WDI */
9247 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
9248 pWdaParams->pWdaContext = pWDA;
9249
9250 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
9251 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
9252 WDA_SetTDLSLinkEstablishReqParamsCallback,
9253 pWdaParams);
9254 if(IS_WDI_STATUS_FAILURE(status))
9255 {
9256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9257 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
9258 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9259 vos_mem_free(pWdaParams->wdaMsgParam);
9260 vos_mem_free(pWdaParams);
9261 }
9262 return CONVERT_WDI2VOS_STATUS(status);
9263}
Atul Mittalc0f739f2014-07-31 13:47:47 +05309264
9265// tdlsoffchan
9266void WDA_SetTDLSChanSwitchReqParamsCallback(WDI_SetTdlsChanSwitchReqResp *wdiSetTdlsChanSwitchReqRsp,
9267 void* pUserData)
9268{
9269 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9270 tWDA_CbContext *pWDA = NULL;
9271 tTdlsChanSwitchParams *pTdlsChanSwitchParams;
9272
9273
9274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9275 "<------ %s " ,__func__);
9276 if(NULL == pWdaParams)
9277 {
9278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9279 "%s: pWdaParams received NULL", __func__);
Atul Mittalc0f739f2014-07-31 13:47:47 +05309280 VOS_ASSERT(0) ;
9281 return ;
9282 }
9283 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
9284
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309285 if (NULL == pWDA)
Atul Mittal60bd4292014-08-14 12:19:27 +05309286 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9288 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05309289 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9290 vos_mem_free(pWdaParams->wdaMsgParam);
9291 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309292 VOS_ASSERT(0);
9293 return ;
Atul Mittal60bd4292014-08-14 12:19:27 +05309294 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309295
Atul Mittalc0f739f2014-07-31 13:47:47 +05309296 pTdlsChanSwitchParams = (tTdlsChanSwitchParams *)pWdaParams->wdaMsgParam ;
Atul Mittal60bd4292014-08-14 12:19:27 +05309297 if( NULL == pTdlsChanSwitchParams )
Atul Mittalc0f739f2014-07-31 13:47:47 +05309298 {
9299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9300 "%s: pTdlsChanSwitchParams "
9301 "received NULL " ,__func__);
9302 VOS_ASSERT(0);
9303 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9304 vos_mem_free(pWdaParams);
9305 return ;
9306 }
9307 pTdlsChanSwitchParams->status = CONVERT_WDI2SIR_STATUS(
9308 wdiSetTdlsChanSwitchReqRsp->wdiStatus);
Atul Mittalc0f739f2014-07-31 13:47:47 +05309309 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9310 vos_mem_free(pWdaParams);
Atul Mittal60bd4292014-08-14 12:19:27 +05309311 /* send response to UMAC*/
9312 WDA_SendMsg(pWDA, WDA_SET_TDLS_CHAN_SWITCH_REQ_RSP, pTdlsChanSwitchParams, 0) ;
Atul Mittalc0f739f2014-07-31 13:47:47 +05309313
9314 return ;
9315}
9316VOS_STATUS WDA_ProcessSetTdlsChanSwitchReq(tWDA_CbContext *pWDA,
9317 tTdlsChanSwitchParams *pTdlsChanSwitchParams)
9318{
9319 WDI_Status status = WDI_STATUS_SUCCESS ;
9320 WDI_SetTDLSChanSwitchReqParamsType *wdiSetTDLSChanSwitchReqParam =
9321 (WDI_SetTDLSChanSwitchReqParamsType *)vos_mem_malloc(
9322 sizeof(WDI_SetTDLSChanSwitchReqParamsType));
9323 tWDA_ReqParams *pWdaParams = NULL;
9324
9325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9326 "Enter: %s ",__func__);
9327 if(NULL == wdiSetTDLSChanSwitchReqParam)
9328 {
9329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9330 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05309331 vos_mem_free(pTdlsChanSwitchParams);
Atul Mittalc0f739f2014-07-31 13:47:47 +05309332 VOS_ASSERT(0);
9333 return VOS_STATUS_E_NOMEM;
9334 }
9335
9336 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9337 if(NULL == pWdaParams)
9338 {
9339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9340 "%s: VOS MEM Alloc Failure", __func__);
9341 vos_mem_free(pTdlsChanSwitchParams);
9342 vos_mem_free(wdiSetTDLSChanSwitchReqParam);
9343 VOS_ASSERT(0);
9344 return VOS_STATUS_E_NOMEM;
9345 }
9346 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.staIdx =
9347 pTdlsChanSwitchParams->staIdx;
9348 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.isOffchannelInitiator =
9349 pTdlsChanSwitchParams->tdlsSwMode;
9350 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetOperClass =
9351 pTdlsChanSwitchParams->operClass;
9352 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetChannel =
9353 pTdlsChanSwitchParams->tdlsOffCh;
9354 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.secondaryChannelOffset =
9355 pTdlsChanSwitchParams->tdlsOffChBwOffset;
9356
9357
9358 /* Store msg pointer from PE, as this will be used for response */
9359 pWdaParams->wdaMsgParam = (void *)pTdlsChanSwitchParams ;
9360 /* store Params pass it to WDI */
9361 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSChanSwitchReqParam ;
9362 pWdaParams->pWdaContext = pWDA;
9363 status = WDI_SetTDLSChanSwitchReq(wdiSetTDLSChanSwitchReqParam,
9364 (WDI_SetTDLSChanSwitchReqParamsRspCb)
9365 WDA_SetTDLSChanSwitchReqParamsCallback,
9366 pWdaParams);
9367 if(IS_WDI_STATUS_FAILURE(status))
9368 {
9369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9370 "Failure in TDLS Channel Switch Req WDI API, free all the memory" );
9371 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9372 vos_mem_free(pWdaParams->wdaMsgParam);
9373 vos_mem_free(pWdaParams);
9374 }
9375 return CONVERT_WDI2VOS_STATUS(status);
9376}
9377#endif /*FEATURE_WLAN_TDLS*/
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309378
9379
Jeff Johnson295189b2012-06-20 16:38:30 -07009380#ifdef WLAN_FEATURE_VOWIFI_11R
9381/*
9382 * FUNCTION: WDA_AggrAddTSReqCallback
9383 * send ADD AGGREGATED TS RSP back to PE
9384 */
9385void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
9386{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009387 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309388 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009389 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009390 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07009391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009392 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009393 if(NULL == pWdaParams)
9394 {
9395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009396 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009397 VOS_ASSERT(0) ;
9398 return ;
9399 }
9400
9401 pWDA = pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309402 if (NULL == pWDA)
9403 {
9404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9405 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05309406 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9407 vos_mem_free(pWdaParams->wdaMsgParam);
9408 vos_mem_free(pWdaParams);
9409
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309410 VOS_ASSERT(0);
9411 return ;
9412 }
9413
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009414 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009415
9416 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
9417 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009418 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009419 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009420 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009421
9422 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9423 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009424 return ;
9425}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07009426/*
9427 * FUNCTION: WDA_ProcessAddTSReq
9428 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
9429 */
9430VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
9431 tAggrAddTsParams *pAggrAddTsReqParams)
9432{
9433 WDI_Status status = WDI_STATUS_SUCCESS ;
9434 int i;
9435 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009436 tWDA_ReqParams *pWdaParams = NULL;
9437
9438
Jeff Johnson295189b2012-06-20 16:38:30 -07009439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009440 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009441 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
9442 sizeof(WDI_AggrAddTSReqParamsType)) ;
9443 if(NULL == wdiAggrAddTSReqParam)
9444 {
9445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009446 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05309447 vos_mem_free(pAggrAddTsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009448 VOS_ASSERT(0);
9449 return VOS_STATUS_E_NOMEM;
9450 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009451
9452
9453 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9454 if(NULL == pWdaParams)
9455 {
9456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009457 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009458 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009459 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009460 VOS_ASSERT(0);
9461 return VOS_STATUS_E_NOMEM;
9462 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009463 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
9464 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
9465 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07009466 for( i = 0; i < WDI_MAX_NO_AC; i++ )
9467 {
9468 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
9469 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
9470 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07009471 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
9472 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
9473 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
9474 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
9475 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
9476 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
9477 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
9478 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
9479 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
9480 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
9481 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
9482 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
9483 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
9484 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
9485 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
9486 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07009487 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
9488 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07009489 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
9490 pAggrAddTsReqParams->tspec[i].nomMsduSz;
9491 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
9492 pAggrAddTsReqParams->tspec[i].maxMsduSz;
9493 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
9494 pAggrAddTsReqParams->tspec[i].minSvcInterval;
9495 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
9496 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
9497 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
9498 pAggrAddTsReqParams->tspec[i].inactInterval;
9499 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
9500 pAggrAddTsReqParams->tspec[i].suspendInterval;
9501 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
9502 pAggrAddTsReqParams->tspec[i].svcStartTime;
9503 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
9504 pAggrAddTsReqParams->tspec[i].minDataRate;
9505 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
9506 pAggrAddTsReqParams->tspec[i].meanDataRate;
9507 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
9508 pAggrAddTsReqParams->tspec[i].peakDataRate;
9509 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
9510 pAggrAddTsReqParams->tspec[i].maxBurstSz;
9511 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
9512 pAggrAddTsReqParams->tspec[i].delayBound;
9513 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
9514 pAggrAddTsReqParams->tspec[i].minPhyRate;
9515 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
9516 pAggrAddTsReqParams->tspec[i].surplusBw;
9517 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
9518 pAggrAddTsReqParams->tspec[i].mediumTime;
9519 }
9520
9521 /* TODO: tAggrAddTsParams doesn't have the following fields */
9522#if 0
9523 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
9524 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
9525 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
9526 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
9527#endif
9528 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
9529
9530 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009531 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009532 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009533 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
9534
9535 pWdaParams->pWdaContext = pWDA;
9536
Jeff Johnson295189b2012-06-20 16:38:30 -07009537 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009538 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
9539
Jeff Johnson295189b2012-06-20 16:38:30 -07009540 if(IS_WDI_STATUS_FAILURE(status))
9541 {
9542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9543 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009544
9545 /* send the failure response back to PE*/
9546 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
9547 {
9548 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
9549 }
9550
9551 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
9552 (void *)pAggrAddTsReqParams , 0) ;
Sen, Devendra8e4f8fc2016-09-07 12:42:46 +05309553
9554 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9555 vos_mem_free(pWdaParams);
9556
Jeff Johnson295189b2012-06-20 16:38:30 -07009557 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009558 return CONVERT_WDI2VOS_STATUS(status) ;
9559}
9560#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07009561/*
Mihir Shetea4306052014-03-25 00:02:54 +05309562 * FUNCTION: WDA_EnterImpsRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009563 * send Enter IMPS RSP back to PE
9564 */
Mihir Shetea4306052014-03-25 00:02:54 +05309565void WDA_EnterImpsRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009566{
Mihir Shetea4306052014-03-25 00:02:54 +05309567 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309568 tWDA_CbContext *pWDA = NULL;
Mihir Shetea4306052014-03-25 00:02:54 +05309569
Jeff Johnson295189b2012-06-20 16:38:30 -07009570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Mihir Shetea4306052014-03-25 00:02:54 +05309571 "<------ %s status=%d" ,__func__,status);
9572 if(NULL == pWdaParams)
9573 {
9574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9575 "%s: pWdaParams received NULL", __func__);
9576 VOS_ASSERT(0);
9577 return;
9578 }
9579
9580 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309581 if (NULL == pWDA)
9582 {
9583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9584 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05309585 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9586 vos_mem_free(pWdaParams->wdaMsgParam);
9587 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309588 VOS_ASSERT(0);
9589 return ;
9590 }
Mihir Shetea4306052014-03-25 00:02:54 +05309591
9592 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9593 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309594 if (WDI_STATUS_SUCCESS != status)
9595 {
9596 pWDA->failureCounts.enterImpsFailureCount++;
9597 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9598 pWDA->failureCounts.enterImpsFailureCount)
9599 {
9600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9601 "%s: Status %d fail count %d", __func__, status,
9602 pWDA->failureCounts.enterImpsFailureCount);
9603 pWDA->failureCounts.enterImpsFailureCount = 0;
9604 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9605 WLAN_LOG_INDICATOR_HOST_DRIVER,
9606 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
9607 FALSE, TRUE);
9608 }
9609 }
9610 else
9611 {
9612 pWDA->failureCounts.enterImpsFailureCount = 0;
9613 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009614 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009615 return ;
9616}
Mihir Shetea4306052014-03-25 00:02:54 +05309617
9618
9619/*
9620 * FUNCTION: WDA_EnterImpsReqCallback
9621 * Free memory and send Enter IMPS RSP back to PE.
9622 * Invoked when Enter IMPS REQ failed in WDI and no RSP callback is generated.
9623 */
9624void WDA_EnterImpsReqCallback(WDI_Status wdiStatus, void* pUserData)
9625{
9626 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309627 tWDA_CbContext *pWDA = NULL;
Mihir Shetea4306052014-03-25 00:02:54 +05309628
9629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9630 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9631
9632 if(NULL == pWdaParams)
9633 {
9634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9635 "%s: pWdaParams received NULL", __func__);
9636 VOS_ASSERT(0);
9637 return;
9638 }
9639
9640 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309641 if (NULL == pWDA)
9642 {
9643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9644 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05309645 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9646 vos_mem_free(pWdaParams->wdaMsgParam);
9647 vos_mem_free(pWdaParams);
9648
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309649 VOS_ASSERT(0);
9650 return ;
9651 }
9652
Mihir Shetea4306052014-03-25 00:02:54 +05309653
9654 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9655 {
9656 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9657 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309658 pWDA->failureCounts.enterImpsFailureCount++;
9659 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9660 pWDA->failureCounts.enterImpsFailureCount)
9661 {
9662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9663 "%s: wdiStatus %d fail count %d", __func__, wdiStatus,
9664 pWDA->failureCounts.enterImpsFailureCount);
9665 pWDA->failureCounts.enterImpsFailureCount = 0;
9666 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9667 WLAN_LOG_INDICATOR_HOST_DRIVER,
9668 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
9669 FALSE, TRUE);
9670 }
Mihir Shetea4306052014-03-25 00:02:54 +05309671 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
9672 CONVERT_WDI2SIR_STATUS(wdiStatus));
9673 }
9674
9675 return;
9676}
Jeff Johnson295189b2012-06-20 16:38:30 -07009677/*
9678 * FUNCTION: WDA_ProcessEnterImpsReq
9679 * Request to WDI to Enter IMPS power state.
9680 */
9681VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
9682{
9683 WDI_Status status = WDI_STATUS_SUCCESS ;
Mihir Shetea4306052014-03-25 00:02:54 +05309684 WDI_EnterImpsReqParamsType *wdiEnterImpsReqParams;
9685 tWDA_ReqParams *pWdaParams;
Sushant Kaushik7438e252015-05-01 14:55:09 +05309686 static int failcnt = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07009687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009688 "------> %s " ,__func__);
Mihir Shetea4306052014-03-25 00:02:54 +05309689
9690
9691 wdiEnterImpsReqParams = vos_mem_malloc(sizeof(WDI_EnterImpsReqParamsType));
9692 if (NULL == wdiEnterImpsReqParams)
9693 {
9694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9695 "%s: VOS MEM Alloc Failure", __func__);
9696 VOS_ASSERT(0);
9697 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
9698 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
9699 return VOS_STATUS_E_NOMEM;
9700 }
9701
9702 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
9703 if (NULL == pWdaParams)
9704 {
9705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9706 "%s: VOS MEM Alloc Failure", __func__);
9707 VOS_ASSERT(0);
9708 vos_mem_free(wdiEnterImpsReqParams);
9709 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL ,
9710 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
9711 return VOS_STATUS_E_NOMEM;
9712 }
9713
9714 wdiEnterImpsReqParams->wdiReqStatusCB = WDA_EnterImpsReqCallback;
9715 wdiEnterImpsReqParams->pUserData = pWdaParams;
9716
9717 pWdaParams->wdaWdiApiMsgParam = wdiEnterImpsReqParams;
9718 pWdaParams->wdaMsgParam = NULL;
9719 pWdaParams->pWdaContext = pWDA;
9720
9721 status = WDI_EnterImpsReq(wdiEnterImpsReqParams,
9722 (WDI_EnterImpsRspCb)WDA_EnterImpsRspCallback,
9723 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009724 if(IS_WDI_STATUS_FAILURE(status))
9725 {
Sushant Kaushik7438e252015-05-01 14:55:09 +05309726 if (! (failcnt & 0xF))
9727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9728 "Failure in Enter IMPS REQ WDI API, free all the memory " );
9729 failcnt++;
Mihir Shetea4306052014-03-25 00:02:54 +05309730 vos_mem_free(wdiEnterImpsReqParams);
9731 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009732 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009733 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009734 return CONVERT_WDI2VOS_STATUS(status) ;
9735}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309736
9737/*
9738 * FUNCTION: WDA_ExitImpsRespCallback
9739 * send Exit IMPS RSP back to PE
9740 */
9741void WDA_ExitImpsRespCallback(WDI_Status status, void* pUserData)
9742{
9743 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9744 tWDA_CbContext *pWDA;
9745
9746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9747 "<------ %s " ,__func__);
9748
9749 if (NULL == pWdaParams)
9750 {
9751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9752 "%s: pWdaParams received NULL", __func__);
9753 VOS_ASSERT(0);
9754 return;
9755 }
9756 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9757
9758 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9759 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309760 if (WDI_STATUS_SUCCESS != status)
9761 {
9762 pWDA->failureCounts.exitImpsFailureCount++;
9763 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9764 pWDA->failureCounts.exitImpsFailureCount)
9765 {
9766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9767 "%s: Status %d fail count %d", __func__,
9768 status,
9769 pWDA->failureCounts.exitImpsFailureCount);
9770 pWDA->failureCounts.exitImpsFailureCount = 0;
9771 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9772 WLAN_LOG_INDICATOR_HOST_DRIVER,
9773 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9774 FALSE, TRUE);
9775 }
9776 }
9777 else
9778 {
9779 pWDA->failureCounts.exitImpsFailureCount = 0;
9780 }
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309781
9782 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status));
9783 return;
9784}
9785
Jeff Johnson295189b2012-06-20 16:38:30 -07009786/*
9787 * FUNCTION: WDA_ExitImpsReqCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009788 */
9789void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
9790{
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309791 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Abhishek Singh837adf22015-10-01 17:37:37 +05309792 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009794 "<------ %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309795 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 }
Abhishek Singh837adf22015-10-01 17:37:37 +05309802 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309803 if (IS_WDI_STATUS_FAILURE(status))
9804 {
9805 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9806 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309807
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: wdiStatus %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 }
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309822 if (WDI_STATUS_DEV_INTERNAL_FAILURE == status)
9823 {
9824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9825 FL("reload wlan driver"));
9826 wpalWlanReload();
9827 }
9828 }
9829 return;
Jeff Johnson295189b2012-06-20 16:38:30 -07009830}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309831
Jeff Johnson295189b2012-06-20 16:38:30 -07009832/*
9833 * FUNCTION: WDA_ProcessExitImpsReq
9834 * Request to WDI to Exit IMPS power state.
9835 */
9836VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
9837{
9838 WDI_Status status = WDI_STATUS_SUCCESS ;
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309839 tWDA_ReqParams *pWdaParams;
9840 WDI_ExitImpsReqParamsType *wdiExitImpsReqParams;
9841
Jeff Johnson295189b2012-06-20 16:38:30 -07009842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009843 "------> %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309844 wdiExitImpsReqParams = (WDI_ExitImpsReqParamsType *)vos_mem_malloc(
9845 sizeof(WDI_ExitImpsReqParamsType));
9846 if (NULL == wdiExitImpsReqParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009847 {
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9849 "%s: VOS MEM Alloc Failure", __func__);
9850 VOS_ASSERT(0);
9851 return VOS_STATUS_E_NOMEM;
9852 }
9853 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
9854 if(NULL == pWdaParams)
9855 {
9856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9857 "%s: VOS MEM Alloc Failure", __func__);
9858 VOS_ASSERT(0);
9859 vos_mem_free(wdiExitImpsReqParams);
9860 return VOS_STATUS_E_NOMEM;
9861 }
9862 wdiExitImpsReqParams->wdiReqStatusCB = WDA_ExitImpsReqCallback;
9863 wdiExitImpsReqParams->pUserData = pWdaParams;
9864
9865 /* Store param pointer as passed in by caller */
9866 /* store Params pass it to WDI */
9867 pWdaParams->wdaWdiApiMsgParam = wdiExitImpsReqParams;
9868 pWdaParams->pWdaContext = pWDA;
9869 pWdaParams->wdaMsgParam = wdiExitImpsReqParams;
9870 status = WDI_ExitImpsReq(wdiExitImpsReqParams,
9871 (WDI_ExitImpsRspCb)WDA_ExitImpsRespCallback,
9872 pWdaParams);
9873 if (IS_WDI_STATUS_FAILURE(status))
9874 {
9875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9876 "Failure in Exit IMPS REQ WDI API, free all the memory " );
9877 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9878 vos_mem_free(pWdaParams);
9879 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009880 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009881 return CONVERT_WDI2VOS_STATUS(status) ;
9882}
Jeff Johnson295189b2012-06-20 16:38:30 -07009883/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009884 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009885 * send Enter BMPS RSP back to PE
9886 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009887void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009888{
9889 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309890 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009891 tEnterBmpsParams *pEnterBmpsRspParams;
9892
Jeff Johnson295189b2012-06-20 16:38:30 -07009893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009894 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009895 if(NULL == pWdaParams)
9896 {
9897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009898 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009899 VOS_ASSERT(0) ;
9900 return ;
9901 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009902
9903 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309904 if (NULL == pWDA)
9905 {
9906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9907 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05309908
9909 if(pWdaParams->wdaWdiApiMsgParam)
9910 {
9911 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9912 }
9913 vos_mem_free(pWdaParams);
9914
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309915 VOS_ASSERT(0);
9916 return ;
9917 }
9918
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009919 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
9920
9921 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009922 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009923
9924 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009925 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05309926 if (eHAL_STATUS_SUCCESS != pEnterBmpsRspParams->status)
9927 {
9928 pWDA->failureCounts.enterBmpsFailureCount++;
9929 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9930 pWDA->failureCounts.enterBmpsFailureCount)
9931 {
9932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9933 "%s: wdiStatus %d fail count %d", __func__,
9934 pwdiEnterBmpsRsp->wdiStatus,
9935 pWDA->failureCounts.enterBmpsFailureCount);
9936 pWDA->failureCounts.enterBmpsFailureCount = 0;
9937 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9938 WLAN_LOG_INDICATOR_HOST_DRIVER,
9939 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
9940 FALSE, TRUE);
9941 }
9942 }
9943 else
9944 {
9945 pWDA->failureCounts.enterBmpsFailureCount = 0;
9946 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009947 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
9948
Jeff Johnson295189b2012-06-20 16:38:30 -07009949 return ;
9950}
Jeff Johnson295189b2012-06-20 16:38:30 -07009951/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009952 * FUNCTION: WDA_EnterBmpsReqCallback
9953 * Free memory and send Enter BMPS RSP back to PE.
9954 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
9955 */
9956void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
9957{
9958 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309959 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009960 tEnterBmpsParams *pEnterBmpsRspParams;
9961
9962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9963 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9964
9965 if(NULL == pWdaParams)
9966 {
9967 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9968 "%s: pWdaParams received NULL", __func__);
9969 VOS_ASSERT(0);
9970 return;
9971 }
9972
9973 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309974 if (NULL == pWDA)
9975 {
9976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9977 "%s:pWDA is NULL", __func__);
9978 VOS_ASSERT(0);
9979 return ;
9980 }
9981
Yue Ma7f44bbe2013-04-12 11:47:39 -07009982 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
9983 pEnterBmpsRspParams->status = wdiStatus;
9984
9985 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9986 {
9987 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9988 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309989 pWDA->failureCounts.enterBmpsFailureCount++;
9990 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9991 pWDA->failureCounts.enterBmpsFailureCount)
9992 {
9993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9994 "%s: wdiStatus %d fail count %d", __func__,
9995 wdiStatus,
9996 pWDA->failureCounts.enterBmpsFailureCount);
9997 pWDA->failureCounts.enterBmpsFailureCount = 0;
9998 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9999 WLAN_LOG_INDICATOR_HOST_DRIVER,
10000 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
10001 FALSE, TRUE);
10002 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010003 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
10004 }
10005
10006 return;
10007}
10008/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010009 * FUNCTION: WDA_ProcessEnterBmpsReq
10010 * Request to WDI to Enter BMPS power state.
10011 */
10012VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
10013 tEnterBmpsParams *pEnterBmpsReqParams)
10014{
10015 WDI_Status status = WDI_STATUS_SUCCESS;
10016 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
10017 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010019 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010020 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
10021 {
10022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010023 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010024 VOS_ASSERT(0);
10025 return VOS_STATUS_E_FAILURE;
10026 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010027 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
10028 if (NULL == wdiEnterBmpsReqParams)
10029 {
10030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010031 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010032 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070010033 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
10034 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010035 return VOS_STATUS_E_NOMEM;
10036 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010037 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
10038 if (NULL == pWdaParams)
10039 {
10040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010041 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010042 VOS_ASSERT(0);
10043 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070010044 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
10045 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010046 return VOS_STATUS_E_NOMEM;
10047 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010048 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
10049 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
10050 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
10051 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080010052 // For ESE and 11R Roaming
Jeff Johnson295189b2012-06-20 16:38:30 -070010053 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
10054 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
10055 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010056 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
10057 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010058
Jeff Johnson295189b2012-06-20 16:38:30 -070010059 /* Store param pointer as passed in by caller */
10060 /* store Params pass it to WDI */
10061 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010062 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010063 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070010064 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010065 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010066 if (IS_WDI_STATUS_FAILURE(status))
10067 {
10068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10069 "Failure in Enter BMPS REQ WDI API, free all the memory" );
10070 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010071 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -070010072 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070010073 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010074 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010075 return CONVERT_WDI2VOS_STATUS(status);
10076}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070010077
10078
10079static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
10080 WDI_Status wdiStatus,
10081 tExitBmpsParams *pExitBmpsReqParams)
10082{
10083 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
10084
10085 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
10086}
10087
10088
Jeff Johnson295189b2012-06-20 16:38:30 -070010089/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010090 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010091 * send Exit BMPS RSP back to PE
10092 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010093void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010094{
10095 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010096 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010097 tExitBmpsParams *pExitBmpsRspParams;
10098
Jeff Johnson295189b2012-06-20 16:38:30 -070010099 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010100 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010101 if(NULL == pWdaParams)
10102 {
10103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010104 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010105 VOS_ASSERT(0) ;
10106 return ;
10107 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010108
10109 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010110 if (NULL == pWDA)
10111 {
10112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10113 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053010114
10115 if(pWdaParams->wdaWdiApiMsgParam)
10116 {
10117 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10118 }
10119 vos_mem_free(pWdaParams);
10120
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010121 VOS_ASSERT(0);
10122 return ;
10123 }
10124
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010125 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
10126
10127 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010128 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010129
Jeff Johnson295189b2012-06-20 16:38:30 -070010130 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Abhishek Singh837adf22015-10-01 17:37:37 +053010131 vos_mem_free(pWdaParams);
10132
10133 if (WDI_STATUS_SUCCESS != pwdiExitBmpsRsp->wdiStatus)
10134 {
10135 pWDA->failureCounts.exitBmpsFailureCount++;
10136 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
10137 pWDA->failureCounts.exitBmpsFailureCount)
10138 {
10139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10140 "%s: Status %d fail count %d", __func__,
10141 pExitBmpsRspParams->status,
10142 pWDA->failureCounts.exitBmpsFailureCount);
10143 pWDA->failureCounts.exitBmpsFailureCount = 0;
10144 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
10145 WLAN_LOG_INDICATOR_HOST_DRIVER,
10146 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
10147 FALSE, TRUE);
10148 }
10149 }
10150 else
10151 {
10152 pWDA->failureCounts.exitBmpsFailureCount = 0;
10153 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010154
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010155 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010156 return ;
10157}
Jeff Johnson295189b2012-06-20 16:38:30 -070010158/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010159 * FUNCTION: WDA_ExitBmpsReqCallback
10160 * Free memory and send Exit BMPS RSP back to PE.
10161 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
10162 */
10163void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
10164{
10165 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010166 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010167 tExitBmpsParams *pExitBmpsRspParams;
10168
10169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10170 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10171
10172 if(NULL == pWdaParams)
10173 {
10174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10175 "%s: pWdaParams received NULL", __func__);
10176 VOS_ASSERT(0);
10177 return;
10178 }
10179
10180 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010181 if (NULL == pWDA)
10182 {
10183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10184 "%s:pWDA is NULL", __func__);
10185 VOS_ASSERT(0);
10186 return ;
10187 }
10188
Yue Ma7f44bbe2013-04-12 11:47:39 -070010189 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
10190 pExitBmpsRspParams->status = wdiStatus;
10191
10192 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10193 {
10194 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10195 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +053010196 pWDA->failureCounts.exitBmpsFailureCount++;
10197 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
10198 pWDA->failureCounts.exitBmpsFailureCount)
10199 {
10200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10201 "%s: wdiStatus %d fail count %d", __func__,
10202 wdiStatus,
10203 pWDA->failureCounts.exitBmpsFailureCount);
10204 pWDA->failureCounts.exitBmpsFailureCount = 0;
10205 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
10206 WLAN_LOG_INDICATOR_HOST_DRIVER,
10207 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
10208 FALSE, TRUE);
10209 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010210 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
10211 }
10212
10213 return;
10214}
10215/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010216 * FUNCTION: WDA_ProcessExitBmpsReq
10217 * Request to WDI to Exit BMPS power state.
10218 */
10219VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
10220 tExitBmpsParams *pExitBmpsReqParams)
10221{
10222 WDI_Status status = WDI_STATUS_SUCCESS ;
10223 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
10224 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
10225 sizeof(WDI_ExitBmpsReqParamsType)) ;
10226 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010227 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010228 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010229 if(NULL == wdiExitBmpsReqParams)
10230 {
10231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010232 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010233 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070010234 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010235 return VOS_STATUS_E_NOMEM;
10236 }
10237 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10238 if(NULL == pWdaParams)
10239 {
10240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010241 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010242 VOS_ASSERT(0);
10243 vos_mem_free(wdiExitBmpsReqParams);
10244 return VOS_STATUS_E_NOMEM;
10245 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010246 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -070010247
10248 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
10249
Yue Ma7f44bbe2013-04-12 11:47:39 -070010250 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
10251 wdiExitBmpsReqParams->pUserData = pWdaParams;
10252
Jeff Johnson295189b2012-06-20 16:38:30 -070010253 /* Store param pointer as passed in by caller */
10254 /* store Params pass it to WDI */
10255 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
10256 pWdaParams->pWdaContext = pWDA;
10257 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010258 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010259 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010260 if(IS_WDI_STATUS_FAILURE(status))
10261 {
10262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10263 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010264 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10265 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070010266 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010267 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010268 return CONVERT_WDI2VOS_STATUS(status) ;
10269}
Jeff Johnson295189b2012-06-20 16:38:30 -070010270/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010271 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010272 * send Enter UAPSD RSP back to PE
10273 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010274void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010275{
10276 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010277 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010278 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010280 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010281 if(NULL == pWdaParams)
10282 {
10283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010284 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010285 VOS_ASSERT(0) ;
10286 return ;
10287 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010288
10289 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010290 if (NULL == pWDA)
10291 {
10292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10293 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053010294
10295 if(pWdaParams->wdaWdiApiMsgParam)
10296 {
10297 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10298 }
10299 vos_mem_free(pWdaParams);
10300
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010301 VOS_ASSERT(0);
10302 return ;
10303 }
10304
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010305 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
10306
10307 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010308 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010309
Jeff Johnson295189b2012-06-20 16:38:30 -070010310 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10311 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010312 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010313 return ;
10314}
Jeff Johnson295189b2012-06-20 16:38:30 -070010315/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010316 * FUNCTION: WDA_EnterUapsdReqCallback
10317 * Free memory and send Enter UAPSD RSP back to PE.
10318 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
10319 */
10320void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
10321{
10322 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10323 tWDA_CbContext *pWDA;
10324 tUapsdParams *pEnterUapsdRsqParams;
10325
10326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10327 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10328
10329 if(NULL == pWdaParams)
10330 {
10331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10332 "%s: pWdaParams received NULL", __func__);
10333 VOS_ASSERT(0);
10334 return;
10335 }
10336
10337 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010338 if (NULL == pWDA)
10339 {
10340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10341 "%s:pWDA is NULL", __func__);
10342 VOS_ASSERT(0);
10343 return ;
10344 }
10345
Yue Ma7f44bbe2013-04-12 11:47:39 -070010346 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
10347 pEnterUapsdRsqParams->status = wdiStatus;
10348
10349 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10350 {
10351 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10352 vos_mem_free(pWdaParams);
10353 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
10354 }
10355
10356 return;
10357}
10358/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010359 * FUNCTION: WDA_ProcessEnterUapsdReq
10360 * Request to WDI to Enter UAPSD power state.
10361 */
10362VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
10363 tUapsdParams *pEnterUapsdReqParams)
10364{
10365 WDI_Status status = WDI_STATUS_SUCCESS ;
10366 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
10367 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
10368 sizeof(WDI_EnterUapsdReqParamsType)) ;
10369 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010371 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010372 if(NULL == wdiEnterUapsdReqParams)
10373 {
10374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010375 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010376 VOS_ASSERT(0);
10377 return VOS_STATUS_E_NOMEM;
10378 }
10379 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10380 if(NULL == pWdaParams)
10381 {
10382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010383 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010384 VOS_ASSERT(0);
10385 vos_mem_free(wdiEnterUapsdReqParams);
10386 return VOS_STATUS_E_NOMEM;
10387 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010388 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
10389 pEnterUapsdReqParams->beDeliveryEnabled;
10390 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
10391 pEnterUapsdReqParams->beTriggerEnabled;
10392 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
10393 pEnterUapsdReqParams->bkDeliveryEnabled;
10394 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
10395 pEnterUapsdReqParams->bkTriggerEnabled;
10396 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
10397 pEnterUapsdReqParams->viDeliveryEnabled;
10398 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
10399 pEnterUapsdReqParams->viTriggerEnabled;
10400 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
10401 pEnterUapsdReqParams->voDeliveryEnabled;
10402 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
10403 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -070010404 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070010405
Yue Ma7f44bbe2013-04-12 11:47:39 -070010406 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
10407 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010408
Jeff Johnson295189b2012-06-20 16:38:30 -070010409 /* Store param pointer as passed in by caller */
10410 /* store Params pass it to WDI */
10411 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
10412 pWdaParams->pWdaContext = pWDA;
10413 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010414 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010415 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010416 if(IS_WDI_STATUS_FAILURE(status))
10417 {
10418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10419 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
10420 vos_mem_free(pWdaParams->wdaMsgParam) ;
10421 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10422 vos_mem_free(pWdaParams) ;
10423 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010424 return CONVERT_WDI2VOS_STATUS(status) ;
10425}
Jeff Johnson295189b2012-06-20 16:38:30 -070010426/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010427 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010428 * send Exit UAPSD RSP back to PE
10429 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010430void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010431{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010432
10433 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10434 tWDA_CbContext *pWDA;
10435 tExitUapsdParams *pExitUapsdRspParams;
10436
Jeff Johnson295189b2012-06-20 16:38:30 -070010437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010438 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010439 if(NULL == pWdaParams)
10440 {
10441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010442 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010443 VOS_ASSERT(0);
10444 return;
10445 }
10446
10447 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10448 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
10449
10450 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010451 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010452
10453 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10454 vos_mem_free(pWdaParams) ;
10455
10456 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010457 return ;
10458}
Jeff Johnson295189b2012-06-20 16:38:30 -070010459/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010460 * FUNCTION: WDA_ExitUapsdReqCallback
10461 * Free memory and send Exit UAPSD RSP back to PE.
10462 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
10463 */
10464void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
10465{
10466 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010467 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010468 tExitUapsdParams *pExitUapsdRspParams;
10469
10470 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10471 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10472
10473 if(NULL == pWdaParams)
10474 {
10475 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10476 "%s: pWdaParams received NULL", __func__);
10477 VOS_ASSERT(0);
10478 return;
10479 }
10480
10481 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010482 if (NULL == pWDA)
10483 {
10484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10485 "%s:pWDA is NULL", __func__);
10486 VOS_ASSERT(0);
10487 return ;
10488 }
10489
Yue Ma7f44bbe2013-04-12 11:47:39 -070010490 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
10491 pExitUapsdRspParams->status = wdiStatus;
10492
10493 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10494 {
10495 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10496 vos_mem_free(pWdaParams);
10497 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
10498 }
10499
10500 return;
10501}
10502/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010503 * FUNCTION: WDA_ProcessExitUapsdReq
10504 * Request to WDI to Exit UAPSD power state.
10505 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010506VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
10507 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010508{
10509 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010510 tWDA_ReqParams *pWdaParams ;
10511 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
10512 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
10513 sizeof(WDI_ExitUapsdReqParamsType)) ;
10514
Jeff Johnson295189b2012-06-20 16:38:30 -070010515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010516 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010517
10518 if(NULL == wdiExitUapsdReqParams)
10519 {
10520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010521 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010522 VOS_ASSERT(0);
10523 return VOS_STATUS_E_NOMEM;
10524 }
10525 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10526 if(NULL == pWdaParams)
10527 {
10528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010529 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010530 VOS_ASSERT(0);
10531 vos_mem_free(wdiExitUapsdReqParams);
10532 return VOS_STATUS_E_NOMEM;
10533 }
10534
10535 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010536 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
10537 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010538
10539 /* Store param pointer as passed in by caller */
10540 /* store Params pass it to WDI */
10541 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
10542 pWdaParams->pWdaContext = pWDA;
10543 pWdaParams->wdaMsgParam = pExitUapsdParams;
10544
Yue Ma7f44bbe2013-04-12 11:47:39 -070010545 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010546 if(IS_WDI_STATUS_FAILURE(status))
10547 {
10548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10549 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010550 vos_mem_free(pWdaParams->wdaMsgParam) ;
10551 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10552 vos_mem_free(pWdaParams) ;
10553
Jeff Johnson295189b2012-06-20 16:38:30 -070010554 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010555 return CONVERT_WDI2VOS_STATUS(status) ;
10556}
10557
Jeff Johnson295189b2012-06-20 16:38:30 -070010558/*
10559 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
10560 *
10561 */
10562void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
10563{
10564 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010565 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010566 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010567 if(NULL == pWdaParams)
10568 {
10569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010570 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010571 VOS_ASSERT(0) ;
10572 return ;
10573 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010574 if( pWdaParams != NULL )
10575 {
10576 if( pWdaParams->wdaWdiApiMsgParam != NULL )
10577 {
10578 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10579 }
10580 if( pWdaParams->wdaMsgParam != NULL )
10581 {
10582 vos_mem_free(pWdaParams->wdaMsgParam) ;
10583 }
10584 vos_mem_free(pWdaParams) ;
10585 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010586 return ;
10587}
Jeff Johnson295189b2012-06-20 16:38:30 -070010588/*
10589 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
10590 * Request to WDI to set the power save params at start.
10591 */
10592VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
10593 tSirPowerSaveCfg *pPowerSaveCfg)
10594{
10595 WDI_Status status = WDI_STATUS_SUCCESS ;
10596 tHalCfg *tlvStruct = NULL ;
10597 tANI_U8 *tlvStructStart = NULL ;
10598 v_PVOID_t *configParam;
10599 tANI_U32 configParamSize;
10600 tANI_U32 *configDataValue;
10601 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
10602 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010604 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010605 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
10606 {
10607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010608 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010609 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010610 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -070010611 return VOS_STATUS_E_FAILURE;
10612 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010613 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
10614 if (NULL == wdiPowerSaveCfg)
10615 {
10616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010617 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010618 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010619 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -070010620 return VOS_STATUS_E_NOMEM;
10621 }
10622 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10623 if(NULL == pWdaParams)
10624 {
10625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010626 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010627 VOS_ASSERT(0);
10628 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010629 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -070010630 return VOS_STATUS_E_NOMEM;
10631 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010632 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
10633 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070010634 if(NULL == configParam)
10635 {
10636 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080010637 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010638 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070010639 vos_mem_free(pWdaParams);
10640 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010641 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -070010642 return VOS_STATUS_E_NOMEM;
10643 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010644 vos_mem_set(configParam, configParamSize, 0);
10645 wdiPowerSaveCfg->pConfigBuffer = configParam;
10646 tlvStruct = (tHalCfg *)configParam;
10647 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010648 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
10649 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
10650 tlvStruct->length = sizeof(tANI_U32);
10651 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10652 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -070010653 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10654 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010655 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
10656 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
10657 tlvStruct->length = sizeof(tANI_U32);
10658 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10659 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070010660 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10661 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010662 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
10663 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
10664 tlvStruct->length = sizeof(tANI_U32);
10665 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10666 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -070010667 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10668 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010669 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
10670 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
10671 tlvStruct->length = sizeof(tANI_U32);
10672 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10673 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -070010674 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10675 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010676 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
10677 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
10678 tlvStruct->length = sizeof(tANI_U32);
10679 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10680 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -070010681 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10682 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010683 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
10684 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
10685 tlvStruct->length = sizeof(tANI_U32);
10686 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10687 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -070010688 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10689 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010690 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
10691 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
10692 tlvStruct->length = sizeof(tANI_U32);
10693 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10694 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -070010695 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10696 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010697 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
10698 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
10699 tlvStruct->length = sizeof(tANI_U32);
10700 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10701 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
10702 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10703 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010704 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
10705 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
10706 tlvStruct->length = sizeof(tANI_U32);
10707 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10708 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
10709 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10710 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010711 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
10712 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
10713 tlvStruct->length = sizeof(tANI_U32);
10714 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10715 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -070010716 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10717 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010718 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
10719 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
10720 tlvStruct->length = sizeof(tANI_U32);
10721 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10722 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070010723 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10724 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010725 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010726 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010727 /* store Params pass it to WDI */
10728 pWdaParams->wdaMsgParam = configParam;
10729 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
10730 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070010731 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
10732 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010733 if(IS_WDI_STATUS_FAILURE(status))
10734 {
10735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10736 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
10737 vos_mem_free(pWdaParams->wdaMsgParam);
10738 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10739 vos_mem_free(pWdaParams);
10740 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010741 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -070010742 return CONVERT_WDI2VOS_STATUS(status);
10743}
Jeff Johnson295189b2012-06-20 16:38:30 -070010744/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010745 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010746 *
10747 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010748void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010749{
Yue Ma7f44bbe2013-04-12 11:47:39 -070010750 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10751
Jeff Johnson295189b2012-06-20 16:38:30 -070010752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010753 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070010754
10755 if(NULL == pWdaParams)
10756 {
10757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10758 "%s: pWdaParams received NULL", __func__);
10759 VOS_ASSERT(0);
10760 return ;
10761 }
10762
10763 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -070010764 vos_mem_free(pWdaParams);
10765
Jeff Johnson295189b2012-06-20 16:38:30 -070010766 return ;
10767}
Jeff Johnson295189b2012-06-20 16:38:30 -070010768/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010769 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
10770 * Free memory.
10771 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
10772 */
10773void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
10774{
10775 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10776
10777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10778 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10779
10780 if(NULL == pWdaParams)
10781 {
10782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10783 "%s: pWdaParams received NULL", __func__);
10784 VOS_ASSERT(0);
10785 return;
10786 }
10787
10788 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10789 {
10790 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10791 vos_mem_free(pWdaParams);
10792 }
10793
10794 return;
10795}
10796/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010797 * FUNCTION: WDA_SetUapsdAcParamsReq
10798 * Request to WDI to set the UAPSD params for an ac (sta mode).
10799 */
10800VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
10801 tUapsdInfo *pUapsdInfo)
10802{
10803 WDI_Status status = WDI_STATUS_SUCCESS;
10804 tWDA_CbContext *pWDA = NULL ;
10805 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
10806 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
10807 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
10808 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010810 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010811 if(NULL == wdiUapsdParams)
10812 {
10813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010814 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010815 VOS_ASSERT(0);
10816 return VOS_STATUS_E_NOMEM;
10817 }
10818 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10819 if(NULL == pWdaParams)
10820 {
10821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010822 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010823 VOS_ASSERT(0);
10824 vos_mem_free(wdiUapsdParams);
10825 return VOS_STATUS_E_NOMEM;
10826 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010827 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
10828 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
10829 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
10830 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
10831 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
10832 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010833 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
10834 wdiUapsdParams->pUserData = pWdaParams;
10835
Jeff Johnson295189b2012-06-20 16:38:30 -070010836 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -070010837 pWdaParams->pWdaContext = pWDA;
10838 /* Store param pointer as passed in by caller */
10839 pWdaParams->wdaMsgParam = pUapsdInfo;
10840 /* store Params pass it to WDI */
10841 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010842 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010843 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070010844 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010845 if(IS_WDI_STATUS_FAILURE(status))
10846 {
10847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10848 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
10849 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10850 vos_mem_free(pWdaParams);
10851 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010852 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
10853 return VOS_STATUS_SUCCESS;
10854 else
10855 return VOS_STATUS_E_FAILURE;
10856
Jeff Johnson295189b2012-06-20 16:38:30 -070010857}
10858/*
10859 * FUNCTION: WDA_ClearUapsdAcParamsReq
10860 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
10861 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
10862 * and again enter the UPASD with the modified params. Hence the disable
10863 * function was kept empty.
10864 *
10865 */
10866VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
10867{
10868 /* do nothing */
10869 return VOS_STATUS_SUCCESS;
10870}
Jeff Johnson295189b2012-06-20 16:38:30 -070010871/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010872 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010873 *
10874 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010875void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010876{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010877 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10878
Jeff Johnson295189b2012-06-20 16:38:30 -070010879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010880 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010881
10882 if(NULL == pWdaParams)
10883 {
10884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010885 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010886 VOS_ASSERT(0) ;
10887 return ;
10888 }
10889
10890 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10891 vos_mem_free(pWdaParams->wdaMsgParam);
10892 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010893
Jeff Johnson295189b2012-06-20 16:38:30 -070010894 //print a msg, nothing else to do
10895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010896 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010897 return ;
10898}
Jeff Johnson295189b2012-06-20 16:38:30 -070010899/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010900 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
10901 * Free memory.
10902 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
10903 */
10904void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
10905{
10906 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10907
10908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10909 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10910
10911 if(NULL == pWdaParams)
10912 {
10913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10914 "%s: pWdaParams received NULL", __func__);
10915 VOS_ASSERT(0);
10916 return;
10917 }
10918
10919 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10920 {
10921 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10922 vos_mem_free(pWdaParams->wdaMsgParam);
10923 vos_mem_free(pWdaParams);
10924 }
10925
10926 return;
10927}
10928/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010929 * FUNCTION: WDA_UpdateUapsdParamsReq
10930 * Request to WDI to update UAPSD params (in softAP mode) for a station.
10931 */
10932VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
10933 tUpdateUapsdParams* pUpdateUapsdInfo)
10934{
10935 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010936 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010937 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
10938 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
10939 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010940 tWDA_ReqParams *pWdaParams = NULL;
10941
Jeff Johnson295189b2012-06-20 16:38:30 -070010942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010943 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010944 if(NULL == wdiUpdateUapsdParams)
10945 {
10946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010947 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010948 VOS_ASSERT(0);
10949 return VOS_STATUS_E_NOMEM;
10950 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010951 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
10952 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
10953 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010954 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
10955 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010956
10957 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10958 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010959 {
10960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010961 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010962 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010963 vos_mem_free(pUpdateUapsdInfo);
10964 vos_mem_free(wdiUpdateUapsdParams);
10965 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -070010966 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010967 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010968 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -070010969 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010970 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
10971 pWdaParams->pWdaContext = pWDA;
10972
Jeff Johnson43971f52012-07-17 12:26:56 -070010973 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010974 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010975 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010976
Jeff Johnson43971f52012-07-17 12:26:56 -070010977 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010978 {
10979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10980 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010981 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
10982 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10983 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070010984 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010985 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010986 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010987}
Jeff Johnson295189b2012-06-20 16:38:30 -070010988/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010989 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010990 *
10991 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010992void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010993{
10994 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010996 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010997 if(WDI_STATUS_SUCCESS != wdiStatus)
10998 {
10999 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011000 "%s: RXP config filter failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070011001 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011002 if(NULL == pWdaParams)
11003 {
11004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011005 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011006 VOS_ASSERT(0) ;
11007 return ;
11008 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011009 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11010 vos_mem_free(pWdaParams->wdaMsgParam);
11011 vos_mem_free(pWdaParams);
11012 return ;
11013}
Jeff Johnson295189b2012-06-20 16:38:30 -070011014/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011015 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
11016 * Free memory.
11017 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
11018 */
11019void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
11020{
11021 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11022
11023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11024 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11025
11026 if(NULL == pWdaParams)
11027 {
11028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11029 "%s: pWdaParams received NULL", __func__);
11030 VOS_ASSERT(0);
11031 return;
11032 }
11033
11034 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11035 {
11036 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11037 vos_mem_free(pWdaParams->wdaMsgParam);
11038 vos_mem_free(pWdaParams);
11039 }
11040
11041 return;
11042}
11043/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011044 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
11045 *
11046 */
11047VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
11048 tSirWlanSetRxpFilters *pWlanSuspendParam)
11049{
Jeff Johnson295189b2012-06-20 16:38:30 -070011050 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011051 WDI_Status wstatus;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +053011052 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011053 tWDA_ReqParams *pWdaParams ;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +053011054 /* Sanity Check
11055 * This is very unlikely and add assert to collect more info next time */
11056 if(NULL == pWlanSuspendParam)
11057 {
11058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11059 "%s: pWlanSuspendParam received NULL", __func__);
11060 VOS_ASSERT(0) ;
11061 return VOS_STATUS_E_FAULT;
11062 }
11063 wdiRxpFilterParams = (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
11064 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011065 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011066 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011067 if(NULL == wdiRxpFilterParams)
11068 {
11069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011070 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011071 VOS_ASSERT(0);
11072 vos_mem_free(pWlanSuspendParam);
11073 return VOS_STATUS_E_NOMEM;
11074 }
11075 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11076 if(NULL == pWdaParams)
11077 {
11078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011079 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011080 VOS_ASSERT(0);
11081 vos_mem_free(wdiRxpFilterParams);
11082 vos_mem_free(pWlanSuspendParam);
11083 return VOS_STATUS_E_NOMEM;
11084 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011085 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
11086 pWlanSuspendParam->setMcstBcstFilter;
11087 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
11088 pWlanSuspendParam->configuredMcstBcstFilterSetting;
11089
Yue Ma7f44bbe2013-04-12 11:47:39 -070011090 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
11091 wdiRxpFilterParams->pUserData = pWdaParams;
11092
Jeff Johnson295189b2012-06-20 16:38:30 -070011093 pWdaParams->pWdaContext = pWDA;
11094 pWdaParams->wdaMsgParam = pWlanSuspendParam;
11095 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070011096 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011097 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070011098 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011099 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011100 {
11101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11102 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011103 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011104 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11105 vos_mem_free(pWdaParams->wdaMsgParam);
11106 vos_mem_free(pWdaParams);
11107 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011108 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011109}
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011110
11111/*
Siddharth Bhal64246172015-02-27 01:04:37 +053011112 * FUNCTION: WDA_ProcessGetFrameLogReq
11113 * Request to WDI to get the Frame Log.
11114 */
11115VOS_STATUS WDA_ProcessGetFrameLogReq(tWDA_CbContext *pWDA,
11116 tAniGetFrameLogReq *pGetFrameLog)
11117{
11118 VOS_STATUS status = VOS_STATUS_SUCCESS;
11119 WDI_Status wstatus;
11120 WDI_GetFrameLogReqInfoType *wdiGetFrameLogInfo;
11121 tWDA_ReqParams *pWdaParams ;
11122
11123 /* Sanity Check*/
11124 if(NULL == pGetFrameLog)
11125 {
11126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011127 "%s: pFWLoggingInitParam received NULL", __func__);
Siddharth Bhal64246172015-02-27 01:04:37 +053011128 VOS_ASSERT(0) ;
11129 return VOS_STATUS_E_FAULT;
11130 }
11131
11132 wdiGetFrameLogInfo = (WDI_GetFrameLogReqInfoType *)vos_mem_malloc(
11133 sizeof(WDI_GetFrameLogReqInfoType));
11134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11135 "------> %s " ,__func__);
11136
11137 if(NULL == wdiGetFrameLogInfo)
11138 {
11139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11140 "%s: VOS MEM Alloc Failure", __func__);
11141 VOS_ASSERT(0);
11142 vos_mem_free(pGetFrameLog);
11143 return VOS_STATUS_E_NOMEM;
11144 }
11145
11146 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
11147 if(NULL == pWdaParams)
11148 {
11149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11150 "%s: VOS MEM Alloc Failure", __func__);
11151 VOS_ASSERT(0);
11152 vos_mem_free(wdiGetFrameLogInfo);
11153 vos_mem_free(pGetFrameLog);
11154 return VOS_STATUS_E_NOMEM;
11155 }
11156
11157 wdiGetFrameLogInfo->flags = pGetFrameLog->getFrameLogCmdFlag;
11158
11159 pWdaParams->pWdaContext = pWDA;
11160 pWdaParams->wdaMsgParam = pGetFrameLog;
11161 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGetFrameLogInfo;
11162
11163 wstatus = WDI_GetFrameLogReq(wdiGetFrameLogInfo,
11164 (WDI_GetFrameLogRspCb)WDA_GetFrameLogRspCallback,
11165 pWdaParams);
11166 if(IS_WDI_STATUS_FAILURE(wstatus))
11167 {
11168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11169 "Failure in get frame log REQ WDI API, free all the memory" );
11170 status = CONVERT_WDI2VOS_STATUS(wstatus);
11171 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11172 vos_mem_free(pWdaParams->wdaMsgParam);
11173 vos_mem_free(pWdaParams);
11174 }
11175 return status;
11176}
11177
Sachin Ahuja715aafc2015-07-21 23:35:10 +053011178
11179/*
11180 * FUNCTION: WDA_FatalEventLogsRspCallback
11181 * recieves Flush Logs response from FW
11182 */
11183
11184void WDA_FatalEventLogsRspCallback(WDI_FatalEventLogsRspParamType* wdiRsp,
11185 void* pUserData)
11186{
11187 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11188
11189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11190 "<------ %s,wdiStatus:%d " ,
11191 __func__, wdiRsp->wdiStatus);
11192 if(NULL == pWdaParams)
11193 {
11194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11195 "%s: pWdaParams received NULL", __func__);
11196 VOS_ASSERT(0);
11197 return ;
11198 }
11199
11200 if(NULL == pWdaParams->wdaMsgParam)
11201 {
11202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11203 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
11204 VOS_ASSERT(0);
11205 vos_mem_free(pWdaParams);
11206 return ;
11207 }
11208
11209 if(IS_WDI_STATUS_FAILURE(wdiRsp->wdiStatus))
11210 {
11211 /*
11212 * If it is failure, it means JOb is already posted by FW
11213 * for logging, so for failure scenario also we will get the
11214 * done indication
11215 */
11216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11217 "%s: Fatal Event Rsp Failure,wdiStatus : %d ",
11218 __func__, wdiRsp->wdiStatus);
11219 }
11220
11221 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11222 vos_mem_free(pWdaParams->wdaMsgParam);
11223 vos_mem_free(pWdaParams);
11224
11225 return;
11226
11227}
11228
11229/*
11230 * FUNCTION: WDA_ProcessFatalEventLogsReq
11231 * Request to WDI to send the fatal Event Logs Req.
11232 */
11233
11234VOS_STATUS WDA_ProcessFatalEventLogsReq(tWDA_CbContext *pWDA,
11235 tSirFatalEventLogsReqParam *pFatalEventLogsReqParam)
11236{
11237 VOS_STATUS status = VOS_STATUS_SUCCESS;
11238 WDI_FatalEventLogsReqInfoType *wdiFatalEventLogsReqInfo;
11239 tWDA_ReqParams *pWdaParams ;
11240 WDI_Status wstatus;
11241
11242
11243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11244 "------> %s " ,__func__);
11245 if (NULL == pFatalEventLogsReqParam)
11246 {
11247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11248 "%s: pMgmtLoggingInitParam received NULL", __func__);
11249 VOS_ASSERT(0) ;
11250 return VOS_STATUS_E_FAULT;
11251 }
11252 wdiFatalEventLogsReqInfo = (WDI_FatalEventLogsReqInfoType *)vos_mem_malloc(
11253 sizeof(WDI_FatalEventLogsReqInfoType));
11254 if(NULL == wdiFatalEventLogsReqInfo)
11255 {
11256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11257 "%s: VOS MEM Alloc Failure", __func__);
11258 VOS_ASSERT(0);
11259 vos_mem_free(pFatalEventLogsReqParam);
11260 return VOS_STATUS_E_NOMEM;
11261 }
11262 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11263 if(NULL == pWdaParams)
11264 {
11265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11266 "%s: VOS MEM Alloc Failure", __func__);
11267 VOS_ASSERT(0);
11268 vos_mem_free(wdiFatalEventLogsReqInfo);
11269 vos_mem_free(pFatalEventLogsReqParam);
11270 return VOS_STATUS_E_NOMEM;
11271 }
11272 wdiFatalEventLogsReqInfo->reason_code = pFatalEventLogsReqParam->reason_code;
11273 pWdaParams->pWdaContext = pWDA;
11274 pWdaParams->wdaMsgParam = pFatalEventLogsReqParam;
11275 pWdaParams->wdaWdiApiMsgParam = (void *)wdiFatalEventLogsReqInfo;
11276
11277 wstatus = WDI_FatalEventLogsReq(wdiFatalEventLogsReqInfo,
11278 (WDI_FatalEventLogsRspCb)WDA_FatalEventLogsRspCallback,
11279 pWdaParams);
11280 if(IS_WDI_STATUS_FAILURE(wstatus))
11281 {
11282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11283 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
11284 status = CONVERT_WDI2VOS_STATUS(wstatus);
11285 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11286 vos_mem_free(pWdaParams->wdaMsgParam);
11287 vos_mem_free(pWdaParams);
11288 }
11289
11290 return status;
11291
11292}
11293
Siddharth Bhal64246172015-02-27 01:04:37 +053011294/*
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011295 * FUNCTION: WDA_ProcessFWLoggingInitReq
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011296 *
11297 */
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011298VOS_STATUS WDA_ProcessFWLoggingInitReq(tWDA_CbContext *pWDA,
11299 tSirFWLoggingInitParam *pFWLoggingInitParam)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011300{
11301 VOS_STATUS status = VOS_STATUS_SUCCESS;
11302 WDI_Status wstatus;
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011303 WDI_FWLoggingInitReqInfoType *wdiFWLoggingInitInfo;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011304 tWDA_ReqParams *pWdaParams ;
11305
11306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11307 "------> %s " ,__func__);
11308
11309 /* Sanity Check*/
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011310 if(NULL == pFWLoggingInitParam)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011311 {
11312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011313 "%s: pFWLoggingInitParam received NULL", __func__);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011314 VOS_ASSERT(0) ;
11315 return VOS_STATUS_E_FAULT;
11316 }
11317
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011318 wdiFWLoggingInitInfo = (WDI_FWLoggingInitReqInfoType *)vos_mem_malloc(
11319 sizeof(WDI_FWLoggingInitReqInfoType));
11320 if(NULL == wdiFWLoggingInitInfo)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011321 {
11322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11323 "%s: VOS MEM Alloc Failure", __func__);
11324 VOS_ASSERT(0);
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011325 vos_mem_free(pFWLoggingInitParam);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011326 return VOS_STATUS_E_NOMEM;
11327 }
11328
11329 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11330 if(NULL == pWdaParams)
11331 {
11332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11333 "%s: VOS MEM Alloc Failure", __func__);
11334 VOS_ASSERT(0);
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011335 vos_mem_free(wdiFWLoggingInitInfo);
11336 vos_mem_free(pFWLoggingInitParam);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011337 return VOS_STATUS_E_NOMEM;
11338 }
11339
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011340 wdiFWLoggingInitInfo->enableFlag = pFWLoggingInitParam->enableFlag;
11341 wdiFWLoggingInitInfo->frameType = pFWLoggingInitParam->frameType;
11342 wdiFWLoggingInitInfo->frameSize = pFWLoggingInitParam->frameSize;
11343 wdiFWLoggingInitInfo->bufferMode = pFWLoggingInitParam->bufferMode;
11344 wdiFWLoggingInitInfo->continuousFrameLogging =
11345 pFWLoggingInitParam->continuousFrameLogging;
11346 wdiFWLoggingInitInfo->minLogBufferSize=
11347 pFWLoggingInitParam->minLogBufferSize;
11348 wdiFWLoggingInitInfo->maxLogBufferSize=
11349 pFWLoggingInitParam->maxLogBufferSize;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011350
11351 pWdaParams->pWdaContext = pWDA;
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011352 pWdaParams->wdaMsgParam = pFWLoggingInitParam;
11353 pWdaParams->wdaWdiApiMsgParam = (void *)wdiFWLoggingInitInfo;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011354
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011355 wstatus = WDI_FWLoggingInitReq(wdiFWLoggingInitInfo,
11356 (WDI_FWLoggingInitRspCb)WDA_FWLoggingInitRspCallback,
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011357 pWdaParams);
11358 if(IS_WDI_STATUS_FAILURE(wstatus))
11359 {
11360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11361 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
11362 status = CONVERT_WDI2VOS_STATUS(wstatus);
11363 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11364 vos_mem_free(pWdaParams->wdaMsgParam);
11365 vos_mem_free(pWdaParams);
11366 }
11367
11368 return status;
11369}
11370
Jeff Johnson295189b2012-06-20 16:38:30 -070011371/*
Gupta, Kapil7c34b322015-09-30 13:12:35 +053011372 * FUNCTION: WDA_ProcessStartRssiMonitorReq
11373 *
11374 */
11375VOS_STATUS WDA_ProcessStartRssiMonitorReq(tWDA_CbContext *pWDA,
11376 tSirRssiMonitorReq *pRssiMonitorReqParam)
11377{
11378 VOS_STATUS status = VOS_STATUS_SUCCESS;
11379 WDI_Status wstatus;
11380 WDI_RssiMonitorReqInfoType *wdiRssiMonitorInfo;
11381 tWDA_ReqParams *pWdaParams ;
11382
11383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11384 "------> %s " ,__func__);
11385
11386 /* Sanity Check*/
11387 if(NULL == pRssiMonitorReqParam)
11388 {
11389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11390 "%s: pRssiMonitorReqParam received NULL", __func__);
11391 VOS_ASSERT(0) ;
11392 return VOS_STATUS_E_FAULT;
11393 }
11394
11395 wdiRssiMonitorInfo = (WDI_RssiMonitorReqInfoType *)vos_mem_malloc(
11396 sizeof(WDI_RssiMonitorReqInfoType));
11397 if(NULL == wdiRssiMonitorInfo)
11398 {
11399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11400 "%s: VOS MEM Alloc Failure", __func__);
11401 VOS_ASSERT(0);
11402 vos_mem_free(pRssiMonitorReqParam);
11403 return VOS_STATUS_E_NOMEM;
11404 }
11405
11406 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11407 if(NULL == pWdaParams)
11408 {
11409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11410 "%s: VOS MEM Alloc Failure", __func__);
11411 VOS_ASSERT(0);
11412 vos_mem_free(wdiRssiMonitorInfo);
11413 vos_mem_free(pRssiMonitorReqParam);
11414 return VOS_STATUS_E_NOMEM;
11415 }
11416
11417 wdiRssiMonitorInfo->requestId = pRssiMonitorReqParam->requestId;
11418 wdiRssiMonitorInfo->minRssi = pRssiMonitorReqParam->minRssi;
11419 wdiRssiMonitorInfo->maxRssi = pRssiMonitorReqParam->maxRssi;
11420 vos_mem_copy(wdiRssiMonitorInfo->currentBssId,
11421 &(pRssiMonitorReqParam->currentBssId), sizeof(tSirMacAddr));
11422
11423 pWdaParams->pWdaContext = pWDA;
11424 pWdaParams->wdaMsgParam = pRssiMonitorReqParam;
11425 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRssiMonitorInfo;
11426
11427 wstatus = WDI_StartRssiMonitorReq(wdiRssiMonitorInfo,
11428 (WDI_RssiMonitorStartRspCb)WDA_RssiMonitorStartRspCallback,
11429 pWdaParams);
11430 if(IS_WDI_STATUS_FAILURE(wstatus))
11431 {
11432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11433 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
11434 status = CONVERT_WDI2VOS_STATUS(wstatus);
11435 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11436 vos_mem_free(pWdaParams->wdaMsgParam);
11437 vos_mem_free(pWdaParams);
11438 }
11439
11440 return status;
11441}
11442
11443/*
11444 * FUNCTION: WDA_ProcessStopRssiMonitorReq
11445 *
11446 */
11447VOS_STATUS WDA_ProcessStopRssiMonitorReq(tWDA_CbContext *pWDA,
11448 tSirRssiMonitorReq *pRssiMonitorReqParam)
11449{
11450 VOS_STATUS status = VOS_STATUS_SUCCESS;
11451 WDI_Status wstatus;
11452 WDI_RssiMonitorReqInfoType *wdiRssiMonitorInfo;
11453 tWDA_ReqParams *pWdaParams ;
11454
11455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11456 "------> %s " ,__func__);
11457
11458 /* Sanity Check*/
11459 if(NULL == pRssiMonitorReqParam)
11460 {
11461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11462 "%s: pRssiMonitorReqParam received NULL", __func__);
11463 VOS_ASSERT(0) ;
11464 return VOS_STATUS_E_FAULT;
11465 }
11466
11467 wdiRssiMonitorInfo = (WDI_RssiMonitorReqInfoType *)vos_mem_malloc(
11468 sizeof(WDI_RssiMonitorReqInfoType));
11469 if(NULL == wdiRssiMonitorInfo)
11470 {
11471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11472 "%s: VOS MEM Alloc Failure", __func__);
11473 VOS_ASSERT(0);
11474 vos_mem_free(pRssiMonitorReqParam);
11475 return VOS_STATUS_E_NOMEM;
11476 }
11477
11478 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11479 if(NULL == pWdaParams)
11480 {
11481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11482 "%s: VOS MEM Alloc Failure", __func__);
11483 VOS_ASSERT(0);
11484 vos_mem_free(wdiRssiMonitorInfo);
11485 vos_mem_free(pRssiMonitorReqParam);
11486 return VOS_STATUS_E_NOMEM;
11487 }
11488
11489 wdiRssiMonitorInfo->requestId = pRssiMonitorReqParam->requestId;
11490 vos_mem_copy(wdiRssiMonitorInfo->currentBssId,
11491 &(pRssiMonitorReqParam->currentBssId), sizeof(tSirMacAddr));
11492
11493 pWdaParams->pWdaContext = pWDA;
11494 pWdaParams->wdaMsgParam = pRssiMonitorReqParam;
11495 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRssiMonitorInfo;
11496
11497 wstatus = WDI_StopRssiMonitorReq(wdiRssiMonitorInfo,
11498 (WDI_RssiMonitorStopRspCb)WDA_RssiMonitorStopRspCallback,
11499 pWdaParams);
11500 if(IS_WDI_STATUS_FAILURE(wstatus))
11501 {
11502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11503 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
11504 status = CONVERT_WDI2VOS_STATUS(wstatus);
11505 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11506 vos_mem_free(pWdaParams->wdaMsgParam);
11507 vos_mem_free(pWdaParams);
11508 }
11509
11510 return status;
11511}
11512
11513
11514/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011515 * FUNCTION: WDA_WdiIndicationCallback
11516 *
11517 */
11518void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
11519 void* pUserData)
11520{
11521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011522 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011523}
Kapil Gupta2b44acb2016-12-30 16:49:51 +053011524
11525/**
11526 * WDA_ProcessWlanSuspendIndCallback: callback API for WDA_ProcessWlanSuspendInd
11527 * @wdiStatus: wdi status
11528 * @pUserData: suspend params
11529 *
11530 * Return: None
11531 */
11532void WDA_ProcessWlanSuspendIndCallback(WDI_Status wdiStatus, void* pUserData)
11533{
11534 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11535 tSirWlanSuspendParam *pWlanSuspendParam;
11536
11537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11538 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11539
11540 if(NULL == pWdaParams)
11541 {
11542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11543 "%s: pWdaParams received NULL", __func__);
11544 return;
11545 }
11546
11547 pWlanSuspendParam = (tSirWlanSuspendParam *)pWdaParams->wdaMsgParam;
11548 if (pWlanSuspendParam == NULL)
11549 {
11550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11551 "%s: suspend params NULL", __func__);
11552 vos_mem_free(pWdaParams);
11553 return;
11554 }
11555 if (pWlanSuspendParam->wlan_sus_callback)
11556 {
11557 pWlanSuspendParam->wlan_sus_callback(pWlanSuspendParam->context,
11558 CONVERT_WDI2VOS_STATUS(wdiStatus));
11559 }
11560 else
11561 {
11562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11563 "%s: wlan suspend callback is NULL", __func__);
11564 }
11565 if (pWdaParams->wdaMsgParam) {
11566 vos_mem_free(pWdaParams->wdaMsgParam);
11567 pWdaParams->wdaMsgParam = NULL;
11568 }
11569 vos_mem_free(pWdaParams);
11570 return;
11571}
11572
Jeff Johnson295189b2012-06-20 16:38:30 -070011573/*
11574 * FUNCTION: WDA_ProcessWlanSuspendInd
11575 *
11576 */
11577VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
11578 tSirWlanSuspendParam *pWlanSuspendParam)
11579{
11580 WDI_Status wdiStatus;
11581 WDI_SuspendParamsType wdiSuspendParams;
Kapil Gupta2b44acb2016-12-30 16:49:51 +053011582 tWDA_ReqParams *pWdaParams;
11583
Jeff Johnson295189b2012-06-20 16:38:30 -070011584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011585 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011586 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
11587 pWlanSuspendParam->configuredMcstBcstFilterSetting;
Kapil Gupta2b44acb2016-12-30 16:49:51 +053011588 wdiSuspendParams.wdiReqStatusCB = WDA_ProcessWlanSuspendIndCallback;
11589
11590 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
11591 if (!pWdaParams)
11592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11593 "%s memory allocation failed" ,__func__);
11594 pWdaParams->pWdaContext = pWDA;
11595 pWdaParams->wdaMsgParam = pWlanSuspendParam;
11596 wdiSuspendParams.pUserData = pWdaParams;
11597
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -070011599 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
11600 if(WDI_STATUS_PENDING == wdiStatus)
11601 {
11602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011603 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070011604 }
11605 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
11606 {
11607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011608 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070011609 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011610 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
11611}
11612
Chet Lanctot186b5732013-03-18 10:26:30 -070011613#ifdef WLAN_FEATURE_11W
11614/*
11615 * FUNCTION: WDA_ProcessExcludeUnecryptInd
11616 *
11617 */
11618VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
11619 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
11620{
11621 WDI_Status wdiStatus;
11622 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
11623 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11624 "------> %s ", __func__);
11625
11626 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
11627 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
11628 sizeof(tSirMacAddr));
11629
11630 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
11631 wdiExclUnencryptParams.pUserData = pWDA;
11632
11633 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
11634 if(WDI_STATUS_PENDING == wdiStatus)
11635 {
11636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11637 "Pending received for %s:%d ", __func__, __LINE__ );
11638 }
11639 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
11640 {
11641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11642 "Failure in %s:%d ", __func__, __LINE__ );
11643 }
11644 vos_mem_free(pExclUnencryptParam);
11645 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
11646}
11647#endif
11648
Jeff Johnson295189b2012-06-20 16:38:30 -070011649/*
11650 * FUNCTION: WDA_ProcessWlanResumeCallback
11651 *
11652 */
11653void WDA_ProcessWlanResumeCallback(
11654 WDI_SuspendResumeRspParamsType *resumeRspParams,
11655 void* pUserData)
11656{
11657 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011659 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011660 if(NULL == pWdaParams)
11661 {
11662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011663 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011664 VOS_ASSERT(0) ;
11665 return ;
11666 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011667 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
11668 {
11669 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011670 "%s: Process Wlan Resume failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070011671 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011672 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11673 vos_mem_free(pWdaParams->wdaMsgParam);
11674 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011675 return ;
11676}
Jeff Johnson295189b2012-06-20 16:38:30 -070011677/*
11678 * FUNCTION: WDA_ProcessWlanResumeReq
11679 *
11680 */
11681VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
11682 tSirWlanResumeParam *pWlanResumeParam)
11683{
11684 WDI_Status wdiStatus;
11685 WDI_ResumeParamsType *wdiResumeParams =
11686 (WDI_ResumeParamsType *)vos_mem_malloc(
11687 sizeof(WDI_ResumeParamsType) ) ;
11688 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011690 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011691 if(NULL == wdiResumeParams)
11692 {
11693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011694 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011695 VOS_ASSERT(0);
11696 return VOS_STATUS_E_NOMEM;
11697 }
11698 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11699 if(NULL == pWdaParams)
11700 {
11701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011702 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011703 VOS_ASSERT(0);
11704 vos_mem_free(wdiResumeParams);
11705 return VOS_STATUS_E_NOMEM;
11706 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011707 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
11708 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -070011710 wdiResumeParams->wdiReqStatusCB = NULL;
11711 pWdaParams->wdaMsgParam = pWlanResumeParam;
11712 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
11713 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070011714 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
11715 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
11716 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011717 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11718 {
11719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11720 "Failure in Host Resume REQ WDI API, free all the memory " );
11721 VOS_ASSERT(0);
11722 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11723 vos_mem_free(pWdaParams->wdaMsgParam);
11724 vos_mem_free(pWdaParams);
11725 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011726 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
11727}
11728
Jeff Johnson295189b2012-06-20 16:38:30 -070011729/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011730 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011731 *
11732 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011733void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011734{
11735 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011737 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011738 if(NULL == pWdaParams)
11739 {
11740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011741 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011742 VOS_ASSERT(0) ;
11743 return ;
11744 }
11745
11746 vos_mem_free(pWdaParams->wdaMsgParam) ;
11747 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11748 vos_mem_free(pWdaParams) ;
11749 /*
11750 * No respone required for SetBeaconFilter req so just free the request
11751 * param here
11752 */
11753
Jeff Johnson295189b2012-06-20 16:38:30 -070011754 return ;
11755}
Jeff Johnson295189b2012-06-20 16:38:30 -070011756/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011757 * FUNCTION: WDA_SetBeaconFilterReqCallback
11758 * Free memory.
11759 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
11760 */
11761void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
11762{
11763 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11764
11765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11766 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11767
11768 if(NULL == pWdaParams)
11769 {
11770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11771 "%s: pWdaParams received NULL", __func__);
11772 VOS_ASSERT(0);
11773 return;
11774 }
11775
11776 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11777 {
11778 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11779 vos_mem_free(pWdaParams->wdaMsgParam);
11780 vos_mem_free(pWdaParams);
11781 }
11782
11783 return;
11784}
11785/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011786 * FUNCTION: WDA_SetBeaconFilterReq
11787 * Request to WDI to send the beacon filtering related information.
11788 */
11789VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
11790 tBeaconFilterMsg* pBeaconFilterInfo)
11791{
11792 WDI_Status status = WDI_STATUS_SUCCESS;
11793 tANI_U8 *dstPtr, *srcPtr;
11794 tANI_U8 filterLength;
11795 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
11796 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
11797 sizeof(WDI_BeaconFilterReqParamsType) ) ;
11798 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011800 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011801 if(NULL == wdiBeaconFilterInfo)
11802 {
11803 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011804 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011805 VOS_ASSERT(0);
11806 return VOS_STATUS_E_NOMEM;
11807 }
11808 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11809 if(NULL == pWdaParams)
11810 {
11811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011812 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011813 VOS_ASSERT(0);
11814 vos_mem_free(wdiBeaconFilterInfo);
11815 return VOS_STATUS_E_NOMEM;
11816 }
Abhishek Singhdfe0f742017-01-03 11:26:38 +053011817 vos_mem_zero(wdiBeaconFilterInfo, sizeof(WDI_BeaconFilterReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -070011818 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
11819 pBeaconFilterInfo->beaconInterval;
11820 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
11821 pBeaconFilterInfo->capabilityInfo;
11822 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
11823 pBeaconFilterInfo->capabilityMask;
11824 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -070011825
11826 //Fill the BssIdx
11827 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
11828
Jeff Johnson295189b2012-06-20 16:38:30 -070011829 //Fill structure with info contained in the beaconFilterTable
11830 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
11831 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
11832 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
11833 if(WDI_BEACON_FILTER_LEN < filterLength)
11834 {
11835 filterLength = WDI_BEACON_FILTER_LEN;
11836 }
11837 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -070011838 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
11839 wdiBeaconFilterInfo->pUserData = pWdaParams;
11840
Jeff Johnson295189b2012-06-20 16:38:30 -070011841 /* Store param pointer as passed in by caller */
11842 /* store Params pass it to WDI */
11843 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
11844 pWdaParams->pWdaContext = pWDA;
11845 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
11846
Jeff Johnson295189b2012-06-20 16:38:30 -070011847 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011848 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011849 if(IS_WDI_STATUS_FAILURE(status))
11850 {
11851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11852 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
11853 vos_mem_free(pWdaParams->wdaMsgParam) ;
11854 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11855 vos_mem_free(pWdaParams) ;
11856 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011857 return CONVERT_WDI2VOS_STATUS(status) ;
11858}
Jeff Johnson295189b2012-06-20 16:38:30 -070011859/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011860 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011861 *
11862 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011863void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011864{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011865 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
11866
Jeff Johnson295189b2012-06-20 16:38:30 -070011867 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011868 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011869
11870 if(NULL == pWdaParams)
11871 {
11872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011873 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011874 VOS_ASSERT(0) ;
11875 return ;
11876 }
11877
11878 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11879 vos_mem_free(pWdaParams->wdaMsgParam);
11880 vos_mem_free(pWdaParams);
11881
Jeff Johnson295189b2012-06-20 16:38:30 -070011882 //print a msg, nothing else to do
11883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011884 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011885 return ;
11886}
Yue Ma7f44bbe2013-04-12 11:47:39 -070011887/*
11888 * FUNCTION: WDA_RemBeaconFilterReqCallback
11889 * Free memory.
11890 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
11891 */
11892void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
11893{
11894 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11895
11896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11897 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11898
11899 if(NULL == pWdaParams)
11900 {
11901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11902 "%s: pWdaParams received NULL", __func__);
11903 VOS_ASSERT(0);
11904 return;
11905 }
11906
11907 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11908 {
11909 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11910 vos_mem_free(pWdaParams->wdaMsgParam);
11911 vos_mem_free(pWdaParams);
11912 }
11913
11914 return;
11915}
Jeff Johnson295189b2012-06-20 16:38:30 -070011916 // TODO: PE does not have this feature for now implemented,
11917 // but the support for removing beacon filter exists between
11918 // HAL and FW. This function can be called whenever PE defines
11919 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -070011920/*
11921 * FUNCTION: WDA_RemBeaconFilterReq
11922 * Request to WDI to send the removal of beacon filtering related information.
11923 */
11924VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
11925 tRemBeaconFilterMsg* pBeaconFilterInfo)
11926{
11927 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011928 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011929 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
11930 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
11931 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011932 tWDA_ReqParams *pWdaParams ;
11933
Jeff Johnson295189b2012-06-20 16:38:30 -070011934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011935 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011936 if(NULL == wdiBeaconFilterInfo)
11937 {
11938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011939 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011940 VOS_ASSERT(0);
11941 return VOS_STATUS_E_NOMEM;
11942 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011943 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11944 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070011945 {
11946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011947 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011948 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011949 vos_mem_free(wdiBeaconFilterInfo);
11950 vos_mem_free(pBeaconFilterInfo);
11951 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -070011952 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011953
11954 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
11955 pBeaconFilterInfo->ucIeCount;
11956 //Fill structure with info contained in the ucRemIeId
11957 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
11958 pBeaconFilterInfo->ucRemIeId,
11959 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
11960 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
11961 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011962
11963 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011964 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -070011965 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011966 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
11967
11968 pWdaParams->pWdaContext = pWDA;
11969
Jeff Johnson43971f52012-07-17 12:26:56 -070011970 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011971 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011972 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011973 {
11974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11975 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011976 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011977 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11978 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070011979 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011980 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011981 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011982}
Jeff Johnson295189b2012-06-20 16:38:30 -070011983/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011984 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011985 *
11986 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011987void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011988{
11989 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011991 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011992 if(NULL == pWdaParams)
11993 {
11994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011995 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011996 VOS_ASSERT(0) ;
11997 return ;
11998 }
11999
12000 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12001 vos_mem_free(pWdaParams) ;
12002
Jeff Johnson295189b2012-06-20 16:38:30 -070012003 return ;
12004}
Jeff Johnson295189b2012-06-20 16:38:30 -070012005/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012006 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
12007 * Free memory.
12008 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
12009 */
12010void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
12011{
12012 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12013
12014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12015 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12016
12017 if(NULL == pWdaParams)
12018 {
12019 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12020 "%s: pWdaParams received NULL", __func__);
12021 VOS_ASSERT(0);
12022 return;
12023 }
12024
12025 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12026 {
12027 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12028 vos_mem_free(pWdaParams);
12029 }
12030
12031 return;
12032}
12033/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012034 * FUNCTION: WDA_SetRSSIThresholdsReq
12035 * Request to WDI to set the RSSI thresholds (sta mode).
12036 */
12037VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
12038{
12039 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012040 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012041 tWDA_CbContext *pWDA = NULL ;
12042 v_PVOID_t pVosContext = NULL;
12043 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
12044 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
12045 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
12046 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012048 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012049 if(NULL == wdiRSSIThresholdsInfo)
12050 {
12051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012052 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012053 VOS_ASSERT(0);
12054 return VOS_STATUS_E_NOMEM;
12055 }
12056 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12057 if(NULL == pWdaParams)
12058 {
12059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012060 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012061 VOS_ASSERT(0);
12062 vos_mem_free(wdiRSSIThresholdsInfo);
12063 return VOS_STATUS_E_NOMEM;
12064 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012065 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -070012066 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
12067 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
12068 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -070012069 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
12070 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
12071 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -070012072 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
12073 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
12074 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012075 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
12076 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012077 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
12078 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
12079
Jeff Johnson295189b2012-06-20 16:38:30 -070012080 /* Store param pointer as passed in by caller */
12081 /* store Params pass it to WDI */
12082 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
12083 pWdaParams->pWdaContext = pWDA;
12084 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -070012085 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012086 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070012087 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012088 {
12089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12090 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012091 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070012092 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12093 vos_mem_free(pWdaParams) ;
12094 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012095 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012096
12097}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012098/*
Yue Madb90ac12013-04-04 13:39:13 -070012099 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012100 *
12101 */
Yue Madb90ac12013-04-04 13:39:13 -070012102void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012103{
12104 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
12105
12106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012107 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012108 if(NULL == pWdaParams)
12109 {
12110 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012111 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012112 VOS_ASSERT(0) ;
12113 return ;
12114 }
12115
12116 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12117 vos_mem_free(pWdaParams->wdaMsgParam);
12118 vos_mem_free(pWdaParams) ;
12119
12120 //print a msg, nothing else to do
12121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -070012122 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070012123 return ;
12124}
Jeff Johnson295189b2012-06-20 16:38:30 -070012125/*
Yue Madb90ac12013-04-04 13:39:13 -070012126 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -070012127 * Free memory.
12128 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -070012129 */
12130void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
12131{
12132 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12133
12134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12135 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12136
12137 if(NULL == pWdaParams)
12138 {
12139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12140 "%s: Invalid pWdaParams pointer", __func__);
12141 VOS_ASSERT(0);
12142 return;
12143 }
12144
12145 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12146 {
12147 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12148 vos_mem_free(pWdaParams->wdaMsgParam);
12149 vos_mem_free(pWdaParams);
12150 }
12151
12152 return;
12153}
12154/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012155 * FUNCTION: WDA_ProcessHostOffloadReq
12156 * Request to WDI to set the filter to minimize unnecessary host wakeup due
12157 * to broadcast traffic (sta mode).
12158 */
12159VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
12160 tSirHostOffloadReq *pHostOffloadParams)
12161{
12162 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012163 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012164 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
12165 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
12166 sizeof(WDI_HostOffloadReqParamsType)) ;
12167 tWDA_ReqParams *pWdaParams ;
12168
12169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012170 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -070012171
12172 if(NULL == wdiHostOffloadInfo)
12173 {
12174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012175 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012176 VOS_ASSERT(0);
12177 return VOS_STATUS_E_NOMEM;
12178 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012179 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12180 if(NULL == pWdaParams)
12181 {
12182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012183 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012184 VOS_ASSERT(0);
12185 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012186 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012187 return VOS_STATUS_E_NOMEM;
12188 }
12189
12190 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
12191 pHostOffloadParams->offloadType;
12192 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
12193 pHostOffloadParams->enableOrDisable;
12194
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012195 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
12196 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
12197
Jeff Johnson295189b2012-06-20 16:38:30 -070012198 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
12199 {
12200 case SIR_IPV4_ARP_REPLY_OFFLOAD:
12201 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
12202 pHostOffloadParams->params.hostIpv4Addr,
12203 4);
12204 break;
12205 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
12206 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
12207 pHostOffloadParams->params.hostIpv6Addr,
12208 16);
12209 break;
12210 case SIR_IPV6_NS_OFFLOAD:
12211 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
12212 pHostOffloadParams->params.hostIpv6Addr,
12213 16);
12214
12215#ifdef WLAN_NS_OFFLOAD
12216 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
12217 {
12218 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
12219 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
12220 16);
12221 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
12222 }
12223 else
12224 {
12225 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
12226 }
12227
12228 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
12229 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
12230 16);
12231 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
12232 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
12233 6);
12234
12235 //Only two are supported so let's go through them without a loop
12236 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
12237 {
12238 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
12239 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
12240 16);
12241 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
12242 }
12243 else
12244 {
12245 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
12246 }
12247
12248 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
12249 {
12250 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
12251 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
12252 16);
12253 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
12254 }
12255 else
12256 {
12257 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
12258 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +053012259 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
12260 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070012261 break;
12262#endif //WLAN_NS_OFFLOAD
12263 default:
12264 {
12265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12266 "No Handling for Offload Type %x in WDA "
12267 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
12268 //WDA_VOS_ASSERT(0) ;
12269 }
12270 }
Yue Madb90ac12013-04-04 13:39:13 -070012271 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
12272 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012273
Jeff Johnson295189b2012-06-20 16:38:30 -070012274 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012275 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012276 /* store Params pass it to WDI */
12277 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
12278 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012279
Jeff Johnson295189b2012-06-20 16:38:30 -070012280
Jeff Johnson43971f52012-07-17 12:26:56 -070012281 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -070012282 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012283
Jeff Johnson43971f52012-07-17 12:26:56 -070012284 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012285 {
Anurag Chouhan65ea6dc2016-10-25 19:59:14 +053012286 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
c_hpothu86feba52014-10-28 15:51:18 +053012287 "Failure in host offload REQ WDI API, free all the memory %d",
12288 wstatus);
Jeff Johnson43971f52012-07-17 12:26:56 -070012289 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070012290 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12291 vos_mem_free(pWdaParams->wdaMsgParam);
12292 vos_mem_free(pWdaParams) ;
12293 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012294 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012295
12296}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012297/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012298 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012299 *
12300 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012301void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012302{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012303 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
12304
Jeff Johnson295189b2012-06-20 16:38:30 -070012305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012306 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012307
12308 if(NULL == pWdaParams)
12309 {
12310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012311 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012312 VOS_ASSERT(0) ;
12313 return ;
12314 }
12315
12316 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12317 vos_mem_free(pWdaParams->wdaMsgParam);
12318 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -070012319
Jeff Johnson295189b2012-06-20 16:38:30 -070012320 //print a msg, nothing else to do
12321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012322 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070012323 return ;
12324}
Jeff Johnson295189b2012-06-20 16:38:30 -070012325/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012326 * FUNCTION: WDA_KeepAliveReqCallback
12327 * Free memory.
12328 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
12329 */
12330void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
12331{
12332 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12333
12334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12335 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12336
12337 if(NULL == pWdaParams)
12338 {
12339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12340 "%s: pWdaParams received NULL", __func__);
12341 VOS_ASSERT(0);
12342 return;
12343 }
12344
12345 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12346 {
12347 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12348 vos_mem_free(pWdaParams->wdaMsgParam);
12349 vos_mem_free(pWdaParams);
12350 }
12351
12352 return;
12353}
12354/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012355 * FUNCTION: WDA_ProcessKeepAliveReq
12356 * Request to WDI to send Keep Alive packets to minimize unnecessary host
12357 * wakeup due to broadcast traffic (sta mode).
12358 */
12359VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
12360 tSirKeepAliveReq *pKeepAliveParams)
12361{
12362 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012363 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012364 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
12365 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
12366 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012367 tWDA_ReqParams *pWdaParams;
12368
Jeff Johnson295189b2012-06-20 16:38:30 -070012369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012370 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012371 if(NULL == wdiKeepAliveInfo)
12372 {
12373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012374 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012375 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012376 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012377 return VOS_STATUS_E_NOMEM;
12378 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012379
12380 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12381 if(NULL == pWdaParams)
12382 {
12383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012384 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012385 VOS_ASSERT(0);
12386 vos_mem_free(wdiKeepAliveInfo);
12387 vos_mem_free(pKeepAliveParams);
12388 return VOS_STATUS_E_NOMEM;
12389 }
12390
Jeff Johnson295189b2012-06-20 16:38:30 -070012391 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
12392 pKeepAliveParams->packetType;
12393 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
12394 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012395
12396 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
12397 pKeepAliveParams->bssId,
12398 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012399
12400 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
12401 {
12402 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
12403 pKeepAliveParams->hostIpv4Addr,
12404 SIR_IPV4_ADDR_LEN);
12405 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
12406 pKeepAliveParams->destIpv4Addr,
12407 SIR_IPV4_ADDR_LEN);
12408 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
12409 pKeepAliveParams->destMacAddr,
12410 SIR_MAC_ADDR_LEN);
12411 }
12412 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
12413 {
12414 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
12415 SIR_IPV4_ADDR_LEN,
12416 0);
12417 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
12418 SIR_IPV4_ADDR_LEN,
12419 0);
12420 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
12421 SIR_MAC_ADDR_LEN,
12422 0);
12423 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012424 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
12425 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012426
Jeff Johnson295189b2012-06-20 16:38:30 -070012427 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012428 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012429 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012430 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
12431 pWdaParams->pWdaContext = pWDA;
12432
Jeff Johnson295189b2012-06-20 16:38:30 -070012433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
12434 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
12435 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
12436 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
12437 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
12438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
12439 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
12440 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
12441 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
12442 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
12443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12444 "WDA DMAC : %d:%d:%d:%d:%d:%d",
12445 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
12446 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
12447 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
12448 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
12449 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
12450 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
12451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12452 "TimePeriod %d PacketType %d",
12453 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
12454 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -070012455 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012456 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012457
Jeff Johnson43971f52012-07-17 12:26:56 -070012458 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012459 {
12460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12461 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012462 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012463 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12464 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070012465 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012466 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012467 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012468
12469}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012470/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012471 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012472 *
12473 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012474void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012475 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
12476 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012477{
12478 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012480 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012481 if(NULL == pWdaParams)
12482 {
12483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012484 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012485 VOS_ASSERT(0) ;
12486 return ;
12487 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012488 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12489 vos_mem_free(pWdaParams->wdaMsgParam);
12490 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012491 return ;
12492}
Jeff Johnson295189b2012-06-20 16:38:30 -070012493/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012494 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
12495 * Free memory.
12496 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
12497 */
12498void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
12499{
12500 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12501
12502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12503 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12504
12505 if(NULL == pWdaParams)
12506 {
12507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12508 "%s: pWdaParams received NULL", __func__);
12509 VOS_ASSERT(0);
12510 return;
12511 }
12512
12513 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12514 {
12515 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12516 vos_mem_free(pWdaParams->wdaMsgParam);
12517 vos_mem_free(pWdaParams);
12518 }
12519
12520 return;
12521}
12522
12523/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012524 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
12525 * Request to WDI to add WOWL Bcast pattern
12526 */
12527VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
12528 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
12529{
12530 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012531 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012532 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
12533 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
12534 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
12535 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012537 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012538 if(NULL == wdiWowlAddBcPtrnInfo)
12539 {
12540 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012541 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012542 VOS_ASSERT(0);
12543 return VOS_STATUS_E_NOMEM;
12544 }
12545 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12546 if(NULL == pWdaParams)
12547 {
12548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012549 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012550 VOS_ASSERT(0);
12551 vos_mem_free(wdiWowlAddBcPtrnInfo);
12552 return VOS_STATUS_E_NOMEM;
12553 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012554 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
12555 pWowlAddBcPtrnParams->ucPatternId;
12556 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
12557 pWowlAddBcPtrnParams->ucPatternByteOffset;
12558 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
12559 pWowlAddBcPtrnParams->ucPatternMaskSize;
12560 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
12561 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -070012562 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
12563 {
12564 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
12565 pWowlAddBcPtrnParams->ucPattern,
12566 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
12567 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
12568 pWowlAddBcPtrnParams->ucPatternMask,
12569 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
12570 }
12571 else
12572 {
12573 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
12574 pWowlAddBcPtrnParams->ucPattern,
12575 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
12576 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
12577 pWowlAddBcPtrnParams->ucPatternMask,
12578 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
12579
12580 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
12581 pWowlAddBcPtrnParams->ucPatternExt,
12582 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
12583 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
12584 pWowlAddBcPtrnParams->ucPatternMaskExt,
12585 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
12586 }
12587
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012588 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
12589 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
12590
Yue Ma7f44bbe2013-04-12 11:47:39 -070012591 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
12592 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012593 /* Store param pointer as passed in by caller */
12594 /* store Params pass it to WDI */
12595 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
12596 pWdaParams->pWdaContext = pWDA;
12597 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070012598 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012599 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070012600 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012601 {
12602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12603 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012604 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070012605 vos_mem_free(pWdaParams->wdaMsgParam) ;
12606 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12607 vos_mem_free(pWdaParams) ;
12608 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012609 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012610
12611}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012612/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012613 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012614 *
12615 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012616void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012617 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
12618 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012619{
12620 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012622 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012623 if(NULL == pWdaParams)
12624 {
12625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012626 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012627 VOS_ASSERT(0) ;
12628 return ;
12629 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012630 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12631 vos_mem_free(pWdaParams->wdaMsgParam);
12632 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012633 return ;
12634}
Jeff Johnson295189b2012-06-20 16:38:30 -070012635/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012636 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
12637 * Free memory.
12638 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
12639 */
12640void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
12641{
12642 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12643
12644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12645 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12646
12647 if(NULL == pWdaParams)
12648 {
12649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12650 "%s: pWdaParams received NULL", __func__);
12651 VOS_ASSERT(0);
12652 return;
12653 }
12654
12655 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12656 {
12657 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12658 vos_mem_free(pWdaParams->wdaMsgParam);
12659 vos_mem_free(pWdaParams);
12660 }
12661
12662 return;
12663}
12664/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012665 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
12666 * Request to WDI to delete WOWL Bcast pattern
12667 */
12668VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
12669 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
12670{
12671 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012672 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012673 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
12674 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
12675 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
12676 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012678 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012679 if(NULL == wdiWowlDelBcPtrnInfo)
12680 {
12681 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012682 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012683 VOS_ASSERT(0);
12684 return VOS_STATUS_E_NOMEM;
12685 }
12686 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12687 if(NULL == pWdaParams)
12688 {
12689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012690 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012691 VOS_ASSERT(0);
12692 vos_mem_free(wdiWowlDelBcPtrnInfo);
12693 return VOS_STATUS_E_NOMEM;
12694 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012695 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
12696 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012697
12698 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
12699 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
12700
Yue Ma7f44bbe2013-04-12 11:47:39 -070012701 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
12702 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012703 /* Store param pointer as passed in by caller */
12704 /* store Params pass it to WDI */
12705 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
12706 pWdaParams->pWdaContext = pWDA;
12707 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070012708 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012709 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070012710 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012711 {
12712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12713 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012714 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070012715 vos_mem_free(pWdaParams->wdaMsgParam) ;
12716 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12717 vos_mem_free(pWdaParams) ;
12718 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012719 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012720
12721}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012722/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012723 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012724 *
12725 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012726void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012727{
12728 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012729 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012730 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012732 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012733 if(NULL == pWdaParams)
12734 {
12735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012736 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012737 VOS_ASSERT(0) ;
12738 return ;
12739 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012740 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012741 if (NULL == pWDA)
12742 {
12743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12744 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053012745
12746 if(pWdaParams->wdaWdiApiMsgParam)
12747 {
12748 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12749 }
12750 vos_mem_free(pWdaParams);
12751
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012752 VOS_ASSERT(0);
12753 return ;
12754 }
12755
Jeff Johnson295189b2012-06-20 16:38:30 -070012756 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
12757
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012758 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
12759
Jeff Johnson295189b2012-06-20 16:38:30 -070012760 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12761 vos_mem_free(pWdaParams) ;
12762
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012763 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070012764 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012765 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012766 return ;
12767}
Jeff Johnson295189b2012-06-20 16:38:30 -070012768/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012769 * FUNCTION: WDA_WowlEnterReqCallback
12770 * Free memory and send WOWL Enter RSP back to PE.
12771 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
12772 */
12773void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
12774{
12775 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012776 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012777 tSirHalWowlEnterParams *pWowlEnterParams;
12778
12779 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12780 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12781
12782 if(NULL == pWdaParams)
12783 {
12784 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12785 "%s: pWdaParams received NULL", __func__);
12786 VOS_ASSERT(0);
12787 return;
12788 }
12789
12790 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012791 if (NULL == pWDA)
12792 {
12793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12794 "%s:pWDA is NULL", __func__);
12795 VOS_ASSERT(0);
12796 return ;
12797 }
12798
Yue Ma7f44bbe2013-04-12 11:47:39 -070012799 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
12800 pWowlEnterParams->status = wdiStatus;
12801
12802 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12803 {
12804 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12805 vos_mem_free(pWdaParams);
12806 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
12807 }
12808
12809 return;
12810}
12811/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012812 * FUNCTION: WDA_ProcessWowlEnterReq
12813 * Request to WDI to enter WOWL
12814 */
12815VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
12816 tSirHalWowlEnterParams *pWowlEnterParams)
12817{
12818 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012819 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012820 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
12821 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
12822 sizeof(WDI_WowlEnterReqParamsType)) ;
12823 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012825 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012826 if(NULL == wdiWowlEnterInfo)
12827 {
12828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012829 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012830 VOS_ASSERT(0);
12831 return VOS_STATUS_E_NOMEM;
12832 }
12833 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12834 if(NULL == pWdaParams)
12835 {
12836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012837 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012838 VOS_ASSERT(0);
12839 vos_mem_free(wdiWowlEnterInfo);
12840 return VOS_STATUS_E_NOMEM;
12841 }
Kumar Anandaca924e2013-07-22 14:35:34 -070012842
12843 vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
12844
Jeff Johnson295189b2012-06-20 16:38:30 -070012845 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
12846 pWowlEnterParams->magicPtrn,
12847 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012848 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
12849 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070012850 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
12851 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070012852 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
12853 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070012854 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
12855 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070012856 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
12857 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070012858 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
12859 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070012860 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
12861 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -070012862 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
12863 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -070012864#ifdef WLAN_WAKEUP_EVENTS
12865 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
12866 pWowlEnterParams->ucWoWEAPIDRequestEnable;
12867
12868 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
12869 pWowlEnterParams->ucWoWEAPOL4WayEnable;
12870
12871 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
12872 pWowlEnterParams->ucWowNetScanOffloadMatch;
12873
12874 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
12875 pWowlEnterParams->ucWowGTKRekeyError;
12876
12877 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
12878 pWowlEnterParams->ucWoWBSSConnLoss;
12879#endif // WLAN_WAKEUP_EVENTS
12880
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012881 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
12882 pWowlEnterParams->bssIdx;
12883
Yue Ma7f44bbe2013-04-12 11:47:39 -070012884 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
12885 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012886 /* Store param pointer as passed in by caller */
12887 /* store Params pass it to WDI */
12888 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
12889 pWdaParams->pWdaContext = pWDA;
12890 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070012891 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012892 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070012893 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012894 {
12895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12896 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012897 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070012898 vos_mem_free(pWdaParams->wdaMsgParam) ;
12899 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12900 vos_mem_free(pWdaParams) ;
12901 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012902 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012903
12904}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012905/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012906 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012907 *
12908 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012909void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012910{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012911 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012912 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012913 tSirHalWowlExitParams *pWowlExitParams;
12914 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012915 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012916 if(NULL == pWdaParams)
12917 {
12918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012919 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012920 VOS_ASSERT(0) ;
12921 return ;
12922 }
12923 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012924 if (NULL == pWDA)
12925 {
12926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12927 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053012928
12929 if(pWdaParams->wdaWdiApiMsgParam)
12930 {
12931 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12932 }
12933 vos_mem_free(pWdaParams);
12934
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012935 VOS_ASSERT(0);
12936 return ;
12937 }
12938
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012939 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
12940
12941 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070012942 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012943
12944 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12945 vos_mem_free(pWdaParams) ;
12946
Jeff Johnson295189b2012-06-20 16:38:30 -070012947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012948 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012949 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012950 return ;
12951}
Jeff Johnson295189b2012-06-20 16:38:30 -070012952/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012953 * FUNCTION: WDA_WowlExitReqCallback
12954 * Free memory and send WOWL Exit RSP back to PE.
12955 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
12956 */
12957void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
12958{
12959 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012960 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012961 tSirHalWowlExitParams *pWowlExitParams;
12962
12963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12964 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12965
12966 if(NULL == pWdaParams)
12967 {
12968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12969 "%s: pWdaParams received NULL", __func__);
12970 VOS_ASSERT(0);
12971 return;
12972 }
12973
12974 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012975 if (NULL == pWDA)
12976 {
12977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12978 "%s:pWDA is NULL", __func__);
12979 VOS_ASSERT(0);
12980 return ;
12981 }
12982
Yue Ma7f44bbe2013-04-12 11:47:39 -070012983 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
12984 pWowlExitParams->status = wdiStatus;
12985
12986 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12987 {
12988 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12989 vos_mem_free(pWdaParams);
12990 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
12991 }
12992
12993 return;
12994}
12995/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012996 * FUNCTION: WDA_ProcessWowlExitReq
12997 * Request to WDI to add WOWL Bcast pattern
12998 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012999VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
13000 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070013001{
13002 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070013003 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013004 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
13005 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
13006 sizeof(WDI_WowlExitReqParamsType)) ;
13007 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013009 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013010 if(NULL == wdiWowlExitInfo)
13011 {
13012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013013 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013014 VOS_ASSERT(0);
13015 return VOS_STATUS_E_NOMEM;
13016 }
13017 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13018 if(NULL == pWdaParams)
13019 {
13020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013021 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013022 VOS_ASSERT(0);
13023 vos_mem_free(wdiWowlExitInfo);
13024 return VOS_STATUS_E_NOMEM;
13025 }
13026
13027 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
13028 pWowlExitParams->bssIdx;
13029
Yue Ma7f44bbe2013-04-12 11:47:39 -070013030 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
13031 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013032
13033 /* Store param pointer as passed in by caller */
13034 /* store Params pass it to WDI */
13035 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
13036 pWdaParams->pWdaContext = pWDA;
13037 pWdaParams->wdaMsgParam = pWowlExitParams;
13038
13039 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013040 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013041
Jeff Johnson43971f52012-07-17 12:26:56 -070013042 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070013043 {
13044 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13045 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070013046 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013047 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13048 vos_mem_free(pWdaParams->wdaMsgParam);
13049 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013050 }
Jeff Johnson43971f52012-07-17 12:26:56 -070013051 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013052}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070013053/*
13054 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
13055 * Request to WDI to determine whether a given station is capable of
13056 * using HW-based frame translation
13057 */
13058v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
13059 tANI_U8 staIdx)
13060{
13061 return WDI_IsHwFrameTxTranslationCapable(staIdx);
13062}
Katya Nigam6201c3e2014-05-27 17:51:42 +053013063
13064/*
13065 * FUNCTION: WDA_IsSelfSTA
13066 * Request to WDI to determine whether a given STAID is self station
13067 * index.
13068 */
13069v_BOOL_t WDA_IsSelfSTA(v_PVOID_t pVosContext, tANI_U8 ucSTAIdx)
13070{
13071
13072 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
13073
Girish Gowli05cf44e2014-06-12 21:53:37 +053013074 if (NULL != pWDA)
13075 return WDI_IsSelfSTA(pWDA->pWdiContext,ucSTAIdx);
13076 else
13077 return VOS_TRUE;
Katya Nigam6201c3e2014-05-27 17:51:42 +053013078}
Jeff Johnson295189b2012-06-20 16:38:30 -070013079/*
13080 * FUNCTION: WDA_NvDownloadReqCallback
13081 * send NV Download RSP back to PE
13082 */
13083void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
13084 void* pUserData)
13085{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013086
13087 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013088 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013089
Jeff Johnson295189b2012-06-20 16:38:30 -070013090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013091 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013092
13093 if(NULL == pWdaParams)
13094 {
13095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013096 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013097 VOS_ASSERT(0) ;
13098 return ;
13099 }
13100
13101 pWDA = pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013102 if (NULL == pWDA)
13103 {
13104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13105 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053013106
13107 if(pWdaParams->wdaWdiApiMsgParam)
13108 {
13109 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13110 }
13111 vos_mem_free(pWdaParams);
13112
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013113 VOS_ASSERT(0);
13114 return ;
13115 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013116
Jeff Johnson295189b2012-06-20 16:38:30 -070013117 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013118 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13119 vos_mem_free(pWdaParams);
13120
Jeff Johnson295189b2012-06-20 16:38:30 -070013121 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070013122 return ;
13123}
Jeff Johnson295189b2012-06-20 16:38:30 -070013124/*
13125 * FUNCTION: WDA_ProcessNvDownloadReq
13126 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
13127 */
13128VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
13129{
13130 /* Initialize the local Variables*/
13131 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
13132 v_VOID_t *pNvBuffer=NULL;
13133 v_SIZE_t bufferSize = 0;
13134 WDI_Status status = WDI_STATUS_E_FAILURE;
13135 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013136 tWDA_ReqParams *pWdaParams ;
13137
Jeff Johnson295189b2012-06-20 16:38:30 -070013138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013139 "------> %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013140 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070013141 {
13142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013143 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013144 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070013145 return VOS_STATUS_E_FAILURE;
13146 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013147
Jeff Johnson295189b2012-06-20 16:38:30 -070013148 /* Get the NV structure base address and size from VOS */
Prasanna Kumarf6c94ae2013-04-11 20:05:21 -070013149 vos_nv_getNVEncodedBuffer(&pNvBuffer,&bufferSize);
13150
Jeff Johnson295189b2012-06-20 16:38:30 -070013151 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
13152 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013153 if(NULL == wdiNvDownloadReqParam)
13154 {
13155 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013156 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013157 VOS_ASSERT(0);
13158 return VOS_STATUS_E_NOMEM;
13159 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013160 /* Copy Params to wdiNvDownloadReqParam*/
13161 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
13162 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013163
13164 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13165 if(NULL == pWdaParams)
13166 {
13167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013168 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013169 VOS_ASSERT(0);
13170 vos_mem_free(wdiNvDownloadReqParam);
13171 return VOS_STATUS_E_NOMEM;
13172 }
13173
Jeff Johnson295189b2012-06-20 16:38:30 -070013174 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013175 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
13176 pWdaParams->wdaMsgParam = NULL;
13177 pWdaParams->pWdaContext = pWDA;
13178
13179
Jeff Johnson295189b2012-06-20 16:38:30 -070013180 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013181
Jeff Johnson295189b2012-06-20 16:38:30 -070013182 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013183 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
13184
Jeff Johnson295189b2012-06-20 16:38:30 -070013185 if(IS_WDI_STATUS_FAILURE(status))
13186 {
13187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13188 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013189 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13190 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013191 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013192 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013193}
13194/*
13195 * FUNCTION: WDA_FlushAcReqCallback
13196 * send Flush AC RSP back to TL
13197 */
13198void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
13199{
13200 vos_msg_t wdaMsg = {0} ;
13201 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13202 tFlushACReq *pFlushACReqParams;
13203 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013205 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013206 if(NULL == pWdaParams)
13207 {
13208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013209 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013210 VOS_ASSERT(0) ;
13211 return ;
13212 }
13213
13214 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
13215 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
13216 if(NULL == pFlushACRspParams)
13217 {
13218 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013219 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013220 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070013221 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013222 return ;
13223 }
13224 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
13225 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
13226 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
13227 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
13228 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070013229 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013230 vos_mem_free(pWdaParams->wdaMsgParam) ;
13231 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13232 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013233 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
13234 wdaMsg.bodyptr = (void *)pFlushACRspParams;
13235 // POST message to TL
13236 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
13237
Jeff Johnson295189b2012-06-20 16:38:30 -070013238 return ;
13239}
Jeff Johnson295189b2012-06-20 16:38:30 -070013240/*
13241 * FUNCTION: WDA_ProcessFlushAcReq
13242 * Request to WDI to Update the DELBA REQ params.
13243 */
13244VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
13245 tFlushACReq *pFlushAcReqParams)
13246{
13247 WDI_Status status = WDI_STATUS_SUCCESS ;
13248 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
13249 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
13250 sizeof(WDI_FlushAcReqParamsType)) ;
13251 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013252 if(NULL == wdiFlushAcReqParam)
13253 {
13254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013255 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013256 VOS_ASSERT(0);
13257 return VOS_STATUS_E_NOMEM;
13258 }
13259 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13260 if(NULL == pWdaParams)
13261 {
13262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013263 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013264 VOS_ASSERT(0);
13265 vos_mem_free(wdiFlushAcReqParam);
13266 return VOS_STATUS_E_NOMEM;
13267 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013268 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013269 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013270 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
13271 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
13272 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
13273 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -070013274 /* Store Flush AC pointer, as this will be used for response */
13275 /* store Params pass it to WDI */
13276 pWdaParams->pWdaContext = pWDA;
13277 pWdaParams->wdaMsgParam = pFlushAcReqParams;
13278 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070013279 status = WDI_FlushAcReq(wdiFlushAcReqParam,
13280 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013281 if(IS_WDI_STATUS_FAILURE(status))
13282 {
13283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13284 "Failure in Flush AC REQ Params WDI API, free all the memory " );
13285 vos_mem_free(pWdaParams->wdaMsgParam) ;
13286 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13287 vos_mem_free(pWdaParams) ;
13288 //TODO: respond to TL with failure
13289 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013290 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013291}
Jeff Johnson295189b2012-06-20 16:38:30 -070013292/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013293 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013294 *
13295 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013296void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013297{
13298 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013299 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070013300 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070013301
13302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013303 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013304 if(NULL == pWdaParams)
13305 {
13306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013307 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013308 VOS_ASSERT(0) ;
13309 return ;
13310 }
13311 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013312 if (NULL == pWDA)
13313 {
13314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13315 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +053013316 vos_mem_free(pWdaParams->wdaMsgParam) ;
13317 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13318 vos_mem_free(pWdaParams) ;
13319
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013320 VOS_ASSERT(0);
13321 return ;
13322 }
13323
Jeff Johnson295189b2012-06-20 16:38:30 -070013324 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
13325 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
13326 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
13327 {
13328 pWDA->wdaAmpSessionOn = VOS_FALSE;
13329 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013330 vos_mem_free(pWdaParams->wdaMsgParam) ;
13331 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13332 vos_mem_free(pWdaParams) ;
13333 /*
13334 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
13335 * param here
13336 */
Jeff Johnson295189b2012-06-20 16:38:30 -070013337 return ;
13338}
Yue Ma7f44bbe2013-04-12 11:47:39 -070013339/*
13340 * FUNCTION: WDA_BtAmpEventReqCallback
13341 * Free memory.
13342 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
13343 */
13344void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
13345{
13346 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013347 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013348 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070013349
Yue Ma7f44bbe2013-04-12 11:47:39 -070013350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13351 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13352
13353 if(NULL == pWdaParams)
13354 {
13355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13356 "%s: pWdaParams received NULL", __func__);
13357 VOS_ASSERT(0);
13358 return;
13359 }
13360
13361 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013362 if (NULL == pWDA)
13363 {
13364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13365 "%s:pWDA is NULL", __func__);
13366 VOS_ASSERT(0);
13367 return ;
13368 }
13369
Yue Ma7f44bbe2013-04-12 11:47:39 -070013370 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
13371
13372 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
13373 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
13374 {
13375 pWDA->wdaAmpSessionOn = VOS_FALSE;
13376 }
13377
13378 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13379 {
13380 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13381 vos_mem_free(pWdaParams->wdaMsgParam);
13382 vos_mem_free(pWdaParams);
13383 }
13384
13385 return;
13386}
Jeff Johnson295189b2012-06-20 16:38:30 -070013387/*
13388 * FUNCTION: WDA_ProcessBtAmpEventReq
13389 * Request to WDI to Update with BT AMP events.
13390 */
13391VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
13392 tSmeBtAmpEvent *pBtAmpEventParams)
13393{
13394 WDI_Status status = WDI_STATUS_SUCCESS ;
13395 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
13396 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
13397 sizeof(WDI_BtAmpEventParamsType)) ;
13398 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013400 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013401 if(NULL == wdiBtAmpEventParam)
13402 {
13403 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013404 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013405 VOS_ASSERT(0);
13406 return VOS_STATUS_E_NOMEM;
13407 }
13408 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13409 if(NULL == pWdaParams)
13410 {
13411 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013412 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013413 VOS_ASSERT(0);
13414 vos_mem_free(wdiBtAmpEventParam);
13415 return VOS_STATUS_E_NOMEM;
13416 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013417 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
13418 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013419 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
13420 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013421 /* Store BT AMP event pointer, as this will be used for response */
13422 /* store Params pass it to WDI */
13423 pWdaParams->pWdaContext = pWDA;
13424 pWdaParams->wdaMsgParam = pBtAmpEventParams;
13425 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070013426 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013427 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013428 if(IS_WDI_STATUS_FAILURE(status))
13429 {
13430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13431 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
13432 vos_mem_free(pWdaParams->wdaMsgParam) ;
13433 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13434 vos_mem_free(pWdaParams) ;
13435 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013436 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
13437 {
13438 pWDA->wdaAmpSessionOn = VOS_TRUE;
13439 }
13440 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013441}
13442
Jeff Johnson295189b2012-06-20 16:38:30 -070013443/*
13444 * FUNCTION: WDA_FTMCommandReqCallback
13445 * Handle FTM CMD response came from HAL
13446 * Route responce to HDD FTM
13447 */
13448void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
13449 void *usrData)
13450{
13451 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013452 if((NULL == pWDA) || (NULL == ftmCmdRspData))
13453 {
13454 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053013455 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070013456 return;
13457 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013458 /* Release Current FTM Command Request */
13459 vos_mem_free(pWDA->wdaFTMCmdReq);
13460 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070013461 /* Post FTM Responce to HDD FTM */
13462 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070013463 return;
13464}
Jeff Johnson295189b2012-06-20 16:38:30 -070013465/*
13466 * FUNCTION: WDA_ProcessFTMCommand
13467 * Send FTM command to WDI
13468 */
13469VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
13470 tPttMsgbuffer *pPTTFtmCmd)
13471{
13472 WDI_Status status = WDI_STATUS_SUCCESS;
13473 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070013474 ftmCMDReq = (WDI_FTMCommandReqType *)
13475 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
13476 if(NULL == ftmCMDReq)
13477 {
13478 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13479 "WDA FTM Command buffer alloc fail");
13480 return VOS_STATUS_E_NOMEM;
13481 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013482 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
13483 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -070013484 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -070013485 /* Send command to WDI */
13486 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070013487 return status;
13488}
Jeff Johnsone7245742012-09-05 17:12:55 -070013489#ifdef FEATURE_OEM_DATA_SUPPORT
13490/*
13491 * FUNCTION: WDA_StartOemDataReqCallback
13492 *
13493 */
13494void WDA_StartOemDataReqCallback(
13495 WDI_oemDataRspParamsType *wdiOemDataRspParams,
13496 void* pUserData)
13497{
13498 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013499 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013500 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070013501 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013502
Jeff Johnsone7245742012-09-05 17:12:55 -070013503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013504 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013505
13506 if(NULL == pWdaParams)
13507 {
13508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013509 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013510 VOS_ASSERT(0) ;
13511 return ;
13512 }
13513 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
13514
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013515 if (NULL == pWDA)
Jeff Johnsone7245742012-09-05 17:12:55 -070013516 {
13517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013518 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070013519 VOS_ASSERT(0);
13520 return ;
13521 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013522
Jeff Johnsone7245742012-09-05 17:12:55 -070013523 /*
13524 * Allocate memory for response params sent to PE
13525 */
13526 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
13527
13528 // Check if memory is allocated for OemdataMeasRsp Params.
13529 if(NULL == pOemDataRspParams)
13530 {
13531 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13532 "OEM DATA WDA callback alloc fail");
13533 VOS_ASSERT(0) ;
13534 return;
13535 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013536
Jeff Johnsone7245742012-09-05 17:12:55 -070013537 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013538 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13539 vos_mem_free(pWdaParams->wdaMsgParam);
13540 vos_mem_free(pWdaParams) ;
13541
Jeff Johnsone7245742012-09-05 17:12:55 -070013542 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080013543 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -070013544 * Also, here success always means that we have atleast one BSSID.
13545 */
13546 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
13547
13548 //enable Tx
13549 status = WDA_ResumeDataTx(pWDA);
13550 if(status != VOS_STATUS_SUCCESS)
13551 {
13552 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
13553 }
13554 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
13555 return ;
13556}
13557/*
13558 * FUNCTION: WDA_ProcessStartOemDataReq
13559 * Send Start Oem Data Req to WDI
13560 */
13561VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
13562 tStartOemDataReq *pOemDataReqParams)
13563{
13564 WDI_Status status = WDI_STATUS_SUCCESS;
13565 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013566 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -070013567
13568 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
13569
13570 if(NULL == wdiOemDataReqParams)
13571 {
13572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013573 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070013574 VOS_ASSERT(0);
13575 return VOS_STATUS_E_NOMEM;
13576 }
13577
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013578 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
13579 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
13580 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
13581 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -070013582
13583 wdiOemDataReqParams->wdiReqStatusCB = NULL;
13584
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013585 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13586 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -070013587 {
13588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013589 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070013590 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013591 vos_mem_free(pOemDataReqParams);
13592 VOS_ASSERT(0);
13593 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -070013594 }
Jeff Johnsone7245742012-09-05 17:12:55 -070013595
Bernald44a1ae2013-01-09 08:30:39 -080013596 pWdaParams->pWdaContext = (void*)pWDA;
13597 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
13598 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013599
13600 status = WDI_StartOemDataReq(wdiOemDataReqParams,
13601 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070013602
13603 if(IS_WDI_STATUS_FAILURE(status))
13604 {
13605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13606 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013607 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13608 vos_mem_free(pWdaParams->wdaMsgParam);
13609 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070013610 }
13611 return CONVERT_WDI2VOS_STATUS(status) ;
13612}
13613#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070013614/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013615 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013616 *
13617 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013618void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013619{
13620 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013622 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013623 if(NULL == pWdaParams)
13624 {
13625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013626 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013627 VOS_ASSERT(0) ;
13628 return ;
13629 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013630
13631 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13632 vos_mem_free(pWdaParams->wdaMsgParam);
13633 vos_mem_free(pWdaParams);
13634
13635 return ;
13636}
13637/*
13638 * FUNCTION: WDA_SetTxPerTrackingReqCallback
13639 * Free memory.
13640 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
13641 */
13642void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
13643{
13644 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13645
13646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13647 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13648
13649 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070013650 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070013651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13652 "%s: pWdaParams received NULL", __func__);
13653 VOS_ASSERT(0);
13654 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070013655 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013656
13657 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070013658 {
13659 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -070013660 vos_mem_free(pWdaParams->wdaMsgParam);
13661 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013662 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013663
13664 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070013665}
Jeff Johnson295189b2012-06-20 16:38:30 -070013666#ifdef WLAN_FEATURE_GTK_OFFLOAD
13667/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013668 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013669 *
13670 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013671void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013672 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013673{
13674 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13675
13676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013677 "<------ %s " ,__func__);
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080013678 if(NULL == pWdaParams)
13679 {
13680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13681 "%s: pWdaParams received NULL", __func__);
13682 VOS_ASSERT(0);
13683 return;
13684 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013685
Jeff Johnson295189b2012-06-20 16:38:30 -070013686 vos_mem_free(pWdaParams->wdaMsgParam) ;
13687 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13688 vos_mem_free(pWdaParams) ;
13689
13690 //print a msg, nothing else to do
13691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013692 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070013693
13694 return ;
13695}
Yue Ma7f44bbe2013-04-12 11:47:39 -070013696/*
13697 * FUNCTION: WDA_GTKOffloadReqCallback
13698 * Free memory.
13699 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
13700 */
13701void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
13702{
13703 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013704
Yue Ma7f44bbe2013-04-12 11:47:39 -070013705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13706 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13707
13708 if(NULL == pWdaParams)
13709 {
13710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13711 "%s: pWdaParams received NULL", __func__);
13712 VOS_ASSERT(0);
13713 return;
13714 }
13715
13716 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13717 {
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053013718 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
13719 sizeof(WDI_GtkOffloadReqMsg));
13720 vos_mem_zero(pWdaParams->wdaMsgParam,
13721 sizeof(tSirGtkOffloadParams));
Yue Ma7f44bbe2013-04-12 11:47:39 -070013722 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13723 vos_mem_free(pWdaParams->wdaMsgParam);
13724 vos_mem_free(pWdaParams);
13725 }
13726
13727 return;
13728}
Jeff Johnson295189b2012-06-20 16:38:30 -070013729/*
13730 * FUNCTION: WDA_ProcessGTKOffloadReq
13731 * Request to WDI to set the filter to minimize unnecessary host wakeup due
13732 * to broadcast traffic (sta mode).
13733 */
13734VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
13735 tpSirGtkOffloadParams pGtkOffloadParams)
13736{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013737 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013738 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
13739 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
13740 sizeof(WDI_GtkOffloadReqMsg)) ;
13741 tWDA_ReqParams *pWdaParams ;
13742
13743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013744 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013745
13746 if(NULL == wdiGtkOffloadReqMsg)
13747 {
13748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013749 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013750 VOS_ASSERT(0);
13751 return VOS_STATUS_E_NOMEM;
13752 }
13753
13754 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13755 if(NULL == pWdaParams)
13756 {
13757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013758 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013759 VOS_ASSERT(0);
13760 vos_mem_free(wdiGtkOffloadReqMsg);
13761 return VOS_STATUS_E_NOMEM;
13762 }
13763
13764 //
13765 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
13766 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013767
13768 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013769 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013770
Jeff Johnson295189b2012-06-20 16:38:30 -070013771 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
13772 // Copy KCK
13773 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
13774 // Copy KEK
13775 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
13776 // Copy KeyReplayCounter
13777 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
13778 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
13779
Yue Ma7f44bbe2013-04-12 11:47:39 -070013780 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
13781 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013782
Jeff Johnson295189b2012-06-20 16:38:30 -070013783
13784 /* Store Params pass it to WDI */
13785 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
13786 pWdaParams->pWdaContext = pWDA;
13787 /* Store param pointer as passed in by caller */
13788 pWdaParams->wdaMsgParam = pGtkOffloadParams;
13789
Yue Ma7f44bbe2013-04-12 11:47:39 -070013790 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013791
13792 if(IS_WDI_STATUS_FAILURE(status))
13793 {
13794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13795 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053013796 vos_mem_zero(wdiGtkOffloadReqMsg, sizeof(WDI_GtkOffloadReqMsg));
13797 vos_mem_zero(pGtkOffloadParams, sizeof(tSirGtkOffloadParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070013798 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13799 vos_mem_free(pWdaParams->wdaMsgParam);
13800 vos_mem_free(pWdaParams);
13801 }
13802
13803 return CONVERT_WDI2VOS_STATUS(status) ;
13804}
13805
13806/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013807 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013808 *
13809 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013810void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013811 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013812{
13813 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13814 tWDA_CbContext *pWDA;
13815 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Nirav Shah374de6e2014-02-13 16:40:01 +053013816 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070013817 vos_msg_t vosMsg;
13818
13819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013820 "<------ %s " ,__func__);
Nirav Shah374de6e2014-02-13 16:40:01 +053013821
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080013822 if(NULL == pWdaParams)
13823 {
13824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13825 "%s: pWdaParams received NULL", __func__);
13826 VOS_ASSERT(0);
13827 return;
13828 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013829
Nirav Shah374de6e2014-02-13 16:40:01 +053013830 pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams));
13831 if(NULL == pGtkOffloadGetInfoRsp)
13832 {
13833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13834 "%s: vos_mem_malloc failed ", __func__);
13835 VOS_ASSERT(0);
13836 return;
13837 }
13838
Jeff Johnson295189b2012-06-20 16:38:30 -070013839 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
13840 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
13841
13842 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
13843 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
13844
13845 /* Message Header */
13846 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
Kiran Kumar Lokerefdf42412013-07-17 17:40:58 -070013847 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013848
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013849 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
13850 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
13851 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
13852 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
13853 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070013854
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013855 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
13856 pwdiGtkOffloadGetInfoRsparams->bssId,
13857 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013858 /* VOS message wrapper */
13859 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
13860 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
13861 vosMsg.bodyval = 0;
13862
13863 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13864 {
13865 /* free the mem and return */
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053013866 vos_mem_zero(pGtkOffloadGetInfoRsp,
13867 sizeof(tSirGtkOffloadGetInfoRspParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070013868 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
13869 }
13870
13871 vos_mem_free(pWdaParams->wdaMsgParam) ;
13872 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13873 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013874
13875 return;
13876}
13877/*
13878 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
13879 * Free memory and send RSP back to SME.
13880 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
13881 */
13882void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
13883{
13884 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13885 vos_msg_t vosMsg;
13886
13887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13888 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13889
13890 if(NULL == pWdaParams)
13891 {
13892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13893 "%s: pWdaParams received NULL", __func__);
13894 VOS_ASSERT(0);
13895 return;
13896 }
13897
13898 /* VOS message wrapper */
13899 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
13900 vosMsg.bodyptr = NULL;
13901 vosMsg.bodyval = 0;
13902
13903 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13904 {
13905 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13906 vos_mem_free(pWdaParams->wdaMsgParam);
13907 vos_mem_free(pWdaParams);
13908 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
13909 }
13910
13911 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070013912}
13913#endif
13914
13915/*
13916 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
13917 * Request to WDI to set Tx Per Tracking configurations
13918 */
13919VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
13920{
13921 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070013922 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070013923 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
13924 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
13925 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
13926 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013928 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013929 if(NULL == pwdiSetTxPerTrackingReqParams)
13930 {
13931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013932 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013933 vos_mem_free(pTxPerTrackingParams);
13934 VOS_ASSERT(0);
13935 return VOS_STATUS_E_NOMEM;
13936 }
13937 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13938 if(NULL == pWdaParams)
13939 {
13940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013941 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013942 vos_mem_free(pwdiSetTxPerTrackingReqParams);
13943 vos_mem_free(pTxPerTrackingParams);
13944 VOS_ASSERT(0);
13945 return VOS_STATUS_E_NOMEM;
13946 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013947 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
13948 pTxPerTrackingParams->ucTxPerTrackingEnable;
13949 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
13950 pTxPerTrackingParams->ucTxPerTrackingPeriod;
13951 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
13952 pTxPerTrackingParams->ucTxPerTrackingRatio;
13953 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
13954 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013955 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
13956 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013957 /* Store param pointer as passed in by caller */
13958 /* store Params pass it to WDI
13959 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
13960 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
13961 pWdaParams->pWdaContext = pWDA;
13962 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070013963 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013964 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070013965 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070013966 {
13967 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13968 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070013969 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070013970 vos_mem_free(pWdaParams->wdaMsgParam) ;
13971 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13972 vos_mem_free(pWdaParams) ;
13973 }
Jeff Johnson43971f52012-07-17 12:26:56 -070013974 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013975
13976}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070013977/*
13978 * FUNCTION: WDA_HALDumpCmdCallback
13979 * Send the VOS complete .
13980 */
13981void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
13982 void* pUserData)
13983{
13984 tANI_U8 *buffer = NULL;
13985 tWDA_CbContext *pWDA = NULL;
Siddharth Bhal68115602015-01-18 20:44:55 +053013986 tWDA_HalDumpReqParams *pWdaParams = (tWDA_HalDumpReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013987 if(NULL == pWdaParams)
13988 {
13989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013990 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013991 VOS_ASSERT(0) ;
13992 return ;
13993 }
Bhargav Shah1a2cceb2016-03-28 11:56:10 +053013994
13995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13996 "%s: WDA HAL DUMP Resp Received",__func__);
13997
Jeff Johnson295189b2012-06-20 16:38:30 -070013998 pWDA = pWdaParams->pWdaContext;
13999 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070014000 if(wdiRspParams->usBufferLen > 0)
14001 {
14002 /*Copy the Resp data to UMAC supplied buffer*/
14003 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
14004 }
Siddharth Bhal68115602015-01-18 20:44:55 +053014005
14006 if (!pWdaParams->wdaHALDumpAsync)
14007 {/* Indicate VOSS about the start complete */
14008 vos_WDAComplete_cback(pWDA->pVosContext);
14009 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014010 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14011 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014012 return ;
14013}
14014
Jeff Johnson295189b2012-06-20 16:38:30 -070014015/*
14016 * FUNCTION: WDA_ProcessHALDumpCmdReq
14017 * Send Dump command to WDI
14018 */
14019VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
14020 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
Siddharth Bhal68115602015-01-18 20:44:55 +053014021 tANI_U32 arg4, tANI_U8 *pBuffer, wpt_boolean async)
Jeff Johnson295189b2012-06-20 16:38:30 -070014022{
14023 WDI_Status status = WDI_STATUS_SUCCESS;
14024 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
14025 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
Siddharth Bhal68115602015-01-18 20:44:55 +053014026 tWDA_HalDumpReqParams *pWdaParams ;
14027
Jeff Johnson295189b2012-06-20 16:38:30 -070014028 pVosContextType pVosContext = NULL;
14029 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070014030 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
14031 (void *)pMac);
Katya Nigame4bafe02014-02-28 15:37:57 +053014032 if(pVosContext)
14033 {
14034 if (pVosContext->isLogpInProgress)
14035 {
14036 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
14037 "%s:LOGP in Progress. Ignore!!!", __func__);
14038 return VOS_STATUS_E_BUSY;
14039 }
14040 }
14041 else
14042 {
14043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14044 "%s: VOS Context Null", __func__);
14045 return VOS_STATUS_E_RESOURCES;
14046 }
14047
Siddharth Bhal68115602015-01-18 20:44:55 +053014048 if (NULL == pVosContext->pWDAContext)
14049 {
14050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14051 "%s: WDA Context Null", __func__);
14052 return VOS_STATUS_E_RESOURCES;
14053 }
14054 pWdaParams = (tWDA_HalDumpReqParams *)vos_mem_malloc(sizeof(tWDA_HalDumpReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014055 if(NULL == pWdaParams)
14056 {
14057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014058 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014059 return VOS_STATUS_E_NOMEM;
14060 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014061 /* Allocate memory WDI request structure*/
14062 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
14063 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
14064 if(NULL == wdiHALDumpCmdReqParam)
14065 {
14066 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14067 "WDA HAL DUMP Command buffer alloc fail");
14068 vos_mem_free(pWdaParams);
14069 return WDI_STATUS_E_FAILURE;
14070 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014071 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070014072 /* Extract the arguments */
14073 wdiHalDumpCmdInfo->command = cmd;
14074 wdiHalDumpCmdInfo->argument1 = arg1;
14075 wdiHalDumpCmdInfo->argument2 = arg2;
14076 wdiHalDumpCmdInfo->argument3 = arg3;
14077 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070014078 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014079 pWdaParams->pWdaContext = pVosContext->pWDAContext;
Siddharth Bhal68115602015-01-18 20:44:55 +053014080 pWdaParams->wdaHALDumpAsync = async;
Jeff Johnson295189b2012-06-20 16:38:30 -070014081
14082 /* Response message will be passed through the buffer */
14083 pWdaParams->wdaMsgParam = (void *)pBuffer;
14084
14085 /* store Params pass it to WDI */
14086 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Bhargav Shah1a2cceb2016-03-28 11:56:10 +053014087
14088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14089 "%s: WDA HAL DUMP Command sent",__func__);
14090
Jeff Johnson295189b2012-06-20 16:38:30 -070014091 /* Send command to WDI */
Siddharth Bhal68115602015-01-18 20:44:55 +053014092 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback,
14093 pWdaParams);
14094 /* For Sync event only wait for rsp until completion of wdaCompleteEvent*/
14095 if (!async)
Jeff Johnson295189b2012-06-20 16:38:30 -070014096 {
Siddharth Bhal68115602015-01-18 20:44:55 +053014097 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent),
14098 WDA_DUMPCMD_WAIT_TIMEOUT );
14099 if ( vStatus != VOS_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -070014100 {
Siddharth Bhal68115602015-01-18 20:44:55 +053014101 if ( vStatus == VOS_STATUS_E_TIMEOUT )
14102 {
14103 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
14104 "%s: Timeout occurred before WDA_HALDUMP complete",__func__);
14105 }
14106 else
14107 {
14108 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
14109 "%s: WDA_HALDUMP reporting other error",__func__);
14110 }
Agrawal Ashish77855ee2016-09-06 13:04:06 +053014111 if (!(vos_isLoadUnloadInProgress() ||
14112 vos_is_logp_in_progress(VOS_MODULE_ID_VOSS, NULL)))
14113 VOS_BUG(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070014114 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014115 }
14116 return status;
14117}
Jeff Johnson295189b2012-06-20 16:38:30 -070014118#ifdef WLAN_FEATURE_GTK_OFFLOAD
14119/*
14120 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
14121 * Request to WDI to get GTK Offload Information
14122 */
14123VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
14124 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
14125{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053014126 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070014127 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
14128 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
14129 tWDA_ReqParams *pWdaParams ;
14130
14131 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
14132 {
14133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014134 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014135 VOS_ASSERT(0);
14136 return VOS_STATUS_E_NOMEM;
14137 }
14138
14139 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14140 if(NULL == pWdaParams)
14141 {
14142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014143 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014144 VOS_ASSERT(0);
14145 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
14146 return VOS_STATUS_E_NOMEM;
14147 }
14148
Yue Ma7f44bbe2013-04-12 11:47:39 -070014149 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
14150 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014151
Jeff Johnson295189b2012-06-20 16:38:30 -070014152 /* Store Params pass it to WDI */
14153 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
14154 pWdaParams->pWdaContext = pWDA;
14155 /* Store param pointer as passed in by caller */
14156 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
14157
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014158 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053014159 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014160
Yue Ma7f44bbe2013-04-12 11:47:39 -070014161 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014162
14163 if(IS_WDI_STATUS_FAILURE(status))
14164 {
14165 /* failure returned by WDI API */
14166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14167 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
14168 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14169 vos_mem_free(pWdaParams) ;
14170 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
14171 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
14172 }
14173
14174 return CONVERT_WDI2VOS_STATUS(status) ;
14175}
14176#endif // WLAN_FEATURE_GTK_OFFLOAD
14177
14178/*
Yue Mab9c86f42013-08-14 15:59:08 -070014179 * FUNCTION: WDA_ProcessAddPeriodicTxPtrnInd
14180 *
14181 */
14182VOS_STATUS WDA_ProcessAddPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
14183 tSirAddPeriodicTxPtrn *pAddPeriodicTxPtrnParams)
14184{
14185 WDI_Status wdiStatus;
14186 WDI_AddPeriodicTxPtrnParamsType *addPeriodicTxPtrnParams;
14187
14188 addPeriodicTxPtrnParams =
14189 vos_mem_malloc(sizeof(WDI_AddPeriodicTxPtrnParamsType));
14190
14191 if (NULL == addPeriodicTxPtrnParams)
14192 {
14193 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14194 "%s: Not able to allocate memory for addPeriodicTxPtrnParams!",
14195 __func__);
14196
14197 return VOS_STATUS_E_NOMEM;
14198 }
14199
14200 vos_mem_copy(&(addPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams),
14201 pAddPeriodicTxPtrnParams, sizeof(tSirAddPeriodicTxPtrn));
14202
14203 addPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
14204 addPeriodicTxPtrnParams->pUserData = pWDA;
14205
14206 wdiStatus = WDI_AddPeriodicTxPtrnInd(addPeriodicTxPtrnParams);
14207
14208 if (WDI_STATUS_PENDING == wdiStatus)
14209 {
14210 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14211 "Pending received for %s:%d", __func__, __LINE__ );
14212 }
14213 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
14214 {
14215 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14216 "Failure in %s:%d", __func__, __LINE__ );
14217 }
14218
14219 vos_mem_free(addPeriodicTxPtrnParams);
14220
14221 return CONVERT_WDI2VOS_STATUS(wdiStatus);
14222}
14223
14224/*
14225 * FUNCTION: WDA_ProcessDelPeriodicTxPtrnInd
14226 *
14227 */
14228VOS_STATUS WDA_ProcessDelPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
14229 tSirDelPeriodicTxPtrn *pDelPeriodicTxPtrnParams)
14230{
14231 WDI_Status wdiStatus;
14232 WDI_DelPeriodicTxPtrnParamsType *delPeriodicTxPtrnParams;
14233
14234 delPeriodicTxPtrnParams =
14235 vos_mem_malloc(sizeof(WDI_DelPeriodicTxPtrnParamsType));
14236
14237 if (NULL == delPeriodicTxPtrnParams)
14238 {
14239 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14240 "%s: Not able to allocate memory for delPeriodicTxPtrnParams!",
14241 __func__);
14242
14243 return VOS_STATUS_E_NOMEM;
14244 }
14245
14246 vos_mem_copy(&(delPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams),
14247 pDelPeriodicTxPtrnParams, sizeof(tSirDelPeriodicTxPtrn));
14248
14249 delPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
14250 delPeriodicTxPtrnParams->pUserData = pWDA;
14251
14252 wdiStatus = WDI_DelPeriodicTxPtrnInd(delPeriodicTxPtrnParams);
14253
14254 if (WDI_STATUS_PENDING == wdiStatus)
14255 {
14256 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14257 "Pending received for %s:%d", __func__, __LINE__ );
14258 }
14259 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
14260 {
14261 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14262 "Failure in %s:%d", __func__, __LINE__ );
14263 }
14264
14265 vos_mem_free(delPeriodicTxPtrnParams);
14266
14267 return CONVERT_WDI2VOS_STATUS(wdiStatus);
14268}
14269
Abhishek Singh00b71972016-01-07 10:51:04 +053014270/*
14271 * FUNCTION: WDA_ProcessRateUpdateInd
14272 *
14273 */
14274VOS_STATUS WDA_ProcessRateUpdateInd(tWDA_CbContext *pWDA,
14275 tSirRateUpdateInd *pRateUpdateParams)
14276{
14277 WDI_Status wdiStatus;
14278 WDI_RateUpdateIndParams rateUpdateParams;
14279
14280 vos_mem_copy(rateUpdateParams.bssid,
14281 pRateUpdateParams->bssid, sizeof(tSirMacAddr));
14282
14283 rateUpdateParams.ucastDataRateTxFlag =
14284 pRateUpdateParams->ucastDataRateTxFlag;
14285 rateUpdateParams.rmcDataRateTxFlag =
14286 pRateUpdateParams->rmcDataRateTxFlag;
14287 rateUpdateParams.mcastDataRate24GHzTxFlag =
14288 pRateUpdateParams->mcastDataRate24GHzTxFlag;
14289 rateUpdateParams.mcastDataRate5GHzTxFlag =
14290 pRateUpdateParams->mcastDataRate5GHzTxFlag;
14291
14292 rateUpdateParams.ucastDataRate = pRateUpdateParams->ucastDataRate;
14293 rateUpdateParams.rmcDataRate =
14294 pRateUpdateParams->rmcDataRate;
14295 rateUpdateParams.mcastDataRate24GHz = pRateUpdateParams->mcastDataRate24GHz;
14296 rateUpdateParams.mcastDataRate5GHz = pRateUpdateParams->mcastDataRate5GHz;
14297
14298 rateUpdateParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
14299 rateUpdateParams.pUserData = pWDA;
14300
14301 wdiStatus = WDI_RateUpdateInd(&rateUpdateParams);
14302
14303 if (WDI_STATUS_PENDING == wdiStatus)
14304 {
14305 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14306 "Pending received for %s:%d", __func__, __LINE__ );
14307 }
14308 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
14309 {
14310 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14311 "Failure in %s:%d", __func__, __LINE__ );
14312 }
14313
14314 vos_mem_free(pRateUpdateParams);
14315
14316 return CONVERT_WDI2VOS_STATUS(wdiStatus);
14317}
14318
14319
Rajeev79dbe4c2013-10-05 11:03:42 +053014320#ifdef FEATURE_WLAN_BATCH_SCAN
14321/*
14322 * FUNCTION: WDA_ProcessStopBatchScanInd
14323 *
14324 * DESCRIPTION: This function sends stop batch scan inidcation message to WDI
14325 *
14326 * PARAM:
14327 * pWDA: pointer to WDA context
14328 * pReq: pointer to stop batch scan request
14329 */
14330VOS_STATUS WDA_ProcessStopBatchScanInd(tWDA_CbContext *pWDA,
14331 tSirStopBatchScanInd *pReq)
14332{
14333 WDI_Status wdiStatus;
14334 WDI_StopBatchScanIndType wdiReq;
14335
14336 wdiReq.param = pReq->param;
14337
14338 wdiStatus = WDI_StopBatchScanInd(&wdiReq);
14339
14340 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
14341 {
14342 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14343 "Stop batch scan ind failed %s:%d", __func__, wdiStatus);
14344 }
14345
14346 vos_mem_free(pReq);
14347
14348 return CONVERT_WDI2VOS_STATUS(wdiStatus);
14349}
14350/*==========================================================================
14351 FUNCTION WDA_ProcessTriggerBatchScanResultInd
14352
14353 DESCRIPTION
14354 API to pull batch scan result from FW
14355
14356 PARAMETERS
14357 pWDA: Pointer to WDA context
14358 pGetBatchScanReq: Pointer to get batch scan result indication
14359
14360 RETURN VALUE
14361 NONE
14362
14363===========================================================================*/
14364VOS_STATUS WDA_ProcessTriggerBatchScanResultInd(tWDA_CbContext *pWDA,
14365 tSirTriggerBatchScanResultInd *pReq)
14366{
14367 WDI_Status wdiStatus;
14368 WDI_TriggerBatchScanResultIndType wdiReq;
14369
14370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
14371 "------> %s " ,__func__);
14372
14373 wdiReq.param = pReq->param;
14374
14375 wdiStatus = WDI_TriggerBatchScanResultInd(&wdiReq);
14376
14377 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
14378 {
14379 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14380 "Trigger batch scan result ind failed %s:%d",
14381 __func__, wdiStatus);
14382 }
14383
14384 vos_mem_free(pReq);
14385
14386 return CONVERT_WDI2VOS_STATUS(wdiStatus);
14387}
14388
14389/*==========================================================================
14390 FUNCTION WDA_SetBatchScanRespCallback
14391
14392 DESCRIPTION
14393 API to process set batch scan response from FW
14394
14395 PARAMETERS
14396 pRsp: Pointer to set batch scan response
14397 pUserData: Pointer to user data
14398
14399 RETURN VALUE
14400 NONE
14401
14402===========================================================================*/
14403void WDA_SetBatchScanRespCallback
14404(
14405 WDI_SetBatchScanRspType *pRsp,
14406 void* pUserData
14407)
14408{
14409 tSirSetBatchScanRsp *pHddSetBatchScanRsp;
14410 tpAniSirGlobal pMac;
14411 void *pCallbackContext;
14412 tWDA_CbContext *pWDA = NULL ;
14413 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14414
14415
14416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
14417 "<------ %s " ,__func__);
14418 if (NULL == pWdaParams)
14419 {
14420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14421 "%s: pWdaParams received NULL", __func__);
14422 VOS_ASSERT(0) ;
14423 return ;
14424 }
14425
14426 /*extract WDA context*/
14427 pWDA = pWdaParams->pWdaContext;
14428 if (NULL == pWDA)
14429 {
14430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14431 "%s:pWDA is NULL can't invole HDD callback",
14432 __func__);
14433 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14434 vos_mem_free(pWdaParams->wdaMsgParam);
14435 vos_mem_free(pWdaParams);
14436 VOS_ASSERT(0);
14437 return;
14438 }
14439
14440 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14441 vos_mem_free(pWdaParams->wdaMsgParam);
14442 vos_mem_free(pWdaParams);
14443
14444 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14445 if (NULL == pMac)
14446 {
14447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14448 "%s:pMac is NULL", __func__);
14449 VOS_ASSERT(0);
14450 return;
14451 }
14452
14453 pHddSetBatchScanRsp =
14454 (tSirSetBatchScanRsp *)vos_mem_malloc(sizeof(tSirSetBatchScanRsp));
14455 if (NULL == pHddSetBatchScanRsp)
14456 {
14457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14458 "%s: VOS MEM Alloc Failure can't invoke HDD callback", __func__);
14459 VOS_ASSERT(0);
14460 return;
14461 }
14462
14463 pHddSetBatchScanRsp->nScansToBatch = pRsp->nScansToBatch;
14464
14465 pCallbackContext = pMac->pmc.setBatchScanReqCallbackContext;
14466 /*call hdd callback with set batch scan response data*/
14467 if(pMac->pmc.setBatchScanReqCallback)
14468 {
14469 pMac->pmc.setBatchScanReqCallback(pCallbackContext, pHddSetBatchScanRsp);
14470 }
14471 else
14472 {
14473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14474 "%s:HDD callback is null", __func__);
14475 VOS_ASSERT(0);
14476 }
14477
14478 vos_mem_free(pHddSetBatchScanRsp);
14479 return ;
14480}
14481
14482/*==========================================================================
14483 FUNCTION WDA_ProcessSetBatchScanReq
14484
14485 DESCRIPTION
14486 API to send set batch scan request to WDI
14487
14488 PARAMETERS
14489 pWDA: Pointer to WDA context
14490 pSetBatchScanReq: Pointer to set batch scan req
14491
14492 RETURN VALUE
14493 NONE
14494
14495===========================================================================*/
14496VOS_STATUS WDA_ProcessSetBatchScanReq(tWDA_CbContext *pWDA,
14497 tSirSetBatchScanReq *pSetBatchScanReq)
14498{
14499 WDI_Status status;
14500 tWDA_ReqParams *pWdaParams ;
14501 WDI_SetBatchScanReqType *pWdiSetBatchScanReq;
14502
14503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
14504 "------> %s " ,__func__);
14505
14506 pWdiSetBatchScanReq =
14507 (WDI_SetBatchScanReqType *)vos_mem_malloc(sizeof(WDI_SetBatchScanReqType));
14508 if (NULL == pWdiSetBatchScanReq)
14509 {
14510 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14511 "%s: VOS MEM Alloc Failure", __func__);
14512 vos_mem_free(pSetBatchScanReq);
14513 VOS_ASSERT(0);
14514 return VOS_STATUS_E_NOMEM;
14515 }
14516
14517 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
14518 if (NULL == pWdaParams)
14519 {
14520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14521 "%s: VOS MEM Alloc Failure", __func__);
14522 VOS_ASSERT(0);
14523 vos_mem_free(pSetBatchScanReq);
14524 vos_mem_free(pWdiSetBatchScanReq);
14525 return VOS_STATUS_E_NOMEM;
14526 }
14527
14528 pWdiSetBatchScanReq->scanFrequency = pSetBatchScanReq->scanFrequency;
14529 pWdiSetBatchScanReq->numberOfScansToBatch =
14530 pSetBatchScanReq->numberOfScansToBatch;
14531 pWdiSetBatchScanReq->bestNetwork = pSetBatchScanReq->bestNetwork;
14532 pWdiSetBatchScanReq->rfBand = pSetBatchScanReq->rfBand;
14533 pWdiSetBatchScanReq->rtt = pSetBatchScanReq->rtt;
14534
14535 pWdaParams->wdaWdiApiMsgParam = pWdiSetBatchScanReq;
14536 pWdaParams->pWdaContext = pWDA;
14537 pWdaParams->wdaMsgParam = pSetBatchScanReq;
14538
14539 status = WDI_SetBatchScanReq(pWdiSetBatchScanReq, pWdaParams,
14540 (WDI_SetBatchScanCb)WDA_SetBatchScanRespCallback);
14541 if (IS_WDI_STATUS_FAILURE(status))
14542 {
14543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14544 "Failure in Set Batch Scan REQ WDI API, free all the memory " );
14545 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14546 vos_mem_free(pWdaParams->wdaMsgParam);
14547 vos_mem_free(pWdaParams);
14548 }
14549 return CONVERT_WDI2VOS_STATUS(status);
14550}
14551
14552#endif
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053014553/*
14554 * FUNCTION: WDA_ProcessHT40OBSSScanInd
14555 *
14556 * DESCRIPTION: This function sends start/update OBSS scan
14557 * inidcation message to WDI
14558 *
14559 * PARAM:
14560 * pWDA: pointer to WDA context
14561 * pReq: pointer to start OBSS scan request
14562 */
14563VOS_STATUS WDA_ProcessHT40OBSSScanInd(tWDA_CbContext *pWDA,
14564 tSirHT40OBSSScanInd *pReq)
14565{
14566 WDI_Status status;
14567 WDI_HT40ObssScanParamsType wdiOBSSScanParams;
14568 WDI_HT40ObssScanIndType *pWdiOBSSScanInd;
Rajeev79dbe4c2013-10-05 11:03:42 +053014569
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053014570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14571 "------> %s " ,__func__);
14572 wdiOBSSScanParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
14573 wdiOBSSScanParams.pUserData = pWDA;
14574
14575 pWdiOBSSScanInd = &(wdiOBSSScanParams.wdiHT40ObssScanParam);
14576 pWdiOBSSScanInd->cmdType = pReq->cmdType;
14577 pWdiOBSSScanInd->scanType = pReq->scanType;
14578 pWdiOBSSScanInd->OBSSScanActiveDwellTime =
14579 pReq->OBSSScanActiveDwellTime;
14580 pWdiOBSSScanInd->OBSSScanPassiveDwellTime =
14581 pReq->OBSSScanPassiveDwellTime;
14582 pWdiOBSSScanInd->BSSChannelWidthTriggerScanInterval =
14583 pReq->BSSChannelWidthTriggerScanInterval;
14584 pWdiOBSSScanInd->BSSWidthChannelTransitionDelayFactor =
14585 pReq->BSSWidthChannelTransitionDelayFactor;
14586 pWdiOBSSScanInd->OBSSScanActiveTotalPerChannel =
14587 pReq->OBSSScanActiveTotalPerChannel;
14588 pWdiOBSSScanInd->OBSSScanPassiveTotalPerChannel =
14589 pReq->OBSSScanPassiveTotalPerChannel;
14590 pWdiOBSSScanInd->OBSSScanActivityThreshold =
14591 pReq->OBSSScanActivityThreshold;
14592 pWdiOBSSScanInd->channelCount = pReq->channelCount;
14593 vos_mem_copy(pWdiOBSSScanInd->channels,
14594 pReq->channels,
14595 pReq->channelCount);
14596 pWdiOBSSScanInd->selfStaIdx = pReq->selfStaIdx;
14597 pWdiOBSSScanInd->fortyMHZIntolerent = pReq->fortyMHZIntolerent;
14598 pWdiOBSSScanInd->bssIdx = pReq->bssIdx;
14599 pWdiOBSSScanInd->currentOperatingClass = pReq->currentOperatingClass;
14600 pWdiOBSSScanInd->ieFieldLen = pReq->ieFieldLen;
14601
14602 vos_mem_copy(pWdiOBSSScanInd->ieField,
14603 pReq->ieField,
14604 pReq->ieFieldLen);
14605
14606 status = WDI_HT40OBSSScanInd(&wdiOBSSScanParams);
14607 if (WDI_STATUS_PENDING == status)
14608 {
14609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14610 "Pending received for %s:%d ",__func__,__LINE__ );
14611 }
14612 else if (WDI_STATUS_SUCCESS_SYNC != status)
14613 {
14614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14615 "Failure in %s:%d ",__func__,__LINE__ );
14616 }
14617 return CONVERT_WDI2VOS_STATUS(status) ;
14618}
14619/*
14620 * FUNCTION: WDA_ProcessHT40OBSSStopScanInd
14621 *
14622 * DESCRIPTION: This function sends stop OBSS scan inidcation message to WDI
14623 *
14624 * PARAM:
14625 * pWDA: pointer to WDA context
14626 * pReq: pointer to stop batch scan request
14627 */
14628VOS_STATUS WDA_ProcessHT40OBSSStopScanInd(tWDA_CbContext *pWDA,
14629 tANI_U8 *bssIdx)
14630{
14631 WDI_Status status;
14632
14633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14634 "------> %s " ,__func__);
14635
14636 status = WDI_HT40OBSSStopScanInd(*bssIdx);
14637 if (WDI_STATUS_PENDING == status)
14638 {
14639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14640 "Pending received for %s:%d ",__func__,__LINE__ );
14641 }
14642 else if (WDI_STATUS_SUCCESS_SYNC != status)
14643 {
14644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14645 "Failure in %s:%d ",__func__,__LINE__ );
14646 }
14647 return CONVERT_WDI2VOS_STATUS(status) ;
14648}
Yue Mab9c86f42013-08-14 15:59:08 -070014649/*
Jeff Johnson295189b2012-06-20 16:38:30 -070014650 * -------------------------------------------------------------------------
14651 * DATA interface with WDI for Mgmt Frames
14652 * -------------------------------------------------------------------------
14653 */
Jeff Johnson295189b2012-06-20 16:38:30 -070014654/*
14655 * FUNCTION: WDA_TxComplete
14656 * Callback function for the WDA_TxPacket
14657 */
14658VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
14659 VOS_STATUS status )
14660{
14661
14662 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
14663 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014664 uintptr_t uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014665
Mihir Shete63341222015-03-24 15:39:18 +053014666 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Enter:%s", __func__);
14667
Jeff Johnson295189b2012-06-20 16:38:30 -070014668 if(NULL == wdaContext)
14669 {
14670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14671 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014672 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014673 VOS_ASSERT(0);
Sushant Kaushik8355d202014-12-17 16:48:10 +053014674 vos_pkt_return_packet(pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070014675 return VOS_STATUS_E_FAILURE;
14676 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070014677
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014678 vos_lock_acquire(&wdaContext->mgmt_pkt_lock);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070014679 /*Check if frame was timed out or not*/
14680 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
14681 (v_PVOID_t)&uUserData);
14682
14683 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
14684 {
14685 /*Discard frame - no further processing is needed*/
Mihir Shete63341222015-03-24 15:39:18 +053014686 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
14687 "%s: MGMT Frame Tx timed out",
14688 __func__);
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014689 vos_pkt_return_packet(pData);
14690 vos_lock_release(&wdaContext->mgmt_pkt_lock);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070014691 return VOS_STATUS_SUCCESS;
14692 }
14693
Jeff Johnson295189b2012-06-20 16:38:30 -070014694 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
14695 if( NULL!=wdaContext->pTxCbFunc)
14696 {
14697 /*check if packet is freed already*/
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053014698 if(vos_atomic_set((uintptr_t*)&wdaContext->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED) == (uintptr_t)pData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014699 {
14700 wdaContext->pTxCbFunc(pMac, pData);
14701 }
14702 else
14703 {
14704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053014705 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014706 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070014707 //Return from here since we reaching here because the packet already timeout
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014708 vos_lock_release(&wdaContext->mgmt_pkt_lock);
Jeff Johnson295189b2012-06-20 16:38:30 -070014709 return status;
14710 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014711 }
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014712 else {
14713 wdaContext->mgmt_pktfree_fail++;
14714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14715 "%s:packet (%p) userData (%lx) is not freed",
14716 __func__, pData, uUserData);
14717 }
14718 vos_lock_release(&wdaContext->mgmt_pkt_lock);
Jeff Johnson295189b2012-06-20 16:38:30 -070014719
14720 /*
14721 * Trigger the event to bring the HAL TL Tx complete function to come
14722 * out of wait
14723 * Let the coe above to complete the packet first. When this event is set,
14724 * the thread waiting for the event may run and set Vospacket_freed causing the original
14725 * packet not being freed.
14726 */
14727 status = vos_event_set(&wdaContext->txFrameEvent);
14728 if(!VOS_IS_STATUS_SUCCESS(status))
14729 {
14730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014731 "NEW VOS Event Set failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014732 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014733 return status;
14734}
Jeff Johnson295189b2012-06-20 16:38:30 -070014735/*
14736 * FUNCTION: WDA_TxPacket
14737 * Forward TX management frame to WDI
14738 */
14739VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
14740 void *pFrmBuf,
14741 tANI_U16 frmLen,
14742 eFrameType frmType,
14743 eFrameTxDir txDir,
14744 tANI_U8 tid,
14745 pWDATxRxCompFunc pCompFunc,
14746 void *pData,
14747 pWDAAckFnTxComp pAckTxComp,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053014748 tANI_U32 txFlag,
14749 tANI_U32 txBdToken
14750 )
Jeff Johnson295189b2012-06-20 16:38:30 -070014751{
14752 VOS_STATUS status = VOS_STATUS_SUCCESS ;
14753 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
14754 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
14755 tANI_U8 eventIdx = 0;
14756 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
14757 tpAniSirGlobal pMac;
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053014758 tpSirTxBdStatus txBdStatus = {0};
Abhishek Singhe721fb42015-11-30 14:22:10 +053014759 v_TIME_t time_snapshot;
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053014760
Jeff Johnson295189b2012-06-20 16:38:30 -070014761 if((NULL == pWDA)||(NULL == pFrmBuf))
14762 {
14763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053014764 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014765 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070014766 VOS_ASSERT(0);
14767 return VOS_STATUS_E_FAILURE;
14768 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014769
Jeff Johnson295189b2012-06-20 16:38:30 -070014770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053014771 "Tx Mgmt Frame Subtype: %d alloc(%p) txBdToken = %u",
14772 pFc->subType, pFrmBuf, txBdToken);
Jeff Johnson295189b2012-06-20 16:38:30 -070014773 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14774 if(NULL == pMac)
14775 {
14776 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014777 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014778 VOS_ASSERT(0);
14779 return VOS_STATUS_E_FAILURE;
14780 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014781
Jeff Johnson295189b2012-06-20 16:38:30 -070014782 /* store the call back function in WDA context */
14783 pWDA->pTxCbFunc = pCompFunc;
14784 /* store the call back for the function of ackTxComplete */
14785 if( pAckTxComp )
14786 {
Jeff Johnsone7245742012-09-05 17:12:55 -070014787 if( NULL != pWDA->pAckTxCbFunc )
14788 {
14789 /* Already TxComp is active no need to active again */
Agarwal Ashish3b3f3cb2015-07-02 16:43:47 +053014790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014791 "There is already one request pending for tx complete");
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053014792 pWDA->pAckTxCbFunc( pMac, &txBdStatus);
Jeff Johnsone7245742012-09-05 17:12:55 -070014793 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070014794
Jeff Johnsone7245742012-09-05 17:12:55 -070014795 if( VOS_STATUS_SUCCESS !=
14796 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14797 {
14798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14799 "Tx Complete timeout Timer Stop Failed ");
14800 }
14801 else
14802 {
Agarwal Ashish3b3f3cb2015-07-02 16:43:47 +053014803 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080014804 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070014805 }
14806 }
14807
14808 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
14809 pWDA->pAckTxCbFunc = pAckTxComp;
14810 if( VOS_STATUS_SUCCESS !=
14811 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
14812 {
14813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14814 "Tx Complete Timer Start Failed ");
14815 pWDA->pAckTxCbFunc = NULL;
14816 return eHAL_STATUS_FAILURE;
14817 }
14818 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014819 /* Reset the event to be not signalled */
14820 status = vos_event_reset(&pWDA->txFrameEvent);
14821 if(!VOS_IS_STATUS_SUCCESS(status))
14822 {
14823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014824 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014825 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
14826 if( pAckTxComp )
14827 {
14828 pWDA->pAckTxCbFunc = NULL;
14829 if( VOS_STATUS_SUCCESS !=
14830 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14831 {
14832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14833 "Tx Complete timeout Timer Stop Failed ");
14834 }
14835 }
14836 return VOS_STATUS_E_FAILURE;
14837 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014838
14839 /* If Peer Sta mask is set don't overwrite to self sta */
14840 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070014841 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014842 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070014843 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014844 else
14845 {
Ganesh K08bce952012-12-13 15:04:41 -080014846 /* Get system role, use the self station if in unknown role or STA role */
14847 systemRole = wdaGetGlobalSystemRole(pMac);
14848 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
14849 (( eSYSTEM_STA_ROLE == systemRole )
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080014850#if defined FEATURE_WLAN_ESE || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080014851 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014852#endif
Ganesh K08bce952012-12-13 15:04:41 -080014853 ))
14854 {
14855 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
14856 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080014857 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014858
Jeff Johnsone7245742012-09-05 17:12:55 -070014859 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
14860 disassoc frame reaches the HW, HAL has already deleted the peer station */
14861 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070014862 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080014863 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070014864 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070014865 {
Jeff Johnson295189b2012-06-20 16:38:30 -070014866 /*Send Probe request frames on self sta idx*/
14867 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070014868 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014869 /* Since we donot want probe responses to be retried, send probe responses
14870 through the NO_ACK queues */
14871 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
14872 {
14873 //probe response is sent out using self station and no retries options.
14874 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
14875 }
14876 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
14877 {
14878 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
14879 }
14880 }
Pradeep Reddy POTTETI01710062015-06-29 13:35:53 +053014881#ifdef FEATURE_WLAN_TDLS
14882 /* TDLS Management frames are sent using Peer Sta mask */
14883 else if ((pFc->type == SIR_MAC_DATA_FRAME) &&
14884 (txFlag & HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME))
14885 {
14886 txFlag |= HAL_USE_PEER_STA_REQUESTED_MASK;
14887
14888 }
14889#endif
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053014890 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
Jeff Johnson295189b2012-06-20 16:38:30 -070014891
14892 /*Set frame tag to 0
14893 We will use the WDA user data in order to tag a frame as expired*/
14894 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
14895 (v_PVOID_t)0);
14896
14897
14898 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053014899 frmLen, ucTypeSubType, tid, WDA_TxComplete, NULL, txFlag,
14900 txBdToken))!= VOS_STATUS_SUCCESS)
Jeff Johnson295189b2012-06-20 16:38:30 -070014901 {
14902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014903 "Sending Mgmt Frame failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014904 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053014905 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 -070014906 if( pAckTxComp )
14907 {
14908 pWDA->pAckTxCbFunc = NULL;
14909 if( VOS_STATUS_SUCCESS !=
14910 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14911 {
14912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14913 "Tx Complete timeout Timer Stop Failed ");
14914 }
14915 }
14916 return VOS_STATUS_E_FAILURE;
14917 }
Abhishek Singhe721fb42015-11-30 14:22:10 +053014918 time_snapshot = vos_timer_get_system_time();
Jeff Johnson295189b2012-06-20 16:38:30 -070014919 /*
14920 * Wait for the event to be set by the TL, to get the response of TX
14921 * complete, this event should be set by the Callback function called by TL
14922 */
14923 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
14924 &eventIdx);
14925 if(!VOS_IS_STATUS_SUCCESS(status))
14926 {
14927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14928 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014929 __func__, status);
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014930 vos_lock_acquire(&pWDA->mgmt_pkt_lock);
Sushant Kaushik8355d202014-12-17 16:48:10 +053014931 /*Tag Frame as timed out for later deletion*/
14932 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
14933 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
Jeff Johnson295189b2012-06-20 16:38:30 -070014934 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
14935 after the packet gets completed(packet freed once)*/
14936
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014937 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED);
14938
14939 /*
14940 * Memory barrier to ensure pFrmBuf is set before TX thread access it in
14941 * TX completion call back
14942 */
14943 VOS_SMP_MB;
14944 vos_lock_release(&pWDA->mgmt_pkt_lock);
14945
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070014946 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
Katya Nigam53677462014-08-04 11:37:28 +053014947 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070014948
Abhishek Singh837adf22015-10-01 17:37:37 +053014949 if (vos_isFatalEventEnabled())
14950 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
14951 WLAN_LOG_INDICATOR_HOST_DRIVER,
14952 WLAN_LOG_REASON_MGMT_FRAME_TIMEOUT,
14953 FALSE, TRUE);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070014954
Jeff Johnson295189b2012-06-20 16:38:30 -070014955 if( pAckTxComp )
14956 {
14957 pWDA->pAckTxCbFunc = NULL;
14958 if( VOS_STATUS_SUCCESS !=
14959 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14960 {
14961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14962 "Tx Complete timeout Timer Stop Failed ");
14963 }
14964 }
Abhishek Singhe721fb42015-11-30 14:22:10 +053014965 pWDA->mgmtTxfailureCnt++;
14966
Sravan Kumar Kairam1113ee72017-01-06 14:52:09 +053014967 /* Request firmware recovery */
14968 if (WDA_TX_FW_RECOVERY_THRESHOLD ==
14969 pWDA->mgmtTxfailureCnt)
14970 {
14971 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14972 "%s: Request firmware for recovery", __func__);
14973 WLANTL_TLDebugMessage(WLANTL_DEBUG_FW_CLEANUP);
14974 }
14975
Abhishek Singhe721fb42015-11-30 14:22:10 +053014976 /* SSR if timeout continously for
14977 * WDA_TX_FAILURE_RECOVERY_THRESHOLD times.
14978 */
14979 if (WDA_TX_FAILURE_RECOVERY_THRESHOLD ==
14980 pWDA->mgmtTxfailureCnt)
14981 {
Sravan Kumar Kairam1113ee72017-01-06 14:52:09 +053014982 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14983 "%s: Request system recovery", __func__);
Abhishek Singhe721fb42015-11-30 14:22:10 +053014984 vos_wlanRestart();
14985 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014986 status = VOS_STATUS_E_FAILURE;
14987 }
Abhishek Singhe721fb42015-11-30 14:22:10 +053014988
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +053014989#ifdef WLAN_DUMP_MGMTFRAMES
14990 if (VOS_IS_STATUS_SUCCESS(status))
14991 {
14992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14993 "%s() TX packet : SubType %d", __func__,pFc->subType);
14994 VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14995 pData, frmLen);
14996 }
14997#endif
14998
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080014999 if (VOS_IS_STATUS_SUCCESS(status))
15000 {
Abhishek Singhe721fb42015-11-30 14:22:10 +053015001 pWDA->mgmtTxfailureCnt = 0;
15002 if ((vos_timer_get_system_time() - time_snapshot) >=
15003 WDA_TX_TIME_THRESHOLD)
15004 {
15005 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15006 "Tx Complete took %lu ms",
15007 vos_timer_get_system_time() - time_snapshot);
15008 }
15009
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080015010 if (pMac->fEnableDebugLog & 0x1)
15011 {
15012 if ((pFc->type == SIR_MAC_MGMT_FRAME) &&
15013 (pFc->subType != SIR_MAC_MGMT_PROBE_REQ) &&
15014 (pFc->subType != SIR_MAC_MGMT_PROBE_RSP))
15015 {
15016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "TX MGMT - Type %hu, SubType %hu",
15017 pFc->type, pFc->subType);
15018 }
15019 }
15020 }
15021
15022
Jeff Johnson295189b2012-06-20 16:38:30 -070015023 return status;
15024}
Jeff Johnson295189b2012-06-20 16:38:30 -070015025/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015026 * FUNCTION: WDA_ProcessDHCPStartInd
15027 * Forward DHCP Start to WDI
15028 */
15029static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
15030 tAniDHCPInd *dhcpStartInd)
15031{
15032 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053015033 WDI_DHCPInd wdiDHCPInd;
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015034
c_hpothu0b0cab72014-02-13 21:52:40 +053015035 wdiDHCPInd.device_mode = dhcpStartInd->device_mode;
15036 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStartInd->macAddr,
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015037 sizeof(tSirMacAddr));
15038
c_hpothu0b0cab72014-02-13 21:52:40 +053015039 status = WDI_dhcpStartInd(&wdiDHCPInd);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015040
c_hpothu0b0cab72014-02-13 21:52:40 +053015041 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015042 {
c_hpothu0b0cab72014-02-13 21:52:40 +053015043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15044 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015045 }
c_hpothu0b0cab72014-02-13 21:52:40 +053015046 else if (WDI_STATUS_SUCCESS_SYNC != status)
15047 {
15048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15049 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
15050 }
15051
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015052 vos_mem_free(dhcpStartInd);
15053 return CONVERT_WDI2VOS_STATUS(status) ;
15054}
15055
15056 /*
15057 * FUNCTION: WDA_ProcessDHCPStopInd
15058 * Forward DHCP Stop to WDI
15059 */
15060 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
15061 tAniDHCPInd *dhcpStopInd)
15062 {
15063 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053015064 WDI_DHCPInd wdiDHCPInd;
15065
15066 wdiDHCPInd.device_mode = dhcpStopInd->device_mode;
15067 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
15068
15069 status = WDI_dhcpStopInd(&wdiDHCPInd);
15070
15071 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015072 {
c_hpothu0b0cab72014-02-13 21:52:40 +053015073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15074 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015075 }
c_hpothu0b0cab72014-02-13 21:52:40 +053015076 else if (WDI_STATUS_SUCCESS_SYNC != status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015077 {
c_hpothu0b0cab72014-02-13 21:52:40 +053015078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15079 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015080 }
c_hpothu0b0cab72014-02-13 21:52:40 +053015081
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015082 vos_mem_free(dhcpStopInd);
c_hpothu0b0cab72014-02-13 21:52:40 +053015083
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015084 return CONVERT_WDI2VOS_STATUS(status) ;
15085 }
15086
Abhishek Singh00b71972016-01-07 10:51:04 +053015087#ifdef WLAN_FEATURE_RMC
15088
15089void
15090WDA_RMCRulerRspCallback(WDI_RmcRspParamsType *wdiRmcResponse, void *pUserData)
15091{
15092 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15093 tWDA_CbContext *pWDA = pWdaParams->pWdaContext;
15094
15095 switch (wdiRmcResponse->cmd)
15096 {
15097 case eWDI_BECOME_RULER_CMD :
15098 {
15099 tSirRmcBecomeRulerInd *pRmcBecomeRulerInd;
15100
15101 pRmcBecomeRulerInd = (tSirRmcBecomeRulerInd *)
15102 vos_mem_malloc(sizeof(*pRmcBecomeRulerInd));
15103
15104 if (NULL == pRmcBecomeRulerInd)
15105 {
15106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15107 "%s: unable to allocate pRmcBecomeRulerInd", __func__);
15108 break;
15109 }
15110
15111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15112 "Received eWDI_BECOME_RULER_CMD from WDI");
15113
15114 pRmcBecomeRulerInd->status = wdiRmcResponse->status;
15115
15116 vos_mem_copy(pRmcBecomeRulerInd->mcastTransmitter,
15117 wdiRmcResponse->mcastTransmitter,
15118 sizeof(tSirMacAddr));
15119 vos_mem_copy(pRmcBecomeRulerInd->mcastGroup,
15120 wdiRmcResponse->mcastGroup,
15121 sizeof(tSirMacAddr));
15122
15123 WDA_SendMsg(pWDA, WDA_RMC_BECOME_RULER,
15124 (void *)pRmcBecomeRulerInd, 0) ;
15125 break;
15126 }
15127 case eWDI_SUGGEST_RULER_CMD :
15128 {
15129 tSirRmcRulerSelectInd *pRmcRulerSelectInd;
15130
15131 pRmcRulerSelectInd = (tSirRmcRulerSelectInd *)
15132 vos_mem_malloc(sizeof(tSirRmcRulerSelectInd));
15133
15134 if (NULL == pRmcRulerSelectInd)
15135 {
15136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15137 "%s: unable to allocate pRmcRulerSelectInd", __func__);
15138 break;
15139 }
15140
15141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15142 "Received eWDI_SUGGEST_RULER_CMD from WDI");
15143
15144 pRmcRulerSelectInd->status = wdiRmcResponse->status;
15145
15146 vos_mem_copy(pRmcRulerSelectInd->mcastTransmitter,
15147 wdiRmcResponse->mcastTransmitter,
15148 sizeof(tSirMacAddr));
15149 vos_mem_copy(pRmcRulerSelectInd->mcastGroup,
15150 wdiRmcResponse->mcastGroup,
15151 sizeof(tSirMacAddr));
15152 vos_mem_copy(pRmcRulerSelectInd->ruler,
15153 wdiRmcResponse->ruler,
15154 sizeof(pRmcRulerSelectInd->ruler));
15155
15156 WDA_SendMsg(pWDA, WDA_RMC_RULER_SELECT_RESP,
15157 (void *)pRmcRulerSelectInd, 0) ;
15158 break;
15159 }
15160 }
15161
15162 /* free the config structure */
15163 if (pWdaParams->wdaWdiApiMsgParam != NULL)
15164 {
15165 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15166 }
15167 vos_mem_free(pWdaParams->wdaMsgParam);
15168 vos_mem_free(pWdaParams);
15169
15170}
15171
15172void WDA_RMCRulerReqCallback(WDI_Status wdiStatus, void* pUserData)
15173{
15174 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15175
15176 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15177 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15178
15179 if (NULL == pWdaParams)
15180 {
15181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15182 "%s: pWdaParams received NULL", __func__);
15183 VOS_ASSERT(0);
15184 return;
15185 }
15186
15187 if (IS_WDI_STATUS_FAILURE(wdiStatus))
15188 {
15189 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15190 vos_mem_free(pWdaParams->wdaMsgParam);
15191 vos_mem_free(pWdaParams);
15192 }
15193
15194 return;
15195}
15196
15197static VOS_STATUS
15198WDA_ProcessRMCRulerReq(tWDA_CbContext *pWDA,
15199 tSirRmcRulerReq *rmcRulerReq)
15200{
15201 WDI_Status status;
15202 WDI_RmcRulerReqParams *wdiRulerReq;
15203 tWDA_ReqParams *pWdaParams;
15204
15205 wdiRulerReq = (WDI_RmcRulerReqParams *)
15206 vos_mem_malloc(sizeof(*wdiRulerReq));
15207
15208 if (NULL == wdiRulerReq)
15209 {
15210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15211 "%s: VOS MEM Alloc Failure", __func__);
15212 VOS_ASSERT(0);
15213 vos_mem_free(rmcRulerReq);
15214 return VOS_STATUS_E_NOMEM;
15215 }
15216
15217 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
15218 if (NULL == pWdaParams)
15219 {
15220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15221 "%s: VOS MEM Alloc Failure", __func__);
15222 VOS_ASSERT(0);
15223 vos_mem_free(rmcRulerReq);
15224 vos_mem_free(wdiRulerReq);
15225 return VOS_STATUS_E_NOMEM;
15226 }
15227
15228 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiRulerReq;
15229 /* Store param pointer as passed in by caller */
15230 pWdaParams->wdaMsgParam = rmcRulerReq;
15231 pWdaParams->pWdaContext = pWDA;
15232
15233 wdiRulerReq->cmd = rmcRulerReq->cmd;
15234
15235 vos_mem_copy(wdiRulerReq->mcastTransmitter,
15236 rmcRulerReq->mcastTransmitter, sizeof(tSirMacAddr));
15237 vos_mem_copy(wdiRulerReq->mcastGroup,
15238 rmcRulerReq->mcastGroup, sizeof(tSirMacAddr));
15239 vos_mem_copy(wdiRulerReq->blacklist,
15240 rmcRulerReq->blacklist, sizeof(wdiRulerReq->blacklist));
15241
15242 wdiRulerReq->wdiReqStatusCB = WDA_RMCRulerReqCallback;
15243
15244 status = WDI_RmcRulerReq(wdiRulerReq,
15245 (WDI_RmcRulerRspCb)WDA_RMCRulerRspCallback,
15246 (void *)pWdaParams);
15247 if (IS_WDI_STATUS_FAILURE(status))
15248 {
15249 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15250 vos_mem_free(pWdaParams->wdaMsgParam);
15251 vos_mem_free(pWdaParams) ;
15252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15253 "Ruler Request failed");
15254 }
15255 return CONVERT_WDI2VOS_STATUS(status) ;
15256}
15257
15258/*
15259 * FUNCTION: WDA_ProcessRMCUpdateInd
15260 * Forward Update Indication to WDI
15261*/
15262static VOS_STATUS
15263WDA_ProcessRMCUpdateInd(tWDA_CbContext *pWDA,
15264 tSirRmcUpdateInd *rmcUpdateInd)
15265{
15266 WDI_Status status;
15267 WDI_RmcUpdateIndParams wdiUpdateInd;
15268
15269 /* Copy the paramters for Update_Ind */
15270
15271 wdiUpdateInd.indication = rmcUpdateInd->indication;
15272 wdiUpdateInd.role = rmcUpdateInd->role;
15273
15274 vos_mem_copy(wdiUpdateInd.mcastTransmitter,
15275 rmcUpdateInd->mcastTransmitter, sizeof(tSirMacAddr));
15276
15277 vos_mem_copy(wdiUpdateInd.mcastGroup,
15278 rmcUpdateInd->mcastGroup, sizeof(tSirMacAddr));
15279
15280 vos_mem_copy(wdiUpdateInd.mcastRuler,
15281 rmcUpdateInd->mcastRuler, sizeof(tSirMacAddr));
15282
15283 wdiUpdateInd.wdiReqStatusCB = WDA_WdiIndicationCallback;
15284 wdiUpdateInd.pUserData = pWDA;
15285 status = WDI_RmcUpdateInd(&wdiUpdateInd);
15286
15287 if (WDI_STATUS_PENDING == status)
15288 {
15289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15290 "Pending received for %s:%d ",__func__,__LINE__ );
15291 }
15292 else if (WDI_STATUS_SUCCESS_SYNC != status)
15293 {
15294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15295 "Failure in %s:%d ",__func__,__LINE__ );
15296 }
15297
15298 vos_mem_free(rmcUpdateInd);
15299
15300 return CONVERT_WDI2VOS_STATUS(status) ;
15301}
15302
15303void WDA_GetIbssPeerInfoRspCallback(WDI_IbssPeerInfoRspParams *peerInfoRspParams
15304 ,void* pUserData)
15305{
15306
15307 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15308 WDI_IbssPeerInfoParams *pIbssPeerInfoParams;
15309 tWDA_CbContext *pWDA;
15310 tpSirIbssGetPeerInfoRspParams pIbssGetPeerInfoRsp;
15311 vos_msg_t vosMsg;
15312 v_U32_t wdaCnt = 0;
15313
15314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15315 "<------ %s " ,__func__);
15316 if (NULL == pWdaParams)
15317 {
15318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15319 "%s: pWdaParams received NULL", __func__);
15320 VOS_ASSERT(0);
15321 return;
15322 }
15323
15324 if (NULL == peerInfoRspParams)
15325 {
15326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15327 "%s: peerInfoRspParams received NULL", __func__);
15328 if(pWdaParams->wdaMsgParam)
15329 vos_mem_free(pWdaParams->wdaMsgParam);
15330 if(pWdaParams->wdaWdiApiMsgParam)
15331 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15332 vos_mem_free(pWdaParams);
15333
15334 VOS_ASSERT(0);
15335 return;
15336 }
15337
15338 pIbssPeerInfoParams =
15339 (WDI_IbssPeerInfoParams *)peerInfoRspParams->wdiPeerInfoParams;
15340
15341 pIbssGetPeerInfoRsp =
15342 vos_mem_malloc(sizeof(tSirIbssGetPeerInfoRspParams));
15343
15344 if(NULL == pIbssGetPeerInfoRsp)
15345 {
15346 if(pWdaParams->wdaMsgParam)
15347 vos_mem_free(pWdaParams->wdaMsgParam);
15348 if(pWdaParams->wdaWdiApiMsgParam)
15349 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15350 vos_mem_free(pWdaParams);
15351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15352 "%s: Memory allocation failed for pIbssGetPeerInfoRsp",
15353 __func__);
15354 VOS_ASSERT(0);
15355 return;
15356
15357 }
15358
15359 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
15360
15361
15362 if (peerInfoRspParams->wdiNumPeers > 32)
15363 {
15364 pr_info("%s] Number of peers is more than 32, returning\n", __func__);
15365 /* free the mem and return */
15366 vos_mem_free((v_VOID_t *) pIbssGetPeerInfoRsp);
15367 if(pWdaParams->wdaMsgParam)
15368 vos_mem_free(pWdaParams->wdaMsgParam);
15369 if(pWdaParams->wdaWdiApiMsgParam)
15370 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15371 vos_mem_free(pWdaParams);
15372
15373 return;
15374 }
15375
15376 /* Message Header */
15377 pIbssGetPeerInfoRsp->mesgType = eWNI_SME_IBSS_PEER_INFO_RSP;
15378 pIbssGetPeerInfoRsp->mesgLen = sizeof(tSirIbssGetPeerInfoRspParams);
15379 pIbssGetPeerInfoRsp->ibssPeerInfoRspParams.status = peerInfoRspParams->wdiStatus;
15380 pIbssGetPeerInfoRsp->ibssPeerInfoRspParams.numPeers = peerInfoRspParams->wdiNumPeers;
15381
15382 for (wdaCnt = 0; wdaCnt < peerInfoRspParams->wdiNumPeers; wdaCnt++)
15383 {
15384 WDI_IbssPeerInfoParams *pWdiTmp = &pIbssPeerInfoParams[wdaCnt];
15385 tSirIbssPeerInfoParams *pSmeTmp =
15386 &pIbssGetPeerInfoRsp->ibssPeerInfoRspParams.peerInfoParams[wdaCnt];
15387
15388 pSmeTmp->staIdx = pWdiTmp->wdiStaIdx;
15389 pSmeTmp->mcsIndex = pWdiTmp->wdiMcsIndex;
15390 pSmeTmp->rssi = pWdiTmp->wdiRssi;
15391 pSmeTmp->txRate = pWdiTmp->wdiTxRate;
15392 pSmeTmp->txRateFlags = pWdiTmp->wdiTxRateFlags;
15393 }
15394
15395 /* VOS message wrapper */
15396 vosMsg.type = eWNI_SME_IBSS_PEER_INFO_RSP;
15397 vosMsg.bodyptr = (void *)pIbssGetPeerInfoRsp;
15398 vosMsg.bodyval = 0;
15399
15400 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15401 {
15402 /* free the mem and return */
15403 vos_mem_free((v_VOID_t *) pIbssGetPeerInfoRsp);
15404 }
15405
15406 if(NULL != pWdaParams)
15407 {
15408 if(pWdaParams->wdaMsgParam)
15409 vos_mem_free(pWdaParams->wdaMsgParam);
15410 if(pWdaParams->wdaWdiApiMsgParam)
15411 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15412 vos_mem_free(pWdaParams);
15413 }
15414
15415 return;
15416}
15417
15418static VOS_STATUS
15419WDA_ProcessIbssPeerInfoReq(tWDA_CbContext *pWDA,
15420 tSirIbssGetPeerInfoReqParams *ibssPeerInfoReqParams)
15421{
15422 WDI_Status status;
15423 WDI_IbssPeerInfoReqType *wdiPeerInfoReq;
15424 tWDA_ReqParams *pWdaParams;
15425
15426 wdiPeerInfoReq = (WDI_IbssPeerInfoReqType *)
15427 vos_mem_malloc(sizeof(WDI_IbssPeerInfoReqType));
15428 if (NULL == wdiPeerInfoReq)
15429 {
15430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15431 "%s: VOS MEM Alloc Failure", __func__);
15432 VOS_ASSERT(0);
15433 vos_mem_free(ibssPeerInfoReqParams);
15434 return VOS_STATUS_E_NOMEM;
15435 }
15436
15437 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
15438 if (NULL == pWdaParams)
15439 {
15440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15441 "%s: VOS MEM Alloc Failure", __func__);
15442 VOS_ASSERT(0);
15443 vos_mem_free(wdiPeerInfoReq);
15444 vos_mem_free(ibssPeerInfoReqParams);
15445 return VOS_STATUS_E_NOMEM;
15446 }
15447
15448 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiPeerInfoReq;
15449 /* Store param pointer as passed in by caller */
15450 pWdaParams->wdaMsgParam = ibssPeerInfoReqParams;
15451 pWdaParams->pWdaContext = pWDA;
15452
15453 wdiPeerInfoReq->wdiAllPeerInfoReqd =
15454 ibssPeerInfoReqParams->allPeerInfoReqd;
15455 wdiPeerInfoReq->wdiStaIdx =
15456 ibssPeerInfoReqParams->staIdx;
15457
15458 status = WDI_IbssPeerInfoReq(wdiPeerInfoReq,
15459 (WDI_IbssPeerInfoReqCb)WDA_GetIbssPeerInfoRspCallback,
15460 (void *)pWdaParams);
15461 if (IS_WDI_STATUS_FAILURE(status))
15462 {
15463 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15464 vos_mem_free(pWdaParams->wdaMsgParam);
15465 vos_mem_free(pWdaParams) ;
15466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15467 "IBSS Peer Info Request failed");
15468 }
15469 return CONVERT_WDI2VOS_STATUS(status) ;
15470
15471}
15472
Kapil Gupta3d923fb2016-12-20 18:59:27 +053015473#ifdef WLAN_FEATURE_APFIND
15474/*
15475 * FUNCTION: WDA_Process_apfind_set_cmd
15476 * Forward AP find config request to WDI
15477 */
15478VOS_STATUS WDA_Process_apfind_set_cmd(tWDA_CbContext *pWDA,
15479 struct hal_apfind_request *ap_find_req)
15480{
15481 WDI_Status status;
15482 struct WDI_APFind_cmd *wdi_ap_find_cmd;
15483
15484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15485 "------> %s " ,__func__);
15486 if (NULL == ap_find_req)
15487 {
15488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15489 "%s: apfind_req info received NULL", __func__);
15490 VOS_ASSERT(0) ;
15491 return VOS_STATUS_E_FAULT;
15492 }
15493
15494 wdi_ap_find_cmd = (struct WDI_APFind_cmd *)vos_mem_malloc(
15495 sizeof(struct hal_apfind_request) + ap_find_req->request_data_len);
15496
15497 wdi_ap_find_cmd->data_len = ap_find_req->request_data_len;
15498 vos_mem_copy(wdi_ap_find_cmd->data, ap_find_req->request_data,
15499 ap_find_req->request_data_len);
15500
15501 status = WDI_process_ap_find_cmd(wdi_ap_find_cmd);
15502 if (WDI_STATUS_PENDING == status) {
15503 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15504 FL("pending status received"));
15505 } else if (WDI_STATUS_SUCCESS_SYNC != status &&
15506 (WDI_STATUS_SUCCESS != status)) {
15507
15508 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15509 FL("Failure in process_sap_auth_offload API %d"), status);
15510
15511 }
15512 vos_mem_free(wdi_ap_find_cmd);
15513 return CONVERT_WDI2VOS_STATUS(status) ;
15514}
15515#endif
15516
Abhishek Singh00b71972016-01-07 10:51:04 +053015517/*
15518 * FUNCTION: WDA_ProcessTXFailMonitorInd
15519 * Forward TX Fail Monitor to WDI
15520 */
15521static VOS_STATUS WDA_ProcessTXFailMonitorInd(
15522 tWDA_CbContext *pWDA,
15523 tAniTXFailMonitorInd *txFailMonitorInd)
15524{
15525 WDI_Status status;
15526 WDI_TXFailMonitorInd *wdiTXFailMonitorInd =
15527 (WDI_TXFailMonitorInd *)vos_mem_malloc(sizeof(WDI_TXFailMonitorInd));
15528
15529 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15530 "<------ %s " ,__func__);
15531
15532 if (NULL == wdiTXFailMonitorInd)
15533 {
15534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15535 "%s: VOS MEM Alloc Failure", __func__);
15536 VOS_ASSERT(0);
15537 vos_mem_free(txFailMonitorInd);
15538 return VOS_STATUS_E_NOMEM;
15539 }
15540
15541 wdiTXFailMonitorInd->tx_fail_count = txFailMonitorInd->tx_fail_count;
15542
15543 wdiTXFailMonitorInd->wdiReqStatusCB = WDA_WdiIndicationCallback;
15544 wdiTXFailMonitorInd->pUserData = pWDA;
15545
15546 status = WDI_TXFailMonitorStartStopInd(wdiTXFailMonitorInd);
15547
15548 if (WDI_STATUS_PENDING == status)
15549 {
15550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15551 "TX Fail Monitor Indication Pending");
15552 }
15553 else if (WDI_STATUS_SUCCESS_SYNC == status)
15554 {
15555 if (0 == txFailMonitorInd->tx_fail_count)
15556 pWDA->txFailIndCallback = NULL;
15557 else
15558 pWDA->txFailIndCallback = txFailMonitorInd->txFailIndCallback;
15559 }
15560 else
15561 {
15562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15563 "TX Fail Monitor Indication Failed");
15564 }
15565
15566 vos_mem_free(wdiTXFailMonitorInd);
15567 vos_mem_free(txFailMonitorInd);
15568
15569 return CONVERT_WDI2VOS_STATUS(status) ;
15570}
15571#endif /* WLAN_FEATURE_RMC */
15572
Kapil Gupta04ab1992016-06-26 13:36:51 +053015573#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
15574VOS_STATUS WDA_ProcessPERRoamScanTriggerReq(tWDA_CbContext *pWDA,
15575 tPERRoamScanStart *pPERRoamTriggerScanReqParams)
15576{
15577 WDI_Status status;
15578 tWDA_ReqParams *pWdaParams ;
15579 WDI_PERRoamTriggerScanInfo *pwdiPERRoamTriggerScanInfo =
15580 (WDI_PERRoamTriggerScanInfo *)vos_mem_malloc(
15581 sizeof(WDI_PERRoamTriggerScanInfo));
15582
15583 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15584 "------> %s " ,__func__);
15585
15586 if (NULL == pwdiPERRoamTriggerScanInfo)
15587 {
15588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15589 "%s: VOS MEM Alloc Failure", __func__);
15590 VOS_ASSERT(0);
15591 return VOS_STATUS_E_NOMEM;
15592 }
15593
15594 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15595 if (NULL == pWdaParams)
15596 {
15597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15598 "%s: VOS MEM Alloc Failure", __func__);
15599 VOS_ASSERT(0);
15600 vos_mem_free(pwdiPERRoamTriggerScanInfo);
15601 return VOS_STATUS_E_NOMEM;
15602 }
15603
15604 pwdiPERRoamTriggerScanInfo->roamScanReq =
15605 pPERRoamTriggerScanReqParams->start;
15606
15607 /* Store Params pass it to WDI */
15608 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPERRoamTriggerScanInfo;
15609 pWdaParams->pWdaContext = pWDA;
15610
15611 /* Store param pointer as passed in by caller */
15612 pWdaParams->wdaMsgParam = pPERRoamTriggerScanReqParams;
15613 status = WDI_PERRoamScanTriggerReq(pwdiPERRoamTriggerScanInfo,
15614 (WDI_PERRoamTriggerScanCb)WDA_PERRoamTriggerScanReqCallback,
15615 pWdaParams);
15616
15617 if(IS_WDI_STATUS_FAILURE(status))
15618 {
15619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15620 "Failure in Start Roam Candidate trigger Req WDI API" );
15621 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15622 vos_mem_free(pWdaParams->wdaMsgParam);
15623 pWdaParams->wdaWdiApiMsgParam = NULL;
15624 pWdaParams->wdaMsgParam = NULL;
15625 }
15626 return CONVERT_WDI2VOS_STATUS(status) ;
15627}
15628#endif
15629
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015630/*
Siddharth Bhal171788a2014-09-29 21:02:40 +053015631 * FUNCTION: WDA_ProcessSetSpoofMacAddrReq
15632 *
15633 * DESCRIPTION: This function sends Spoof Mac Addr Req to WDI
15634 *
15635 * PARAM:
15636 * pWDA: pointer to WDA context
15637 * pReq: pointer to stop batch scan request
15638 */
15639VOS_STATUS WDA_ProcessSetSpoofMacAddrReq(tWDA_CbContext *pWDA,
15640 tpSpoofMacAddrReqParams pReq)
15641{
15642 WDI_Status wdiStatus;
15643 WDI_SpoofMacAddrInfoType *WDI_SpoofMacAddrInfoParams;
15644 tWDA_ReqParams *pWdaParams;
15645
15646 WDI_SpoofMacAddrInfoParams = (WDI_SpoofMacAddrInfoType *)vos_mem_malloc(
15647 sizeof(WDI_SpoofMacAddrInfoType));
15648 if(NULL == WDI_SpoofMacAddrInfoParams) {
15649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15650 "%s: VOS MEM Alloc Failure in Spoof Req", __func__);
15651 VOS_ASSERT(0);
15652 return VOS_STATUS_E_NOMEM;
15653 }
15654 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15655 if(NULL == pWdaParams) {
15656 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15657 "%s: VOS MEM Alloc Failure", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +053015658 vos_mem_free(WDI_SpoofMacAddrInfoParams);
Siddharth Bhal171788a2014-09-29 21:02:40 +053015659 VOS_ASSERT(0);
15660 return VOS_STATUS_E_NOMEM;
15661 }
15662
15663 vos_mem_copy(WDI_SpoofMacAddrInfoParams->macAddr,
15664 pReq->macAddr, VOS_MAC_ADDRESS_LEN);
15665
15666 pWdaParams->pWdaContext = pWDA;
15667 /* Store Upper layer req pointer, as this will be used for response */
Siddharth Bhal029d6732014-10-09 21:31:23 +053015668 pWdaParams->wdaMsgParam = (void *)pReq;
15669
15670 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, WDA_MAC_ADDRESS_STR,
15671 WDA_MAC_ADDR_ARRAY(WDI_SpoofMacAddrInfoParams->macAddr));
15672
Siddharth Bhal171788a2014-09-29 21:02:40 +053015673 /* store Params pass it to WDI */
15674 pWdaParams->wdaWdiApiMsgParam = (void *)WDI_SpoofMacAddrInfoParams ;
15675
15676 wdiStatus = WDI_SetSpoofMacAddrReq(WDI_SpoofMacAddrInfoParams,
Siddharth Bhal029d6732014-10-09 21:31:23 +053015677 (WDI_SetSpoofMacAddrRspCb) WDA_SpoofMacAddrRspCallback,
15678 pWdaParams );
Siddharth Bhal171788a2014-09-29 21:02:40 +053015679
15680 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15681 {
15682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15683 "Failure in SetSpoofMacAddrReq Params WDI API, free all the memory " );
15684 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15685 vos_mem_free(pWdaParams->wdaMsgParam);
15686 vos_mem_free(pWdaParams);
15687 }
15688
15689 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
15690}
15691
c_manjeecfd1efb2015-09-25 19:32:34 +053015692
15693/*
15694 * FUNCTION: WDA_FwrMemDumpRespCallback
15695 * recieves Mgmt Logging init response from FW
15696 */
15697 void WDA_FwrMemDumpRespCallback(WDI_FwrMemDumpRsp* wdiRsp,
15698 void* pUserData)
15699{
15700 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15701 tAniFwrDumpReq *pFwrMemDumpReq;
15702 tAniFwrDumpRsp *pFwrMemDumpRsp;
15703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15704 "<------ %s " ,__func__);
15705
15706 if(NULL == pWdaParams)
15707 {
15708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15709 "%s: pWdaParams received NULL", __func__);
15710 VOS_ASSERT(0);
15711 return ;
15712 }
15713
15714 if(NULL == pWdaParams->wdaMsgParam)
15715 {
15716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15717 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
15718 VOS_ASSERT(0);
15719 vos_mem_free(pWdaParams);
15720 return ;
15721 }
15722
15723 pFwrMemDumpRsp = (tAniFwrDumpRsp *)vos_mem_malloc(sizeof(tAniFwrDumpRsp));
15724 if(pFwrMemDumpRsp == NULL)
15725 {
15726 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15727 "%s: pFwrMemDumpRsp is NULL", __func__);
15728 VOS_ASSERT(0);
15729 vos_mem_free(pWdaParams);
15730 return ;
15731 }
15732
15733 pFwrMemDumpRsp->dump_status = wdiRsp->dump_status;
15734 pFwrMemDumpReq = (tAniFwrDumpReq *)pWdaParams->wdaMsgParam;
15735
15736 if(pFwrMemDumpReq->fwMemDumpReqCallback)
15737 {
15738 pFwrMemDumpReq->fwMemDumpReqCallback(
15739 pFwrMemDumpReq->fwMemDumpReqContext,
15740 pFwrMemDumpRsp);
15741 }
15742 else
15743 {
15744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15745 "%s: FwrMemDump callback is NULL", __func__);
15746 }
15747
15748 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15749 vos_mem_free(pWdaParams->wdaMsgParam);
15750 vos_mem_free(pWdaParams);
15751 vos_mem_free(pFwrMemDumpRsp);
15752
15753 return ;
15754}
15755
15756VOS_STATUS WDA_ProcessFwrMemDumpReq(tWDA_CbContext * pWDA,
15757 tAniFwrDumpReq* pFwrMemDumpReq)
15758{
15759 VOS_STATUS status = VOS_STATUS_SUCCESS;
15760 WDI_Status wstatus;
15761 WDI_FwrMemDumpReqType * pWdiFwrMemDumpReq;
15762 tWDA_ReqParams *pWdaParams ;
15763
15764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15765 "------> %s " ,__func__);
15766 /* Sanity Check*/
15767 if(NULL == pFwrMemDumpReq)
15768 {
15769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15770 "%s: pFwrMemDumpReq received NULL", __func__);
15771 VOS_ASSERT(0) ;
15772 return VOS_STATUS_E_FAULT;
15773 }
15774
15775 pWdiFwrMemDumpReq = (WDI_FwrMemDumpReqType *)vos_mem_malloc(sizeof(WDI_FwrMemDumpReqType));
15776 if(NULL == pWdiFwrMemDumpReq)
15777 {
15778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15779 "%s: pWdiFwrMemDumpReq Alloc Failure", __func__);
15780 VOS_ASSERT(0);
15781 return VOS_STATUS_E_NOMEM;
15782 }
15783
15784 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15785 if(NULL == pWdaParams)
15786 {
15787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15788 "%s: pWdaParams Alloc Failure", __func__);
15789 VOS_ASSERT(0);
15790 vos_mem_free(pWdiFwrMemDumpReq);
15791 return VOS_STATUS_E_NOMEM;
15792 }
15793
15794 /* Store Params pass it to WDI */
15795 pWdaParams->wdaWdiApiMsgParam = (void *)pWdiFwrMemDumpReq;
15796 pWdaParams->pWdaContext = pWDA;
15797 /* Store param pointer as passed in by caller */
15798 pWdaParams->wdaMsgParam = pFwrMemDumpReq;
15799
15800 status = WDI_FwrMemDumpReq(pWdiFwrMemDumpReq,
15801 (WDI_FwrMemDumpCb)WDA_FwrMemDumpRespCallback,
15802 pWdaParams);
15803
15804 if(IS_WDI_STATUS_FAILURE(wstatus))
15805 {
15806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15807 FL("Fwr Mem Dump Req failed, free all the memory"));
15808 status = CONVERT_WDI2VOS_STATUS(wstatus);
15809 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
c_manjeecfd1efb2015-09-25 19:32:34 +053015810 pWdaParams->wdaWdiApiMsgParam = NULL;
Sreelakshmi Konamkifff0f9e2016-07-20 15:02:28 +053015811 vos_mem_free(pWdaParams->wdaMsgParam);
c_manjeecfd1efb2015-09-25 19:32:34 +053015812 pWdaParams->wdaMsgParam = NULL;
Sreelakshmi Konamkifff0f9e2016-07-20 15:02:28 +053015813 vos_mem_free(pWdaParams);
c_manjeecfd1efb2015-09-25 19:32:34 +053015814 }
15815
15816 return status;
15817
15818}
15819
Selvaraj, Sridharc045b8b2016-04-06 12:22:35 +053015820/**
15821 * wda_process_set_allowed_action_frames_ind() - Set allowed action frames to FW
15822 *
15823 * @pWDA: WDA Call back context
15824 * @allowed_action_frames: Pointer to struct sir_allowed_action_frames
15825 * that holds allowed action frames bitmask
15826 *
15827 * This function sets the allowed action frames that the FW needs to
15828 * handover to host.The Action frames other than the requested ones
15829 * can be dropped in FW
15830 *
15831 * Return: VOS_STATUS enumeration
15832 */
15833VOS_STATUS wda_process_set_allowed_action_frames_ind(tWDA_CbContext *pWDA,
15834 struct sir_allowed_action_frames *allowed_action_frames)
15835{
15836 WDI_Status status;
15837 struct WDI_AllowedActionFramesInd *wdi_allowed_action_frames;
15838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15839 FL("---> %s"), __func__);
c_manjeecfd1efb2015-09-25 19:32:34 +053015840
Selvaraj, Sridharc045b8b2016-04-06 12:22:35 +053015841 wdi_allowed_action_frames = (struct WDI_AllowedActionFramesInd*)
15842 vos_mem_malloc(sizeof
15843 (*wdi_allowed_action_frames));
15844 if (!wdi_allowed_action_frames) {
15845 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15846 "%s: VOS MEM Alloc Failure", __func__);
15847 vos_mem_free(allowed_action_frames);
15848 return VOS_STATUS_E_NOMEM;
15849 }
15850
15851 wdi_allowed_action_frames->bitmask = allowed_action_frames->bitmask;
15852 wdi_allowed_action_frames->reserved = allowed_action_frames->reserved;
15853
15854 status = WDI_SetAllowedActionFramesInd(wdi_allowed_action_frames);
15855 if (WDI_STATUS_PENDING == status) {
15856 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15857 FL("pending status received"));
15858 } else if (WDI_STATUS_SUCCESS_SYNC != status &&
15859 (WDI_STATUS_SUCCESS != status)) {
15860 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15861 FL("Failure in allowed_action_frames API %d"), status);
15862 }
15863
15864 vos_mem_free(wdi_allowed_action_frames);
15865 vos_mem_free(allowed_action_frames);
15866 return CONVERT_WDI2VOS_STATUS(status) ;
15867}
c_manjeecfd1efb2015-09-25 19:32:34 +053015868
Agrawal Ashish17ef5082016-10-17 18:33:21 +053015869#ifdef SAP_AUTH_OFFLOAD
15870VOS_STATUS wda_process_sap_auth_offload(tWDA_CbContext *pWDA,
15871 struct tSirSapOffloadInfo *sap_auth_offload_info)
15872{
15873 WDI_Status status = WDI_STATUS_SUCCESS;
15874 struct WDI_sap_ofl_enable_params *sap_ofl_enable_cmd;
15875 v_U16_t psk_len, psk_len_padded;
15876
15877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15878 "------> %s " ,__func__);
15879
15880 if(NULL == sap_auth_offload_info)
15881 {
15882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15883 "%s: sap_auth_offload_info received NULL", __func__);
15884 VOS_ASSERT(0) ;
15885 return VOS_STATUS_E_FAULT;
15886 }
15887 psk_len = sap_auth_offload_info->key_len;
15888 psk_len_padded = roundup(psk_len, sizeof(v_U32_t));
15889
15890 sap_ofl_enable_cmd = (struct WDI_sap_ofl_enable_params*)
15891 vos_mem_malloc(sizeof
15892 (*sap_ofl_enable_cmd));
15893 if (!sap_ofl_enable_cmd) {
15894 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15895 "%s: VOS MEM Alloc Failure", __func__);
15896 vos_mem_free(sap_auth_offload_info);
15897 return VOS_STATUS_E_NOMEM;
15898 }
15899 vos_mem_zero(sap_ofl_enable_cmd, sizeof(*sap_ofl_enable_cmd));
15900 vos_mem_copy(sap_ofl_enable_cmd->macAddr,
15901 sap_auth_offload_info->macAddr, VOS_MAC_ADDRESS_LEN);
15902
15903 sap_ofl_enable_cmd->enable = sap_auth_offload_info->sap_auth_offload_enable;
15904 sap_ofl_enable_cmd->psk_len = psk_len;
15905 switch (sap_auth_offload_info->sap_auth_offload_sec_type) {
15906 case eSIR_OFFLOAD_WPA2PSK_CCMP:
15907 sap_ofl_enable_cmd->rsn_authmode = WDI_AUTH_TYPE_RSN_PSK;
15908 sap_ofl_enable_cmd->rsn_mcastcipherset = WDI_ED_CCMP;
15909 sap_ofl_enable_cmd->rsn_ucastcipherset = WDI_ED_CCMP;
15910 break;
15911 case eSIR_OFFLOAD_NONE:
15912 default:
15913 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15914 "Set SAP AP Auth offload with none support security type\n");
15915 break;
15916 }
15917 vos_mem_copy(sap_ofl_enable_cmd->key, sap_auth_offload_info->key, psk_len);
15918
15919 status = WDI_process_sap_auth_offload(sap_ofl_enable_cmd);
15920
15921 if (WDI_STATUS_PENDING == status) {
15922 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15923 FL("pending status received"));
15924 } else if (WDI_STATUS_SUCCESS_SYNC != status &&
15925 (WDI_STATUS_SUCCESS != status)) {
15926 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15927 FL("Failure in process_sap_auth_offload API %d"), status);
15928 }
15929
15930 vos_mem_free(sap_ofl_enable_cmd);
15931 vos_mem_free(sap_auth_offload_info);
15932 return CONVERT_WDI2VOS_STATUS(status) ;
15933
15934}
15935#endif
15936
Siddharth Bhal171788a2014-09-29 21:02:40 +053015937/*
Bhargav Shahe3a6ff02016-04-11 16:31:49 +053015938 * FUNCTION: WDA_ProcessBcnMissPenaltyCount
15939 * Request to WDI.
15940 */
15941VOS_STATUS WDA_ProcessTLPauseInd(tWDA_CbContext *pWDA, v_U32_t params)
15942{
15943 v_U8_t staId;
Bhargav Shahfbaeca22016-07-13 10:27:35 +053015944 WLANTL_CbType* pTLCb = NULL;
Bhargav Shahe3a6ff02016-04-11 16:31:49 +053015945
15946 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, FL("---> %s"), __func__);
15947
15948 staId = (v_U8_t)params;
15949
Bhargav Shahfbaeca22016-07-13 10:27:35 +053015950 pTLCb = VOS_GET_TL_CB(pWDA->pVosContext);
15951 if ( NULL == pTLCb )
15952 {
15953 VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR,
15954 "WLAN TL:Invalid TL pointer from pvosGCtx on WLANTL_SuspendDataTx");
15955 return VOS_STATUS_E_FAULT;
15956 }
15957
15958
15959 pTLCb->atlSTAClients[staId]->disassoc_progress = VOS_TRUE;
Bhargav Shahe3a6ff02016-04-11 16:31:49 +053015960 /* Pause TL for Sta ID */
15961 return WLANTL_SuspendDataTx(pWDA->pVosContext, &staId, NULL);
15962}
15963
Anurag Chouhan83026002016-12-13 22:46:21 +053015964#ifdef DHCP_SERVER_OFFLOAD
15965/**
15966 * wda_process_dhcpserver_offload_req() - wda api to set dhcp server offload
15967 * @wda_handle: pointer to wda handle
15968 * @dhcp_server_offload_info: dhcp server offload info
15969 *
15970 * Return: status
15971 * 0 - success or else failure
15972 */
15973static int wda_process_dhcpserver_offload_req(tWDA_CbContext *wda_handle,
15974 sir_dhcp_srv_offload_info_t
15975 *dhcp_server_offload_info)
15976{
15977 wdi_set_dhcp_server_offload_t *dhcp_info;
15978 tWDA_ReqParams *wda_params;
15979 WDI_Status wstatus;
15980 VOS_STATUS status = VOS_STATUS_SUCCESS;
15981
15982 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15983 FL("---> %s"), __func__);
15984
15985 if(NULL == dhcp_server_offload_info)
15986 {
15987 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15988 "%s: dhcp_server_offload_info received NULL",
15989 __func__);
15990 VOS_ASSERT(0) ;
15991 return VOS_STATUS_E_FAULT;
15992 }
15993
15994 dhcp_info = (wdi_set_dhcp_server_offload_t *)
15995 vos_mem_malloc(sizeof(*dhcp_info));
15996 if (!dhcp_info) {
15997 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15998 "Failed to allocate buffer to send "
15999 "set_dhcp_server_offload cmd");
16000 vos_mem_free(dhcp_server_offload_info);
16001 return VOS_STATUS_E_NOMEM;
16002 }
16003
16004 vos_mem_zero(dhcp_info, sizeof(*dhcp_info));
16005
16006 wda_params = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16007 if(NULL == wda_params)
16008 {
16009 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16010 "%s: VOS MEM Alloc Failure", __func__);
16011 VOS_ASSERT(0);
16012 vos_mem_free(dhcp_info);
16013 vos_mem_free(dhcp_server_offload_info);
16014 return VOS_STATUS_E_NOMEM;
16015 }
16016
16017 dhcp_info->bssidx = dhcp_server_offload_info->bssidx;
16018 dhcp_info->enable = dhcp_server_offload_info->dhcp_srv_offload_enabled;
16019 dhcp_info->num_client = dhcp_server_offload_info->dhcp_client_num;
16020 dhcp_info->srv_ipv4 = dhcp_server_offload_info->dhcp_srv_ip;
16021 dhcp_info->start_lsb = dhcp_server_offload_info->start_lsb;
16022
16023 wda_params->pWdaContext = wda_handle;
16024 wda_params->wdaMsgParam = dhcp_server_offload_info;
16025 wda_params->wdaWdiApiMsgParam = (void *)dhcp_info;
16026
16027 wstatus = wdi_process_dhcpserver_offload_req(dhcp_info,
16028 (wdi_dhcp_srv_offload_rsp_cb)
16029 wda_dhcp_server_offload_rsp_callback,
16030 wda_params);
16031 if(IS_WDI_STATUS_FAILURE(wstatus))
16032 {
16033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16034 "Failed to send set_dhcp_server_offload cmd" );
16035 status = CONVERT_WDI2VOS_STATUS(wstatus);
16036 vos_mem_free(wda_params->wdaWdiApiMsgParam) ;
16037 vos_mem_free(wda_params->wdaMsgParam);
16038 vos_mem_free(wda_params);
16039 }
16040
16041 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16042 "Set dhcp server offload");
16043 return status;
16044}
16045#endif /* DHCP_SERVER_OFFLOAD */
16046
Anurag Chouhan0b29de02016-12-16 13:18:40 +053016047#ifdef MDNS_OFFLOAD
16048/**
16049 * wda_set_mdns_offload_req() - wda api to set mdns offload
16050 * @wda_handle: wda handle
16051 * @mdns_offload_info: mdns offload info
16052 *
16053 * Return - 0 for success or else failure
16054 */
16055static int
16056wda_set_mdns_offload_req(tWDA_CbContext *wda_handle,
16057 sir_mdns_offload_info_t *mdns_offload_info)
16058{
16059 wdi_mdns_enable_offload_cmd_req *mdns_info;
16060 tWDA_ReqParams *wda_params;
16061 WDI_Status wstatus;
16062 VOS_STATUS status = VOS_STATUS_SUCCESS;
16063
16064 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16065 FL("---> %s"), __func__);
16066
16067 if(NULL == mdns_offload_info)
16068 {
16069 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16070 "%s: set_mdns_offload received NULL",
16071 __func__);
16072 VOS_ASSERT(0) ;
16073 return VOS_STATUS_E_FAULT;
16074 }
16075
16076 mdns_info = (wdi_mdns_enable_offload_cmd_req *)
16077 vos_mem_malloc(sizeof(*mdns_info));
16078 if (!mdns_info) {
16079 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16080 "Failed to allocate buffer to send "
16081 "set_mdns_offload cmd");
16082 vos_mem_free(mdns_offload_info);
16083 return VOS_STATUS_E_NOMEM;
16084 }
16085
16086 vos_mem_zero(mdns_info, sizeof(*mdns_info));
16087
16088 wda_params = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16089 if(NULL == wda_params)
16090 {
16091 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16092 "%s: VOS MEM Alloc Failure", __func__);
16093 VOS_ASSERT(0);
16094 vos_mem_free(mdns_info);
16095 vos_mem_free(mdns_offload_info);
16096 return VOS_STATUS_E_NOMEM;
16097 }
16098
16099 mdns_info->bss_idx = mdns_offload_info->bss_idx;
16100 mdns_info->enable = mdns_offload_info->enable;
16101
16102 wda_params->pWdaContext = wda_handle;
16103 wda_params->wdaMsgParam = mdns_offload_info;
16104 wda_params->wdaWdiApiMsgParam = (void *)mdns_info;
16105
16106 wstatus = wdi_set_mdns_offload_req(mdns_info,
16107 (wdi_mdns_enable_rsp_cb)
16108 wda_mdns_enable_rsp_callback,
16109 wda_params);
16110 if(IS_WDI_STATUS_FAILURE(wstatus))
16111 {
16112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16113 "Failed to send wdi_set_mdns_offload_req cmd" );
16114 status = CONVERT_WDI2VOS_STATUS(wstatus);
16115 vos_mem_free(wda_params->wdaWdiApiMsgParam) ;
16116 vos_mem_free(wda_params->wdaMsgParam);
16117 vos_mem_free(wda_params);
16118 }
16119
16120 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16121 "mdns enabled!");
16122 return status;
16123
16124}
16125
16126/**
16127 * wda_set_mdns_fqdn_req() - wda api to set mdns fqdn offload
16128 * @wda_handle: wda handle
16129 * @mdns_fqdn_info: mdns fqdn offload info
16130 *
16131 * Return - 0 for success or else failure
16132 */
16133static int
16134wda_set_mdns_fqdn_req(tWDA_CbContext *wda_handle,
16135 sir_mdns_fqdn_info_t *mdns_fqdn_info)
16136{
16137 wdi_mdns_set_fqdn_cmd_req *fqdn_info;
16138 tWDA_ReqParams *wda_params;
16139 WDI_Status wstatus;
16140 VOS_STATUS status = VOS_STATUS_SUCCESS;
16141
16142 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16143 FL("---> %s"), __func__);
16144
16145 if(NULL == mdns_fqdn_info)
16146 {
16147 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16148 "%s: set_mdns_fqdn received NULL",
16149 __func__);
16150 VOS_ASSERT(0) ;
16151 return VOS_STATUS_E_FAULT;
16152 }
16153
16154 fqdn_info = (wdi_mdns_set_fqdn_cmd_req *)
16155 vos_mem_malloc(sizeof(*fqdn_info));
16156 if (!fqdn_info) {
16157 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16158 "Failed to allocate buffer to send "
16159 "set_mdns_fqdn cmd");
16160 vos_mem_free(mdns_fqdn_info);
16161 return VOS_STATUS_E_NOMEM;
16162 }
16163
16164 vos_mem_zero(fqdn_info, sizeof(*fqdn_info));
16165
16166 wda_params = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
16167 if(NULL == wda_params)
16168 {
16169 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16170 "%s: VOS MEM Alloc Failure", __func__);
16171 VOS_ASSERT(0);
16172 vos_mem_free(fqdn_info);
16173 vos_mem_free(mdns_fqdn_info);
16174 return VOS_STATUS_E_NOMEM;
16175 }
16176
16177 fqdn_info->bss_idx = mdns_fqdn_info->bss_idx;
16178 fqdn_info->type = mdns_fqdn_info->fqdn_type;
16179 fqdn_info->fqdn_len = mdns_fqdn_info->fqdn_len;
16180 vos_mem_copy(fqdn_info->fqdn_data, mdns_fqdn_info->fqdn_data,
16181 mdns_fqdn_info->fqdn_len);
16182 fqdn_info->fqdn_data[mdns_fqdn_info->fqdn_len] = '\0';
16183
16184 wda_params->pWdaContext = wda_handle;
16185 wda_params->wdaMsgParam = mdns_fqdn_info;
16186 wda_params->wdaWdiApiMsgParam = (void *)fqdn_info;
16187
16188 wstatus = wdi_set_mdns_fqdn_req(fqdn_info,
16189 (wdi_mdns_fqdn_rsp_cb)
16190 wda_mdns_fqdn_rsp_callback,
16191 wda_params);
16192 if(IS_WDI_STATUS_FAILURE(wstatus))
16193 {
16194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16195 "Failed to send wdi_set_mdns_fqdn_req cmd" );
16196 status = CONVERT_WDI2VOS_STATUS(wstatus);
16197 vos_mem_free(wda_params->wdaWdiApiMsgParam) ;
16198 vos_mem_free(wda_params->wdaMsgParam);
16199 vos_mem_free(wda_params);
16200 }
16201
16202 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16203 "mDNS FQDN set");
16204 return status;
16205}
16206
16207/**
16208 * wda_set_mdns_response_req() - wda api to set mdns resp offload
16209 * @wda_handle: wda handle
16210 * @mdns_rsp_info: mdns resp offload info
16211 *
16212 * Return - 0 for success or else failure
16213 */
16214static int
16215wda_set_mdns_response_req(tWDA_CbContext *wda_handle,
16216 sir_mdns_resp_info_t *mdns_rsp_info)
16217{
16218 wdi_mdns_set_resp_req *rsp_info;
16219 tWDA_ReqParams *wda_params;
16220 WDI_Status wstatus;
16221 VOS_STATUS status = VOS_STATUS_SUCCESS;
16222
16223 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16224 FL("---> %s"), __func__);
16225
16226 if(NULL == mdns_rsp_info)
16227 {
16228 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16229 "%s: dhcp_server_offload_info received NULL",
16230 __func__);
16231 VOS_ASSERT(0) ;
16232 return VOS_STATUS_E_FAULT;
16233 }
16234
16235 rsp_info = (wdi_mdns_set_resp_req *)
16236 vos_mem_malloc(sizeof(*rsp_info));
16237 if (!rsp_info) {
16238 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16239 "Failed to allocate buffer to send "
16240 "wdi_set_mdns_response_req cmd");
16241 vos_mem_free(mdns_rsp_info);
16242 return VOS_STATUS_E_NOMEM;
16243 }
16244
16245 vos_mem_zero(rsp_info, sizeof(*rsp_info));
16246
16247 wda_params = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16248 if(NULL == wda_params)
16249 {
16250 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16251 "%s: VOS MEM Alloc Failure", __func__);
16252 VOS_ASSERT(0);
16253 vos_mem_free(rsp_info);
16254 vos_mem_free(mdns_rsp_info);
16255 return VOS_STATUS_E_NOMEM;
16256 }
16257
16258 rsp_info->bss_idx = mdns_rsp_info->bss_idx;
16259 rsp_info->ar_count = mdns_rsp_info->resourceRecord_count;
16260 rsp_info->resp_len = mdns_rsp_info->resp_len;
16261 vos_mem_copy(rsp_info->resp_data, mdns_rsp_info->resp_data,
16262 mdns_rsp_info->resp_len);
16263 rsp_info->resp_data[mdns_rsp_info->resp_len] = '\0';
16264
16265 wda_params->pWdaContext = wda_handle;
16266 wda_params->wdaMsgParam = mdns_rsp_info;
16267 wda_params->wdaWdiApiMsgParam = (void *)rsp_info;
16268
16269 wstatus = wdi_set_mdns_response_req(rsp_info,
16270 (wdi_mdns_resp_rsp_cb)
16271 wda_mdns_resp_rsp_callback,
16272 wda_params);
16273 if(IS_WDI_STATUS_FAILURE(wstatus))
16274 {
16275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16276 "Failed to send wdi_set_mdns_response_req cmd" );
16277 status = CONVERT_WDI2VOS_STATUS(wstatus);
16278 vos_mem_free(wda_params->wdaWdiApiMsgParam) ;
16279 vos_mem_free(wda_params->wdaMsgParam);
16280 vos_mem_free(wda_params);
16281 }
16282
16283 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16284 "mDNS Response set!");
16285 return status;
16286}
16287
16288/**
16289 * wda_get_mdns_stats_req() - wda api to get mdns stats
16290 * @wda_handle: wda handle
16291 * @mdns_info: mdns info
16292 *
16293 * Return - 0 for success or else failure
16294 */
16295static int
16296wda_get_mdns_stats_req(tWDA_CbContext *wda_handle,
16297 sir_get_mdns_stats_info_t *mdns_info)
16298{
16299 wdi_mdns_get_stats_req *status_info;
16300 tWDA_ReqParams *wda_params;
16301 WDI_Status wstatus;
16302
16303 VOS_STATUS status = VOS_STATUS_SUCCESS;
16304
16305 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16306 FL("---> %s"), __func__);
16307
16308 if(NULL == mdns_info)
16309 {
16310 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16311 "%s: dhcp_server_offload_info received NULL",
16312 __func__);
16313 VOS_ASSERT(0) ;
16314 return VOS_STATUS_E_FAULT;
16315 }
16316
16317 status_info = (wdi_mdns_get_stats_req *)
16318 vos_mem_malloc(sizeof(*status_info));
16319 if (!status_info) {
16320 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16321 "Failed to allocate buffer to send "
16322 "wdi_set_mdns_response_req cmd");
16323 vos_mem_free(mdns_info);
16324 return VOS_STATUS_E_NOMEM;
16325 }
16326
16327 vos_mem_zero(status_info, sizeof(*status_info));
16328
16329 wda_params = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16330 if(NULL == wda_params)
16331 {
16332 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16333 "%s: VOS MEM Alloc Failure", __func__);
16334 VOS_ASSERT(0);
16335 vos_mem_free(status_info);
16336 vos_mem_free(mdns_info);
16337 return VOS_STATUS_E_NOMEM;
16338 }
16339
16340 status_info->bss_idx = mdns_info->bss_idx;
16341
16342 wda_params->pWdaContext = wda_handle;
16343 wda_params->wdaMsgParam = mdns_info;
16344 wda_params->wdaWdiApiMsgParam = (void *)status_info;
16345
16346 wstatus = wdi_get_mdns_stats_req(status_info,
16347 (wdi_get_stats_rsp_cb)
16348 wda_get_stats_rsp_callback,
16349 wda_params);
16350 if(IS_WDI_STATUS_FAILURE(wstatus))
16351 {
16352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16353 "Failed to send wdi_set_mdns_response_req cmd" );
16354 status = CONVERT_WDI2VOS_STATUS(wstatus);
16355 vos_mem_free(wda_params->wdaWdiApiMsgParam) ;
16356 vos_mem_free(wda_params->wdaMsgParam);
16357 vos_mem_free(wda_params);
16358 }
16359
16360 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16361 "Get mDNS stats");
16362 return status;
16363}
16364#endif /* MDNS_OFFLOAD */
Anurag Chouhan83026002016-12-13 22:46:21 +053016365
Bhargav Shahe3a6ff02016-04-11 16:31:49 +053016366/*
Jeff Johnson295189b2012-06-20 16:38:30 -070016367 * FUNCTION: WDA_McProcessMsg
16368 * Trigger DAL-AL to start CFG download
16369 */
16370VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
16371{
16372 VOS_STATUS status = VOS_STATUS_SUCCESS;
16373 tWDA_CbContext *pWDA = NULL ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053016374 if(NULL == pMsg)
Jeff Johnson295189b2012-06-20 16:38:30 -070016375 {
16376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016377 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016378 VOS_ASSERT(0);
16379 return VOS_STATUS_E_FAILURE;
16380 }
16381
16382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016383 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070016384
16385 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
16386 if(NULL == pWDA )
16387 {
16388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053016389 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016390 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070016391 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070016392 return VOS_STATUS_E_FAILURE;
16393 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016394 /* Process all the WDA messages.. */
16395 switch( pMsg->type )
16396 {
16397 case WNI_CFG_DNLD_REQ:
16398 {
16399 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070016400 /* call WDA complete event if config download success */
16401 if( VOS_IS_STATUS_SUCCESS(status) )
16402 {
16403 vos_WDAComplete_cback(pVosContext);
16404 }
16405 else
16406 {
16407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16408 "WDA Config Download failure" );
16409 }
16410 break ;
16411 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016412 /*
16413 * Init SCAN request from PE, convert it into DAL format
16414 * and send it to DAL
16415 */
16416 case WDA_INIT_SCAN_REQ:
16417 {
16418 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
16419 break ;
16420 }
16421 /* start SCAN request from PE */
16422 case WDA_START_SCAN_REQ:
16423 {
16424 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
16425 break ;
16426 }
16427 /* end SCAN request from PE */
16428 case WDA_END_SCAN_REQ:
16429 {
16430 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
16431 break ;
16432 }
16433 /* end SCAN request from PE */
16434 case WDA_FINISH_SCAN_REQ:
16435 {
16436 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
16437 break ;
16438 }
16439 /* join request from PE */
16440 case WDA_CHNL_SWITCH_REQ:
16441 {
16442 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
16443 {
16444 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
16445 }
16446 else
16447 {
Kalikinkar dhara1e83b772014-02-06 12:59:22 -080016448 if (IS_FEATURE_SUPPORTED_BY_FW(CH_SWITCH_V1) &&
16449 eHAL_CHANNEL_SWITCH_SOURCE_CSA ==
16450 ((tSwitchChannelParams*)pMsg->bodyptr)->channelSwitchSrc )
16451 {
16452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16453 "call ProcessChannelSwitchReq_V1" );
16454 WDA_ProcessChannelSwitchReq_V1(pWDA,
16455 (tSwitchChannelParams*)pMsg->bodyptr) ;
16456 }
16457 else
16458 {
16459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16460 "call ProcessChannelSwitchReq" );
16461 WDA_ProcessChannelSwitchReq(pWDA,
16462 (tSwitchChannelParams*)pMsg->bodyptr) ;
16463 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016464 }
16465 break ;
16466 }
16467 /* ADD BSS request from PE */
16468 case WDA_ADD_BSS_REQ:
16469 {
16470 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
16471 break ;
16472 }
16473 case WDA_ADD_STA_REQ:
16474 {
16475 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
16476 break ;
16477 }
16478 case WDA_DELETE_BSS_REQ:
16479 {
Jeff Johnson295189b2012-06-20 16:38:30 -070016480 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
16481 break ;
16482 }
16483 case WDA_DELETE_STA_REQ:
16484 {
Jeff Johnson295189b2012-06-20 16:38:30 -070016485 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
16486 break ;
16487 }
16488 case WDA_CONFIG_PARAM_UPDATE_REQ:
16489 {
16490 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
16491 break ;
16492 }
16493 case WDA_SET_BSSKEY_REQ:
16494 {
16495 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
16496 break ;
16497 }
16498 case WDA_SET_STAKEY_REQ:
16499 {
16500 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
16501 break ;
16502 }
16503 case WDA_SET_STA_BCASTKEY_REQ:
16504 {
16505 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
16506 break ;
16507 }
16508 case WDA_REMOVE_BSSKEY_REQ:
16509 {
16510 WDA_ProcessRemoveBssKeyReq(pWDA,
16511 (tRemoveBssKeyParams *)pMsg->bodyptr);
16512 break ;
16513 }
16514 case WDA_REMOVE_STAKEY_REQ:
16515 {
16516 WDA_ProcessRemoveStaKeyReq(pWDA,
16517 (tRemoveStaKeyParams *)pMsg->bodyptr);
16518 break ;
16519 }
16520 case WDA_REMOVE_STA_BCASTKEY_REQ:
16521 {
16522 /* TODO: currently UMAC is not sending this request, Add the code for
16523 handling this request when UMAC supports */
16524 break;
16525 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080016526#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -070016527 case WDA_TSM_STATS_REQ:
16528 {
Srinivas Girigowda5cecb202013-10-08 09:13:25 -070016529 WDA_ProcessTsmStatsReq(pWDA, (tpAniGetTsmStatsReq)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070016530 break;
16531 }
16532#endif
16533 case WDA_UPDATE_EDCA_PROFILE_IND:
16534 {
16535 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
16536 break;
16537 }
16538 case WDA_ADD_TS_REQ:
16539 {
16540 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
16541 break;
16542 }
16543 case WDA_DEL_TS_REQ:
16544 {
16545 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
16546 break;
16547 }
16548 case WDA_ADDBA_REQ:
16549 {
16550 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
16551 break;
16552 }
16553 case WDA_DELBA_IND:
16554 {
16555 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
16556 break;
16557 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080016558 case WDA_UPDATE_CHAN_LIST_REQ:
16559 {
16560 WDA_ProcessUpdateChannelList(pWDA,
16561 (tSirUpdateChanList *)pMsg->bodyptr);
16562 break;
16563 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016564 case WDA_SET_LINK_STATE:
16565 {
16566 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
16567 break;
16568 }
16569 case WDA_GET_STATISTICS_REQ:
16570 {
16571 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
16572 break;
16573 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080016574#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080016575 case WDA_GET_ROAM_RSSI_REQ:
16576 {
16577 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
16578 break;
16579 }
16580#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070016581 case WDA_PWR_SAVE_CFG:
16582 {
16583 if(pWDA->wdaState == WDA_READY_STATE)
16584 {
16585 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
16586 }
16587 else
16588 {
16589 if(NULL != pMsg->bodyptr)
16590 {
16591 vos_mem_free(pMsg->bodyptr);
16592 }
16593 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16594 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
16595 }
16596 break;
16597 }
mukul sharma6b53e202016-11-23 19:29:18 +053016598 case WDA_UPDATE_CFG_INT_PARAM:
16599 {
16600 if(pWDA->wdaState == WDA_READY_STATE)
16601 {
16602 WDA_UpdateCfgIntParam(pWDA, (tSirUpdateCfgIntParam *)pMsg->bodyptr);
16603 vos_mem_free(pMsg->bodyptr);
16604 }
16605 else
16606 {
16607 if(NULL != pMsg->bodyptr)
16608 {
16609 vos_mem_free(pMsg->bodyptr);
16610 }
16611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16612 " WDA_UPDATE_CFG_INT_PARAM req in wrong state %d",
16613 pWDA->wdaState );
16614 }
16615 break;
16616 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016617 case WDA_ENTER_IMPS_REQ:
16618 {
16619 if(pWDA->wdaState == WDA_READY_STATE)
16620 {
16621 WDA_ProcessEnterImpsReq(pWDA);
16622 }
16623 else
16624 {
16625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16626 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
16627 }
16628 break;
16629 }
16630 case WDA_EXIT_IMPS_REQ:
16631 {
16632 if(pWDA->wdaState == WDA_READY_STATE)
16633 {
16634 WDA_ProcessExitImpsReq(pWDA);
16635 }
16636 else
16637 {
16638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16639 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
16640 }
16641 break;
16642 }
16643 case WDA_ENTER_BMPS_REQ:
16644 {
16645 if(pWDA->wdaState == WDA_READY_STATE)
16646 {
16647 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
16648 }
16649 else
16650 {
16651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16652 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
16653 }
16654 break;
16655 }
16656 case WDA_EXIT_BMPS_REQ:
16657 {
16658 if(pWDA->wdaState == WDA_READY_STATE)
16659 {
16660 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
16661 }
16662 else
16663 {
16664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16665 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
16666 }
16667 break;
16668 }
16669 case WDA_ENTER_UAPSD_REQ:
16670 {
16671 if(pWDA->wdaState == WDA_READY_STATE)
16672 {
16673 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
16674 }
16675 else
16676 {
16677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16678 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
16679 }
16680 break;
16681 }
16682 case WDA_EXIT_UAPSD_REQ:
16683 {
16684 if(pWDA->wdaState == WDA_READY_STATE)
16685 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016686 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070016687 }
16688 else
16689 {
16690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16691 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
16692 }
16693 break;
16694 }
16695 case WDA_UPDATE_UAPSD_IND:
16696 {
16697 if(pWDA->wdaState == WDA_READY_STATE)
16698 {
16699 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
16700 }
16701 else
16702 {
16703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16704 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
16705 }
16706 break;
16707 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016708 case WDA_REGISTER_PE_CALLBACK :
16709 {
16710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
16711 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
16712 /*TODO: store the PE callback */
16713 /* Do Nothing? MSG Body should be freed at here */
16714 if(NULL != pMsg->bodyptr)
16715 {
16716 vos_mem_free(pMsg->bodyptr);
16717 }
16718 break;
16719 }
16720 case WDA_SYS_READY_IND :
16721 {
16722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
16723 "Handling msg type WDA_SYS_READY_IND " );
16724 pWDA->wdaState = WDA_READY_STATE;
16725 if(NULL != pMsg->bodyptr)
16726 {
16727 vos_mem_free(pMsg->bodyptr);
16728 }
16729 break;
16730 }
16731 case WDA_BEACON_FILTER_IND :
16732 {
16733 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
16734 break;
16735 }
16736 case WDA_BTC_SET_CFG:
16737 {
16738 /*TODO: handle this while dealing with BTC */
16739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
16740 "Handling msg type WDA_BTC_SET_CFG " );
16741 /* Do Nothing? MSG Body should be freed at here */
16742 if(NULL != pMsg->bodyptr)
16743 {
16744 vos_mem_free(pMsg->bodyptr);
16745 }
16746 break;
16747 }
16748 case WDA_SIGNAL_BT_EVENT:
16749 {
16750 /*TODO: handle this while dealing with BTC */
16751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
16752 "Handling msg type WDA_SIGNAL_BT_EVENT " );
16753 /* Do Nothing? MSG Body should be freed at here */
16754 if(NULL != pMsg->bodyptr)
16755 {
16756 vos_mem_free(pMsg->bodyptr);
16757 }
16758 break;
16759 }
16760 case WDA_CFG_RXP_FILTER_REQ:
16761 {
16762 WDA_ProcessConfigureRxpFilterReq(pWDA,
16763 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
16764 break;
16765 }
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053016766 case WDA_MGMT_LOGGING_INIT_REQ:
16767 {
Siddharth Bhald1be97f2015-05-27 22:39:59 +053016768 WDA_ProcessFWLoggingInitReq(pWDA,
16769 (tSirFWLoggingInitParam *)pMsg->bodyptr);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053016770 break;
16771 }
Siddharth Bhal64246172015-02-27 01:04:37 +053016772 case WDA_GET_FRAME_LOG_REQ:
16773 {
16774 WDA_ProcessGetFrameLogReq(pWDA,
16775 (tAniGetFrameLogReq *)pMsg->bodyptr);
16776 break;
16777 }
Gupta, Kapil7c34b322015-09-30 13:12:35 +053016778 case WDA_START_RSSI_MONITOR_REQ:
16779 {
16780 WDA_ProcessStartRssiMonitorReq(pWDA,(tSirRssiMonitorReq *)pMsg->bodyptr);
16781 break;
16782 }
16783 case WDA_STOP_RSSI_MONITOR_REQ:
16784 {
16785 WDA_ProcessStopRssiMonitorReq(pWDA,(tSirRssiMonitorReq *)pMsg->bodyptr);
16786 break;
16787 }
Karthick Sa35b0692015-08-21 15:57:05 +053016788 case WDA_SEND_LOG_DONE_IND:
16789 {
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053016790 WDA_FWLoggingDXEdoneInd(pMsg->bodyval);
Karthick Sa35b0692015-08-21 15:57:05 +053016791 break;
16792 }
Sachin Ahuja715aafc2015-07-21 23:35:10 +053016793 case WDA_FATAL_EVENT_LOGS_REQ:
16794 {
16795 WDA_ProcessFatalEventLogsReq(pWDA,
16796 (tSirFatalEventLogsReqParam *)pMsg->bodyptr);
16797 break;
16798 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016799 case WDA_SET_HOST_OFFLOAD:
16800 {
16801 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
16802 break;
16803 }
16804 case WDA_SET_KEEP_ALIVE:
16805 {
16806 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
16807 break;
16808 }
16809#ifdef WLAN_NS_OFFLOAD
16810 case WDA_SET_NS_OFFLOAD:
16811 {
16812 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
16813 break;
16814 }
16815#endif //WLAN_NS_OFFLOAD
16816 case WDA_ADD_STA_SELF_REQ:
16817 {
16818 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
16819 break;
16820 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016821 case WDA_DEL_STA_SELF_REQ:
16822 {
16823 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
16824 break;
16825 }
16826 case WDA_WOWL_ADD_BCAST_PTRN:
16827 {
16828 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
16829 break;
16830 }
16831 case WDA_WOWL_DEL_BCAST_PTRN:
16832 {
16833 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
16834 break;
16835 }
16836 case WDA_WOWL_ENTER_REQ:
16837 {
16838 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
16839 break;
16840 }
16841 case WDA_WOWL_EXIT_REQ:
16842 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016843 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070016844 break;
16845 }
16846 case WDA_TL_FLUSH_AC_REQ:
16847 {
16848 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
16849 break;
16850 }
16851 case WDA_SIGNAL_BTAMP_EVENT:
16852 {
16853 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
16854 break;
16855 }
Abhishek Singh85b74712014-10-08 11:38:19 +053016856 case WDA_FW_STATS_GET_REQ:
16857 {
16858 WDA_ProcessFWStatsGetReq(pWDA,
16859 (tSirFWStatsGetReq *)pMsg->bodyptr);
16860 break;
16861 }
Sunil Duttbd736ed2014-05-26 21:19:41 +053016862#ifdef WLAN_FEATURE_LINK_LAYER_STATS
16863 case WDA_LINK_LAYER_STATS_SET_REQ:
16864 {
16865 WDA_ProcessLLStatsSetReq(pWDA, (tSirLLStatsSetReq *)pMsg->bodyptr);
16866 break;
16867 }
16868 case WDA_LINK_LAYER_STATS_GET_REQ:
16869 {
16870 WDA_ProcessLLStatsGetReq(pWDA, (tSirLLStatsGetReq *)pMsg->bodyptr);
16871 break;
16872 }
16873 case WDA_LINK_LAYER_STATS_CLEAR_REQ:
16874 {
16875 WDA_ProcessLLStatsClearReq(pWDA, (tSirLLStatsClearReq *)pMsg->bodyptr);
16876 break;
16877 }
16878#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Dino Mycle41bdc942014-06-10 11:30:24 +053016879#ifdef WLAN_FEATURE_EXTSCAN
16880 case WDA_EXTSCAN_GET_CAPABILITIES_REQ:
16881 {
16882 WDA_ProcessEXTScanGetCapabilitiesReq(pWDA,
16883 (tSirGetEXTScanCapabilitiesReqParams *)pMsg->bodyptr);
16884 break;
16885 }
16886 case WDA_EXTSCAN_START_REQ:
16887 {
16888 WDA_ProcessEXTScanStartReq(pWDA,
16889 (tSirEXTScanStartReqParams *)pMsg->bodyptr);
16890 break;
16891 }
16892 case WDA_EXTSCAN_STOP_REQ:
16893 {
16894 WDA_ProcessEXTScanStopReq(pWDA,
16895 (tSirEXTScanStopReqParams *)pMsg->bodyptr);
16896 break;
16897 }
16898 case WDA_EXTSCAN_GET_CACHED_RESULTS_REQ:
16899 {
16900 WDA_ProcessEXTScanGetCachedResultsReq(pWDA,
16901 (tSirEXTScanGetCachedResultsReqParams *)pMsg->bodyptr);
16902 break;
16903 }
16904 case WDA_EXTSCAN_SET_BSSID_HOTLIST_REQ:
16905 {
16906 WDA_ProcessEXTScanSetBSSIDHotlistReq(pWDA,
16907 (tSirEXTScanSetBssidHotListReqParams *)pMsg->bodyptr);
16908 break;
16909 }
16910 case WDA_EXTSCAN_RESET_BSSID_HOTLIST_REQ:
16911 {
16912 WDA_ProcessEXTScanResetBSSIDHotlistReq(pWDA,
16913 (tSirEXTScanResetBssidHotlistReqParams *)pMsg->bodyptr);
16914 break;
16915 }
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053016916 case WDA_EXTSCAN_SET_SSID_HOTLIST_REQ:
16917 {
16918 WDA_ProcessEXTScanSetSSIDHotlistReq(pWDA,
16919 (tSirEXTScanSetSsidHotListReqParams *)pMsg->bodyptr);
16920 break;
16921 }
16922 case WDA_EXTSCAN_RESET_SSID_HOTLIST_REQ:
16923 {
16924 WDA_ProcessEXTScanResetSSIDHotlistReq(pWDA,
16925 (tSirEXTScanResetSsidHotlistReqParams *)pMsg->bodyptr);
16926 break;
16927 }
Padma, Santhosh Kumarc1f7f052015-08-26 12:29:01 +053016928 case WDA_HIGH_PRIORITY_DATA_INFO_IND:
16929 {
16930 WDA_ProcessHighPriorityDataInfoInd(pWDA,
16931 (tSirHighPriorityDataInfoInd *)pMsg->bodyptr);
16932 break;
16933 }
Dino Mycle41bdc942014-06-10 11:30:24 +053016934#endif /* WLAN_FEATURE_EXTSCAN */
Jeff Johnson295189b2012-06-20 16:38:30 -070016935#ifdef WDA_UT
16936 case WDA_WDI_EVENT_MSG:
16937 {
16938 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
16939 break ;
16940 }
16941#endif
16942 case WDA_UPDATE_BEACON_IND:
16943 {
16944 WDA_ProcessUpdateBeaconParams(pWDA,
16945 (tUpdateBeaconParams *)pMsg->bodyptr);
16946 break;
16947 }
16948 case WDA_SEND_BEACON_REQ:
16949 {
16950 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
16951 break;
16952 }
16953 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
16954 {
16955 WDA_ProcessUpdateProbeRspTemplate(pWDA,
16956 (tSendProbeRespParams *)pMsg->bodyptr);
16957 break;
16958 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080016959#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -070016960 case WDA_SET_MAX_TX_POWER_REQ:
16961 {
16962 WDA_ProcessSetMaxTxPowerReq(pWDA,
16963 (tMaxTxPowerParams *)pMsg->bodyptr);
16964 break;
16965 }
16966#endif
Arif Hussaina5ebce02013-08-09 15:09:58 -070016967 case WDA_SET_MAX_TX_POWER_PER_BAND_REQ:
16968 {
16969 WDA_ProcessSetMaxTxPowerPerBandReq(pWDA, (tMaxTxPowerPerBandParams *)
16970 pMsg->bodyptr);
16971 break;
16972 }
schang86c22c42013-03-13 18:41:24 -070016973 case WDA_SET_TX_POWER_REQ:
16974 {
16975 WDA_ProcessSetTxPowerReq(pWDA,
16976 (tSirSetTxPowerReq *)pMsg->bodyptr);
16977 break;
16978 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016979 case WDA_SET_P2P_GO_NOA_REQ:
16980 {
16981 WDA_ProcessSetP2PGONOAReq(pWDA,
16982 (tP2pPsParams *)pMsg->bodyptr);
16983 break;
16984 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016985 /* timer related messages */
16986 case WDA_TIMER_BA_ACTIVITY_REQ:
16987 {
16988 WDA_BaCheckActivity(pWDA) ;
16989 break ;
16990 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080016991
16992 /* timer related messages */
16993 case WDA_TIMER_TRAFFIC_STATS_IND:
16994 {
16995 WDA_TimerTrafficStatsInd(pWDA);
16996 break;
16997 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016998#ifdef WLAN_FEATURE_VOWIFI_11R
16999 case WDA_AGGR_QOS_REQ:
17000 {
17001 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
17002 break;
17003 }
17004#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070017005 case WDA_FTM_CMD_REQ:
17006 {
17007 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
17008 break ;
17009 }
Jeff Johnsone7245742012-09-05 17:12:55 -070017010#ifdef FEATURE_OEM_DATA_SUPPORT
17011 case WDA_START_OEM_DATA_REQ:
17012 {
17013 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
17014 break;
17015 }
17016#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070017017 /* Tx Complete Time out Indication */
17018 case WDA_TX_COMPLETE_TIMEOUT_IND:
17019 {
17020 WDA_ProcessTxCompleteTimeOutInd(pWDA);
17021 break;
17022 }
17023 case WDA_WLAN_SUSPEND_IND:
17024 {
17025 WDA_ProcessWlanSuspendInd(pWDA,
17026 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
17027 break;
17028 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017029 case WDA_WLAN_RESUME_REQ:
17030 {
17031 WDA_ProcessWlanResumeReq(pWDA,
17032 (tSirWlanResumeParam *)pMsg->bodyptr) ;
17033 break;
17034 }
17035
17036 case WDA_UPDATE_CF_IND:
17037 {
17038 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
17039 pMsg->bodyptr = NULL;
17040 break;
17041 }
17042#ifdef FEATURE_WLAN_SCAN_PNO
17043 case WDA_SET_PNO_REQ:
17044 {
17045 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
17046 break;
17047 }
17048 case WDA_UPDATE_SCAN_PARAMS_REQ:
17049 {
17050 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
17051 break;
17052 }
17053 case WDA_SET_RSSI_FILTER_REQ:
17054 {
17055 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
17056 break;
17057 }
17058#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017059#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017060 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017061 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017062 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017063 break;
17064 }
Kapil Gupta04ab1992016-06-26 13:36:51 +053017065 case WDA_PER_ROAM_SCAN_OFFLOAD_REQ:
17066 {
17067 WDA_ProcessPERRoamScanOffloadReq(pWDA, (tSirPERRoamOffloadScanReq *)pMsg->bodyptr);
17068 break;
17069 }
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017070#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070017071 case WDA_SET_TX_PER_TRACKING_REQ:
17072 {
17073 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
17074 break;
17075 }
17076
17077#ifdef WLAN_FEATURE_PACKET_FILTERING
17078 case WDA_8023_MULTICAST_LIST_REQ:
17079 {
17080 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
17081 break;
17082 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017083 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
17084 {
17085 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
17086 break;
17087 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017088 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
17089 {
17090 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
17091 break;
17092 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017093 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
17094 {
17095 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
17096 break;
17097 }
17098#endif // WLAN_FEATURE_PACKET_FILTERING
17099
17100
17101 case WDA_TRANSMISSION_CONTROL_IND:
17102 {
17103 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
17104 break;
17105 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017106 case WDA_SET_POWER_PARAMS_REQ:
17107 {
17108 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
17109 break;
17110 }
c_manjeecfd1efb2015-09-25 19:32:34 +053017111 case WDA_FW_MEM_DUMP_REQ:
17112 {
17113 WDA_ProcessFwrMemDumpReq(pWDA, (tAniFwrDumpReq*)pMsg->bodyptr);
17114 break;
17115 }
17116
Jeff Johnson295189b2012-06-20 16:38:30 -070017117#ifdef WLAN_FEATURE_GTK_OFFLOAD
17118 case WDA_GTK_OFFLOAD_REQ:
17119 {
17120 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
17121 break;
17122 }
17123
17124 case WDA_GTK_OFFLOAD_GETINFO_REQ:
17125 {
17126 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
17127 break;
17128 }
17129#endif //WLAN_FEATURE_GTK_OFFLOAD
17130
17131 case WDA_SET_TM_LEVEL_REQ:
17132 {
17133 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
17134 break;
17135 }
Sandeep Puligilla60342762014-01-30 21:05:37 +053017136
Mohit Khanna4a70d262012-09-11 16:30:12 -070017137 case WDA_UPDATE_OP_MODE:
17138 {
Sandeep Puligilla60342762014-01-30 21:05:37 +053017139 if(WDA_getHostWlanFeatCaps(HT40_OBSS_SCAN) &&
17140 WDA_getFwWlanFeatCaps(HT40_OBSS_SCAN))
17141 {
17142 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
17143 }
17144 else if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
Mohit Khanna4a70d262012-09-11 16:30:12 -070017145 {
17146 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
17147 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
17148 else
17149 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017150 " VHT OpMode Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070017151 }
17152 else
17153 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017154 " 11AC Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070017155 break;
17156 }
Chet Lanctot186b5732013-03-18 10:26:30 -070017157#ifdef WLAN_FEATURE_11W
17158 case WDA_EXCLUDE_UNENCRYPTED_IND:
17159 {
17160 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
17161 break;
17162 }
17163#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053017164#ifdef FEATURE_WLAN_TDLS
17165 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
17166 {
17167 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
17168 break;
17169 }
17170#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053017171 case WDA_DHCP_START_IND:
17172 {
17173 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
17174 break;
17175 }
17176 case WDA_DHCP_STOP_IND:
17177 {
17178 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
17179 break;
17180 }
Leo Chang9056f462013-08-01 19:21:11 -070017181#ifdef FEATURE_WLAN_LPHB
17182 case WDA_LPHB_CONF_REQ:
17183 {
17184 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
17185 break;
17186 }
17187#endif
Yue Mab9c86f42013-08-14 15:59:08 -070017188 case WDA_ADD_PERIODIC_TX_PTRN_IND:
17189 {
17190 WDA_ProcessAddPeriodicTxPtrnInd(pWDA,
17191 (tSirAddPeriodicTxPtrn *)pMsg->bodyptr);
17192 break;
17193 }
17194 case WDA_DEL_PERIODIC_TX_PTRN_IND:
17195 {
17196 WDA_ProcessDelPeriodicTxPtrnInd(pWDA,
17197 (tSirDelPeriodicTxPtrn *)pMsg->bodyptr);
17198 break;
17199 }
Abhishek Singh00b71972016-01-07 10:51:04 +053017200 case WDA_RATE_UPDATE_IND:
17201 {
17202 WDA_ProcessRateUpdateInd(pWDA, (tSirRateUpdateInd *)pMsg->bodyptr);
17203 break;
17204 }
17205#ifdef WLAN_FEATURE_RMC
17206 case WDA_RMC_RULER_REQ:
17207 {
17208 WDA_ProcessRMCRulerReq(pWDA, (tSirRmcRulerReq *)pMsg->bodyptr);
17209 break;
17210 }
17211 case WDA_RMC_UPDATE_IND:
17212 {
17213 WDA_ProcessRMCUpdateInd(pWDA, (tSirRmcUpdateInd *)pMsg->bodyptr);
17214 break;
17215 }
17216 case WDA_GET_IBSS_PEER_INFO_REQ:
17217 {
17218 WDA_ProcessIbssPeerInfoReq(pWDA,
17219 (tSirIbssGetPeerInfoReqParams *)pMsg->bodyptr);
17220 break;
17221 }
17222 case WDA_TX_FAIL_MONITOR_IND:
17223 {
17224 WDA_ProcessTXFailMonitorInd(pWDA, (tAniTXFailMonitorInd *)pMsg->bodyptr);
17225 break;
17226 }
17227#endif /* WLAN_FEATURE_RMC */
Kapil Gupta04ab1992016-06-26 13:36:51 +053017228#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
17229 case WDA_PER_ROAM_SCAN_TRIGGER_REQ:
17230 {
17231 WDA_ProcessPERRoamScanTriggerReq(pWDA,
17232 (tPERRoamScanStart *)pMsg->bodyptr);
17233 break;
17234 }
17235#endif
Rajeev79dbe4c2013-10-05 11:03:42 +053017236#ifdef FEATURE_WLAN_BATCH_SCAN
17237 case WDA_SET_BATCH_SCAN_REQ:
17238 {
17239 WDA_ProcessSetBatchScanReq(pWDA,
17240 (tSirSetBatchScanReq *)pMsg->bodyptr);
17241 break;
17242 }
17243 case WDA_TRIGGER_BATCH_SCAN_RESULT_IND:
17244 {
17245 WDA_ProcessTriggerBatchScanResultInd(pWDA,
17246 (tSirTriggerBatchScanResultInd *)pMsg->bodyptr);
17247 break;
17248 }
17249 case WDA_STOP_BATCH_SCAN_IND:
17250 {
17251 WDA_ProcessStopBatchScanInd(pWDA,
17252 (tSirStopBatchScanInd *)pMsg->bodyptr);
17253 break;
17254 }
c_hpothu92367912014-05-01 15:18:17 +053017255 case WDA_GET_BCN_MISS_RATE_REQ:
17256 WDA_ProcessGetBcnMissRateReq(pWDA,
17257 (tSirBcnMissRateReq *)pMsg->bodyptr);
17258 break;
Rajeev79dbe4c2013-10-05 11:03:42 +053017259#endif
17260
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053017261 case WDA_HT40_OBSS_SCAN_IND:
17262 {
17263 WDA_ProcessHT40OBSSScanInd(pWDA,
17264 (tSirHT40OBSSScanInd *)pMsg->bodyptr);
17265 break;
17266 }
17267 case WDA_HT40_OBSS_STOP_SCAN_IND:
17268 {
17269 WDA_ProcessHT40OBSSStopScanInd(pWDA,
17270 (tANI_U8*)pMsg->bodyptr);
17271 break;
17272 }
Atul Mittalc0f739f2014-07-31 13:47:47 +053017273// tdlsoffchan
17274#ifdef FEATURE_WLAN_TDLS
17275 case WDA_SET_TDLS_CHAN_SWITCH_REQ:
17276 {
17277 WDA_ProcessSetTdlsChanSwitchReq(pWDA, (tTdlsChanSwitchParams *)pMsg->bodyptr);
17278 break;
17279 }
17280#endif
Siddharth Bhal171788a2014-09-29 21:02:40 +053017281 case WDA_SPOOF_MAC_ADDR_REQ:
17282 {
17283 WDA_ProcessSetSpoofMacAddrReq(pWDA, (tpSpoofMacAddrReqParams)pMsg->bodyptr);
17284 break;
17285 }
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053017286 case WDA_ENCRYPT_MSG_REQ:
17287 {
17288 WDA_ProcessEncryptMsgReq(pWDA, (u8 *)pMsg->bodyptr);
17289 break;
17290 }
Anurag Chouhan83026002016-12-13 22:46:21 +053017291#ifdef DHCP_SERVER_OFFLOAD
17292 case WDA_SET_DHCP_SERVER_OFFLOAD_REQ:
17293 {
17294 wda_process_dhcpserver_offload_req(pWDA,
17295 (sir_dhcp_srv_offload_info_t *)pMsg->bodyptr);
17296 break;
17297 }
17298#endif /* DHCP_SERVER_OFFLOAD */
Anurag Chouhan0b29de02016-12-16 13:18:40 +053017299#ifdef MDNS_OFFLOAD
17300 case WDA_SET_MDNS_OFFLOAD_CMD:
17301 wda_set_mdns_offload_req(pWDA,
17302 (sir_mdns_offload_info_t *)pMsg->bodyptr);
17303 break;
17304 case WDA_SET_MDNS_FQDN_CMD:
17305 wda_set_mdns_fqdn_req(pWDA,
17306 (sir_mdns_fqdn_info_t *)pMsg->bodyptr);
17307 break;
17308 case WDA_SET_MDNS_RESPONSE_CMD:
17309 wda_set_mdns_response_req(pWDA,
17310 (sir_mdns_resp_info_t *)pMsg->bodyptr);
17311 break;
17312 case WDA_GET_MDNS_STATUS_CMD:
17313 wda_get_mdns_stats_req(pWDA,
17314 (sir_get_mdns_stats_info_t *) pMsg->bodyptr);
17315 break;
17316#endif /* MDNS_OFFLOAD */
Srinivas Dasari32a79262015-02-19 13:04:49 +053017317 case WDA_NAN_REQUEST:
17318 {
17319 WDA_ProcessNanRequest( pWDA, (tNanRequest *)pMsg->bodyptr);
17320 break;
17321 }
Abhishek Singh41988ba2015-05-25 19:42:29 +053017322 case WDA_SET_RTS_CTS_HTVHT:
17323 {
17324 WDA_ProcessSetRtsCtsHTVhtInd( pWDA, pMsg->bodyval);
17325 break;
17326 }
Katya Nigamf0511f62015-05-05 16:40:57 +053017327
17328 case WDA_MON_START_REQ:
17329 {
17330 WDA_ProcessMonStartReq(pWDA,(v_PVOID_t)pMsg->bodyptr);
17331 break;
17332 }
17333 case WDA_MON_STOP_REQ:
17334 {
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053017335 WDA_ProcessMonStopReq(pWDA, (v_PVOID_t)pMsg->bodyptr);
Katya Nigamf0511f62015-05-05 16:40:57 +053017336 break;
17337 }
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +053017338 case WDA_SEND_FREQ_RANGE_CONTROL_IND:
17339 {
17340 WDA_ProcessEnableDisableCAEventInd(pWDA, pMsg->bodyval);
17341 break;
17342 }
Arun Khandavalli7eeb1592015-10-19 21:36:57 +053017343 case WDA_WIFI_CONFIG_REQ:
17344 {
17345 WDA_ProcessWifiConfigReq(pWDA,(tSetWifiConfigParams *)pMsg->bodyptr);
17346 break;
17347 }
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053017348#ifdef FEATURE_OEM_DATA_SUPPORT
17349 case WDA_START_OEM_DATA_REQ_IND_NEW:
17350 {
17351 WDA_ProcessStartOemDataReqIndNew(pWDA,
17352 (tOemDataReqNewConfig *)pMsg->bodyptr);
17353 break;
17354 }
17355#endif
Mahesh A Saptasagarcfc65ae2015-12-22 15:06:10 +053017356 case WDA_ANTENNA_DIVERSITY_SELECTION_REQ:
17357 {
17358 WDA_ProcessAntennaDiversitySelectionReq(pWDA,
17359 (tSirAntennaDiversitySelectionReq *)pMsg->bodyptr);
17360 break;
17361 }
Mahesh A Saptasagar7d432952016-02-09 14:01:03 +053017362 case WDA_MODIFY_ROAM_PARAMS_IND:
17363 {
17364 WDA_ProcessBcnMissPenaltyCount(pWDA,
17365 (tModifyRoamParamsReqParams *)pMsg->bodyptr);
17366 break;
17367 }
Selvaraj, Sridharc045b8b2016-04-06 12:22:35 +053017368
17369 case WDA_SET_ALLOWED_ACTION_FRAMES_IND:
17370 wda_process_set_allowed_action_frames_ind(pWDA,
17371 (struct sir_allowed_action_frames*)pMsg->bodyptr);
17372 break;
17373
Bhargav Shahe3a6ff02016-04-11 16:31:49 +053017374 case WDA_PAUSE_TL_IND:
17375 {
17376 WDA_ProcessTLPauseInd(pWDA, pMsg->bodyval);
17377 break;
17378 }
Kapil Gupta3d923fb2016-12-20 18:59:27 +053017379#ifdef WLAN_FEATURE_APFIND
17380 case WDA_APFIND_SET_CMD:
17381 {
17382 WDA_Process_apfind_set_cmd(pWDA,
17383 (struct hal_apfind_request *)pMsg->bodyptr);
17384 }
17385#endif
Agrawal Ashish17ef5082016-10-17 18:33:21 +053017386#ifdef SAP_AUTH_OFFLOAD
17387 case WDA_SET_SAP_AUTH_OFL:
17388 {
17389 wda_process_sap_auth_offload(pWDA,
17390 (struct tSirSapOffloadInfo*)pMsg->bodyptr);
17391 break;
17392 }
Agrawal Ashisha8e8a722016-10-18 19:07:45 +053017393 case WDA_SAP_OFL_ADD_STA:
17394 {
17395 WDA_ProcessSapAuthOffloadAddStaReq(pWDA,
17396 (tAddStaParams *)pMsg->bodyptr);
17397 break;
17398 }
17399 case WDA_SAP_OFL_DEL_STA:
17400 {
17401 WDA_ProcessSapAuthOffloadDelStaReq(pWDA,
17402 (tDeleteStaParams *)pMsg->bodyptr);
17403 break;
17404 }
Agrawal Ashish17ef5082016-10-17 18:33:21 +053017405#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070017406 default:
17407 {
Agarwal Ashishbf98caf2014-03-25 13:29:11 +053017408 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070017409 "No Handling for msg type %x in WDA "
17410 ,pMsg->type);
17411 /* Do Nothing? MSG Body should be freed at here */
17412 if(NULL != pMsg->bodyptr)
17413 {
17414 vos_mem_free(pMsg->bodyptr);
17415 }
17416 //WDA_VOS_ASSERT(0) ;
17417 }
17418 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017419 return status ;
17420}
17421
Jeff Johnson295189b2012-06-20 16:38:30 -070017422/*
17423 * FUNCTION: WDA_LowLevelIndCallback
17424 * IND API callback from WDI, send Ind to PE
17425 */
17426void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
17427 void* pUserData )
17428{
17429 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
17430#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
17431 tSirRSSINotification rssiNotification;
17432#endif
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053017433 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070017434 {
17435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053017436 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017437 VOS_ASSERT(0);
17438 return ;
17439 }
17440
17441 switch(wdiLowLevelInd->wdiIndicationType)
17442 {
17443 case WDI_RSSI_NOTIFICATION_IND:
17444 {
17445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17446 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070017447#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
17448 rssiNotification.bReserved =
17449 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
17450 rssiNotification.bRssiThres1NegCross =
17451 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
17452 rssiNotification.bRssiThres1PosCross =
17453 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
17454 rssiNotification.bRssiThres2NegCross =
17455 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
17456 rssiNotification.bRssiThres2PosCross =
17457 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
17458 rssiNotification.bRssiThres3NegCross =
17459 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
17460 rssiNotification.bRssiThres3PosCross =
17461 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080017462 rssiNotification.avgRssi = (v_S7_t)
17463 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070017464 WLANTL_BMPSRSSIRegionChangedNotification(
17465 pWDA->pVosContext,
17466 &rssiNotification);
17467#endif
17468 break ;
17469 }
17470 case WDI_MISSED_BEACON_IND:
17471 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080017472 tpSirSmeMissedBeaconInd pMissBeacInd =
17473 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070017474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17475 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070017476 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080017477 if(NULL == pMissBeacInd)
17478 {
17479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17480 "%s: VOS MEM Alloc Failure", __func__);
17481 break;
17482 }
17483 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
17484 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
17485 pMissBeacInd->bssIdx =
17486 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
17487 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017488 break ;
17489 }
Kapil Gupta7a3d9b12016-12-20 20:36:38 +053017490#ifdef WLAN_FEATURE_APFIND
17491 case WDI_AP_FOUND_IND:
17492 {
17493 WDA_SendMsg(pWDA, WDA_AP_FIND_IND, NULL, 0) ;
17494 break ;
17495 }
17496#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070017497 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
17498 {
17499 /* TODO: Decode Ind and send Ind to PE */
17500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17501 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
17502 break ;
17503 }
17504
17505 case WDI_MIC_FAILURE_IND:
17506 {
17507 tpSirSmeMicFailureInd pMicInd =
17508 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
17509
17510 if(NULL == pMicInd)
17511 {
17512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017513 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017514 break;
17515 }
17516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17517 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070017518 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
17519 pMicInd->length = sizeof(tSirSmeMicFailureInd);
17520 vos_mem_copy(pMicInd->bssId,
17521 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
17522 sizeof(tSirMacAddr));
17523 vos_mem_copy(pMicInd->info.srcMacAddr,
17524 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
17525 sizeof(tSirMacAddr));
17526 vos_mem_copy(pMicInd->info.taMacAddr,
17527 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
17528 sizeof(tSirMacAddr));
17529 vos_mem_copy(pMicInd->info.dstMacAddr,
17530 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
17531 sizeof(tSirMacAddr));
17532 vos_mem_copy(pMicInd->info.rxMacAddr,
17533 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
17534 sizeof(tSirMacAddr));
17535 pMicInd->info.multicast =
17536 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
17537 pMicInd->info.keyId=
17538 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
17539 pMicInd->info.IV1=
17540 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
17541 vos_mem_copy(pMicInd->info.TSC,
17542 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070017543 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
17544 (void *)pMicInd , 0) ;
17545 break ;
17546 }
17547 case WDI_FATAL_ERROR_IND:
17548 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070017549 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070017550 /* TODO: Decode Ind and send Ind to PE */
17551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17552 "Received WDI_FATAL_ERROR_IND from WDI ");
17553 break ;
17554 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017555 case WDI_DEL_STA_IND:
17556 {
Jeff Johnson295189b2012-06-20 16:38:30 -070017557 tpDeleteStaContext pDelSTACtx =
17558 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
17559
17560 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17561 "Received WDI_DEL_STA_IND from WDI ");
17562 if(NULL == pDelSTACtx)
17563 {
17564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017565 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017566 break;
17567 }
17568 vos_mem_copy(pDelSTACtx->addr2,
17569 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
17570 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070017571 vos_mem_copy(pDelSTACtx->bssId,
17572 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
17573 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070017574 pDelSTACtx->assocId =
17575 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
17576 pDelSTACtx->reasonCode =
17577 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
17578 pDelSTACtx->staId =
17579 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070017580 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
17581 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017582 break ;
17583 }
17584 case WDI_COEX_IND:
17585 {
17586 tANI_U32 index;
17587 vos_msg_t vosMsg;
c_hpothub3458992014-09-19 19:58:57 +053017588 tSirSmeCoexInd *pSmeCoexInd;
17589
17590 if (SIR_COEX_IND_TYPE_CXM_FEATURES_NOTIFICATION ==
17591 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType)
17592 {
17593 if(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData)
17594 {
17595 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17596 FL("Coex state: 0x%x coex feature: 0x%x"),
17597 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[0],
17598 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[1]);
17599
17600 if (wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2] << 16)
17601 {
17602 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, FL("power limit: 0x%x"),
17603 (tANI_U16)(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2]));
17604 }
17605 }
17606 break;
17607 }
17608
17609 pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070017610 if(NULL == pSmeCoexInd)
17611 {
17612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017613 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017614 break;
17615 }
17616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17617 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070017618 /* Message Header */
17619 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
17620 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070017621 /* Info from WDI Indication */
17622 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
17623 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
17624 {
17625 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
17626 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017627 /* VOS message wrapper */
17628 vosMsg.type = eWNI_SME_COEX_IND;
17629 vosMsg.bodyptr = (void *)pSmeCoexInd;
17630 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070017631 /* Send message to SME */
17632 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
17633 {
17634 /* free the mem and return */
17635 vos_mem_free((v_VOID_t *)pSmeCoexInd);
17636 }
17637 else
17638 {
17639 /* DEBUG */
17640 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17641 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
17642 pSmeCoexInd->coexIndType,
17643 pSmeCoexInd->coexIndData[0],
17644 pSmeCoexInd->coexIndData[1],
17645 pSmeCoexInd->coexIndData[2],
17646 pSmeCoexInd->coexIndData[3]);
17647 }
17648 break;
17649 }
17650 case WDI_TX_COMPLETE_IND:
17651 {
17652 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
17653 /* Calling TxCompleteAck Indication from wda context*/
17654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17655 "Complete Indication received from HAL");
17656 if( pWDA->pAckTxCbFunc )
17657 {
17658 if( VOS_STATUS_SUCCESS !=
17659 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
17660 {
17661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17662 "Tx Complete timeout Timer Stop Failed ");
Ganesh Kondabattinib18b3292015-03-16 16:59:26 +053017663 }
Ganesh Kondabattinie1accae2015-06-11 17:18:00 +053017664 if (!IS_FEATURE_SUPPORTED_BY_FW(ENHANCED_TXBD_COMPLETION))
Ganesh Kondabattinib18b3292015-03-16 16:59:26 +053017665 pWDA->pAckTxCbFunc( pMac, &wdiLowLevelInd->wdiIndicationData.tx_complete_status);
17666 else
17667 pWDA->pAckTxCbFunc( pMac, &wdiLowLevelInd->wdiIndicationData.wdiTxBdInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070017668 pWDA->pAckTxCbFunc = NULL;
17669 }
17670 else
17671 {
Ratheesh S P36dbc932015-08-07 14:28:57 +053017672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070017673 "Tx Complete Indication is received after timeout ");
17674 }
17675 break;
17676 }
Viral Modid86bde22012-12-10 13:09:21 -080017677 case WDI_P2P_NOA_START_IND :
17678 {
17679 tSirP2PNoaStart *pP2pNoaStart =
17680 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
17681
17682 if (NULL == pP2pNoaStart)
17683 {
17684 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17685 "Memory allocation failure, "
17686 "WDI_P2P_NOA_START_IND not forwarded");
17687 break;
17688 }
17689 pP2pNoaStart->status =
17690 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
17691 pP2pNoaStart->bssIdx =
17692 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
17693 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
17694 (void *)pP2pNoaStart , 0) ;
17695 break;
17696 }
17697
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053017698#ifdef FEATURE_WLAN_TDLS
17699 case WDI_TDLS_IND :
17700 {
17701 tSirTdlsInd *pTdlsInd =
17702 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
17703
17704 if (NULL == pTdlsInd)
17705 {
17706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17707 "Memory allocation failure, "
17708 "WDI_TDLS_IND not forwarded");
17709 break;
17710 }
17711 pTdlsInd->status =
17712 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
17713 pTdlsInd->assocId =
17714 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
17715 pTdlsInd->staIdx =
17716 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
17717 pTdlsInd->reasonCode =
17718 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
17719 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
17720 (void *)pTdlsInd , 0) ;
17721 break;
17722 }
17723#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070017724 case WDI_P2P_NOA_ATTR_IND :
17725 {
17726 tSirP2PNoaAttr *pP2pNoaAttr =
17727 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070017728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17729 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070017730 if (NULL == pP2pNoaAttr)
17731 {
17732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17733 "Memory allocation failure, "
17734 "WDI_P2P_NOA_ATTR_IND not forwarded");
17735 break;
17736 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017737 pP2pNoaAttr->index =
17738 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
17739 pP2pNoaAttr->oppPsFlag =
17740 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
17741 pP2pNoaAttr->ctWin =
17742 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
17743
17744 pP2pNoaAttr->uNoa1IntervalCnt =
17745 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
17746 pP2pNoaAttr->uNoa1Duration =
17747 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
17748 pP2pNoaAttr->uNoa1Interval =
17749 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
17750 pP2pNoaAttr->uNoa1StartTime =
17751 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070017752 pP2pNoaAttr->uNoa2IntervalCnt =
17753 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
17754 pP2pNoaAttr->uNoa2Duration =
17755 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
17756 pP2pNoaAttr->uNoa2Interval =
17757 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
17758 pP2pNoaAttr->uNoa2StartTime =
17759 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070017760 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
17761 (void *)pP2pNoaAttr , 0) ;
17762 break;
17763 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017764#ifdef FEATURE_WLAN_SCAN_PNO
17765 case WDI_PREF_NETWORK_FOUND_IND:
17766 {
17767 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070017768 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
17769 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
17770 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
17771 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
17772
Jeff Johnson295189b2012-06-20 16:38:30 -070017773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17774 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070017775 if (NULL == pPrefNetworkFoundInd)
17776 {
17777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17778 "Memory allocation failure, "
17779 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
Kiet Lamb537cfb2013-11-07 12:56:49 +053017780 if (NULL !=
17781 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
17782 {
17783 wpalMemoryFree(
17784 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData
17785 );
17786 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
17787 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017788 break;
17789 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017790 /* Message Header */
17791 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070017792 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070017793
17794 /* Info from WDI Indication */
17795 pPrefNetworkFoundInd->ssId.length =
17796 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070017797 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070017798 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
17799 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
17800 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070017801 if (NULL !=
17802 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
17803 {
17804 pPrefNetworkFoundInd->frameLength =
17805 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
17806 vos_mem_copy( pPrefNetworkFoundInd->data,
17807 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
17808 pPrefNetworkFoundInd->frameLength);
17809 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
17810 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
17811 }
17812 else
17813 {
17814 pPrefNetworkFoundInd->frameLength = 0;
17815 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017816 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070017817 /* VOS message wrapper */
17818 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
17819 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
17820 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070017821 /* Send message to SME */
17822 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
17823 {
17824 /* free the mem and return */
17825 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
17826 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017827 break;
17828 }
17829#endif // FEATURE_WLAN_SCAN_PNO
17830
17831#ifdef WLAN_WAKEUP_EVENTS
17832 case WDI_WAKE_REASON_IND:
17833 {
17834 vos_msg_t vosMsg;
17835 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
17836 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
17837 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
17838
17839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Sushant Kaushik1b645382014-10-13 16:39:36 +053017840 "[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 -070017841 wdiLowLevelInd->wdiIndicationType,
17842 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
17843 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
17844 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
17845
17846 if (NULL == pWakeReasonInd)
17847 {
17848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17849 "Memory allocation failure, "
17850 "WDI_WAKE_REASON_IND not forwarded");
17851 break;
17852 }
17853
17854 vos_mem_zero(pWakeReasonInd, allocSize);
17855
17856 /* Message Header */
17857 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
17858 pWakeReasonInd->mesgLen = allocSize;
17859
17860 /* Info from WDI Indication */
17861 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
17862 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
17863 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
17864 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
17865 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
17866 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
17867 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
17868 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
17869
17870 /* VOS message wrapper */
17871 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
17872 vosMsg.bodyptr = (void *) pWakeReasonInd;
17873 vosMsg.bodyval = 0;
17874
17875 /* Send message to SME */
17876 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
17877 {
17878 /* free the mem and return */
17879 vos_mem_free((v_VOID_t *) pWakeReasonInd);
17880 }
17881
17882 break;
17883 }
17884#endif // WLAN_WAKEUP_EVENTS
17885
17886 case WDI_TX_PER_HIT_IND:
17887 {
17888 vos_msg_t vosMsg;
17889 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
17890 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
17891 /* VOS message wrapper */
17892 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
17893 vosMsg.bodyptr = NULL;
17894 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070017895 /* Send message to SME */
17896 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
17897 {
17898 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
17899 }
17900 break;
17901 }
Abhishek Singh00b71972016-01-07 10:51:04 +053017902#ifdef WLAN_FEATURE_RMC
17903 case WDI_TX_FAIL_IND:
17904 {
17905 if (pWDA->txFailIndCallback)
17906 {
17907 pWDA->txFailIndCallback(
17908 wdiLowLevelInd->wdiIndicationData.wdiTXFailInd.macAddr,
17909 wdiLowLevelInd->wdiIndicationData.wdiTXFailInd.seqNo);
17910 }
17911 break;
17912 }
17913#endif /* WLAN_FEATURE_RMC */
Jeff Johnson295189b2012-06-20 16:38:30 -070017914
Leo Chang9056f462013-08-01 19:21:11 -070017915#ifdef FEATURE_WLAN_LPHB
Leo Changd9df8aa2013-09-26 13:32:26 -070017916 case WDI_LPHB_IND:
Leo Chang9056f462013-08-01 19:21:11 -070017917 {
Leo Changd9df8aa2013-09-26 13:32:26 -070017918 vos_msg_t vosMsg;
17919 tSirLPHBInd *lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070017920
Leo Changd9df8aa2013-09-26 13:32:26 -070017921 lphbInd =
17922 (tSirLPHBInd *)vos_mem_malloc(sizeof(tSirLPHBInd));
17923 if (NULL == lphbInd)
Leo Chang9056f462013-08-01 19:21:11 -070017924 {
17925 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17926 "%s: LPHB IND buffer alloc Fail", __func__);
17927 return ;
17928 }
17929
Leo Changd9df8aa2013-09-26 13:32:26 -070017930 lphbInd->sessionIdx =
Leo Chang9056f462013-08-01 19:21:11 -070017931 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
Leo Changd9df8aa2013-09-26 13:32:26 -070017932 lphbInd->protocolType =
Leo Chang9056f462013-08-01 19:21:11 -070017933 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
Leo Changd9df8aa2013-09-26 13:32:26 -070017934 lphbInd->eventReason =
Leo Chang9056f462013-08-01 19:21:11 -070017935 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
17936
17937 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Leo Changd9df8aa2013-09-26 13:32:26 -070017938 "Get WDI_LPHB_IND bssIdx %d",
Leo Chang9056f462013-08-01 19:21:11 -070017939 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
17940
Leo Changd9df8aa2013-09-26 13:32:26 -070017941 vosMsg.type = eWNI_SME_LPHB_IND;
17942 vosMsg.bodyptr = lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070017943 vosMsg.bodyval = 0;
17944 /* Send message to SME */
17945 if (VOS_STATUS_SUCCESS !=
17946 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
17947 {
17948 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
17949 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
Leo Changd9df8aa2013-09-26 13:32:26 -070017950 vos_mem_free(lphbInd);
Leo Chang9056f462013-08-01 19:21:11 -070017951 }
17952 break;
17953 }
17954#endif /* FEATURE_WLAN_LPHB */
Yue Mab9c86f42013-08-14 15:59:08 -070017955 case WDI_PERIODIC_TX_PTRN_FW_IND:
17956 {
17957 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17958 "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, "
17959 "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__,
17960 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx,
17961 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx,
17962 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status,
17963 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap);
17964
17965 break;
17966 }
Leo Chang9056f462013-08-01 19:21:11 -070017967
Ravi Joshid2ca7c42013-07-23 08:37:49 -070017968 case WDI_IBSS_PEER_INACTIVITY_IND:
17969 {
17970 tSirIbssPeerInactivityInd *pIbssInd =
17971 (tSirIbssPeerInactivityInd *)
17972 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
17973
17974 if (NULL == pIbssInd)
17975 {
17976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17977 "Memory allocation failure, "
17978 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
17979 break;
17980 }
17981
17982 pIbssInd->bssIdx =
17983 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
17984 pIbssInd->staIdx =
17985 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
17986 vos_mem_copy(pIbssInd->peerAddr,
17987 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
17988 sizeof(tSirMacAddr));
17989 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
17990 break;
17991 }
17992
Abhishek Singh00b71972016-01-07 10:51:04 +053017993#ifdef WLAN_FEATURE_RMC
17994 case WDI_RMC_RULER_PICK_NEW :
17995 {
17996 tSirRmcUpdateInd *pRmcUpdateInd =
17997 (tSirRmcUpdateInd *)vos_mem_malloc(sizeof(tSirRmcUpdateInd));
17998
17999 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18000 "Received WDI_RMC_UPDATE_IND from WDI");
18001 if (NULL == pRmcUpdateInd)
18002 {
18003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18004 "Memory allocation failure, "
18005 "WDI_RMC_UPDATE_IND not forwarded");
18006 break;
18007 }
18008
18009 pRmcUpdateInd->indication =
18010 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.indication;
18011 pRmcUpdateInd->role =
18012 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.role;
18013
18014 /* Copy the mcast transmitter which should be us */
18015 vos_mem_copy(pRmcUpdateInd->mcastTransmitter,
18016 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd. \
18017 mcastTransmitter,
18018 sizeof(tSirMacAddr));
18019 /* Copy the mcast group address */
18020 vos_mem_copy(pRmcUpdateInd->mcastGroup,
18021 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.mcastGroup,
18022 sizeof(tSirMacAddr));
18023 vos_mem_copy(pRmcUpdateInd->mcastRuler,
18024 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.mcastRuler,
18025 sizeof(tSirMacAddr));
18026 vos_mem_copy(pRmcUpdateInd->ruler,
18027 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.ruler,
18028 sizeof(pRmcUpdateInd->ruler));
18029
18030 WDA_SendMsg(pWDA, WDA_RMC_UPDATE_IND, (void *)pRmcUpdateInd, 0) ;
18031 break;
18032 }
18033#endif /* WLAN_FEATURE_RMC */
18034
Rajeev79dbe4c2013-10-05 11:03:42 +053018035#ifdef FEATURE_WLAN_BATCH_SCAN
18036 case WDI_BATCH_SCAN_RESULT_IND:
18037 {
18038 void *pBatchScanResult;
18039 void *pCallbackContext;
18040 tpAniSirGlobal pMac;
18041
18042 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
18043 "Received WDI_BATCHSCAN_RESULT_IND from FW");
18044
18045 /*sanity check*/
Sunil Duttbd736ed2014-05-26 21:19:41 +053018046 if (NULL == pWDA)
Rajeev79dbe4c2013-10-05 11:03:42 +053018047 {
18048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18049 "%s:pWDA is NULL", __func__);
18050 VOS_ASSERT(0);
18051 return;
18052 }
18053
18054 pBatchScanResult =
18055 (void *)wdiLowLevelInd->wdiIndicationData.pBatchScanResult;
18056 if (NULL == pBatchScanResult)
18057 {
18058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18059 "%s:Batch scan result from FW is null can't invoke HDD callback",
18060 __func__);
18061 VOS_ASSERT(0);
18062 return;
18063 }
18064
18065 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18066 if (NULL == pMac)
18067 {
18068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18069 "%s:pMac is NULL", __func__);
18070 VOS_ASSERT(0);
18071 return;
18072 }
18073
18074 pCallbackContext = pMac->pmc.batchScanResultCallbackContext;
18075 /*call hdd callback with set batch scan response data*/
18076 if(pMac->pmc.batchScanResultCallback)
18077 {
18078 pMac->pmc.batchScanResultCallback(pCallbackContext,
18079 pBatchScanResult);
18080 }
18081 else
18082 {
18083 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18084 "%s:HDD callback is null", __func__);
18085 VOS_ASSERT(0);
18086 }
18087 break;
18088 }
18089#endif
18090
Leo Chang0b0e45a2013-12-15 15:18:55 -080018091#ifdef FEATURE_WLAN_CH_AVOID
18092 case WDI_CH_AVOID_IND:
18093 {
18094 vos_msg_t vosMsg;
18095 tSirChAvoidIndType *chAvoidInd;
18096
18097 chAvoidInd =
18098 (tSirChAvoidIndType *)vos_mem_malloc(sizeof(tSirChAvoidIndType));
18099 if (NULL == chAvoidInd)
18100 {
18101 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18102 "%s: CH_AVOID IND buffer alloc Fail", __func__);
18103 return ;
18104 }
18105
18106 chAvoidInd->avoidRangeCount =
18107 wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidRangeCount;
18108 wpalMemoryCopy((void *)chAvoidInd->avoidFreqRange,
18109 (void *)wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidFreqRange,
18110 chAvoidInd->avoidRangeCount * sizeof(tSirChAvoidFreqType));
18111
18112 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18113 "%s : WDA CH avoid notification", __func__);
18114
18115 vosMsg.type = eWNI_SME_CH_AVOID_IND;
18116 vosMsg.bodyptr = chAvoidInd;
18117 vosMsg.bodyval = 0;
18118 /* Send message to SME */
18119 if (VOS_STATUS_SUCCESS !=
18120 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
18121 {
18122 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18123 "post eWNI_SME_CH_AVOID_IND to SME Failed");
18124 vos_mem_free(chAvoidInd);
18125 }
18126 break;
18127 }
18128#endif /* FEATURE_WLAN_CH_AVOID */
18129
Sunil Duttbd736ed2014-05-26 21:19:41 +053018130#ifdef WLAN_FEATURE_LINK_LAYER_STATS
18131 case WDI_LL_STATS_RESULTS_IND:
18132 {
18133 void *pLinkLayerStatsInd;
Sunil Duttbd736ed2014-05-26 21:19:41 +053018134 tpAniSirGlobal pMac;
18135
18136 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18137 "Received WDI_LL_STATS_RESULTS_IND from FW");
18138
18139 /*sanity check*/
18140 if (NULL == pWDA)
18141 {
18142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18143 "%s:pWDA is NULL", __func__);
18144 VOS_ASSERT(0);
18145 return;
18146 }
18147
18148 pLinkLayerStatsInd =
Dino Mycled3d50022014-07-07 12:58:25 +053018149 (void *)wdiLowLevelInd->
18150 wdiIndicationData.wdiLinkLayerStatsResults.pLinkLayerStatsResults;
Sunil Duttbd736ed2014-05-26 21:19:41 +053018151 if (NULL == pLinkLayerStatsInd)
18152 {
18153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18154 "%s:Link Layer Statistics from FW is null can't invoke HDD callback",
18155 __func__);
18156 VOS_ASSERT(0);
18157 return;
18158 }
18159
18160 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18161 if (NULL == pMac)
18162 {
18163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18164 "%s:pMac is NULL", __func__);
18165 VOS_ASSERT(0);
18166 return;
18167 }
18168
Dino Mycled3d50022014-07-07 12:58:25 +053018169 /* call hdd callback with Link Layer Statistics.
18170 * vdev_id/ifacId in link_stats_results will be
18171 * used to retrieve the correct HDD context
18172 */
Sunil Duttbd736ed2014-05-26 21:19:41 +053018173 if (pMac->sme.pLinkLayerStatsIndCallback)
18174 {
Dino Mycled3d50022014-07-07 12:58:25 +053018175 pMac->sme.pLinkLayerStatsIndCallback(pMac->pAdapter,
Sunil Duttbd736ed2014-05-26 21:19:41 +053018176 WDA_LINK_LAYER_STATS_RESULTS_RSP,
Dino Mycled3d50022014-07-07 12:58:25 +053018177 pLinkLayerStatsInd,
18178 wdiLowLevelInd->
18179 wdiIndicationData.wdiLinkLayerStatsResults.macAddr);
Sunil Duttbd736ed2014-05-26 21:19:41 +053018180 }
18181 else
18182 {
18183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18184 "%s:HDD callback is null", __func__);
18185 }
18186 break;
18187 }
18188#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
18189
Dino Mycle41bdc942014-06-10 11:30:24 +053018190#ifdef WLAN_FEATURE_EXTSCAN
18191 case WDI_EXTSCAN_PROGRESS_IND:
18192 case WDI_EXTSCAN_SCAN_AVAILABLE_IND:
18193 case WDI_EXTSCAN_SCAN_RESULT_IND:
18194 case WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND:
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053018195 case WDI_EXTSCAN_SSID_HOTLIST_RESULT_IND:
Dino Mycle41bdc942014-06-10 11:30:24 +053018196 {
18197 void *pEXTScanData;
18198 void *pCallbackContext;
18199 tpAniSirGlobal pMac;
18200 tANI_U16 indType;
18201
18202 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18203 "Received WDI_EXTSCAN Indications from FW");
18204 /*sanity check*/
18205 if (NULL == pWDA)
18206 {
18207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18208 "%s:pWDA is NULL", __func__);
18209 VOS_ASSERT(0);
18210 return;
18211 }
18212 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_PROGRESS_IND)
18213 {
18214 indType = WDA_EXTSCAN_PROGRESS_IND;
18215
18216 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18217 "WDI_EXTSCAN Indication is WDI_EXTSCAN_PROGRESS_IND");
18218 }
18219 if (wdiLowLevelInd->wdiIndicationType ==
18220 WDI_EXTSCAN_SCAN_AVAILABLE_IND)
18221 {
18222 indType = WDA_EXTSCAN_SCAN_AVAILABLE_IND;
18223
18224 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18225 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_AVAILABLE_IND");
18226 }
18227 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_SCAN_RESULT_IND)
18228 {
18229 indType = WDA_EXTSCAN_SCAN_RESULT_IND;
18230
18231 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18232 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_RESULT_IND");
18233 }
18234 if (wdiLowLevelInd->wdiIndicationType ==
18235 WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND)
18236 {
18237 indType = WDA_EXTSCAN_BSSID_HOTLIST_RESULT_IND;
18238
18239 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18240 "WDI_EXTSCAN Indication is WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND");
18241 }
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053018242 if (wdiLowLevelInd->wdiIndicationType ==
18243 WDI_EXTSCAN_SSID_HOTLIST_RESULT_IND)
18244 {
18245 indType = WDA_EXTSCAN_SSID_HOTLIST_RESULT_IND;
18246
18247 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18248 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SSID_HOTLIST_RESULT_IND");
18249 }
Dino Mycle41bdc942014-06-10 11:30:24 +053018250
18251 pEXTScanData =
18252 (void *)wdiLowLevelInd->wdiIndicationData.pEXTScanIndData;
18253 if (NULL == pEXTScanData)
18254 {
18255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18256 "%s: EXTSCAN Indication Data is null, can't invoke HDD callback",
18257 __func__);
18258 VOS_ASSERT(0);
18259 return;
18260 }
18261
18262 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18263 if (NULL == pMac)
18264 {
18265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18266 "%s:pMac is NULL", __func__);
18267 VOS_ASSERT(0);
18268 return;
18269 }
18270
18271 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
18272
18273 if(pMac->sme.pEXTScanIndCb)
18274 {
18275 pMac->sme.pEXTScanIndCb(pCallbackContext,
18276 indType,
18277 pEXTScanData);
18278 }
18279 else
18280 {
18281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18282 "%s:HDD callback is null", __func__);
18283 }
18284 break;
18285 }
18286#endif /* WLAN_FEATURE_EXTSCAN */
Abhishek Singh66c16762014-08-14 19:13:19 +053018287 case WDI_DEL_BA_IND:
18288 {
18289 tpBADeleteParams pDelBAInd =
Sunkad, Anand Ningappa5c529e42016-02-05 15:32:22 +053018290 (tpBADeleteParams)vos_mem_malloc(sizeof(*pDelBAInd));
Abhishek Singh66c16762014-08-14 19:13:19 +053018291
18292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18293 "Received WDI_DEL_BA_IND from WDI ");
18294 if(NULL == pDelBAInd)
18295 {
18296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18297 "%s: VOS MEM Alloc Failure", __func__);
18298 break;
18299 }
18300 vos_mem_copy(pDelBAInd->peerMacAddr,
18301 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.peerMacAddr,
18302 sizeof(tSirMacAddr));
18303 vos_mem_copy(pDelBAInd->bssId,
18304 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.bssId,
18305 sizeof(tSirMacAddr));
18306 pDelBAInd->staIdx =
18307 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.staIdx;
18308 pDelBAInd->baTID =
18309 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baTID;
18310 pDelBAInd->baDirection =
18311 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baDirection;
18312 pDelBAInd->reasonCode =
18313 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.reasonCode;
18314
18315 WDA_SendMsg(pWDA, SIR_LIM_DEL_BA_IND,
18316 (void *)pDelBAInd , 0) ;
18317 break;
18318 }
Srinivas Dasari32a79262015-02-19 13:04:49 +053018319 case WDI_NAN_EVENT_IND:
18320 {
18321 vos_msg_t vosMsg;
18322 tpSirNanEvent pSirNanEvent = NULL;
18323
18324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18325 "Received WDI_NAN_EVENT");
18326
18327 pSirNanEvent = (tpSirNanEvent)vos_mem_malloc( sizeof( tSirNanEvent )
18328 - sizeof( pSirNanEvent->event_data)
18329 + wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len);
18330
18331 if (NULL == pSirNanEvent)
18332 {
18333 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18334 "%s: VOS MEM Alloc Failure", __func__);
18335 VOS_ASSERT(0) ;
18336 break;
18337 }
18338
18339 pSirNanEvent->event_data_len =
18340 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len;
18341
18342 if (wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len)
18343 {
18344 vos_mem_copy( pSirNanEvent->event_data,
18345 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data,
18346 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len);
18347 }
18348
18349 /* VOS message wrapper */
18350 vosMsg.type = eWNI_SME_NAN_EVENT;
18351 vosMsg.bodyptr = pSirNanEvent;
18352 vosMsg.bodyval = 0;
18353
18354 /* Send message to SME */
18355 if (VOS_STATUS_SUCCESS
18356 != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
18357 {
18358 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
18359 "post eWNI_SME_NAN_EVENT to SME Failed");
18360 vos_mem_free(pSirNanEvent);
18361 }
18362 break;
18363 }
Sachin Ahuja3d47fcd2015-08-28 16:02:06 +053018364 case WDI_LOST_LINK_PARAMS_IND:
18365 {
18366 tpSirSmeLostLinkParamsInd pLostLinkParamInd =
18367 (tpSirSmeLostLinkParamsInd)vos_mem_malloc(sizeof(tSirSmeLostLinkParamsInd));
Dino Mycle41bdc942014-06-10 11:30:24 +053018368
Sachin Ahuja3d47fcd2015-08-28 16:02:06 +053018369 if (NULL == pLostLinkParamInd)
18370 {
18371 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18372 "%s: VOS MEM Alloc Failure", __func__);
18373 break;
18374 }
18375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18376 "Received WDI_LOST_LINK_PARAMS_IND from WDI ");
18377
18378 pLostLinkParamInd->messageType = eWNI_SME_LOST_LINK_PARAMS_IND;
18379 pLostLinkParamInd->length = sizeof(tSirSmeMicFailureInd);
18380 pLostLinkParamInd->info.bssIdx =
18381 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.bssIdx;
18382 pLostLinkParamInd->info.rssi =
18383 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.rssi;
18384 vos_mem_copy(pLostLinkParamInd->info.selfMacAddr,
18385 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.selfMacAddr,
18386 sizeof(tSirMacAddr));
18387 pLostLinkParamInd->info.linkFlCnt =
18388 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.linkFlCnt;
18389 pLostLinkParamInd->info.linkFlTx =
18390 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.linkFlTx;
18391 pLostLinkParamInd->info.lastDataRate =
18392 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.lastDataRate;
18393 pLostLinkParamInd->info.rsvd1 =
18394 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.rsvd1;
18395 pLostLinkParamInd->info.rsvd2 =
18396 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.rsvd2;
18397 WDA_SendMsg(pWDA, SIR_HAL_LOST_LINK_PARAMS_IND,
18398 (void *)pLostLinkParamInd , 0) ;
18399 break;
18400 }
Gupta, Kapil7c34b322015-09-30 13:12:35 +053018401 case WDI_RSSI_BREACHED_IND:
18402 {
18403 WDI_RssiBreachedIndType *pRssiBreachedInd;
18404 tpAniSirGlobal pMac;
18405
18406 pRssiBreachedInd =
18407 (WDI_RssiBreachedIndType *)vos_mem_malloc(sizeof(WDI_RssiBreachedIndType));
18408 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18409 "Received WDI_RSSI_BREACHED_IND from FW");
18410
18411 vos_mem_copy(pRssiBreachedInd,
18412 &wdiLowLevelInd->wdiIndicationData.wdiRssiBreachedInd,
18413 sizeof(WDI_RssiBreachedIndType));
18414
18415 /*sanity check*/
18416 if (NULL == pWDA)
18417 {
18418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18419 "%s:pWDA is NULL", __func__);
18420 vos_mem_free(pRssiBreachedInd);
18421 VOS_ASSERT(0);
18422 return;
18423 }
18424
18425 if (NULL == pRssiBreachedInd)
18426 {
18427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18428 "%s:Breach indication from FW is null can't invoke HDD callback",
18429 __func__);
18430 VOS_ASSERT(0);
18431 return;
18432 }
18433
18434 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18435 if (NULL == pMac)
18436 {
18437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18438 "%s:pMac is NULL", __func__);
18439 VOS_ASSERT(0);
18440 vos_mem_free(pRssiBreachedInd);
18441 return;
18442 }
18443
18444 if (pMac->sme.rssiThresholdBreachedCb)
18445 {
18446 pMac->sme.rssiThresholdBreachedCb(pMac->pAdapter, (void *)pRssiBreachedInd);
18447 }
18448 else
18449 {
18450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18451 "%s:HDD callback is null", __func__);
18452 }
18453 vos_mem_free(pRssiBreachedInd);
18454 break;
18455 }
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053018456#ifdef FEATURE_OEM_DATA_SUPPORT
18457 case WDI_START_OEM_DATA_RSP_IND_NEW:
18458 {
18459 void *pCallbackContext;
18460 tpAniSirGlobal pMac;
18461 tANI_U16 indType;
18462 void *pOemRspNewIndData;
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053018463 tANI_U32 OemRspNewLen;
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053018464
18465 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18466 "Received WDI_START_OEM_DATA_RSP_IND_NEW Indications from FW");
18467
18468 /*sanity check*/
18469 if (NULL == pWDA)
18470 {
18471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18472 "%s:pWDA is NULL", __func__);
18473 VOS_ASSERT(0);
18474 return;
18475 }
18476
18477 indType = WDA_START_OEM_DATA_RSP_IND_NEW;
18478 pOemRspNewIndData =
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053018479 (void *)wdiLowLevelInd->wdiIndicationData.wdiOemDataRspNew.
18480 pOemRspNewIndData;
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053018481 if (NULL == pOemRspNewIndData)
18482 {
18483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18484 "%s: OEM_DATA_RSP_IND_NEW Indication Data is null, can't invoke HDD callback",
18485 __func__);
18486 VOS_ASSERT(0);
18487 return;
18488 }
18489
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053018490 OemRspNewLen = wdiLowLevelInd->wdiIndicationData.wdiOemDataRspNew.
18491 OemRspNewLen;
18492
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053018493 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18494 if (NULL == pMac)
18495 {
18496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18497 "%s:pMac is NULL", __func__);
18498 VOS_ASSERT(0);
18499 return;
18500 }
18501
18502 pCallbackContext = pMac->sme.pOemDataCallbackContext;
18503
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053018504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18505 "%s: OemRspNewLen: %d", __func__, OemRspNewLen);
18506
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053018507 if(pMac->sme.pOemDataIndCb)
18508 {
18509 pMac->sme.pOemDataIndCb(pCallbackContext,
18510 indType,
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053018511 pOemRspNewIndData,
18512 OemRspNewLen);
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053018513 }
18514 else
18515 {
18516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18517 "%s:HDD callback is null", __func__);
18518 }
18519 break;
18520 }
18521#endif /* FEATURE_OEM_DATA_SUPPORT */
18522
Jeff Johnson295189b2012-06-20 16:38:30 -070018523 default:
18524 {
18525 /* TODO error */
18526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18527 "Received UNKNOWN Indication from WDI ");
18528 }
18529 }
18530 return ;
18531}
18532
Jeff Johnson295189b2012-06-20 16:38:30 -070018533/*
18534 * BA related processing in WDA.
18535 */
Jeff Johnson295189b2012-06-20 16:38:30 -070018536void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
18537 void* pUserData)
18538{
18539 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18540 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070018541 if(NULL == pWdaParams)
18542 {
18543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018544 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018545 VOS_ASSERT(0) ;
18546 return ;
18547 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018548 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070018549 vos_mem_free(pWdaParams->wdaMsgParam) ;
18550 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18551 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018553 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018554 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
18555 {
18556 tANI_U8 i = 0 ;
18557 tBaActivityInd *baActivityInd = NULL ;
18558 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
18559 tANI_U8 allocSize = sizeof(tBaActivityInd)
18560 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
18561 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
18562 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018563 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018564 if(NULL == baActivityInd)
18565 {
18566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018567 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018568 VOS_ASSERT(0) ;
18569 return;
18570 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018571 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
18572 sizeof(tSirMacAddr)) ;
18573 baActivityInd->baCandidateCnt = baCandidateCount ;
18574
18575 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
18576 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
18577
18578 for(i = 0 ; i < baCandidateCount ; i++)
18579 {
18580 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018581 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
18582 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018583 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
18584 {
18585 baCandidate->baInfo[tid].fBaEnable =
18586 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
18587 baCandidate->baInfo[tid].startingSeqNum =
18588 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
18589 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070018590 wdiBaCandidate++ ;
18591 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018592 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018593 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
18594 }
18595 else
18596 {
18597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18598 "BA Trigger RSP with Failure received ");
18599 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018600 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018601}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080018602
18603
18604/*
18605 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
18606 * during MCC
18607 */
18608void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
18609{
18610 wpt_uint32 enabled;
18611 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
18612 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
18613 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
18614
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053018615 if (NULL == pMac )
18616 {
18617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18618 "%s: Invoked with invalid MAC context ", __func__ );
18619 VOS_ASSERT(0);
18620 return;
18621 }
18622
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080018623 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
18624 != eSIR_SUCCESS)
18625 {
18626 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18627 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
18628 return;
18629 }
18630
18631 if(!enabled)
18632 {
18633 return;
18634 }
18635
18636 if(NULL == pWDA)
18637 {
18638 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18639 "%s:WDA context is NULL", __func__);
18640 VOS_ASSERT(0);
18641 return;
18642 }
18643
18644 if(activate)
18645 {
18646 if( VOS_STATUS_SUCCESS !=
18647 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
18648 {
18649 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18650 "Traffic Stats Timer Start Failed ");
18651 return;
18652 }
18653 WDI_DS_ActivateTrafficStats();
18654 }
18655 else
18656 {
18657 WDI_DS_DeactivateTrafficStats();
18658 WDI_DS_ClearTrafficStats();
18659
18660 if( VOS_STATUS_SUCCESS !=
18661 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
18662 {
18663 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18664 "Traffic Stats Timer Stop Failed ");
18665 return;
18666 }
18667 }
18668}
18669
18670/*
18671 * Traffic Stats Timer handler
18672 */
18673void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
18674{
18675 WDI_Status wdiStatus;
18676 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
18677 WDI_TrafficStatsIndType trafficStatsIndParams;
18678 wpt_uint32 length, enabled;
18679 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18680
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053018681 if (NULL == pMac )
18682 {
18683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18684 "%s: Invoked with invalid MAC context ", __func__ );
18685 VOS_ASSERT(0);
18686 return;
18687 }
18688
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080018689 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
18690 != eSIR_SUCCESS)
18691 {
18692 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18693 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
18694 return;
18695 }
18696
18697 if(!enabled)
18698 {
18699 WDI_DS_DeactivateTrafficStats();
18700 return;
18701 }
18702
18703 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
18704
18705 if(pWdiTrafficStats != NULL)
18706 {
18707 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
18708 trafficStatsIndParams.length = length;
18709 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080018710 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080018711 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
18712 trafficStatsIndParams.pUserData = pWDA;
18713
18714 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
18715
18716 if(WDI_STATUS_PENDING == wdiStatus)
18717 {
18718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18719 "Pending received for %s:%d ",__func__,__LINE__ );
18720 }
18721 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
18722 {
18723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18724 "Failure in %s:%d ",__func__,__LINE__ );
18725 }
18726
18727 WDI_DS_ClearTrafficStats();
18728 }
18729 else
18730 {
18731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
18732 "pWdiTrafficStats is Null");
18733 }
18734
18735 if( VOS_STATUS_SUCCESS !=
18736 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
18737 {
18738 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
18739 "Traffic Stats Timer Start Failed ");
18740 return;
18741 }
18742}
18743
Sreelakshmi Konamki60ccfb32016-07-08 12:53:12 +053018744bool WDA_AllowAddBA(tpAniSirGlobal pMac, tANI_U8 staId, tANI_U8 tid)
18745{
18746 if (!pMac->lim.staBaInfo[staId].failed_count[tid])
18747 return true;
18748 if ((WDA_BA_MAX_RETRY_THRESHOLD <=
18749 pMac->lim.staBaInfo[staId].failed_count[tid]) ||
18750 ((pMac->lim.staBaInfo[staId].failed_timestamp[tid] +
18751 (pMac->lim.staBaInfo[staId].failed_count[tid] * WDA_BA_RETRY_TIME)) >=
18752 jiffies_to_msecs(jiffies)))
18753 {
18754 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18755 "%s: AP/STA has declined ADDBA req for tid %d, declined %d times",
18756 __func__, tid, pMac->lim.staBaInfo[staId].failed_count[tid]);
18757 return false;
18758 }
18759 return true;
18760}
18761
Jeff Johnson295189b2012-06-20 16:38:30 -070018762/*
18763 * BA Activity check timer handler
18764 */
18765void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
18766{
18767 tANI_U8 curSta = 0 ;
18768 tANI_U8 tid = 0 ;
18769 tANI_U8 size = 0 ;
18770 tANI_U8 baCandidateCount = 0 ;
18771 tANI_U8 newBaCandidate = 0 ;
Abhishek Singh0644e482014-10-06 18:38:23 +053018772 tANI_U32 val;
Jeff Johnson295189b2012-06-20 16:38:30 -070018773 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
Abhishek Singh0644e482014-10-06 18:38:23 +053018774 tpAniSirGlobal pMac;
18775
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053018776 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070018777 {
18778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053018779 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018780 VOS_ASSERT(0);
18781 return ;
18782 }
18783 if(WDA_MAX_STA < pWDA->wdaMaxSta)
18784 {
18785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18786 "Inconsistent STA entries in WDA");
18787 VOS_ASSERT(0) ;
Abhishek Singh0644e482014-10-06 18:38:23 +053018788 }
18789 if(NULL == pWDA->pVosContext)
18790 {
18791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18792 "%s: pVosContext is NULL",__func__);
18793 VOS_ASSERT(0);
18794 return ;
18795 }
18796 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Abhishek Singh68883952014-10-14 11:59:05 +053018797 if(NULL == pMac)
18798 {
18799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18800 "%s: pMac is NULL",__func__);
18801 VOS_ASSERT(0);
18802 return ;
18803 }
18804
Abhishek Singh0644e482014-10-06 18:38:23 +053018805 if (wlan_cfgGetInt(pMac,
18806 WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC, &val) !=
18807 eSIR_SUCCESS)
18808 {
18809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18810 "Unable to get WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC");
18811 val = 0;
18812 }
18813
Jeff Johnson295189b2012-06-20 16:38:30 -070018814 /* walk through all STA entries and find out TX packet count */
18815 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
18816 {
Abhishek Singh0644e482014-10-06 18:38:23 +053018817 tANI_U32 currentOperChan = pWDA->wdaStaInfo[curSta].currentOperChan;
Gopichand Nakkala976e3252013-01-03 15:45:56 -080018818#ifdef WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053018819 // We can only do BA on "hard" STAs.
18820 if (!(IS_HWSTA_IDX(curSta)))
18821 {
18822 continue;
18823 }
Gopichand Nakkala976e3252013-01-03 15:45:56 -080018824#endif //WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053018825 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
18826 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070018827 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018828 tANI_U32 txPktCount = 0 ;
18829 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018830 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070018831 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
18832 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070018833 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
18834 curSta, tid, &txPktCount)))
18835 {
18836#if 0
18837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
18838 "************* %d:%d, %d ",curSta, txPktCount,
18839 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
18840#endif
Abhishek Singh0644e482014-10-06 18:38:23 +053018841 if(val && ( (currentOperChan >= SIR_11B_CHANNEL_BEGIN) &&
18842 (currentOperChan <= SIR_11B_CHANNEL_END)))
18843 {
18844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18845 "%s: BTC disabled aggregation - dont start "
18846 "TX ADDBA req",__func__);
18847 }
18848 else if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070018849 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Sreelakshmi Konamki60ccfb32016-07-08 12:53:12 +053018850 && WDA_AllowAddBA(pMac, curSta, tid)
Abhishek Singh424ae432014-12-05 11:54:54 +053018851 && (((eSYSTEM_STA_IN_IBSS_ROLE ==
18852 pWDA->wdaGlobalSystemRole) && txPktCount )
18853 || (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
18854 curSta, tid))))
Jeff Johnson295189b2012-06-20 16:38:30 -070018855 {
18856 /* get prepare for sending message to HAL */
18857 //baCandidate[baCandidateCount].staIdx = curSta ;
18858 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
18859 newBaCandidate = WDA_ENABLE_BA ;
18860 }
18861 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
18862 }
18863 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018864 /* fill the entry for all the sta with given TID's */
18865 if(WDA_ENABLE_BA == newBaCandidate)
18866 {
18867 /* move to next BA candidate */
18868 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
18869 size += sizeof(WDI_TriggerBAReqCandidateType) ;
18870 baCandidateCount++ ;
18871 newBaCandidate = WDA_DISABLE_BA ;
18872 }
18873 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018874 /* prepare and send message to hal */
18875 if( 0 < baCandidateCount)
18876 {
18877 WDI_Status status = WDI_STATUS_SUCCESS ;
18878 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
18879 tWDA_ReqParams *pWdaParams =
18880 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018881 if(NULL == pWdaParams)
18882 {
18883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018884 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018885 VOS_ASSERT(0) ;
18886 return;
18887 }
18888 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
18889 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
18890 if(NULL == wdiTriggerBaReq)
18891 {
18892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018893 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018894 VOS_ASSERT(0) ;
18895 vos_mem_free(pWdaParams);
18896 return;
18897 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018898 do
18899 {
18900 WDI_TriggerBAReqinfoType *triggerBaInfo =
18901 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
18902 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
18903 /* TEMP_FIX: Need to see if WDI need check for assoc session for
18904 * for each request */
18905 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
18906 triggerBaInfo->ucBASessionID = 0;
18907 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
18908 } while(0) ;
18909 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
18910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018911 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018912 pWdaParams->pWdaContext = pWDA;
18913 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
18914 pWdaParams->wdaMsgParam = NULL;
Abhishek Singhac9abe62016-02-05 18:07:41 +053018915 status = WDI_TriggerBAReq(wdiTriggerBaReq, size,
Jeff Johnson295189b2012-06-20 16:38:30 -070018916 WDA_TriggerBaReqCallback, pWdaParams) ;
18917 if(IS_WDI_STATUS_FAILURE(status))
18918 {
18919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18920 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
18921 vos_mem_free(pWdaParams->wdaMsgParam) ;
18922 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18923 vos_mem_free(pWdaParams) ;
18924 }
18925 }
18926 else
18927 {
18928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
18929 "There is no TID for initiating BA");
18930 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018931 if( VOS_STATUS_SUCCESS !=
18932 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
18933 {
18934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18935 "BA Activity Timer Stop Failed ");
18936 return ;
18937 }
18938 if( VOS_STATUS_SUCCESS !=
18939 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
18940 {
18941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18942 "BA Activity Timer Start Failed ");
18943 return;
18944 }
18945 return ;
18946}
Jeff Johnson295189b2012-06-20 16:38:30 -070018947/*
18948 * WDA common routine to create timer used by WDA.
18949 */
18950static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
18951{
Jeff Johnson295189b2012-06-20 16:38:30 -070018952 VOS_STATUS status = VOS_STATUS_SUCCESS ;
18953 tANI_U32 val = 0 ;
18954 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18955
18956 if(NULL == pMac)
18957 {
18958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018959 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018960 VOS_ASSERT(0);
18961 return VOS_STATUS_E_FAILURE;
18962 }
18963 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
18964 != eSIR_SUCCESS)
18965 {
18966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18967 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
18968 return VOS_STATUS_E_FAILURE;
18969 }
18970 val = SYS_MS_TO_TICKS(val) ;
18971
18972 /* BA activity check timer */
18973 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
18974 "BA Activity Check timer", WDA_TimerHandler,
18975 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
18976 if(status != TX_SUCCESS)
18977 {
18978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18979 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080018980 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018981 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018982 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018983 /* Tx Complete Timeout timer */
18984 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
18985 "Tx Complete Check timer", WDA_TimerHandler,
18986 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018987 if(status != TX_SUCCESS)
18988 {
18989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18990 "Unable to create Tx Complete Timeout timer");
18991 /* Destroy timer of BA activity check timer */
18992 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
18993 if(status != TX_SUCCESS)
18994 {
18995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18996 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080018997 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018998 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080018999 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019000 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080019001
19002 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
19003
19004 /* Traffic Stats timer */
19005 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
19006 "Traffic Stats timer", WDA_TimerHandler,
19007 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
19008 if(status != TX_SUCCESS)
19009 {
19010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19011 "Unable to create traffic stats timer");
19012 /* Destroy timer of BA activity check timer */
19013 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
19014 if(status != TX_SUCCESS)
19015 {
19016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19017 "Unable to Destroy BA activity timer");
19018 }
19019 /* Destroy timer of tx complete timer */
19020 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
19021 if(status != TX_SUCCESS)
19022 {
19023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19024 "Unable to Tx complete timer");
19025 }
19026 return VOS_STATUS_E_FAILURE ;
19027 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080019028 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019029}
Jeff Johnson295189b2012-06-20 16:38:30 -070019030/*
19031 * WDA common routine to destroy timer used by WDA.
19032 */
19033static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
19034{
19035 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019036 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
19037 if(status != TX_SUCCESS)
19038 {
19039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19040 "Unable to Destroy Tx Complete Timeout timer");
19041 return eSIR_FAILURE ;
19042 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019043 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
19044 if(status != TX_SUCCESS)
19045 {
19046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19047 "Unable to Destroy BA activity timer");
19048 return eSIR_FAILURE ;
19049 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080019050 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
19051 if(status != TX_SUCCESS)
19052 {
19053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19054 "Unable to Destroy traffic stats timer");
19055 return eSIR_FAILURE ;
19056 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019057 return eSIR_SUCCESS ;
19058}
Jeff Johnson295189b2012-06-20 16:38:30 -070019059/*
19060 * WDA timer handler.
19061 */
19062void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
19063{
19064 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
19065 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019066 /*
19067 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
19068 */
19069 wdaMsg.type = timerInfo ;
19070 wdaMsg.bodyptr = NULL;
19071 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070019072 /* post the message.. */
19073 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
19074 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
19075 {
19076 vosStatus = VOS_STATUS_E_BADMSG;
19077 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019078}
Jeff Johnson295189b2012-06-20 16:38:30 -070019079/*
19080 * WDA Tx Complete timeout Indication.
19081 */
19082void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
19083{
19084 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053019085 tpSirTxBdStatus txBdStatus = {0};
19086
Jeff Johnson295189b2012-06-20 16:38:30 -070019087 if( pWDA->pAckTxCbFunc )
19088 {
19089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080019090 "TxComplete timer expired");
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053019091 /*Indicate failure*/
19092 pWDA->pAckTxCbFunc( pMac, &txBdStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070019093 pWDA->pAckTxCbFunc = NULL;
19094 }
19095 else
19096 {
19097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080019098 "There is no request pending for TxComplete and wait timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070019099 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019100}
Jeff Johnson295189b2012-06-20 16:38:30 -070019101/*
19102 * WDA Set REG Domain to VOS NV
19103 */
Abhishek Singha306a442013-11-07 18:39:01 +053019104eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId,
19105 tAniBool sendRegHint)
Jeff Johnson295189b2012-06-20 16:38:30 -070019106{
Abhishek Singha306a442013-11-07 18:39:01 +053019107 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId, sendRegHint))
Jeff Johnson295189b2012-06-20 16:38:30 -070019108 {
19109 return eHAL_STATUS_INVALID_PARAMETER;
19110 }
19111 return eHAL_STATUS_SUCCESS;
19112}
Jeff Johnson295189b2012-06-20 16:38:30 -070019113
Jeff Johnson295189b2012-06-20 16:38:30 -070019114#ifdef FEATURE_WLAN_SCAN_PNO
19115/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070019116 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070019117 *
19118 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070019119void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070019120{
19121 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053019122 tSirPNOScanReq *pPNOScanReqParams;
19123
Jeff Johnson295189b2012-06-20 16:38:30 -070019124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053019125 "<------ %s, wdiStatus: %d",__func__, status);
Yue Ma7f44bbe2013-04-12 11:47:39 -070019126 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070019127 {
19128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019129 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019130 VOS_ASSERT(0) ;
19131 return ;
19132 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019133
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053019134 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
19135 if(pPNOScanReqParams->statusCallback)
19136 {
19137 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
19138 (status == WDI_STATUS_SUCCESS) ?
19139 VOS_STATUS_SUCCESS : VOS_STATUS_E_FAILURE);
19140 }
19141
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053019142 if (pPNOScanReqParams->enable == 1)
19143 {
19144 if (pPNOScanReqParams->aNetworks)
19145 vos_mem_free(pPNOScanReqParams->aNetworks);
19146 if (pPNOScanReqParams->p24GProbeTemplate)
19147 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
19148 if (pPNOScanReqParams->p5GProbeTemplate)
19149 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
19150 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070019151 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19152 vos_mem_free(pWdaParams->wdaMsgParam);
19153 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070019154
19155 return ;
19156}
Jeff Johnson295189b2012-06-20 16:38:30 -070019157/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070019158 * FUNCTION: WDA_PNOScanReqCallback
19159 * Free memory.
19160 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
19161 */
19162void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070019163{
Yue Ma7f44bbe2013-04-12 11:47:39 -070019164 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053019165 tSirPNOScanReq *pPNOScanReqParams;
Yue Ma7f44bbe2013-04-12 11:47:39 -070019166
19167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19168 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
19169
19170 if(NULL == pWdaParams)
19171 {
19172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19173 "%s: pWdaParams received NULL", __func__);
19174 VOS_ASSERT(0);
19175 return;
19176 }
19177
19178 if(IS_WDI_STATUS_FAILURE(wdiStatus))
19179 {
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053019180 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
19181 if(pPNOScanReqParams->statusCallback)
19182 {
19183 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
19184 VOS_STATUS_E_FAILURE);
19185 }
19186
Hanumantha Reddy Pothula06e87b22015-03-02 18:02:23 +053019187 if (pPNOScanReqParams->enable == 1)
19188 {
19189 if (pPNOScanReqParams->aNetworks)
19190 vos_mem_free(pPNOScanReqParams->aNetworks);
19191 if (pPNOScanReqParams->p24GProbeTemplate)
19192 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
19193 if (pPNOScanReqParams->p5GProbeTemplate)
19194 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
19195 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070019196 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19197 vos_mem_free(pWdaParams->wdaMsgParam);
19198 vos_mem_free(pWdaParams);
19199 }
19200
19201 return;
19202}
19203/*
19204 * FUNCTION: WDA_UpdateScanParamsRespCallback
19205 *
19206 */
19207void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
19208{
19209 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070019210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019211 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070019212 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070019213 {
19214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019215 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019216 VOS_ASSERT(0) ;
19217 return ;
19218 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070019219
19220 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19221 vos_mem_free(pWdaParams->wdaMsgParam);
19222 vos_mem_free(pWdaParams);
19223
Jeff Johnson295189b2012-06-20 16:38:30 -070019224 return ;
19225}
Jeff Johnson295189b2012-06-20 16:38:30 -070019226/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070019227 * FUNCTION: WDA_UpdateScanParamsReqCallback
19228 * Free memory.
19229 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
19230 */
19231void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
19232{
19233 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19234
19235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19236 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
19237
19238 if(NULL == pWdaParams)
19239 {
19240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19241 "%s: pWdaParams received NULL", __func__);
19242 VOS_ASSERT(0);
19243 return;
19244 }
19245
19246 if(IS_WDI_STATUS_FAILURE(wdiStatus))
19247 {
19248 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19249 vos_mem_free(pWdaParams->wdaMsgParam);
19250 vos_mem_free(pWdaParams);
19251 }
19252
19253 return;
19254}
19255/*
Jeff Johnson295189b2012-06-20 16:38:30 -070019256 * FUNCTION: WDA_ProcessSetPreferredNetworkList
19257 * Request to WDI to set Preferred Network List.Offload
19258 */
19259VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
19260 tSirPNOScanReq *pPNOScanReqParams)
19261{
Jeff Johnson43971f52012-07-17 12:26:56 -070019262 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070019263 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
19264 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
19265 tWDA_ReqParams *pWdaParams ;
19266 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070019267 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019268 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019269 if(NULL == pwdiPNOScanReqInfo)
19270 {
19271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019272 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019273 VOS_ASSERT(0);
19274 return VOS_STATUS_E_NOMEM;
19275 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019276 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19277 if(NULL == pWdaParams)
19278 {
19279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019280 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019281 VOS_ASSERT(0);
19282 vos_mem_free(pwdiPNOScanReqInfo);
19283 return VOS_STATUS_E_NOMEM;
19284 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019285 //
19286 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
19287 //
19288 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
19289 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070019290 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
19291 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
19292 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019293 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
19294 {
19295 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
19296 &pPNOScanReqParams->aNetworks[i],
19297 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
19298 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019299 /*Scan timer intervals*/
19300 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
19301 &pPNOScanReqParams->scanTimers,
19302 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070019303 /*Probe template for 2.4GHz band*/
19304 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
19305 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
19306 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070019307 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
19308 pPNOScanReqParams->p24GProbeTemplate,
19309 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070019310 /*Probe template for 5GHz band*/
19311 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
19312 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
19313 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070019314 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
19315 pPNOScanReqParams->p5GProbeTemplate,
19316 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070019317 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
19318 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070019319
Jeff Johnson295189b2012-06-20 16:38:30 -070019320 /* Store Params pass it to WDI */
19321 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
19322 pWdaParams->pWdaContext = pWDA;
19323 /* Store param pointer as passed in by caller */
19324 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070019325 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070019326 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070019327 if(IS_WDI_STATUS_FAILURE(status))
19328 {
19329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19330 "Failure in Set PNO REQ WDI API, free all the memory " );
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053019331 if(pPNOScanReqParams->statusCallback)
19332 {
19333 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
19334 VOS_STATUS_E_FAILURE);
19335 }
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053019336 if (pPNOScanReqParams->enable == 1)
19337 {
19338 if (pPNOScanReqParams->aNetworks)
19339 vos_mem_free(pPNOScanReqParams->aNetworks);
19340 if (pPNOScanReqParams->p24GProbeTemplate)
19341 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
19342 if (pPNOScanReqParams->p5GProbeTemplate)
19343 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
19344 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019345 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
19346 vos_mem_free(pWdaParams->wdaMsgParam);
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053019347
Jeff Johnson295189b2012-06-20 16:38:30 -070019348 pWdaParams->wdaWdiApiMsgParam = NULL;
19349 pWdaParams->wdaMsgParam = NULL;
19350 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019351 return CONVERT_WDI2VOS_STATUS(status) ;
19352}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019353
19354#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
19355
19356void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
19357{
19358 /*Convert the CSR Auth types to WDI Auth types */
19359 switch (csrAuthType)
19360 {
19361 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
19362 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
19363 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080019364#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019365 case eCSR_AUTH_TYPE_CCKM_WPA:
19366 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
19367 break;
19368#endif
19369 case eCSR_AUTH_TYPE_WPA:
19370 *AuthType = eWDA_AUTH_TYPE_WPA;
19371 break;
19372 case eCSR_AUTH_TYPE_WPA_PSK:
19373 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
19374 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080019375#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019376 case eCSR_AUTH_TYPE_CCKM_RSN:
19377 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
19378 break;
19379#endif
19380 case eCSR_AUTH_TYPE_RSN:
19381 *AuthType = eWDA_AUTH_TYPE_RSN;
19382 break;
19383 case eCSR_AUTH_TYPE_RSN_PSK:
19384 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
19385 break;
19386#if defined WLAN_FEATURE_VOWIFI_11R
19387 case eCSR_AUTH_TYPE_FT_RSN:
19388 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
19389 break;
19390 case eCSR_AUTH_TYPE_FT_RSN_PSK:
19391 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
19392 break;
19393#endif
19394#ifdef FEATURE_WLAN_WAPI
19395 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
19396 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
19397 break;
19398 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
19399 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
19400 break;
19401#endif /* FEATURE_WLAN_WAPI */
19402 case eCSR_AUTH_TYPE_SHARED_KEY:
19403 case eCSR_AUTH_TYPE_AUTOSWITCH:
19404 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
19405 break;
Kanchanapally, Vidyullatha3355dd32015-06-09 14:56:56 +053019406#ifdef WLAN_FEATURE_11W
19407 case eCSR_AUTH_TYPE_RSN_PSK_SHA256:
19408 *AuthType = eWDA_AUTH_TYPE_RSN_PSK_SHA256;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019409 break;
Kanchanapally, Vidyullatha3355dd32015-06-09 14:56:56 +053019410 case eCSR_AUTH_TYPE_RSN_8021X_SHA256:
19411 *AuthType = eWDA_AUTH_TYPE_RSN_8021X_SHA256;
19412 break;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019413#endif
19414 default:
Deepthi Gowribfd17132014-11-14 17:59:04 +053019415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019416 "%s: Unknown Auth Type", __func__);
19417 break;
19418 }
19419}
19420void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
19421{
19422 switch (csrEncrType)
19423 {
19424 case eCSR_ENCRYPT_TYPE_NONE:
19425 *EncrType = WDI_ED_NONE;
19426 break;
19427 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
19428 case eCSR_ENCRYPT_TYPE_WEP40:
19429 *EncrType = WDI_ED_WEP40;
19430 break;
19431 case eCSR_ENCRYPT_TYPE_WEP104:
19432 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
19433 *EncrType = WDI_ED_WEP104;
19434 break;
19435 case eCSR_ENCRYPT_TYPE_TKIP:
19436 *EncrType = WDI_ED_TKIP;
19437 break;
19438 case eCSR_ENCRYPT_TYPE_AES:
19439 *EncrType = WDI_ED_CCMP;
19440 break;
19441#ifdef WLAN_FEATURE_11W
19442 case eCSR_ENCRYPT_TYPE_AES_CMAC:
19443 *EncrType = WDI_ED_AES_128_CMAC;
19444 break;
19445#endif
19446#ifdef FEATURE_WLAN_WAPI
19447 case eCSR_ENCRYPT_TYPE_WPI:
19448 *EncrType = WDI_ED_WPI;
19449 break;
19450#endif
19451 case eCSR_ENCRYPT_TYPE_ANY:
19452 *EncrType = WDI_ED_ANY;
19453 break;
19454
19455 default:
19456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19457 "%s: Unknown Encryption Type", __func__);
19458 break;
19459 }
19460}
19461
Kapil Gupta04ab1992016-06-26 13:36:51 +053019462#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
19463VOS_STATUS WDA_ProcessPERRoamScanOffloadReq(tWDA_CbContext *pWDA,
19464 tSirPERRoamOffloadScanReq *pPERRoamOffloadScanReqParams)
19465{
19466 WDI_Status status;
19467 tWDA_ReqParams *pWdaParams ;
19468 WDI_PERRoamOffloadScanInfo *pwdiPERRoamOffloadScanInfo;
19469
19470 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19471 "------> %s " ,__func__);
19472
19473 pwdiPERRoamOffloadScanInfo = (WDI_PERRoamOffloadScanInfo *)
19474 vos_mem_malloc(sizeof(WDI_PERRoamOffloadScanInfo));
19475 if (NULL == pwdiPERRoamOffloadScanInfo) {
19476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19477 "%s: VOS MEM Alloc Failure", __func__);
19478 VOS_ASSERT(0);
19479 return VOS_STATUS_E_NOMEM;
19480 }
19481
19482 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19483 if (NULL == pWdaParams) {
19484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19485 "%s: VOS MEM Alloc Failure", __func__);
19486 VOS_ASSERT(0);
19487 vos_mem_free(pwdiPERRoamOffloadScanInfo);
19488 return VOS_STATUS_E_NOMEM;
19489 }
19490
19491 pwdiPERRoamOffloadScanInfo->rateUpThreshold =
19492 pPERRoamOffloadScanReqParams->rateUpThreshold;
19493 pwdiPERRoamOffloadScanInfo->rateDownThreshold =
19494 pPERRoamOffloadScanReqParams->rateDownThreshold;
19495 pwdiPERRoamOffloadScanInfo->waitPeriodForNextPERScan =
19496 pPERRoamOffloadScanReqParams->waitPeriodForNextPERScan;
19497 pwdiPERRoamOffloadScanInfo->PERtimerThreshold =
19498 pPERRoamOffloadScanReqParams->PERtimerThreshold;
19499 pwdiPERRoamOffloadScanInfo->isPERRoamCCAEnabled =
19500 pPERRoamOffloadScanReqParams->isPERRoamCCAEnabled;
Kapil Guptac69c28a2016-08-25 14:11:17 +053019501 pwdiPERRoamOffloadScanInfo->PERRoamFullScanThreshold =
19502 pPERRoamOffloadScanReqParams->PERRoamFullScanThreshold;
Kapil Gupta04ab1992016-06-26 13:36:51 +053019503 pwdiPERRoamOffloadScanInfo->PERroamTriggerPercent =
19504 pPERRoamOffloadScanReqParams->PERroamTriggerPercent;
19505
19506 /* Store Params pass it to WDI */
19507 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPERRoamOffloadScanInfo;
19508 pWdaParams->pWdaContext = pWDA;
19509
19510 /* Store param pointer as passed in by caller */
19511 pWdaParams->wdaMsgParam = pPERRoamOffloadScanReqParams;
19512 status = WDI_PERRoamScanOffloadReq(pwdiPERRoamOffloadScanInfo,
19513 (WDI_PERRoamOffloadScanCb)WDA_PERRoamOffloadScanReqCallback,
19514 pWdaParams);
19515
19516 if(IS_WDI_STATUS_FAILURE(status)) {
19517 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19518 "Failure in Send config PER roam params");
19519 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
19520 vos_mem_free(pWdaParams->wdaMsgParam);
19521 vos_mem_free(pWdaParams);
19522 }
19523 return CONVERT_WDI2VOS_STATUS(status) ;
19524}
19525#endif
19526
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019527/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070019528 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019529 * Request to WDI to set Roam Offload Scan
19530 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070019531VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019532 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
19533{
19534 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070019535 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
19536 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019537 tWDA_ReqParams *pWdaParams ;
19538 v_U8_t csrAuthType;
19539 WDI_RoamNetworkType *pwdiRoamNetworkType;
19540 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
19541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19542 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070019543 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019544 {
19545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19546 "%s: VOS MEM Alloc Failure", __func__);
19547 VOS_ASSERT(0);
19548 return VOS_STATUS_E_NOMEM;
19549 }
19550 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19551 if (NULL == pWdaParams)
19552 {
19553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19554 "%s: VOS MEM Alloc Failure", __func__);
19555 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070019556 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019557 return VOS_STATUS_E_NOMEM;
19558 }
19559
19560 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070019561 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019562 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070019563 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
19564 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019565 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
19566 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
19567 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
19568 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
19569 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
19570 sizeof(pwdiRoamNetworkType->currAPbssid));
19571 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
19572 csrAuthType);
19573 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
19574 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
19575 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
19576 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
19577 pwdiRoamOffloadScanInfo->LookupThreshold =
19578 pRoamOffloadScanReqParams->LookupThreshold ;
Varun Reddy Yeturu6c5e25c2014-01-09 21:55:37 -080019579 pwdiRoamOffloadScanInfo->RxSensitivityThreshold =
19580 pRoamOffloadScanReqParams->RxSensitivityThreshold;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019581 pwdiRoamOffloadScanInfo->RoamRssiDiff =
19582 pRoamOffloadScanReqParams->RoamRssiDiff ;
Sameer Thalappil4ae66ec2013-11-05 14:17:35 -080019583 pwdiRoamOffloadScanInfo->MAWCEnabled =
19584 pRoamOffloadScanReqParams->MAWCEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019585 pwdiRoamOffloadScanInfo->Command =
19586 pRoamOffloadScanReqParams->Command ;
19587 pwdiRoamOffloadScanInfo->StartScanReason =
19588 pRoamOffloadScanReqParams->StartScanReason ;
19589 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
19590 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
19591 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
19592 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
19593 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
19594 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
19595 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
19596 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
19597 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
19598 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080019599 pwdiRoamOffloadScanInfo->IsESEEnabled =
19600 pRoamOffloadScanReqParams->IsESEEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019601 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
19602 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
19603 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
19604 pwdiRoamNetworkType->ssId.ucLength =
19605 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
19606 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
19607 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
19608 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
19609 pwdiRoamNetworkType->ChannelCount =
19610 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
19611 pwdiRoamOffloadScanInfo->ChannelCacheType =
19612 pRoamOffloadScanReqParams->ChannelCacheType;
19613 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
19614 pRoamOffloadScanReqParams->ValidChannelList,
19615 pRoamOffloadScanReqParams->ValidChannelCount);
19616 pwdiRoamOffloadScanInfo->ValidChannelCount =
19617 pRoamOffloadScanReqParams->ValidChannelCount;
19618 pwdiRoamOffloadScanInfo->us24GProbeSize =
19619 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
19620 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
19621 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
19622 pRoamOffloadScanReqParams->p24GProbeTemplate,
19623 pwdiRoamOffloadScanInfo->us24GProbeSize);
19624 pwdiRoamOffloadScanInfo->us5GProbeSize =
19625 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
19626 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
19627 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
19628 pRoamOffloadScanReqParams->p5GProbeTemplate,
19629 pwdiRoamOffloadScanInfo->us5GProbeSize);
19630 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
19631 pRoamOffloadScanReqParams->MDID.mdiePresent;
19632 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
19633 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070019634 pwdiRoamOffloadScanInfo->nProbes =
19635 pRoamOffloadScanReqParams->nProbes;
19636 pwdiRoamOffloadScanInfo->HomeAwayTime =
19637 pRoamOffloadScanReqParams->HomeAwayTime;
19638 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019639 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070019640 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019641 pWdaParams->pWdaContext = pWDA;
19642 /* Store param pointer as passed in by caller */
19643 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070019644 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019645 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
19646 if(IS_WDI_STATUS_FAILURE(status))
19647 {
19648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19649 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
19650 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
19651 vos_mem_free(pWdaParams->wdaMsgParam);
19652 pWdaParams->wdaWdiApiMsgParam = NULL;
19653 pWdaParams->wdaMsgParam = NULL;
19654 }
19655 return CONVERT_WDI2VOS_STATUS(status) ;
19656}
19657#endif
19658
Jeff Johnson295189b2012-06-20 16:38:30 -070019659/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070019660 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070019661 *
19662 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070019663void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070019664{
19665 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19666
19667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019668 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019669
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053019670 if(NULL == pWdaParams)
19671 {
19672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070019673 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053019674 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070019675 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053019676 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070019677
Jeff Johnson295189b2012-06-20 16:38:30 -070019678 vos_mem_free(pWdaParams->wdaMsgParam) ;
19679 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19680 vos_mem_free(pWdaParams) ;
19681
19682 return ;
19683}
19684/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070019685 * FUNCTION: WDA_RssiFilterReqCallback
19686 * Free memory.
19687 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
19688 */
19689void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
19690{
19691 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19692
19693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19694 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
19695
19696 if(NULL == pWdaParams)
19697 {
19698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19699 "%s: pWdaParams received NULL", __func__);
19700 VOS_ASSERT(0);
19701 return;
19702 }
19703
19704 if(IS_WDI_STATUS_FAILURE(wdiStatus))
19705 {
19706 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19707 vos_mem_free(pWdaParams->wdaMsgParam);
19708 vos_mem_free(pWdaParams);
19709 }
19710
19711 return;
19712}
19713/*
Hanumantha Reddy Pothula1e687da2015-03-31 13:44:31 +053019714 * FUNCTION: WDA_ProcessSetRssiFilterReq
Jeff Johnson295189b2012-06-20 16:38:30 -070019715 * Request to WDI to set Preferred Network List.Offload
19716 */
19717VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
19718 tSirSetRSSIFilterReq* pRssiFilterParams)
19719{
Jeff Johnson43971f52012-07-17 12:26:56 -070019720 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070019721 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
19722 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
19723 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019725 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019726 if(NULL == pwdiSetRssiFilterReqInfo)
19727 {
19728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019729 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019730 VOS_ASSERT(0);
19731 return VOS_STATUS_E_NOMEM;
19732 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019733 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19734 if(NULL == pWdaParams)
19735 {
19736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019737 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019738 VOS_ASSERT(0);
19739 vos_mem_free(pwdiSetRssiFilterReqInfo);
19740 return VOS_STATUS_E_NOMEM;
19741 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019742 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070019743 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
19744 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070019745
Jeff Johnson295189b2012-06-20 16:38:30 -070019746 /* Store Params pass it to WDI */
19747 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
19748 pWdaParams->pWdaContext = pWDA;
19749 /* Store param pointer as passed in by caller */
19750 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070019751 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070019752 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070019753 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070019754 if(IS_WDI_STATUS_FAILURE(status))
19755 {
19756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19757 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
19758 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
19759 vos_mem_free(pWdaParams->wdaMsgParam);
19760 pWdaParams->wdaWdiApiMsgParam = NULL;
19761 pWdaParams->wdaMsgParam = NULL;
19762 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019763 return CONVERT_WDI2VOS_STATUS(status) ;
19764}
19765
Jeff Johnson295189b2012-06-20 16:38:30 -070019766/*
19767 * FUNCTION: WDA_ProcessUpdateScanParams
19768 * Request to WDI to update Scan Parameters
19769 */
19770VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
19771 tSirUpdateScanParams *pUpdateScanParams)
19772{
Jeff Johnson43971f52012-07-17 12:26:56 -070019773 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070019774 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
19775 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
19776 sizeof(WDI_UpdateScanParamsInfoType)) ;
19777 tWDA_ReqParams *pWdaParams ;
19778 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070019779 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019780 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019781 if(NULL == wdiUpdateScanParamsInfoType)
19782 {
19783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019784 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019785 VOS_ASSERT(0);
19786 return VOS_STATUS_E_NOMEM;
19787 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019788 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19789 if ( NULL == pWdaParams )
19790 {
19791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019792 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019793 VOS_ASSERT(0);
19794 vos_mem_free(wdiUpdateScanParamsInfoType);
19795 return VOS_STATUS_E_NOMEM;
19796 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019797 //
19798 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
19799 //
Jeff Johnson295189b2012-06-20 16:38:30 -070019800 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19801 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
19802 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
19803 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
Jeff Johnson9a9ed0d2013-11-26 13:36:52 -080019804 "sir struct %zu wdi struct %zu",
Jeff Johnson295189b2012-06-20 16:38:30 -070019805 pUpdateScanParams->b11dEnabled,
19806 pUpdateScanParams->b11dResolved,
19807 pUpdateScanParams->ucChannelCount,
19808 pUpdateScanParams->usPassiveMinChTime,
19809 pUpdateScanParams->usPassiveMaxChTime,
19810 pUpdateScanParams->usActiveMinChTime,
19811 pUpdateScanParams->usActiveMaxChTime,
19812 sizeof(tSirUpdateScanParams),
19813 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
19814
Jeff Johnson295189b2012-06-20 16:38:30 -070019815 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
19816 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070019817 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
19818 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070019819 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
19820 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070019821 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
19822 pUpdateScanParams->usActiveMaxChTime;
19823 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
19824 pUpdateScanParams->usActiveMinChTime;
19825 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
19826 pUpdateScanParams->usPassiveMaxChTime;
19827 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
19828 pUpdateScanParams->usPassiveMinChTime;
19829
Jeff Johnson295189b2012-06-20 16:38:30 -070019830 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053019831 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
19832 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070019833
Jeff Johnson295189b2012-06-20 16:38:30 -070019834 for ( i = 0; i <
19835 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
19836 i++)
19837 {
19838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19839 "Update Scan Parameters channel: %d",
19840 pUpdateScanParams->aChannels[i]);
19841
19842 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
19843 pUpdateScanParams->aChannels[i];
19844 }
19845
Yue Ma7f44bbe2013-04-12 11:47:39 -070019846 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
19847 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070019848
Jeff Johnson295189b2012-06-20 16:38:30 -070019849 /* Store Params pass it to WDI */
19850 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
19851 pWdaParams->pWdaContext = pWDA;
19852 /* Store param pointer as passed in by caller */
19853 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070019854
Jeff Johnson295189b2012-06-20 16:38:30 -070019855
19856
19857 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070019858 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070019859 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070019860 if(IS_WDI_STATUS_FAILURE(status))
19861 {
19862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19863 "Failure in Update Scan Params EQ WDI API, free all the memory " );
19864 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
19865 vos_mem_free(pWdaParams->wdaMsgParam);
19866 vos_mem_free(pWdaParams);
19867 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019868 return CONVERT_WDI2VOS_STATUS(status) ;
19869}
19870#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019871
19872#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
19873/*
19874 * FUNCTION: WDA_RoamOffloadScanReqCallback
19875 *
19876 */
19877void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
19878{
19879 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070019880 vos_msg_t vosMsg;
19881 wpt_uint8 reason = 0;
19882
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070019883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019884 "<------ %s " ,__func__);
19885 if (NULL == pWdaParams)
19886 {
19887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19888 "%s: pWdaParams received NULL", __func__);
19889 VOS_ASSERT(0) ;
19890 return ;
19891 }
19892 if ( pWdaParams != NULL )
19893 {
19894 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
19895 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070019896 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019897 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19898 }
19899 if ( pWdaParams->wdaMsgParam != NULL)
19900 {
19901 vos_mem_free(pWdaParams->wdaMsgParam);
19902 }
19903
19904 vos_mem_free(pWdaParams) ;
19905 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070019906 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
19907 vosMsg.bodyptr = NULL;
19908 if (WDI_STATUS_SUCCESS != status)
19909 {
19910 reason = 0;
19911 }
19912 vosMsg.bodyval = reason;
19913 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
19914 {
19915 /* free the mem and return */
19916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsone384c822013-10-30 12:21:17 -070019917 "%s: Failed to post the rsp to UMAC", __func__);
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070019918 }
19919
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019920 return ;
19921}
Kapil Gupta04ab1992016-06-26 13:36:51 +053019922
19923void WDA_PERRoamTriggerScanReqCallback(WDI_Status status, void* pUserData)
19924{
19925 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19926 vos_msg_t vosMsg;
19927 wpt_uint8 reason = 0;
19928
19929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19930 "<------ %s " ,__func__);
19931 if (NULL == pWdaParams) {
19932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19933 "%s: pWdaParams received NULL", __func__);
19934 VOS_ASSERT(0) ;
19935 return ;
19936 }
19937 if ( pWdaParams->wdaMsgParam != NULL)
19938 vos_mem_free(pWdaParams->wdaMsgParam);
19939
19940 vos_mem_free(pWdaParams) ;
19941 vosMsg.type = eWNI_SME_ROAM_SCAN_TRIGGER_RSP;
19942 vosMsg.bodyptr = NULL;
19943 if (WDI_STATUS_SUCCESS != status)
19944 reason = 0;
19945
19946 vosMsg.bodyval = reason;
19947 if (VOS_STATUS_SUCCESS !=
19948 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg)) {
19949 /* free the mem and return */
19950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19951 "%s: Failed to post the rsp to UMAC", __func__);
19952 }
19953
19954 return ;
19955}
19956
19957
19958void WDA_PERRoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
19959{
19960 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19961 vos_msg_t vosMsg;
19962 wpt_uint8 reason = 0;
19963
19964 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19965 "<------ %s " ,__func__);
19966 if (NULL == pWdaParams) {
19967 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19968 "%s: pWdaParams received NULL", __func__);
19969 VOS_ASSERT(0) ;
19970 return ;
19971 }
19972 if ( pWdaParams->wdaMsgParam != NULL)
19973 vos_mem_free(pWdaParams->wdaMsgParam);
19974
19975 vos_mem_free(pWdaParams) ;
19976 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
19977 vosMsg.bodyptr = NULL;
19978 if (WDI_STATUS_SUCCESS != status)
19979 reason = 0;
19980
19981 vosMsg.bodyval = reason;
19982 if (VOS_STATUS_SUCCESS !=
19983 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg)) {
19984 /* free the mem and return */
19985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19986 "%s: Failed to post the rsp to UMAC", __func__);
19987 }
19988
19989 return ;
19990}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019991#endif
19992
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080019993/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070019994 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080019995 *
19996 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070019997void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080019998{
19999 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20000
20001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20002 "<------ %s " ,__func__);
20003
20004 if(NULL == pWdaParams)
20005 {
20006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20007 "%s: pWdaParams received NULL", __func__);
20008 VOS_ASSERT(0);
20009 return;
20010 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070020011
20012 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20013 vos_mem_free(pWdaParams->wdaMsgParam);
20014 vos_mem_free(pWdaParams);
20015
20016 return;
20017}
20018/*
20019 * FUNCTION: WDA_SetPowerParamsReqCallback
20020 * Free memory.
20021 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
20022 */
20023void WDA_SetPowerParamsReqCallback(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)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080020031 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070020032 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);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080020042 vos_mem_free(pWdaParams);
20043 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070020044
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080020045 return;
20046}
20047
Jeff Johnson295189b2012-06-20 16:38:30 -070020048#ifdef WLAN_FEATURE_PACKET_FILTERING
20049/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070020050 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070020051 *
20052 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070020053void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070020054 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
20055 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070020056{
20057 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
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 == pWdaParams)
20061 {
20062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020063 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020064 VOS_ASSERT(0) ;
20065 return ;
20066 }
20067
20068 vos_mem_free(pWdaParams->wdaMsgParam) ;
20069 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20070 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020071 //print a msg, nothing else to do
20072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070020073 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070020074 return ;
20075}
Jeff Johnson295189b2012-06-20 16:38:30 -070020076/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070020077 * FUNCTION: WDA_8023MulticastListReqCallback
20078 * Free memory.
20079 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
20080 */
20081void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
20082{
20083 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20084
20085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20086 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
20087
20088 if(NULL == pWdaParams)
20089 {
20090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20091 "%s: pWdaParams received NULL", __func__);
20092 VOS_ASSERT(0);
20093 return;
20094 }
20095
20096 if(IS_WDI_STATUS_FAILURE(wdiStatus))
20097 {
20098 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20099 vos_mem_free(pWdaParams->wdaMsgParam);
20100 vos_mem_free(pWdaParams);
20101 }
20102
20103 return;
20104}
20105/*
Jeff Johnson295189b2012-06-20 16:38:30 -070020106 * FUNCTION: WDA_Process8023MulticastListReq
20107 * Request to WDI to add 8023 Multicast List
20108 */
20109VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
20110 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
20111{
Jeff Johnson43971f52012-07-17 12:26:56 -070020112 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070020113 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
20114 tWDA_ReqParams *pWdaParams ;
20115 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070020116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020117 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020118 pwdiFltPktSetMcListReqParamsType =
20119 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
20120 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
20121 ) ;
20122 if(NULL == pwdiFltPktSetMcListReqParamsType)
20123 {
20124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020125 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020126 return VOS_STATUS_E_NOMEM;
20127 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020128 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
20129 if(NULL == pWdaParams)
20130 {
20131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020132 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020133 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
20134 return VOS_STATUS_E_NOMEM;
20135 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070020136
Jeff Johnson295189b2012-06-20 16:38:30 -070020137 //
20138 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
20139 //
20140 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070020141 pRcvFltMcAddrList->ulMulticastAddrCnt;
20142
20143 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
20144 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
20145 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
20146 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
20147
Jeff Johnson295189b2012-06-20 16:38:30 -070020148 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
20149 {
20150 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
20151 &(pRcvFltMcAddrList->multicastAddr[i]),
20152 sizeof(tSirMacAddr));
20153 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070020154 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
20155 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070020156
Jeff Johnson295189b2012-06-20 16:38:30 -070020157 /* Store Params pass it to WDI */
20158 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
20159 pWdaParams->pWdaContext = pWDA;
20160 /* Store param pointer as passed in by caller */
20161 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070020162 status = WDI_8023MulticastListReq(
20163 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070020164 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070020165 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070020166 if(IS_WDI_STATUS_FAILURE(status))
20167 {
20168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20169 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
20170 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
20171 vos_mem_free(pWdaParams->wdaMsgParam);
20172 vos_mem_free(pWdaParams);
20173 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020174 return CONVERT_WDI2VOS_STATUS(status) ;
20175}
Jeff Johnson295189b2012-06-20 16:38:30 -070020176/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020177 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070020178 *
20179 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020180void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070020181 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
20182 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070020183{
20184 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070020185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020186 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020187 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070020188 if(NULL == pWdaParams)
20189 {
20190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020191 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020192 VOS_ASSERT(0) ;
20193 return ;
20194 }
20195
20196 vos_mem_free(pWdaParams->wdaMsgParam) ;
20197 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20198 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020199 //print a msg, nothing else to do
20200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020201 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070020202 return ;
20203}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020204
20205/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070020206 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
20207 * Free memory.
20208 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020209 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070020210void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020211 void* pUserData)
20212{
20213 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20214
20215 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20216 "<------ %s, wdiStatus: %d",
20217 __func__, wdiStatus);
20218
20219 if (NULL == pWdaParams)
20220 {
20221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20222 "%s: Invalid pWdaParams pointer", __func__);
20223 VOS_ASSERT(0);
20224 return;
20225 }
20226
20227 if (IS_WDI_STATUS_FAILURE(wdiStatus))
20228 {
20229 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20230 vos_mem_free(pWdaParams->wdaMsgParam);
20231 vos_mem_free(pWdaParams);
20232 }
20233
20234 return;
20235}
20236
Jeff Johnson295189b2012-06-20 16:38:30 -070020237/*
20238 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
20239 * Request to WDI to set Receive Filters
20240 */
20241VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
20242 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
20243{
Jeff Johnson43971f52012-07-17 12:26:56 -070020244 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070020245 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
20246 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
20247 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
20248 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
20249 tWDA_ReqParams *pWdaParams ;
20250 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070020251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020252 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020253 if(NULL == pwdiSetRcvPktFilterReqParamsType)
20254 {
20255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020256 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020257 VOS_ASSERT(0);
20258 return VOS_STATUS_E_NOMEM;
20259 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020260 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
20261 if(NULL == pWdaParams)
20262 {
20263 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020264 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020265 VOS_ASSERT(0);
20266 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
20267 return VOS_STATUS_E_NOMEM;
20268 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020269 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
20270 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
20271 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
20272 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070020273 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
20274 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
20275
20276 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
20277 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070020278
20279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20280 "FID %d FT %d NParams %d CT %d",
20281 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
20282 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
20283 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
20284 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070020285 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
20286 {
20287 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
20288 &pRcvPktFilterCfg->paramsData[i],
20289 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070020290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080020291 "Proto %d Comp Flag %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070020292 pwdiSetRcvPktFilterReqParamsType->
20293 wdiPktFilterCfg.paramsData[i].protocolLayer,
20294 pwdiSetRcvPktFilterReqParamsType->
20295 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070020296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080020297 "Data Offset %d Data Len %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070020298 pwdiSetRcvPktFilterReqParamsType->
20299 wdiPktFilterCfg.paramsData[i].dataOffset,
20300 pwdiSetRcvPktFilterReqParamsType->
20301 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070020302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080020303 "CData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070020304 pwdiSetRcvPktFilterReqParamsType->
20305 wdiPktFilterCfg.paramsData[i].compareData[0],
20306 pwdiSetRcvPktFilterReqParamsType->
20307 wdiPktFilterCfg.paramsData[i].compareData[1],
20308 pwdiSetRcvPktFilterReqParamsType->
20309 wdiPktFilterCfg.paramsData[i].compareData[2],
20310 pwdiSetRcvPktFilterReqParamsType->
20311 wdiPktFilterCfg.paramsData[i].compareData[3],
20312 pwdiSetRcvPktFilterReqParamsType->
20313 wdiPktFilterCfg.paramsData[i].compareData[4],
20314 pwdiSetRcvPktFilterReqParamsType->
20315 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070020316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080020317 "MData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070020318 pwdiSetRcvPktFilterReqParamsType->
20319 wdiPktFilterCfg.paramsData[i].dataMask[0],
20320 pwdiSetRcvPktFilterReqParamsType->
20321 wdiPktFilterCfg.paramsData[i].dataMask[1],
20322 pwdiSetRcvPktFilterReqParamsType->
20323 wdiPktFilterCfg.paramsData[i].dataMask[2],
20324 pwdiSetRcvPktFilterReqParamsType->
20325 wdiPktFilterCfg.paramsData[i].dataMask[3],
20326 pwdiSetRcvPktFilterReqParamsType->
20327 wdiPktFilterCfg.paramsData[i].dataMask[4],
20328 pwdiSetRcvPktFilterReqParamsType->
20329 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070020330 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070020331 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020332 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070020333 /* Store Params pass it to WDI */
20334 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
20335 pWdaParams->pWdaContext = pWDA;
20336 /* Store param pointer as passed in by caller */
20337 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070020338 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020339 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070020340 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070020341 if(IS_WDI_STATUS_FAILURE(status))
20342 {
20343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20344 "Failure in SetFilter(),free all the memory,status %d ",status);
20345 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
20346 vos_mem_free(pWdaParams->wdaMsgParam);
20347 vos_mem_free(pWdaParams);
20348 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020349 return CONVERT_WDI2VOS_STATUS(status) ;
20350}
Jeff Johnson295189b2012-06-20 16:38:30 -070020351/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070020352 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070020353 *
20354 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070020355void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070020356 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
20357 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070020358{
20359 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20360 tWDA_CbContext *pWDA;
20361 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
20362 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
20363 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
20364 tANI_U8 i;
20365 vos_msg_t vosMsg;
20366
20367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020368 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020369 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
20370
Jeff Johnsone7245742012-09-05 17:12:55 -070020371 if(NULL == pRcvFltPktMatchCntRsp)
20372 {
20373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020374 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070020375 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070020376 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070020377 return ;
20378 }
20379
Jeff Johnson295189b2012-06-20 16:38:30 -070020380 if(NULL == pWdaParams)
20381 {
20382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020383 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020384 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070020385 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070020386 return ;
20387 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020388 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
20389 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070020390 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
20391 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
20392
20393 /* Message Header */
20394 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
20395 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
20396
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070020397 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070020398
20399 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
20400 {
20401 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
20402 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
20403 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020404 /* VOS message wrapper */
20405 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
20406 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
20407 vosMsg.bodyval = 0;
20408 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
20409 {
20410 /* free the mem and return */
20411 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
20412 }
20413
20414 vos_mem_free(pWdaParams->wdaMsgParam) ;
20415 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20416 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070020417
20418 return;
20419}
20420/*
20421 * FUNCTION: WDA_FilterMatchCountReqCallback
20422 * Free memory and send RSP back to SME.
20423 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
20424 */
20425void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
20426{
20427 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20428 vos_msg_t vosMsg;
20429
20430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20431 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
20432
20433 if(NULL == pWdaParams)
20434 {
20435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20436 "%s: pWdaParams received NULL", __func__);
20437 VOS_ASSERT(0);
20438 return;
20439 }
20440
20441 /* VOS message wrapper */
20442 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
20443 vosMsg.bodyptr = NULL;
20444 vosMsg.bodyval = 0;
20445
20446 if(IS_WDI_STATUS_FAILURE(wdiStatus))
20447 {
20448 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20449 vos_mem_free(pWdaParams->wdaMsgParam);
20450 vos_mem_free(pWdaParams);
20451 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
20452 }
20453
20454 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070020455}
Jeff Johnson295189b2012-06-20 16:38:30 -070020456/*
20457 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
20458 * Request to WDI to get PC Filter Match Count
20459 */
20460VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
20461{
Jeff Johnson43971f52012-07-17 12:26:56 -070020462 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070020463 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
20464 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
20465 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020467 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020468 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
20469 {
20470 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020471 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020472 VOS_ASSERT(0);
20473 return VOS_STATUS_E_NOMEM;
20474 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020475 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
20476 if(NULL == pWdaParams)
20477 {
20478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020479 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020480 VOS_ASSERT(0);
20481 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
20482 return VOS_STATUS_E_NOMEM;
20483 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070020484
Yue Ma7f44bbe2013-04-12 11:47:39 -070020485 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
20486 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070020487
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070020488 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
20489 pRcvFltPktMatchRsp->bssId,
20490 sizeof(wpt_macAddr));
20491
Jeff Johnson295189b2012-06-20 16:38:30 -070020492 /* Store Params pass it to WDI */
20493 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
20494 pWdaParams->pWdaContext = pWDA;
20495 /* Store param pointer as passed in by caller */
20496 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070020497 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070020498 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
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 /* failure returned by WDI API */
20503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20504 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
20505 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20506 vos_mem_free(pWdaParams) ;
20507 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
20508 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
20509 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020510 return CONVERT_WDI2VOS_STATUS(status) ;
20511}
Jeff Johnson295189b2012-06-20 16:38:30 -070020512/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020513 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070020514 *
20515 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020516void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070020517 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
20518 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070020519{
20520 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Hanumanth Reddy Pothula73010b92016-11-01 16:16:58 +053020521 tSirRcvFltPktClearParam *pktClearParam;
20522
Jeff Johnson295189b2012-06-20 16:38:30 -070020523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020524 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020525/* WDA_VOS_ASSERT(NULL != pWdaParams); */
20526 if(NULL == pWdaParams)
20527 {
20528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020529 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020530 VOS_ASSERT(0) ;
20531 return ;
20532 }
Hanumanth Reddy Pothula73010b92016-11-01 16:16:58 +053020533
20534 pktClearParam = (tSirRcvFltPktClearParam *)pWdaParams->wdaMsgParam;
20535 if(pktClearParam->pktFilterCallback)
20536 {
20537 pktClearParam->pktFilterCallback(
20538 pktClearParam->cbCtx,
20539 CONVERT_WDI2SIR_STATUS(pwdiRcvFltPktClearRspParamsType->wdiStatus));
20540 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020541 vos_mem_free(pWdaParams->wdaMsgParam) ;
20542 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20543 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020544 //print a msg, nothing else to do
20545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020546 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070020547 return ;
20548}
Jeff Johnson295189b2012-06-20 16:38:30 -070020549/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070020550 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
20551 * Free memory.
20552 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
20553 */
20554void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
20555{
20556 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Hanumanth Reddy Pothula73010b92016-11-01 16:16:58 +053020557 tSirRcvFltPktClearParam *pktClearParam;
Yue Ma7f44bbe2013-04-12 11:47:39 -070020558
20559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20560 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
20561
20562 if(NULL == pWdaParams)
20563 {
20564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20565 "%s: Invalid pWdaParams pointer", __func__);
20566 VOS_ASSERT(0);
20567 return;
20568 }
20569
20570 if(IS_WDI_STATUS_FAILURE(wdiStatus))
20571 {
Hanumanth Reddy Pothula73010b92016-11-01 16:16:58 +053020572 pktClearParam = (tSirRcvFltPktClearParam *)pWdaParams->wdaMsgParam;
20573 if(pktClearParam->pktFilterCallback)
20574 {
20575 pktClearParam->pktFilterCallback(
20576 pktClearParam->cbCtx,
20577 CONVERT_WDI2SIR_STATUS(wdiStatus));
20578 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070020579 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20580 vos_mem_free(pWdaParams->wdaMsgParam);
20581 vos_mem_free(pWdaParams);
20582 }
20583
20584 return;
20585}
20586/*
Jeff Johnson295189b2012-06-20 16:38:30 -070020587 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
20588 * Request to WDI to clear Receive Filters
20589 */
20590VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
20591 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
20592{
Jeff Johnson43971f52012-07-17 12:26:56 -070020593 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070020594 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
20595 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
20596 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020598 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020599 if(NULL == pwdiRcvFltPktClearReqParamsType)
20600 {
20601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020602 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020603 VOS_ASSERT(0);
20604 return VOS_STATUS_E_NOMEM;
20605 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020606 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
20607 if(NULL == pWdaParams)
20608 {
20609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020610 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020611 VOS_ASSERT(0);
20612 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
20613 return VOS_STATUS_E_NOMEM;
20614 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020615 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
20616 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070020617 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
20618 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
20619 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
20620 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070020621
Yue Ma7f44bbe2013-04-12 11:47:39 -070020622 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020623 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070020624 /* Store Params pass it to WDI */
20625 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
20626 pWdaParams->pWdaContext = pWDA;
20627 /* Store param pointer as passed in by caller */
20628 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070020629 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020630 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070020631 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070020632 if(IS_WDI_STATUS_FAILURE(status))
20633 {
20634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20635 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
Hanumanth Reddy Pothula73010b92016-11-01 16:16:58 +053020636 if(pRcvFltPktClearParam->pktFilterCallback)
20637 {
20638 pRcvFltPktClearParam->pktFilterCallback(
20639 pRcvFltPktClearParam->cbCtx,
20640 CONVERT_WDI2SIR_STATUS(status));
20641 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020642 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080020643 vos_mem_free(pWdaParams->wdaMsgParam);
20644 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070020645 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020646 return CONVERT_WDI2VOS_STATUS(status) ;
20647}
20648#endif // WLAN_FEATURE_PACKET_FILTERING
20649
Jeff Johnson295189b2012-06-20 16:38:30 -070020650/*
20651 * FUNCTION: WDA_ProcessSetPowerParamsReq
20652 * Request to WDI to set power params
20653 */
20654VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
20655 tSirSetPowerParamsReq *pPowerParams)
20656{
Jeff Johnson43971f52012-07-17 12:26:56 -070020657 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070020658 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
20659 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020660 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020662 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020663 if(NULL == pwdiSetPowerParamsReqInfo)
20664 {
20665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020666 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020667 VOS_ASSERT(0);
20668 return VOS_STATUS_E_NOMEM;
20669 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020670 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
20671 if(NULL == pWdaParams)
20672 {
20673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020674 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020675 VOS_ASSERT(0);
20676 vos_mem_free(pwdiSetPowerParamsReqInfo);
20677 return VOS_STATUS_E_NOMEM;
20678 }
Jeff Johnsone7245742012-09-05 17:12:55 -070020679
Jeff Johnson295189b2012-06-20 16:38:30 -070020680
20681 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
20682 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070020683 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
20684 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070020685 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
20686 pPowerParams->uListenInterval;
20687 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
20688 pPowerParams->uBcastMcastFilter;
20689 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
20690 pPowerParams->uEnableBET;
20691 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
20692 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070020693 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
20694 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070020695 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
20696 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070020697
Jeff Johnson295189b2012-06-20 16:38:30 -070020698 /* Store Params pass it to WDI */
20699 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
20700 pWdaParams->pWdaContext = pWDA;
20701 /* Store param pointer as passed in by caller */
20702 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070020703 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070020704 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070020705 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070020706 if(IS_WDI_STATUS_FAILURE(status))
20707 {
20708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20709 "Failure in Set power params REQ WDI API, free all the memory " );
20710 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
20711 vos_mem_free(pWdaParams->wdaMsgParam);
20712 pWdaParams->wdaWdiApiMsgParam = NULL;
20713 pWdaParams->wdaMsgParam = NULL;
20714 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020715 return CONVERT_WDI2VOS_STATUS(status) ;
20716}
20717
20718/*
20719 * FUNCTION: WDA_SetTmLevelRspCallback
20720 * Set TM Level response
20721 */
20722void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
20723{
20724 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20725
20726 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020727 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020728
20729 if(NULL == pWdaParams)
20730 {
20731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020732 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020733 VOS_ASSERT(0) ;
20734 return ;
20735 }
20736
20737 /* Dose not need to send notification to upper layer
20738 * Just free allocated resources */
20739 if( pWdaParams != NULL )
20740 {
20741 if( pWdaParams->wdaWdiApiMsgParam != NULL )
20742 {
20743 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20744 }
20745 vos_mem_free(pWdaParams->wdaMsgParam) ;
20746 vos_mem_free(pWdaParams) ;
20747 }
20748}
20749
20750/*
20751 * FUNCTION: WDA_ProcessSetTmLevelReq
20752 * Set TM Level request
20753 */
20754VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
20755 tAniSetTmLevelReq *setTmLevelReq)
20756{
20757 WDI_Status status = WDI_STATUS_SUCCESS ;
20758 tWDA_ReqParams *pWdaParams ;
20759 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
20760 (WDI_SetTmLevelReqType *)vos_mem_malloc(
20761 sizeof(WDI_SetTmLevelReqType)) ;
20762 if(NULL == wdiSetTmLevelReq)
20763 {
20764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020765 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020766 VOS_ASSERT(0);
20767 return VOS_STATUS_E_NOMEM;
20768 }
20769
20770 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
20771 if(NULL == pWdaParams)
20772 {
20773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020774 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020775 VOS_ASSERT(0);
20776 vos_mem_free(wdiSetTmLevelReq);
20777 return VOS_STATUS_E_NOMEM;
20778 }
20779
20780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020781 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020782
20783 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
20784 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
20785
20786 pWdaParams->pWdaContext = pWDA;
20787 pWdaParams->wdaMsgParam = setTmLevelReq;
20788 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
20789
20790 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
20791 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
20792
20793 if(IS_WDI_STATUS_FAILURE(status))
20794 {
20795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080020796 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070020797 vos_mem_free(pWdaParams->wdaMsgParam) ;
20798 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20799 vos_mem_free(pWdaParams) ;
20800 }
20801
20802 return CONVERT_WDI2VOS_STATUS(status) ;
20803}
20804
20805VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
20806 tpTxControlParams pTxCtrlParam)
20807{
20808 VOS_STATUS wdaStatus;
20809
20810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020811 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020812 if( pTxCtrlParam == NULL )
20813 {
20814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020815 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020816 return VOS_STATUS_E_FAILURE;
20817 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020818 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
20819 {
20820 wdaStatus = WDA_SuspendDataTx(pWDA);
20821 }
20822 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
20823 {
20824 wdaStatus = WDA_ResumeDataTx(pWDA);
20825 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020826 return wdaStatus;
20827}
20828
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053020829void WDA_FWLoggingDXEdoneInd(v_U32_t logType)
Mihir Shete5affadc2015-05-29 20:54:57 +053020830{
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053020831 WDI_Status status;
20832 status = WDI_FWLoggingDXEdoneInd(logType);
20833
Hanumantha Reddy Pothula5e509402015-09-23 09:45:57 +053020834 if (!(WDI_STATUS_SUCCESS_SYNC == status || WDI_STATUS_PENDING == status))
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053020835 {
20836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20837 FL("Failure status %d"), status);
20838 }
Mihir Shete5affadc2015-05-29 20:54:57 +053020839}
20840
Jeff Johnson295189b2012-06-20 16:38:30 -070020841 /* FUNCTION WDA_featureCapsExchange
20842 * WDA API to invoke capability exchange between host and FW.
20843 */
20844void WDA_featureCapsExchange(v_PVOID_t pVosContext)
20845{
20846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020847 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070020848 WDI_featureCapsExchangeReq( NULL, pVosContext);
20849}
20850
Yathish9f22e662012-12-10 14:21:35 -080020851/* FUNCTION WDA_disableCapablityFeature
20852 * WDA API to diable Active mode offload in host.
20853 */
20854void WDA_disableCapablityFeature(tANI_U8 feature_index)
20855{
20856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20857 "%s:enter", __func__ );
20858 WDI_disableCapablityFeature(feature_index);
20859}
20860
Jeff Johnson295189b2012-06-20 16:38:30 -070020861 /* FUNCTION WDA_getHostWlanFeatCaps
20862 * Wrapper for WDI API, that will return if the feature (enum value).passed
20863 * to this API is supported or not in Host
20864 * return value
20865 * 0 - implies feature is NOT Supported
20866 * any non zero value - implies feature is SUPPORTED
20867 */
20868tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
20869{
20870 return WDI_getHostWlanFeatCaps(featEnumValue);
20871}
20872
20873 /* FUNCTION WDA_getFwWlanFeatCaps
20874 * Wrapper for WDI API, that will return if the feature (enum value).passed
20875 * to this API is supported or not in FW
20876 * return value
20877 * 0 - implies feature is NOT Supported
20878 * any non zero value - implies feature is SUPPORTED
20879 */
20880tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
20881{
20882 return WDI_getFwWlanFeatCaps(featEnumValue);
20883}
20884
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053020885
Jeff Johnson295189b2012-06-20 16:38:30 -070020886/*
20887 * FUNCTION: WDA_shutdown
20888 * Shutdown WDA/WDI without handshaking with Riva.
20889 * Synchronous function.
20890 */
20891VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
20892{
20893 WDI_Status wdiStatus;
20894 //tANI_U8 eventIdx = 0;
20895 VOS_STATUS status = VOS_STATUS_SUCCESS;
20896 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070020897 if (NULL == pWDA)
20898 {
20899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020900 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070020901 VOS_ASSERT(0);
20902 return VOS_STATUS_E_FAILURE;
20903 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020904 /* FTM mode stay START_STATE */
20905 if( (WDA_READY_STATE != pWDA->wdaState) &&
20906 (WDA_INIT_STATE != pWDA->wdaState) &&
20907 (WDA_START_STATE != pWDA->wdaState) )
20908 {
20909 VOS_ASSERT(0);
20910 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070020911
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053020912 if (eDRIVER_TYPE_MFG != pWDA->driverMode)
Jeff Johnson295189b2012-06-20 16:38:30 -070020913 {
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053020914 if(VOS_TRUE == pWDA->wdaTimersCreated)
20915 {
20916 wdaDestroyTimers(pWDA);
20917 pWDA->wdaTimersCreated = VOS_FALSE;
20918 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020919 }
Leo Chang9d76f622013-08-23 16:34:52 -070020920 else
20921 {
20922 vos_event_destroy(&pWDA->ftmStopDoneEvent);
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053020923 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070020924
Jeff Johnson295189b2012-06-20 16:38:30 -070020925 /* call WDI shutdown */
20926 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070020927 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
20928 {
20929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20930 "error in WDA Stop" );
20931 status = VOS_STATUS_E_FAILURE;
20932 }
20933 /* WDI stop is synchrnous, shutdown is complete when it returns */
20934 pWDA->wdaState = WDA_STOP_STATE;
20935
Jeff Johnson295189b2012-06-20 16:38:30 -070020936 /* shutdown should perform the stop & close actions. */
20937 /* Destroy the event */
20938 status = vos_event_destroy(&pWDA->txFrameEvent);
20939 if(!VOS_IS_STATUS_SUCCESS(status))
20940 {
20941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080020942 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070020943 status = VOS_STATUS_E_FAILURE;
20944 }
20945 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
20946 if(!VOS_IS_STATUS_SUCCESS(status))
20947 {
20948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080020949 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070020950 status = VOS_STATUS_E_FAILURE;
20951 }
20952 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
20953 if(!VOS_IS_STATUS_SUCCESS(status))
20954 {
20955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080020956 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070020957 status = VOS_STATUS_E_FAILURE;
20958 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020959 /* free WDA context */
20960 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
20961 if ( !VOS_IS_STATUS_SUCCESS(status) )
20962 {
20963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20964 "error in WDA close " );
20965 status = VOS_STATUS_E_FAILURE;
20966 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020967 return status;
20968}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080020969
Jeff Johnsone7245742012-09-05 17:12:55 -070020970/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080020971 * FUNCTION: WDA_setNeedShutdown
20972 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070020973 */
20974
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080020975void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070020976{
20977 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070020978 if(pWDA == NULL)
20979 {
20980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20981 "Could not get the WDA Context pointer" );
20982 return;
20983 }
Jeff Johnsone7245742012-09-05 17:12:55 -070020984 pWDA->needShutdown = TRUE;
20985}
20986/*
20987 * FUNCTION: WDA_needShutdown
20988 * WDA needs a shutdown
20989 */
20990
20991v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
20992{
20993 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070020994 if(pWDA == NULL)
20995 {
20996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20997 "Could not get the WDA Context pointer" );
20998 return 0;
20999 }
21000 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070021001}
21002
Mohit Khanna4a70d262012-09-11 16:30:12 -070021003#ifdef WLAN_FEATURE_11AC
21004/*
21005 * FUNCTION: WDA_SetBeaconFilterReqCallback
21006 *
21007 */
21008void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
21009{
21010 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070021012 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070021013 if(NULL == pWdaParams)
21014 {
21015 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070021016 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070021017 VOS_ASSERT(0) ;
21018 return ;
21019 }
Jeff Johnsone7245742012-09-05 17:12:55 -070021020
Mohit Khanna4a70d262012-09-11 16:30:12 -070021021 vos_mem_free(pWdaParams->wdaMsgParam) ;
21022 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21023 vos_mem_free(pWdaParams) ;
21024 /*
21025 * No respone required for SetBeaconFilter req so just free the request
21026 * param here
21027 */
21028
21029 return ;
21030}
21031
21032VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
21033 tUpdateVHTOpMode *pData)
21034{
21035 WDI_Status status = WDI_STATUS_SUCCESS ;
21036 tWDA_ReqParams *pWdaParams ;
21037 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
21038 sizeof(WDI_UpdateVHTOpMode)) ;
21039 if(NULL == wdiTemp)
21040 {
21041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070021042 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070021043 VOS_ASSERT(0);
21044 return VOS_STATUS_E_NOMEM;
21045 }
21046 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
21047 if(NULL == pWdaParams)
21048 {
21049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070021050 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070021051 VOS_ASSERT(0);
21052 vos_mem_free(wdiTemp);
21053 return VOS_STATUS_E_NOMEM;
21054 }
Abhishek Singhdf8eb312014-11-15 00:49:28 +053021055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21056 "------> %s Opmode = %d and staid = %d" ,
21057 __func__, pData->opMode, pData->staId);
Mohit Khanna4a70d262012-09-11 16:30:12 -070021058 wdiTemp->opMode = pData->opMode;
21059 wdiTemp->staId = pData->staId;
21060
21061 pWdaParams->pWdaContext = pWDA;
21062 /* Store Req pointer, as this will be used for response */
21063 pWdaParams->wdaMsgParam = (void *)pData;
21064 /* store Params pass it to WDI */
21065 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
21066
21067 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
21068
21069 if(IS_WDI_STATUS_FAILURE(status))
21070 {
21071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21072 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
21073 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
21074 vos_mem_free(pWdaParams->wdaMsgParam);
21075 vos_mem_free(pWdaParams);
21076 }
21077 return CONVERT_WDI2VOS_STATUS(status) ;
21078}
21079#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070021080
21081/*==========================================================================
21082 FUNCTION WDA_TransportChannelDebug
21083
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070021084 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070021085 Display Transport Channel debugging information
21086 User may request to display DXE channel snapshot
21087 Or if host driver detects any abnormal stcuk may display
21088
21089 PARAMETERS
schang6295e542013-03-12 15:31:23 -070021090 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080021091 displaySnapshot : Display DXE snapshot option
Mihir Shete40a55652014-03-02 14:14:47 +053021092 debugFlags : Enable stall detect features
21093 defined by WPAL_DeviceDebugFlags
21094 These features may effect
21095 data performance.
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070021096
21097 RETURN VALUE
21098 NONE
21099
21100===========================================================================*/
21101void WDA_TransportChannelDebug
21102(
schang6295e542013-03-12 15:31:23 -070021103 tpAniSirGlobal pMac,
21104 v_BOOL_t displaySnapshot,
Mihir Shete40a55652014-03-02 14:14:47 +053021105 v_U8_t debugFlags
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070021106)
21107{
Mihir Shete40a55652014-03-02 14:14:47 +053021108 WDI_TransportChannelDebug(displaySnapshot, debugFlags);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070021109 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070021110}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070021111
21112/*==========================================================================
Sravan Kumar Kairame9d186c2015-11-27 23:37:02 +053021113 FUNCTION WDA_TransportKickDxe
21114
21115 DESCRIPTION
21116 Request Kick Dxe when first hdd TX time out
21117 happens
21118
21119 PARAMETERS
21120 NONE
21121
21122 RETURN VALUE
21123 NONE
21124
21125===========================================================================*/
21126void WDA_TransportKickDxe()
21127{
21128 WDI_TransportKickDxe();
21129 return;
21130}
21131
21132
21133/*==========================================================================
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070021134 FUNCTION WDA_SetEnableSSR
21135
21136 DESCRIPTION
21137 API to enable/disable SSR on WDI timeout
21138
21139 PARAMETERS
21140 enableSSR : enable/disable SSR
21141
21142 RETURN VALUE
21143 NONE
21144
21145===========================================================================*/
21146void WDA_SetEnableSSR(v_BOOL_t enableSSR)
21147{
21148 WDI_SetEnableSSR(enableSSR);
21149}
Leo Chang9056f462013-08-01 19:21:11 -070021150
Agrawal Ashish0552be02016-03-02 18:03:43 +053021151/**
21152 * WDA_SetMgmtPktViaWQ5() - Set INI params sendMgmtPktViaWQ5 to WDI.
21153 * @sendMgmtPktViaWQ5: INI params to enable/disable sending mgmt pkt via WQ5.
21154 *
21155 * Return: void
21156 */
21157void WDA_SetMgmtPktViaWQ5(v_BOOL_t sendMgmtPktViaWQ5)
21158{
21159 WDI_SetMgmtPktViaWQ5(sendMgmtPktViaWQ5);
21160}
21161
Leo Chang9056f462013-08-01 19:21:11 -070021162#ifdef FEATURE_WLAN_LPHB
21163/*
21164 * FUNCTION: WDA_LPHBconfRspCallback
21165 *
21166 */
21167void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
21168{
21169 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21170
21171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21172 "<------ %s " ,__func__);
21173 if (NULL == pWdaParams)
21174 {
21175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21176 "%s: pWdaParams received NULL", __func__);
21177 VOS_ASSERT(0) ;
21178 return ;
21179 }
21180
21181 /* Do not need to send notification to upper layer
21182 * Just free allocated resources */
21183 if (pWdaParams != NULL)
21184 {
21185 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21186 {
21187 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21188 }
21189 vos_mem_free(pWdaParams->wdaMsgParam) ;
21190 vos_mem_free(pWdaParams) ;
21191 }
21192
21193 return;
21194}
21195
21196/*
21197 * FUNCTION: WDA_ProcessLPHBConfReq
21198 *
21199 */
21200VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
21201 tSirLPHBReq *pData)
21202{
21203 WDI_Status wdiStatus;
21204 tWDA_ReqParams *pWdaParams ;
21205
21206 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21207 "------> %s " , __func__);
21208
21209 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
21210 if (NULL == pWdaParams)
21211 {
21212 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21213 "%s: VOS MEM Alloc Failure", __func__);
21214 VOS_ASSERT(0);
21215 vos_mem_free(pData);
21216 return VOS_STATUS_E_NOMEM;
21217 }
21218
21219 pWdaParams->pWdaContext = pWDA;
21220 pWdaParams->wdaMsgParam = (void *)pData;
21221 pWdaParams->wdaWdiApiMsgParam = NULL;
21222
21223 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
21224 if (WDI_STATUS_PENDING == wdiStatus)
21225 {
21226 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21227 "Pending received for %s:%d ", __func__, __LINE__);
21228 }
21229 else if (WDI_STATUS_SUCCESS != wdiStatus)
21230 {
21231 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21232 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
21233 vos_mem_free(pWdaParams->wdaMsgParam);
21234 vos_mem_free(pWdaParams);
21235 }
21236
21237 return CONVERT_WDI2VOS_STATUS(wdiStatus);
21238}
21239#endif /* FEATURE_WLAN_LPHB */
21240
c_hpothu92367912014-05-01 15:18:17 +053021241void WDA_GetBcnMissRateCallback(tANI_U8 status, tANI_U32 bcnMissRate,
21242 void* pUserData)
21243{
21244 tSirBcnMissRateInfo *pBcnMissRateInfo = (tSirBcnMissRateInfo *)pUserData;
21245
21246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21247 "<------ %s " ,__func__);
21248 if (NULL == pBcnMissRateInfo)
21249 {
21250 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21251 "%s: pWdaParams received NULL", __func__);
21252 VOS_ASSERT(0) ;
21253 return ;
21254 }
21255 if (pBcnMissRateInfo->callback)
21256 {
21257 pBcnMissRateInfo->callback(status, bcnMissRate,
21258 pBcnMissRateInfo->data);
21259 }
21260 vos_mem_free(pUserData);
21261
21262 return;
21263}
21264
21265v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
21266 tSirBcnMissRateReq *pData)
21267{
21268 WDI_Status wdiStatus;
21269 tSirBcnMissRateInfo *pBcnMissRateInfo;
21270
21271 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21272 "------> %s " , __func__);
21273
21274 pBcnMissRateInfo =
21275 (tSirBcnMissRateInfo *)vos_mem_malloc(sizeof(tSirBcnMissRateInfo));
21276 if (NULL == pBcnMissRateInfo)
21277 {
21278 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21279 "%s: VOS MEM Alloc Failure", __func__);
21280 VOS_ASSERT(0);
21281 vos_mem_free(pData);
21282 return;
21283 }
21284
21285 pBcnMissRateInfo->callback = (pGetBcnMissRateCB)(pData->callback);
21286 pBcnMissRateInfo->data = pData->data;
21287
21288 wdiStatus = WDI_GetBcnMissRate(pBcnMissRateInfo,
21289 WDA_GetBcnMissRateCallback,
21290 pData->bssid);
21291 if (WDI_STATUS_PENDING == wdiStatus)
21292 {
21293 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21294 "Pending received for %s:%d ", __func__, __LINE__);
21295 }
21296 else if (WDI_STATUS_SUCCESS != wdiStatus)
21297 {
21298 if (pBcnMissRateInfo->callback)
21299 {
21300 pBcnMissRateInfo->callback(VOS_STATUS_E_FAILURE,
21301 -1, pBcnMissRateInfo->data);
21302 }
21303 }
21304 vos_mem_free(pData);
21305}
Dino Mycle41bdc942014-06-10 11:30:24 +053021306
21307#ifdef WLAN_FEATURE_EXTSCAN
21308
21309/*==========================================================================
21310 FUNCTION WDA_EXTScanStartRspCallback
21311
21312 DESCRIPTION
21313 API to send EXTScan Start Response to HDD
21314
21315 PARAMETERS
21316 pEventData: Response from FW
21317 pUserData:
21318===========================================================================*/
21319void WDA_EXTScanStartRspCallback(void *pEventData, void* pUserData)
21320{
21321 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21322 tWDA_CbContext *pWDA = NULL;
21323 void *pCallbackContext;
21324 tpAniSirGlobal pMac;
21325
21326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21327 "%s:", __func__);
21328 if (NULL == pWdaParams)
21329 {
21330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21331 "%s: pWdaParams received NULL", __func__);
21332 VOS_ASSERT(0);
21333 return;
21334 }
21335
21336 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
21337
21338 if (NULL == pWDA)
21339 {
21340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21341 "%s: pWDA received NULL", __func__);
21342 VOS_ASSERT(0);
21343 goto error;
21344 }
21345
21346 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
21347 if (NULL == pMac)
21348 {
21349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21350 "%s:pMac is NULL", __func__);
21351 VOS_ASSERT(0);
21352 goto error;
21353 }
21354
21355 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
21356
21357 if (pMac->sme.pEXTScanIndCb)
21358 {
21359 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_START_RSP,
21360 pEventData);
21361 }
21362 else
21363 {
21364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21365 "%s:HDD callback is null", __func__);
21366 VOS_ASSERT(0);
21367 }
21368
21369error:
21370
21371 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21372 {
21373 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21374 }
21375 if (pWdaParams->wdaMsgParam != NULL)
21376 {
21377 vos_mem_free(pWdaParams->wdaMsgParam);
21378 }
21379 vos_mem_free(pWdaParams) ;
21380
21381 return;
21382}
21383
21384/*==========================================================================
21385 FUNCTION WDA_EXTScanStopRspCallback
21386
21387 DESCRIPTION
21388 API to send EXTScan Stop Response to HDD
21389
21390 PARAMETERS
21391 pEventData: Response from FW
21392 pUserData:
21393===========================================================================*/
21394void WDA_EXTScanStopRspCallback(void *pEventData, void* pUserData)
21395{
21396 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21397 tWDA_CbContext *pWDA = NULL;
21398 void *pCallbackContext;
21399 tpAniSirGlobal pMac;
21400
21401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21402 "%s:", __func__);
21403 if (NULL == pWdaParams)
21404 {
21405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21406 "%s: pWdaParams received NULL", __func__);
21407 VOS_ASSERT(0);
21408 return;
21409 }
21410
21411 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
21412
21413 if (NULL == pWDA)
21414 {
21415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21416 "%s: pWDA received NULL", __func__);
21417 VOS_ASSERT(0);
21418 goto error;
21419 }
21420
21421 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
21422 if (NULL == pMac)
21423 {
21424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21425 "%s:pMac is NULL", __func__);
21426 VOS_ASSERT(0);
21427 goto error;
21428 }
21429 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
21430
21431 if (pMac->sme.pEXTScanIndCb)
21432 {
21433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21434 "%s:HDD call back function called", __func__);
21435 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_STOP_RSP,
21436 pEventData);
21437 }
21438 else
21439 {
21440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21441 "%s:HDD callback is null", __func__);
21442 VOS_ASSERT(0);
21443 }
21444
21445error:
21446
21447 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21448 {
21449 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21450 }
21451 if (pWdaParams->wdaMsgParam != NULL)
21452 {
21453 vos_mem_free(pWdaParams->wdaMsgParam);
21454 }
21455 vos_mem_free(pWdaParams) ;
21456
21457
21458 return;
21459}
21460
21461/*==========================================================================
21462 FUNCTION WDA_EXTScanGetCachedResultsRspCallback
21463
21464 DESCRIPTION
21465 API to send EXTScan Get Cached Results Response to HDD
21466
21467 PARAMETERS
21468 pEventData: Response from FW
21469 pUserData:
21470===========================================================================*/
21471void WDA_EXTScanGetCachedResultsRspCallback(void *pEventData, void* pUserData)
21472{
21473 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21474 tWDA_CbContext *pWDA = NULL;
21475 void *pCallbackContext;
21476 tpAniSirGlobal pMac;
21477
21478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21479 "%s: ", __func__);
21480 if (NULL == pWdaParams)
21481 {
21482 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21483 "%s: pWdaParams received NULL", __func__);
21484 VOS_ASSERT(0);
21485 return;
21486 }
21487
21488 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
21489
21490 if (NULL == pWDA)
21491 {
21492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21493 "%s: pWDA received NULL", __func__);
21494 VOS_ASSERT(0);
21495 goto error;
21496 }
21497
21498 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
21499 if (NULL == pMac)
21500 {
21501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21502 "%s:pMac is NULL", __func__);
21503 VOS_ASSERT(0);
21504 goto error;
21505 }
21506
21507 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
21508
21509 if (pMac->sme.pEXTScanIndCb)
21510 {
21511 pMac->sme.pEXTScanIndCb(pCallbackContext,
21512 WDA_EXTSCAN_GET_CACHED_RESULTS_RSP,
21513 pEventData);
21514 }
21515 else
21516 {
21517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21518 "%s:HDD callback is null", __func__);
21519 VOS_ASSERT(0);
21520 }
21521
21522
21523error:
21524
21525 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21526 {
21527 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21528 }
21529 if (pWdaParams->wdaMsgParam != NULL)
21530 {
21531 vos_mem_free(pWdaParams->wdaMsgParam);
21532 }
21533 vos_mem_free(pWdaParams) ;
21534
21535 return;
21536}
21537
21538/*==========================================================================
21539 FUNCTION WDA_EXTScanGetCapabilitiesRspCallback
21540
21541 DESCRIPTION
21542 API to send EXTScan Get Capabilities Response to HDD
21543
21544 PARAMETERS
21545 pEventData: Response from FW
21546 pUserData:
21547===========================================================================*/
21548void WDA_EXTScanGetCapabilitiesRspCallback(void *pEventData, void* pUserData)
21549{
21550 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21551 tWDA_CbContext *pWDA = NULL;
21552 void *pCallbackContext;
21553 tpAniSirGlobal pMac;
21554
21555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21556 "%s:", __func__);
21557 if (NULL == pWdaParams)
21558 {
21559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21560 "%s: pWdaParams received NULL", __func__);
21561 VOS_ASSERT(0);
21562 return;
21563 }
21564
21565 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
21566
21567 if (NULL == pWDA)
21568 {
21569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21570 "%s: pWDA received NULL", __func__);
21571 VOS_ASSERT(0);
21572 goto error;
21573 }
21574
21575 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
21576 if (NULL == pMac)
21577 {
21578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21579 "%s:pMac is NULL", __func__);
21580 VOS_ASSERT(0);
21581 goto error;
21582 }
21583
21584 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
21585
21586 if (pMac->sme.pEXTScanIndCb)
21587 {
21588 pMac->sme.pEXTScanIndCb(pCallbackContext,
21589 WDA_EXTSCAN_GET_CAPABILITIES_RSP,
21590 pEventData);
21591 }
21592 else
21593 {
21594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21595 "%s:HDD callback is null", __func__);
21596 VOS_ASSERT(0);
21597 }
21598
21599
21600error:
21601
21602 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21603 {
21604 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21605 }
21606 if (pWdaParams->wdaMsgParam != NULL)
21607 {
21608 vos_mem_free(pWdaParams->wdaMsgParam);
21609 }
21610 vos_mem_free(pWdaParams) ;
21611
21612 return;
21613}
21614
21615/*==========================================================================
21616 FUNCTION WDA_EXTScanSetBSSIDHotlistRspCallback
21617
21618 DESCRIPTION
21619 API to send EXTScan Set BSSID Hotlist Response to HDD
21620
21621 PARAMETERS
21622 pEventData: Response from FW
21623 pUserData:
21624===========================================================================*/
21625void WDA_EXTScanSetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
21626{
21627 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21628 tWDA_CbContext *pWDA = NULL;
21629 void *pCallbackContext;
21630 tpAniSirGlobal pMac;
21631
21632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21633 "%s: ", __func__);
21634 if (NULL == pWdaParams)
21635 {
21636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21637 "%s: pWdaParams received NULL", __func__);
21638 VOS_ASSERT(0) ;
21639 return;
21640 }
21641
21642 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
21643
21644 if (NULL == pWDA)
21645 {
21646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21647 "%s: pWDA received NULL", __func__);
21648 VOS_ASSERT(0);
21649 goto error;
21650 }
21651
21652 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
21653 if (NULL == pMac)
21654 {
21655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21656 "%s:pMac is NULL", __func__);
21657 VOS_ASSERT(0);
21658 goto error;
21659 }
21660
21661 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
21662
21663 if (pMac->sme.pEXTScanIndCb)
21664 {
21665 pMac->sme.pEXTScanIndCb(pCallbackContext,
21666 WDA_EXTSCAN_SET_BSSID_HOTLIST_RSP,
21667 pEventData);
21668 }
21669 else
21670 {
21671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21672 "%s:HDD callback is null", __func__);
21673 VOS_ASSERT(0);
21674 }
21675
21676
21677error:
21678
21679 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21680 {
21681 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21682 }
21683 if (pWdaParams->wdaMsgParam != NULL)
21684 {
21685 vos_mem_free(pWdaParams->wdaMsgParam);
21686 }
21687 vos_mem_free(pWdaParams) ;
21688
21689 return;
21690}
21691
21692/*==========================================================================
21693 FUNCTION WDA_EXTScanResetBSSIDHotlistRspCallback
21694
21695 DESCRIPTION
21696 API to send EXTScan ReSet BSSID Hotlist Response to HDD
21697
21698 PARAMETERS
21699 pEventData: Response from FW
21700 pUserData:
21701===========================================================================*/
21702void WDA_EXTScanResetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
21703{
21704 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21705 tWDA_CbContext *pWDA = NULL;
21706 void *pCallbackContext;
21707 tpAniSirGlobal pMac;
21708
21709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21710 "%s:", __func__);
21711 if (NULL == pWdaParams)
21712 {
21713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21714 "%s: pWdaParams received NULL", __func__);
21715 VOS_ASSERT(0) ;
21716 return;
21717 }
21718
21719 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
21720
21721 if (NULL == pWDA)
21722 {
21723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21724 "%s: pWDA received NULL", __func__);
21725 VOS_ASSERT(0);
21726 goto error;
21727 }
21728
21729 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
21730 if (NULL == pMac)
21731 {
21732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21733 "%s:pMac is NULL", __func__);
21734 VOS_ASSERT(0);
21735 goto error;
21736 }
21737
21738 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
21739
21740 if (pMac->sme.pEXTScanIndCb)
21741 {
21742 pMac->sme.pEXTScanIndCb(pCallbackContext,
21743 WDA_EXTSCAN_RESET_BSSID_HOTLIST_RSP,
21744 pEventData);
21745 }
21746 else
21747 {
21748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21749 "%s:HDD callback is null", __func__);
21750 VOS_ASSERT(0);
21751 }
21752
21753
21754error:
21755
21756 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21757 {
21758 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21759 }
21760 if (pWdaParams->wdaMsgParam != NULL)
21761 {
21762 vos_mem_free(pWdaParams->wdaMsgParam);
21763 }
21764 vos_mem_free(pWdaParams) ;
21765
21766 return;
21767}
21768
21769/*==========================================================================
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053021770 FUNCTION WDA_EXTScanSetSSIDHotlistRspCallback
21771
21772 DESCRIPTION
21773 API to send EXTScan Set SSID Hotlist Response to HDD
21774
21775 PARAMETERS
21776 pEventData: Response from FW
21777 pUserData:
21778===========================================================================*/
21779void WDA_EXTScanSetSSIDHotlistRspCallback(void *pEventData, void* pUserData)
21780{
21781 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21782 tWDA_CbContext *pWDA = NULL;
21783 void *pCallbackContext;
21784 tpAniSirGlobal pMac;
21785
21786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21787 "%s: ", __func__);
21788 if (NULL == pWdaParams)
21789 {
21790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21791 "%s: pWdaParams received NULL", __func__);
21792 VOS_ASSERT(0) ;
21793 return;
21794 }
21795
21796 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
21797
21798 if (NULL == pWDA)
21799 {
21800 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21801 "%s: pWDA received NULL", __func__);
21802 VOS_ASSERT(0);
21803 goto error;
21804 }
21805
21806 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
21807 if (NULL == pMac)
21808 {
21809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21810 "%s:pMac is NULL", __func__);
21811 VOS_ASSERT(0);
21812 goto error;
21813 }
21814
21815 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
21816
21817 if (pMac->sme.pEXTScanIndCb)
21818 {
21819 pMac->sme.pEXTScanIndCb(pCallbackContext,
21820 WDA_EXTSCAN_SET_SSID_HOTLIST_RSP,
21821 pEventData);
21822 }
21823 else
21824 {
21825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21826 "%s:HDD callback is null", __func__);
21827 VOS_ASSERT(0);
21828 }
21829
21830
21831error:
21832
21833 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21834 {
21835 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21836 }
21837 if (pWdaParams->wdaMsgParam != NULL)
21838 {
21839 vos_mem_free(pWdaParams->wdaMsgParam);
21840 }
21841 vos_mem_free(pWdaParams) ;
21842
21843 return;
21844}
21845
21846/*==========================================================================
21847 FUNCTION WDA_EXTScanResetSSIDHotlistRspCallback
21848
21849 DESCRIPTION
21850 API to send EXTScan ReSet SSID Hotlist Response to HDD
21851
21852 PARAMETERS
21853 pEventData: Response from FW
21854 pUserData:
21855===========================================================================*/
21856void WDA_EXTScanResetSSIDHotlistRspCallback(void *pEventData, void* pUserData)
21857{
21858 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21859 tWDA_CbContext *pWDA = NULL;
21860 void *pCallbackContext;
21861 tpAniSirGlobal pMac;
21862
21863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21864 "%s:", __func__);
21865 if (NULL == pWdaParams)
21866 {
21867 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21868 "%s: pWdaParams received NULL", __func__);
21869 VOS_ASSERT(0) ;
21870 return;
21871 }
21872
21873 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
21874
21875 if (NULL == pWDA)
21876 {
21877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21878 "%s: pWDA received NULL", __func__);
21879 VOS_ASSERT(0);
21880 goto error;
21881 }
21882
21883 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
21884 if (NULL == pMac)
21885 {
21886 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21887 "%s:pMac is NULL", __func__);
21888 VOS_ASSERT(0);
21889 goto error;
21890 }
21891
21892 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
21893
21894 if (pMac->sme.pEXTScanIndCb)
21895 {
21896 pMac->sme.pEXTScanIndCb(pCallbackContext,
21897 WDA_EXTSCAN_RESET_SSID_HOTLIST_RSP,
21898 pEventData);
21899 }
21900 else
21901 {
21902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21903 "%s:HDD callback is null", __func__);
21904 VOS_ASSERT(0);
21905 }
21906
21907
21908error:
21909
21910 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21911 {
21912 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21913 }
21914 if (pWdaParams->wdaMsgParam != NULL)
21915 {
21916 vos_mem_free(pWdaParams->wdaMsgParam);
21917 }
21918 vos_mem_free(pWdaParams) ;
21919
21920 return;
21921}
21922
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053021923/*==========================================================================
Dino Mycle41bdc942014-06-10 11:30:24 +053021924 FUNCTION WDA_ProcessEXTScanStartReq
21925
21926 DESCRIPTION
21927 API to send EXTScan Start Request to WDI
21928
21929 PARAMETERS
21930 pWDA: Pointer to WDA context
21931 wdaRequest: Pointer to EXTScan req parameters
21932===========================================================================*/
21933VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
21934 tSirEXTScanStartReqParams *wdaRequest)
21935{
21936 WDI_Status status = WDI_STATUS_SUCCESS;
21937 tWDA_ReqParams *pWdaParams;
21938
21939 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21940 "%s: ", __func__);
21941 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21942 if (NULL == pWdaParams)
21943 {
21944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21945 "%s: VOS MEM Alloc Failure", __func__);
21946 VOS_ASSERT(0);
21947 return VOS_STATUS_E_NOMEM;
21948 }
21949 pWdaParams->pWdaContext = pWDA;
21950 pWdaParams->wdaMsgParam = wdaRequest;
21951 pWdaParams->wdaWdiApiMsgParam = NULL;
21952
21953 status = WDI_EXTScanStartReq((void *)wdaRequest,
21954 (WDI_EXTScanStartRspCb)WDA_EXTScanStartRspCallback,
21955 (void *)pWdaParams);
21956 if (IS_WDI_STATUS_FAILURE(status))
21957 {
21958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21959 "Failure to request. Free all the memory " );
21960 vos_mem_free(pWdaParams->wdaMsgParam);
21961 vos_mem_free(pWdaParams);
21962 }
21963 return CONVERT_WDI2VOS_STATUS(status);
21964}
21965
21966/*==========================================================================
21967 FUNCTION WDA_ProcessEXTScanStopReq
21968
21969 DESCRIPTION
21970 API to send EXTScan Start Request to WDI
21971
21972 PARAMETERS
21973 pWDA: Pointer to WDA context
21974 wdaRequest: Pointer to EXTScan req parameters
21975===========================================================================*/
21976VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
21977 tSirEXTScanStopReqParams *wdaRequest)
21978{
21979 WDI_Status status = WDI_STATUS_SUCCESS;
21980 tWDA_ReqParams *pWdaParams;
21981
21982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21983 "%s:", __func__);
21984 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21985 if (NULL == pWdaParams)
21986 {
21987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21988 "%s: VOS MEM Alloc Failure", __func__);
21989 VOS_ASSERT(0);
21990 return VOS_STATUS_E_NOMEM;
21991 }
21992 pWdaParams->pWdaContext = pWDA;
21993 pWdaParams->wdaMsgParam = wdaRequest;
21994 pWdaParams->wdaWdiApiMsgParam = NULL;
21995
21996 status = WDI_EXTScanStopReq((void *)wdaRequest,
21997 (WDI_EXTScanStopRspCb)WDA_EXTScanStopRspCallback,
21998 (void *)pWdaParams);
21999 if (IS_WDI_STATUS_FAILURE(status))
22000 {
22001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22002 "Failure to request. Free all the memory " );
22003 vos_mem_free(pWdaParams->wdaMsgParam);
22004 vos_mem_free(pWdaParams);
22005 }
22006 return CONVERT_WDI2VOS_STATUS(status);
22007}
22008
22009/*==========================================================================
22010 FUNCTION WDA_ProcessEXTScanGetCachedResultsReq
22011
22012 DESCRIPTION
22013 API to send EXTScan Get Cached Results Request to WDI
22014
22015 PARAMETERS
22016 pWDA: Pointer to WDA context
22017 wdaRequest: Pointer to EXTScan req parameters
22018===========================================================================*/
22019VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
22020 tSirEXTScanGetCachedResultsReqParams *wdaRequest)
22021{
22022 WDI_Status status = WDI_STATUS_SUCCESS;
22023 tWDA_ReqParams *pWdaParams;
22024
22025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22026 "%s: ", __func__);
22027 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22028 if (NULL == pWdaParams)
22029 {
22030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22031 "%s: VOS MEM Alloc Failure", __func__);
22032 VOS_ASSERT(0);
22033 return VOS_STATUS_E_NOMEM;
22034 }
22035 pWdaParams->pWdaContext = pWDA;
22036 pWdaParams->wdaMsgParam = wdaRequest;
22037 pWdaParams->wdaWdiApiMsgParam = NULL;
22038
22039 status = WDI_EXTScanGetCachedResultsReq((void *)wdaRequest,
22040 (WDI_EXTScanGetCachedResultsRspCb)WDA_EXTScanGetCachedResultsRspCallback,
22041 (void *)pWdaParams);
22042 if (IS_WDI_STATUS_FAILURE(status))
22043 {
22044 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22045 "Failure to request. Free all the memory " );
22046 vos_mem_free(pWdaParams->wdaMsgParam);
22047 vos_mem_free(pWdaParams);
22048 }
22049 return CONVERT_WDI2VOS_STATUS(status);
22050}
22051
22052/*==========================================================================
22053 FUNCTION WDA_ProcessEXTScanGetCapabilitiesReq
22054
22055 DESCRIPTION
22056 API to send EXTScan Get Capabilities Request to WDI
22057
22058 PARAMETERS
22059 pWDA: Pointer to WDA context
22060 wdaRequest: Pointer to EXTScan req parameters
22061===========================================================================*/
22062VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
22063 tSirGetEXTScanCapabilitiesReqParams *wdaRequest)
22064{
22065 WDI_Status status = WDI_STATUS_SUCCESS;
22066 tWDA_ReqParams *pWdaParams;
22067
22068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22069 "%s:", __func__);
22070 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22071 if (NULL == pWdaParams)
22072 {
22073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22074 "%s: VOS MEM Alloc Failure", __func__);
22075 VOS_ASSERT(0);
22076 return VOS_STATUS_E_NOMEM;
22077 }
22078 pWdaParams->pWdaContext = pWDA;
22079 pWdaParams->wdaMsgParam = wdaRequest;
22080 pWdaParams->wdaWdiApiMsgParam = NULL;
22081
22082 status = WDI_EXTScanGetCapabilitiesReq((void *)wdaRequest,
22083 (WDI_EXTScanGetCapabilitiesRspCb)WDA_EXTScanGetCapabilitiesRspCallback,
22084 (void *)pWdaParams);
22085 if (IS_WDI_STATUS_FAILURE(status))
22086 {
22087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22088 "Failure to request. Free all the memory " );
22089 vos_mem_free(pWdaParams->wdaMsgParam);
22090 vos_mem_free(pWdaParams);
22091 }
22092 return CONVERT_WDI2VOS_STATUS(status);
22093}
22094
22095/*==========================================================================
22096 FUNCTION WDA_ProcessEXTScanSetBSSIDHotlistReq
22097
22098 DESCRIPTION
22099 API to send Set BSSID Hotlist Request to WDI
22100
22101 PARAMETERS
22102 pWDA: Pointer to WDA context
22103 wdaRequest: Pointer to EXTScan req parameters
22104===========================================================================*/
22105VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
22106 tSirEXTScanSetBssidHotListReqParams *wdaRequest)
22107{
22108 WDI_Status status = WDI_STATUS_SUCCESS;
22109 tWDA_ReqParams *pWdaParams;
22110
22111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22112 "%s: ", __func__);
22113 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22114 if (NULL == pWdaParams)
22115 {
22116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22117 "%s: VOS MEM Alloc Failure", __func__);
22118 VOS_ASSERT(0);
22119 return VOS_STATUS_E_NOMEM;
22120 }
22121 pWdaParams->pWdaContext = pWDA;
22122 pWdaParams->wdaMsgParam = wdaRequest;
22123 pWdaParams->wdaWdiApiMsgParam = NULL;
22124
22125 status = WDI_EXTScanSetBSSIDHotlistReq((void *)wdaRequest,
22126 (WDI_EXTScanSetBSSIDHotlistRspCb)WDA_EXTScanSetBSSIDHotlistRspCallback,
22127 (void *)pWdaParams);
22128 if (IS_WDI_STATUS_FAILURE(status))
22129 {
22130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22131 "Failure to request. Free all the memory " );
22132 vos_mem_free(pWdaParams->wdaMsgParam);
22133 vos_mem_free(pWdaParams);
22134 }
22135 return CONVERT_WDI2VOS_STATUS(status);
22136}
22137
22138/*==========================================================================
22139 FUNCTION WDA_ProcessEXTScanReSetBSSIDHotlistReq
22140
22141 DESCRIPTION
22142 API to send Reset BSSID Hotlist Request to WDI
22143
22144 PARAMETERS
22145 pWDA: Pointer to WDA context
22146 wdaRequest: Pointer to EXTScan req parameters
22147===========================================================================*/
22148VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
22149 tSirEXTScanResetBssidHotlistReqParams *wdaRequest)
22150{
22151 WDI_Status status = WDI_STATUS_SUCCESS;
22152 tWDA_ReqParams *pWdaParams;
22153
22154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22155 "%s:", __func__);
22156 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22157 if (NULL == pWdaParams)
22158 {
22159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22160 "%s: VOS MEM Alloc Failure", __func__);
22161 VOS_ASSERT(0);
22162 return VOS_STATUS_E_NOMEM;
22163 }
22164 pWdaParams->pWdaContext = pWDA;
22165 pWdaParams->wdaMsgParam = wdaRequest;
22166 pWdaParams->wdaWdiApiMsgParam = NULL;
22167
22168 status = WDI_EXTScanResetBSSIDHotlistReq((void *)wdaRequest,
22169 (WDI_EXTScanResetBSSIDHotlistRspCb)WDA_EXTScanResetBSSIDHotlistRspCallback,
22170 (void *)pWdaParams);
22171 if (IS_WDI_STATUS_FAILURE(status))
22172 {
22173 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22174 "Failure to request. Free all the memory " );
22175 vos_mem_free(pWdaParams->wdaMsgParam);
22176 vos_mem_free(pWdaParams);
22177 }
22178 return CONVERT_WDI2VOS_STATUS(status);
22179}
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053022180
22181/*==========================================================================
22182 FUNCTION WDA_ProcessEXTScanSetSSIDHotlistReq
22183
22184 DESCRIPTION
22185 API to send Set SSID Hotlist Request to WDI
22186
22187 PARAMETERS
22188 pWDA: Pointer to WDA context
22189 wdaRequest: Pointer to EXTScan req parameters
22190===========================================================================*/
22191VOS_STATUS WDA_ProcessEXTScanSetSSIDHotlistReq(tWDA_CbContext *pWDA,
22192 tSirEXTScanSetSsidHotListReqParams *wdaRequest)
22193{
22194 WDI_Status status = WDI_STATUS_SUCCESS;
22195 tWDA_ReqParams *pWdaParams;
22196
22197 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22198 "%s: ", __func__);
22199 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22200 if (NULL == pWdaParams)
22201 {
22202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22203 "%s: VOS MEM Alloc Failure", __func__);
22204 VOS_ASSERT(0);
22205 return VOS_STATUS_E_NOMEM;
22206 }
22207 pWdaParams->pWdaContext = pWDA;
22208 pWdaParams->wdaMsgParam = wdaRequest;
22209 pWdaParams->wdaWdiApiMsgParam = NULL;
22210
22211 status = WDI_EXTScanSetSSIDHotlistReq((void *)wdaRequest,
22212 (WDI_EXTScanSetSSIDHotlistRspCb)WDA_EXTScanSetSSIDHotlistRspCallback,
22213 (void *)pWdaParams);
22214 if (IS_WDI_STATUS_FAILURE(status))
22215 {
22216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22217 "Failure to request. Free all the memory " );
22218 vos_mem_free(pWdaParams->wdaMsgParam);
22219 vos_mem_free(pWdaParams);
22220 }
22221 return CONVERT_WDI2VOS_STATUS(status);
22222}
22223
22224/*==========================================================================
22225 FUNCTION WDA_ProcessEXTScanReSetSSIDHotlistReq
22226
22227 DESCRIPTION
22228 API to send Reset SSID Hotlist Request to WDI
22229
22230 PARAMETERS
22231 pWDA: Pointer to WDA context
22232 wdaRequest: Pointer to EXTScan req parameters
22233===========================================================================*/
22234VOS_STATUS WDA_ProcessEXTScanResetSSIDHotlistReq(tWDA_CbContext *pWDA,
22235 tSirEXTScanResetSsidHotlistReqParams *wdaRequest)
22236{
22237 WDI_Status status = WDI_STATUS_SUCCESS;
22238 tWDA_ReqParams *pWdaParams;
22239
22240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22241 "%s:", __func__);
22242 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22243 if (NULL == pWdaParams)
22244 {
22245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22246 "%s: VOS MEM Alloc Failure", __func__);
22247 VOS_ASSERT(0);
22248 return VOS_STATUS_E_NOMEM;
22249 }
22250 pWdaParams->pWdaContext = pWDA;
22251 pWdaParams->wdaMsgParam = wdaRequest;
22252 pWdaParams->wdaWdiApiMsgParam = NULL;
22253
22254 status = WDI_EXTScanResetSSIDHotlistReq((void *)wdaRequest,
22255 (WDI_EXTScanResetSSIDHotlistRspCb)WDA_EXTScanResetSSIDHotlistRspCallback,
22256 (void *)pWdaParams);
22257 if (IS_WDI_STATUS_FAILURE(status))
22258 {
22259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22260 "Failure to request. Free all the memory " );
22261 vos_mem_free(pWdaParams->wdaMsgParam);
22262 vos_mem_free(pWdaParams);
22263 }
22264 return CONVERT_WDI2VOS_STATUS(status);
22265}
22266
Padma, Santhosh Kumarc1f7f052015-08-26 12:29:01 +053022267/*==========================================================================
22268 FUNCTION WDA_ProcessHighPriorityDataInfoInd
22269
22270 DESCRIPTION
22271 API to send Reset SSID Hotlist Request to WDI
22272
22273 PARAMETERS
22274 pWDA: Pointer to WDA context
22275 wdaRequest: Pointer to EXTScan req parameters
22276===========================================================================*/
22277VOS_STATUS WDA_ProcessHighPriorityDataInfoInd(tWDA_CbContext *pWDA,
22278 tSirHighPriorityDataInfoInd *wdaRequest)
22279{
22280 WDI_Status status = WDI_STATUS_SUCCESS;
22281
22282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22283 "%s:", __func__);
22284
22285 status = WDI_HighPriorityDataInfoInd((void *)wdaRequest);
22286 if (WDI_STATUS_PENDING == status)
22287 {
22288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22289 FL("pending status received "));
22290 }
22291 else if (WDI_STATUS_SUCCESS_SYNC != status)
22292 {
22293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22294 FL("Failure status %d"), status);
22295 }
22296 return CONVERT_WDI2VOS_STATUS(status);
22297}
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053022298
Dino Mycle41bdc942014-06-10 11:30:24 +053022299#endif /* WLAN_FEATURE_EXTSCAN */
22300
Sunil Duttbd736ed2014-05-26 21:19:41 +053022301#ifdef WLAN_FEATURE_LINK_LAYER_STATS
22302
22303/*==========================================================================
22304 FUNCTION WDA_LLStatsSetRspCallback
22305
22306 DESCRIPTION
22307 API to process set link layer statistics response from FW
22308
22309 PARAMETERS
22310 pRsp: Pointer to set link layer statistics response
22311 pUserData: Pointer to user data
22312
22313 RETURN VALUE
22314 NONE
22315
22316===========================================================================*/
22317void WDA_LLStatsSetRspCallback(void *pEventData, void* pUserData)
22318{
22319 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
22320
22321
22322 if (NULL == pWdaParams)
22323 {
22324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22325 "%s: pWdaParams received NULL", __func__);
22326 VOS_ASSERT(0) ;
22327 return ;
22328 }
22329
22330 /* Do not need to send notification to upper layer
22331 * Just free allocated resources */
22332 if (pWdaParams->wdaWdiApiMsgParam != NULL)
22333 {
22334 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
22335 }
22336 if (pWdaParams->wdaMsgParam != NULL)
22337 {
22338 vos_mem_free(pWdaParams->wdaMsgParam);
22339 }
22340 vos_mem_free(pWdaParams) ;
22341
22342 return;
22343}
22344
22345/*==========================================================================
22346 FUNCTION WDA_ProcessLLStatsSetReq
22347
22348 DESCRIPTION
22349 API to send Set Link Layer Stats request to WDI
22350
22351 PARAMETERS
22352 pWDA: Pointer to WDA context
22353 wdaRequest: Pointer to set Link Layer Stats req parameters
22354===========================================================================*/
22355VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
22356 tSirLLStatsSetReq *wdaRequest)
22357{
22358 WDI_Status status = WDI_STATUS_SUCCESS;
22359 tWDA_ReqParams *pWdaParams;
22360
22361 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22362 if (NULL == pWdaParams)
22363 {
22364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22365 "%s: VOS MEM Alloc Failure", __func__);
22366 VOS_ASSERT(0);
22367 return VOS_STATUS_E_NOMEM;
22368 }
22369 pWdaParams->pWdaContext = pWDA;
22370 pWdaParams->wdaMsgParam = wdaRequest;
22371 pWdaParams->wdaWdiApiMsgParam = NULL;
22372
22373 status = WDI_LLStatsSetReq((void *)wdaRequest,
22374 (WDI_LLStatsSetRspCb)WDA_LLStatsSetRspCallback,
22375 (void *)pWdaParams);
22376 if (IS_WDI_STATUS_FAILURE(status))
22377 {
22378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22379 "Failure to request. Free all the memory " );
22380 vos_mem_free(pWdaParams->wdaMsgParam);
22381 vos_mem_free(pWdaParams);
22382 }
22383 return CONVERT_WDI2VOS_STATUS(status);
22384}
22385
22386/*==========================================================================
22387 FUNCTION WDA_LLStatsGetRspCallback
22388
22389 DESCRIPTION
22390 API to process get link layer statistics response from FW
22391
22392 PARAMETERS
22393 pRsp: Pointer to get link layer statistics response
22394 pUserData: Pointer to user data
22395
22396 RETURN VALUE
22397 NONE
22398
22399===========================================================================*/
22400void WDA_LLStatsGetRspCallback(void *pEventData, void* pUserData)
22401{
22402 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
22403
22404 if (NULL == pWdaParams)
22405 {
22406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22407 "%s: pWdaParams received NULL", __func__);
22408 VOS_ASSERT(0) ;
22409 return ;
22410 }
22411
22412 /* Do not need to send notification to upper layer
22413 * Just free allocated resources */
22414 if (pWdaParams->wdaWdiApiMsgParam != NULL)
22415 {
22416 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
22417 }
22418 if (pWdaParams->wdaMsgParam != NULL)
22419 {
22420 vos_mem_free(pWdaParams->wdaMsgParam);
22421 }
22422 vos_mem_free(pWdaParams) ;
22423
22424 return;
22425}
22426
22427/*==========================================================================
22428 FUNCTION WDA_ProcessLLStatsGetReq
22429
22430 DESCRIPTION
22431 API to send Get Link Layer Stats request to WDI
22432
22433 PARAMETERS
22434 pWDA: Pointer to WDA context
22435 wdaRequest: Pointer to get Link Layer Stats req parameters
22436===========================================================================*/
22437VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
22438 tSirLLStatsGetReq *wdaRequest)
22439{
22440 WDI_Status status = WDI_STATUS_SUCCESS;
22441 tWDA_ReqParams *pWdaParams;
22442
22443 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22444 if (NULL == pWdaParams)
22445 {
22446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22447 "%s: VOS MEM Alloc Failure", __func__);
22448 VOS_ASSERT(0);
22449 return VOS_STATUS_E_NOMEM;
22450 }
22451 pWdaParams->pWdaContext = pWDA;
22452 pWdaParams->wdaMsgParam = wdaRequest;
22453 pWdaParams->wdaWdiApiMsgParam = NULL;
22454
22455 status = WDI_LLStatsGetReq((void *) wdaRequest,
22456 (WDI_LLStatsGetRspCb)WDA_LLStatsGetRspCallback,
22457 (void *)pWdaParams);
22458 if (IS_WDI_STATUS_FAILURE(status))
22459 {
22460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22461 "Failure to request. Free all the memory " );
22462 vos_mem_free(pWdaParams->wdaMsgParam);
22463 vos_mem_free(pWdaParams);
22464 }
22465 return CONVERT_WDI2VOS_STATUS(status);
22466}
22467
22468/*==========================================================================
22469 FUNCTION WDA_LLStatsClearRspCallback
22470
22471 DESCRIPTION
22472 API to process clear link layer statistics response from FW
22473
22474 PARAMETERS
22475 pRsp: Pointer to clear link layer statistics response
22476 pUserData: Pointer to user data
22477
22478 RETURN VALUE
22479 NONE
22480
22481===========================================================================*/
22482void WDA_LLStatsClearRspCallback(void *pEventData, void* pUserData)
22483{
22484 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
22485
22486
22487 if (NULL == pWdaParams)
22488 {
22489 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22490 "%s: pWdaParams received NULL", __func__);
22491 VOS_ASSERT(0) ;
22492 return ;
22493 }
22494 /* Do not need to send notification to upper layer
22495 * Just free allocated resources */
22496 if (pWdaParams->wdaWdiApiMsgParam != NULL)
22497 {
22498 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
22499 }
22500 if (pWdaParams->wdaMsgParam != NULL)
22501 {
22502 vos_mem_free(pWdaParams->wdaMsgParam);
22503 }
22504 vos_mem_free(pWdaParams) ;
22505 return;
22506}
22507
22508/*==========================================================================
22509 FUNCTION WDA_ProcessLLStatsClearReq
22510
22511 DESCRIPTION
22512 API to send Clear Link Layer Stats request to WDI
22513
22514 PARAMETERS
22515 pWDA: Pointer to WDA context
22516 wdaRequest: Pointer to earLink Layer Stats req
22517===========================================================================*/
22518VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
22519 tSirLLStatsClearReq *wdaRequest)
22520{
22521 WDI_Status status = WDI_STATUS_SUCCESS;
22522 tWDA_ReqParams *pWdaParams;
22523
22524 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22525 if (NULL == pWdaParams)
22526 {
22527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22528 "%s: VOS MEM Alloc Failure", __func__);
22529 VOS_ASSERT(0);
22530 return VOS_STATUS_E_NOMEM;
22531 }
22532 pWdaParams->pWdaContext = pWDA;
22533 pWdaParams->wdaMsgParam = wdaRequest;
22534 pWdaParams->wdaWdiApiMsgParam = NULL;
22535
22536 status = WDI_LLStatsClearReq((void *) wdaRequest,
22537 (WDI_LLStatsClearRspCb)WDA_LLStatsClearRspCallback,
22538 (void *)pWdaParams);
22539 if (IS_WDI_STATUS_FAILURE(status))
22540 {
22541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22542 "Failure to request. Free all the memory " );
22543 vos_mem_free(pWdaParams->wdaMsgParam);
22544 vos_mem_free(pWdaParams);
22545 }
22546 return CONVERT_WDI2VOS_STATUS(status);
22547}
22548
22549#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Abhishek Singh85b74712014-10-08 11:38:19 +053022550
Abhishek Singh85b74712014-10-08 11:38:19 +053022551void WDA_FWStatsGetRspCallback(WDI_Status status,void *fwStatsResp,void *pUserData)
22552{
22553 tSirFWStatsInfo *fwStatsinfo = (tSirFWStatsInfo *)pUserData;
22554
22555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22556 "<------ %s " ,__func__);
22557 if (NULL == fwStatsinfo)
22558 {
22559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22560 "%s: pWdaParams received NULL", __func__);
22561 VOS_ASSERT(0);
22562 return;
22563 }
22564
22565 if(fwStatsinfo->callback)
22566 fwStatsinfo->callback(status, fwStatsResp, fwStatsinfo->data);
22567
22568 vos_mem_free(pUserData);
22569 return;
22570}
22571
22572
22573v_VOID_t WDA_ProcessFWStatsGetReq(tWDA_CbContext *pWDA,
22574 tSirFWStatsGetReq *pData)
22575{
22576
22577 WDI_Status wdiStatus;
22578 tSirFWStatsInfo *fwStatsinfo;
22579
22580 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22581 "------> %s" , __func__);
22582
22583 fwStatsinfo =
22584 (tSirFWStatsInfo *)vos_mem_malloc(sizeof(tSirFWStatsInfo));
22585 if (NULL == fwStatsinfo)
22586 {
22587 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22588 "%s: VOS MEM Alloc Failure", __func__);
22589 VOS_ASSERT(0);
22590 vos_mem_free(pData);
22591 return;
22592 }
22593
22594 fwStatsinfo->callback = (tSirFWStatsCallback)(pData->callback);
22595 fwStatsinfo->data = pData->data;
22596
22597 wdiStatus = WDI_FWStatsGetReq(fwStatsinfo,
22598 WDA_FWStatsGetRspCallback,
22599 pData->stats);
22600 if (WDI_STATUS_PENDING == wdiStatus)
22601 {
22602 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22603 "Pending received for %s:%d ", __func__, __LINE__);
22604 }
22605 else if (WDI_STATUS_SUCCESS != wdiStatus)
22606 {
22607 if (fwStatsinfo->callback)
22608 {
22609 fwStatsinfo->callback(WDI_STATUS_E_FAILURE, NULL ,fwStatsinfo->data);
22610 }
22611 vos_mem_free(fwStatsinfo);
22612 }
22613 vos_mem_free(pData);
22614}
22615
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053022616/*==========================================================================
22617 FUNCTION WDA_EncryptMsgRspCallback
22618
22619 DESCRIPTION
22620 API to send Encrypt message response to HDD
22621
22622 PARAMETERS
22623 pEventData: Response from FW
22624 pUserData: Data sent to firmware as part of request
22625===========================================================================*/
22626void WDA_EncryptMsgRspCallback(WDI_Status status, void *pEventData,
22627 void* pUserData)
22628{
22629 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
22630 tWDA_CbContext *pWDA = NULL;
22631 tpAniSirGlobal pMac;
22632 vos_msg_t vosMsg;
22633 tpSirEncryptedDataRspParams pEncRspParams;
22634 tpSetEncryptedDataRspParams pEncryptedDataRsp;
22635
22636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22637 FL("%s:"), __func__);
22638 if (NULL == pWdaParams)
22639 {
22640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22641 FL("%s: pWdaParams received NULL"), __func__);
22642 VOS_ASSERT(0);
22643 return;
22644 }
22645
22646 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
22647
22648 if (NULL == pWDA)
22649 {
22650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22651 FL("%s: pWDA received NULL"), __func__);
22652 VOS_ASSERT(0);
22653 goto error;
22654 }
22655
22656 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
22657 if (NULL == pMac)
22658 {
22659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22660 FL("%s:pMac is NULL"), __func__);
22661 VOS_ASSERT(0);
22662 goto error;
22663 }
22664
22665 pEncryptedDataRsp = (tpSetEncryptedDataRspParams) pEventData;
22666
22667 pEncRspParams = vos_mem_malloc(sizeof(tSirEncryptedDataRspParams));
22668 if (NULL == pEncRspParams)
22669 {
22670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22671 FL("%s: VOS MEM Alloc Failure"), __func__);
22672 VOS_ASSERT(0);
22673 goto error;
22674 }
22675
22676 /* Message Header */
22677 pEncRspParams->mesgType = eWNI_SME_ENCRYPT_MSG_RSP;
22678 pEncRspParams->mesgLen = sizeof(tSirEncryptedDataRspParams);
22679 pEncRspParams->encryptedDataRsp.encryptedPayload.length =
22680 pEncryptedDataRsp->encryptedPayload.length;
22681 vos_mem_copy(pEncRspParams->encryptedDataRsp.encryptedPayload.data,
22682 pEncryptedDataRsp->encryptedPayload.data,
22683 pEncryptedDataRsp->encryptedPayload.length);
22684
22685 /* VOS message wrapper */
22686 vosMsg.type = eWNI_SME_ENCRYPT_MSG_RSP;
22687 vosMsg.bodyptr = (void *)pEncRspParams;
22688 vosMsg.bodyval = 0;
22689
22690 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
22691 {
22692 /* free the mem */
22693 vos_mem_free((v_VOID_t *) pEncRspParams);
22694 }
22695
22696error:
22697
22698 if (pWdaParams->wdaWdiApiMsgParam != NULL)
22699 {
22700 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
22701 }
22702 if (pWdaParams->wdaMsgParam != NULL)
22703 {
22704 vos_mem_free(pWdaParams->wdaMsgParam);
22705 }
22706 vos_mem_free(pWdaParams) ;
22707
22708 return;
22709}
22710/*==========================================================================
22711 FUNCTION WDA_ProcessEncryptMsgReq
22712
22713 DESCRIPTION
22714 API to send Encrypt message Request to WDI
22715
22716 PARAMETERS
22717 pWDA: Pointer to WDA context
22718 wdaRequest: Pointer to Encrypt_msg req parameters
22719===========================================================================*/
22720VOS_STATUS WDA_ProcessEncryptMsgReq(tWDA_CbContext *pWDA,
22721 u8 *wdaRequest)
22722{
22723 WDI_Status status = WDI_STATUS_SUCCESS;
22724 tWDA_ReqParams *pWdaParams;
22725
22726 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22727 FL("%s: "), __func__);
22728 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22729 if (NULL == pWdaParams)
22730 {
22731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22732 FL("%s: VOS MEM Alloc Failure"), __func__);
22733 VOS_ASSERT(0);
22734 return VOS_STATUS_E_NOMEM;
22735 }
22736 pWdaParams->pWdaContext = pWDA;
22737 pWdaParams->wdaMsgParam = wdaRequest;
22738 pWdaParams->wdaWdiApiMsgParam = NULL;
22739
22740 status = WDI_EncryptMsgReq((void *)wdaRequest,
22741 (WDI_EncryptMsgRspCb)WDA_EncryptMsgRspCallback,
22742 (void *)pWdaParams);
22743 if (IS_WDI_STATUS_FAILURE(status))
22744 {
22745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22746 FL("Failure to request. Free all the memory " ));
22747 vos_mem_free(pWdaParams->wdaMsgParam);
22748 vos_mem_free(pWdaParams);
22749 }
22750 return CONVERT_WDI2VOS_STATUS(status);
22751}
Abhishek Singh41988ba2015-05-25 19:42:29 +053022752/*==========================================================================
22753 FUNCTION WDA_ProcessSetRtsCtsHTVhtInd
22754
22755 DESCRIPTION
22756 API to enable/disable RTS/CTS for different modes.
22757
22758 PARAMETERS
22759 pWDA: Pointer to WDA context
22760 rtsCtsVal : Bit mask value to enable RTS/CTS for different modes
22761===========================================================================*/
22762
22763VOS_STATUS
22764WDA_ProcessSetRtsCtsHTVhtInd(tWDA_CbContext *pWDA,
22765 tANI_U32 rtsCtsVal)
22766{
22767 WDI_Status status;
22768 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22769 FL("---> %s"), __func__);
22770 status = WDI_SetRtsCtsHTVhtInd(rtsCtsVal);
22771 if (WDI_STATUS_PENDING == status)
22772 {
22773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22774 FL("pending status received "));
22775 }
22776 else if (WDI_STATUS_SUCCESS_SYNC != status)
22777 {
22778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22779 FL("Failure status %d"), status);
22780 }
22781 return CONVERT_WDI2VOS_STATUS(status) ;
22782}
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053022783
22784void WDA_MonModeRspCallback(void *pEventData, void* pUserData)
Katya Nigamf0511f62015-05-05 16:40:57 +053022785{
22786 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053022787 tSirMonModeReq *pData;
Katya Nigamf0511f62015-05-05 16:40:57 +053022788
22789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22790 "<------ %s " ,__func__);
22791 if (NULL == pWdaParams)
22792 {
22793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22794 "%s: pWdaParams received NULL", __func__);
22795 VOS_ASSERT(0) ;
22796 return ;
22797 }
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053022798 pData = (tSirMonModeReq *)pWdaParams->wdaMsgParam;
22799 if (pData != NULL) {
22800 pData->callback(pData->magic, pData->cmpVar);
22801 vos_mem_free(pWdaParams->wdaMsgParam);
22802 }
Katya Nigamf0511f62015-05-05 16:40:57 +053022803 vos_mem_free(pWdaParams) ;
22804
22805 return;
22806}
22807
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053022808VOS_STATUS WDA_ProcessMonStartReq( tWDA_CbContext *pWDA, void *wdaRequest)
Katya Nigamf0511f62015-05-05 16:40:57 +053022809{
22810
22811 WDI_Status status = WDI_STATUS_SUCCESS;
22812 tWDA_ReqParams *pWdaParams;
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053022813 tSirMonModeReq *pMonModeData = (tSirMonModeReq *)wdaRequest;
Katya Nigamf0511f62015-05-05 16:40:57 +053022814
22815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22816 FL("%s: "), __func__);
22817 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22818 if (NULL == pWdaParams)
22819 {
22820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22821 FL("%s: VOS MEM Alloc Failure"), __func__);
22822 VOS_ASSERT(0);
22823 return VOS_STATUS_E_NOMEM;
22824 }
22825 pWdaParams->pWdaContext = pWDA;
22826 pWdaParams->wdaMsgParam = wdaRequest;
22827 pWdaParams->wdaWdiApiMsgParam = NULL;
22828
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053022829 status = WDI_MonStartReq(pMonModeData->data,
22830 (WDI_MonModeRspCb)WDA_MonModeRspCallback,
Katya Nigamf0511f62015-05-05 16:40:57 +053022831 (void *)pWdaParams);
22832 if (IS_WDI_STATUS_FAILURE(status))
22833 {
22834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22835 "Failure to request. Free all the memory " );
22836 vos_mem_free(pWdaParams->wdaMsgParam);
22837 vos_mem_free(pWdaParams);
22838 }
22839 return CONVERT_WDI2VOS_STATUS(status);
22840}
22841
Katya Nigamf0511f62015-05-05 16:40:57 +053022842VOS_STATUS WDA_ProcessMonStopReq( tWDA_CbContext *pWDA, void* wdaRequest)
22843{
22844
22845 WDI_Status status = WDI_STATUS_SUCCESS;
22846 tWDA_ReqParams *pWdaParams;
22847
22848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22849 FL("%s: "), __func__);
22850 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22851 if (NULL == pWdaParams)
22852 {
22853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22854 FL("%s: VOS MEM Alloc Failure"), __func__);
22855 VOS_ASSERT(0);
22856 return VOS_STATUS_E_NOMEM;
22857 }
22858 pWdaParams->pWdaContext = pWDA;
22859 pWdaParams->wdaMsgParam = wdaRequest;
22860 pWdaParams->wdaWdiApiMsgParam = NULL;
22861
Bhargav Shah1ae5de02015-07-20 13:32:31 +053022862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22863 "%s: Processing Mon stop request", __func__);
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053022864 status = WDI_MonStopReq((WDI_MonModeRspCb)WDA_MonModeRspCallback,
Katya Nigamf0511f62015-05-05 16:40:57 +053022865 (void *)pWdaParams);
22866
22867 if (IS_WDI_STATUS_FAILURE(status))
22868 {
22869 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22870 "Failure to request. Free all the memory " );
22871 vos_mem_free(pWdaParams->wdaMsgParam);
22872 vos_mem_free(pWdaParams);
22873 }
22874 return CONVERT_WDI2VOS_STATUS(status);
22875}
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +053022876
22877VOS_STATUS WDA_ProcessEnableDisableCAEventInd(tWDA_CbContext *pWDA, tANI_U8 val)
22878{
22879 WDI_Status status;
22880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22881 FL("---> %s"), __func__);
22882 status = WDI_EnableDisableCAEventInd(val);
22883 if (WDI_STATUS_PENDING == status)
22884 {
22885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22886 FL("pending status received "));
22887 }
22888 else if (WDI_STATUS_SUCCESS_SYNC != status)
22889 {
22890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22891 FL("Failure status %d"), status);
22892 }
22893 return CONVERT_WDI2VOS_STATUS(status) ;
22894}
Arun Khandavalli7eeb1592015-10-19 21:36:57 +053022895
22896/*==========================================================================
22897 FUNCTION WDA_WifiConfigSetRspCallback
22898
22899 DESCRIPTION
22900 API to process set WifiConfig response from FW
22901
22902 PARAMETERS
22903 pRsp: Pointer to set WifiConfig response
22904 pUserData: Pointer to user data
22905
22906 RETURN VALUE
22907 NONE
22908
22909===========================================================================*/
22910void WDA_WifiConfigSetRspCallback(void *pEventData, void* pUserData)
22911{
22912 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
22913
22914 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22915 "<------ %s " ,__func__);
22916
22917 if(NULL == pWdaParams)
22918 {
22919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22920 "%s: pWdaParams received NULL", __func__);
22921 VOS_ASSERT(0);
22922 return ;
22923 }
22924
22925 if(NULL == pWdaParams->wdaMsgParam)
22926 {
22927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22928 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
22929 VOS_ASSERT(0);
22930 vos_mem_free(pWdaParams);
22931 return ;
22932 }
22933
22934 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
22935 vos_mem_free(pWdaParams->wdaMsgParam);
22936 vos_mem_free(pWdaParams);
22937
22938 return;
22939}
22940
22941/*==========================================================================
22942 FUNCTION WDA_ProcessWifiConfigReq
22943
22944 DESCRIPTION
22945 API to send Set WifiConfig params request to WDI
22946
22947 PARAMETERS
22948 pWDA: Pointer to WDA context
22949 wdaRequest: Pointer to set WifiConfig req parameters
22950===========================================================================*/
22951
22952VOS_STATUS WDA_ProcessWifiConfigReq(tWDA_CbContext *pWDA,
22953 tSetWifiConfigParams *pwdaWificonfig)
22954{
22955 WDI_Status status = WDI_STATUS_SUCCESS;
22956 WDI_WifiConfigSetReqType *pwdiWifConfigSetReqParams;
22957 tWDA_ReqParams *pWdaParams ;
22958 WDI_Status wstatus;
22959
22960 /* Sanity Check*/
22961 if(NULL == pwdaWificonfig)
22962 {
22963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22964 "%s: tSetWifiConfigParams received NULL", __func__);
22965 VOS_ASSERT(0) ;
22966 return VOS_STATUS_E_FAULT;
22967 }
22968
22969 pwdiWifConfigSetReqParams = (WDI_WifiConfigSetReqType *)vos_mem_malloc(
22970 sizeof(WDI_WifiConfigSetReqType));
22971 if(NULL == pwdiWifConfigSetReqParams)
22972 {
22973 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22974 "%s: VOS MEM Alloc Failure", __func__);
22975 VOS_ASSERT(0);
22976 vos_mem_free(pwdaWificonfig);
22977 return VOS_STATUS_E_NOMEM;
22978 }
22979
22980 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
22981 if(NULL == pWdaParams)
22982 {
22983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22984 "%s: VOS MEM Alloc Failure", __func__);
22985 VOS_ASSERT(0);
22986 vos_mem_free(pwdiWifConfigSetReqParams);
22987 vos_mem_free(pwdaWificonfig);
22988 return VOS_STATUS_E_NOMEM;
22989 }
22990 pwdiWifConfigSetReqParams->paramType = pwdaWificonfig->paramType;
22991 pwdiWifConfigSetReqParams->paramValue = pwdaWificonfig->paramValue;
22992 vos_mem_copy(pwdiWifConfigSetReqParams->bssId,
22993 &(pwdaWificonfig->bssId), sizeof(tSirMacAddr));
22994
22995 pWdaParams->pWdaContext = pWDA;
Arun Khandavallic7ca4172015-10-21 10:42:42 +053022996 pWdaParams->wdaMsgParam = pwdaWificonfig;
Arun Khandavalli7eeb1592015-10-19 21:36:57 +053022997 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiWifConfigSetReqParams;
22998
22999 wstatus = WDI_WifiConfigSetReq(pwdiWifConfigSetReqParams,
23000 (WDI_WifiConfigSetRspCb)WDA_WifiConfigSetRspCallback,
23001 pWdaParams);
23002 if(IS_WDI_STATUS_FAILURE(wstatus))
23003 {
23004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23005 "Failure in sendind WifiConfigReq, free all the memory" );
23006 status = CONVERT_WDI2VOS_STATUS(wstatus);
23007 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
23008 vos_mem_free(pWdaParams->wdaMsgParam);
23009 vos_mem_free(pWdaParams);
23010 }
23011
23012 return status;
23013
23014}
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053023015
23016#ifdef FEATURE_OEM_DATA_SUPPORT
23017/*
23018 * FUNCTION: WDA_ProcessStartOemDataReqIndNew
23019 * Request to WDI.
23020 */
23021VOS_STATUS WDA_ProcessStartOemDataReqIndNew(tWDA_CbContext *pWDA,
23022 tOemDataReqNewConfig *pOemDataReqNewConfig)
23023{
23024 VOS_STATUS status = VOS_STATUS_SUCCESS;
23025 WDI_Status wstatus;
23026 WDI_OemDataReqNewConfig *wdiOemDataReqNewConfig;
23027
23028 /* Sanity Check*/
23029 if(NULL == pOemDataReqNewConfig)
23030 {
23031 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23032 "%s: pOemDataReqNewConfig received NULL", __func__);
23033 VOS_ASSERT(0) ;
23034 return VOS_STATUS_E_FAULT;
23035 }
23036
23037 wdiOemDataReqNewConfig = (WDI_OemDataReqNewConfig *)vos_mem_malloc(
23038 sizeof(WDI_OemDataReqNewConfig));
23039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
23040 "------> %s " ,__func__);
23041
23042 if(NULL == wdiOemDataReqNewConfig)
23043 {
23044 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23045 "%s: VOS MEM Alloc Failure", __func__);
23046 VOS_ASSERT(0);
23047 vos_mem_free(pOemDataReqNewConfig);
23048 return VOS_STATUS_E_NOMEM;
23049 }
23050
23051 vos_mem_copy(wdiOemDataReqNewConfig, pOemDataReqNewConfig,
23052 sizeof(WDI_OemDataReqNewConfig));
23053
23054 wstatus = WDI_StartOemDataReqIndNew(wdiOemDataReqNewConfig);
23055
23056 if (WDI_STATUS_PENDING == wstatus)
23057 {
23058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
23059 FL("pending status received "));
23060 }
23061 else if ((WDI_STATUS_SUCCESS_SYNC != wstatus) && (WDI_STATUS_SUCCESS != wstatus))
23062 {
23063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23064 FL("Failure in OemDataReqIndNew WDI API, free all memory %d"), wstatus);
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053023065 }
23066
Selvaraj, Sridhar2133b112016-04-13 14:45:00 +053023067 vos_mem_free(wdiOemDataReqNewConfig);
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053023068 vos_mem_free(pOemDataReqNewConfig);
23069
23070 return status;
23071}
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053023072
Mahesh A Saptasagarcfc65ae2015-12-22 15:06:10 +053023073void WDA_GetCurrentAntennaIndexCallback(WDI_Status status, void *params,
23074 void *pUserData)
23075{
23076 tSirAntennaDiversitySelectionInfo *pAntennaDivSelInfo =
23077 (tSirAntennaDiversitySelectionInfo *)pUserData;
23078
23079 tSirAntennaDivSelRsp *resParams = (tSirAntennaDivSelRsp *)params;
23080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
23081 "<------ %s " ,__func__);
23082 if (NULL == pAntennaDivSelInfo)
23083 {
23084 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23085 "%s: pWdaParams received NULL", __func__);
23086 VOS_ASSERT(0) ;
23087 return ;
23088 }
23089 if (NULL == resParams)
23090 {
23091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23092 "%s: resParams received NULL", __func__);
23093 VOS_ASSERT(0) ;
23094 return ;
23095 }
23096
23097 if (pAntennaDivSelInfo->callback)
23098 {
23099 if (WDI_STATUS_SUCCESS == status)
23100 {
23101 pAntennaDivSelInfo->callback(resParams->selectedAntennaId,
23102 pAntennaDivSelInfo->data);
23103 }
23104 else
23105 {
23106 pAntennaDivSelInfo->callback(-1,
23107 pAntennaDivSelInfo->data);
23108 }
23109 }
23110
23111 vos_mem_free(pUserData);
23112 return;
23113}
23114
23115/*
23116 * FUNCTION: WDA_ProcessAntennaDiversitySelectionReq
23117 * Request to WDI.
23118 */
23119v_VOID_t WDA_ProcessAntennaDiversitySelectionReq(tWDA_CbContext *pWDA,
23120 tSirAntennaDiversitySelectionReq *pData)
23121{
23122 WDI_Status wdiStatus;
23123 tSirAntennaDiversitySelectionInfo *pAntennaDivSelInfo;
23124
23125 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
23126 "------> %s " , __func__);
23127
23128 pAntennaDivSelInfo = (tSirAntennaDiversitySelectionInfo *)
23129 vos_mem_malloc(sizeof(tSirAntennaDiversitySelectionInfo));
23130 if (NULL == pAntennaDivSelInfo)
23131 {
23132 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23133 "%s: VOS MEM Alloc Failure", __func__);
23134 VOS_ASSERT(0);
23135 vos_mem_free(pData);
23136 return;
23137 }
23138
23139 pAntennaDivSelInfo->callback = (tAntennaDivSelCB)(pData->callback);
23140 pAntennaDivSelInfo->data = pData->data;
23141
23142 wdiStatus = WDI_GetCurrentAntennaIndex(pAntennaDivSelInfo,
23143 WDA_GetCurrentAntennaIndexCallback, pData->reserved);
23144
23145 if (WDI_STATUS_PENDING == wdiStatus)
23146 {
23147 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
23148 "Pending received for %s:%d ", __func__, __LINE__);
23149 }
23150 else if (WDI_STATUS_SUCCESS != wdiStatus)
23151 {
23152 if (pAntennaDivSelInfo->callback)
23153 {
23154 pAntennaDivSelInfo->callback(-1, pAntennaDivSelInfo->data);
23155 }
23156 }
23157
23158 vos_mem_free(pData);
23159 return;
23160}
23161
Mahesh A Saptasagar7d432952016-02-09 14:01:03 +053023162/*
23163 * FUNCTION: WDA_ProcessBcnMissPenaltyCount
23164 * Request to WDI.
23165 */
23166VOS_STATUS WDA_ProcessBcnMissPenaltyCount(tWDA_CbContext *pWDA,
23167 tModifyRoamParamsReqParams *params)
23168{
23169 WDI_Status status;
23170
23171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
23172 FL("---> %s"), __func__);
23173
23174 if (NULL == params)
23175 {
23176 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
23177 FL("tModifyRoamParamsReqParams is received NULL"));
23178 return VOS_STATUS_E_NOMEM;
23179 }
23180
23181 status = WDI_SetBcnMissPenaltyCount((WDI_ModifyRoamParamsReqType *)params);
23182 if (WDI_STATUS_PENDING == status)
23183 {
23184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
23185 FL("pending status received "));
23186 }
23187 else if (WDI_STATUS_SUCCESS_SYNC != status)
23188 {
23189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23190 FL("Failure status %d"), status);
23191 }
23192 vos_mem_free(params);
23193 return CONVERT_WDI2VOS_STATUS(status) ;
23194}
23195
Mahesh A Saptasagarcfc65ae2015-12-22 15:06:10 +053023196#endif