blob: 9575cd3fbbeac35d73d57987d04ce2e86cd3b538 [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Ashish Kumar Dhanotiya17866e12018-01-16 19:53:43 +05302 * Copyright (c) 2012-2018 The Linux Foundation. All rights reserved.
Kiet Lam1ed83fc2014-02-19 01:15:45 -08003 *
4 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
5 *
6 *
7 * Permission to use, copy, modify, and/or distribute this software for
8 * any purpose with or without fee is hereby granted, provided that the
9 * above copyright notice and this permission notice appear in all
10 * copies.
11 *
12 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
13 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
14 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
15 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
16 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
17 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
18 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
19 * PERFORMANCE OF THIS SOFTWARE.
20 */
21
22/*
Kiet Lama7f454d2014-07-24 12:04:06 -070023 * This file was originally distributed by Qualcomm Atheros, Inc.
24 * under proprietary terms before Copyright ownership was assigned
25 * to the Linux Foundation.
Kiet Lam1ed83fc2014-02-19 01:15:45 -080026 */
27
Jeff Johnson295189b2012-06-20 16:38:30 -070028
Kiet Lama7f454d2014-07-24 12:04:06 -070029
30
Jeff Johnson295189b2012-06-20 16:38:30 -070031/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070032 W L A N _ Q C T _ WDA . C
Jeff Johnson295189b2012-06-20 16:38:30 -070033 OVERVIEW:
Jeff Johnson295189b2012-06-20 16:38:30 -070034 This software unit holds the implementation of the WLAN Transport Layer.
Jeff Johnson295189b2012-06-20 16:38:30 -070035 The functions externalized by this module are to be called ONLY by other
36 WLAN modules that properly register with the Transport Layer initially.
Jeff Johnson295189b2012-06-20 16:38:30 -070037 DEPENDENCIES:
Jeff Johnson295189b2012-06-20 16:38:30 -070038 Are listed for each API below.
39
Jeff Johnson295189b2012-06-20 16:38:30 -070040===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070041/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070042 EDIT HISTORY FOR FILE
43
Jeff Johnson295189b2012-06-20 16:38:30 -070044 This section contains comments describing changes made to the module.
45 Notice that changes are listed in reverse chronological order.
46
Jeff Johnson295189b2012-06-20 16:38:30 -070047 $Header$$DateTime$$Author$
48
Jeff Johnson295189b2012-06-20 16:38:30 -070049 when who what, where, why
50---------- --- -------------------------------------------------
5110/05/2011 haparna Adding support for Keep Alive Feature
522010-12-30 smiryala UMAC convergence changes
532010-08-19 adwivedi WLAN DAL AL(WDA) layer for Prima
54===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070055#include "vos_mq.h"
56#include "vos_api.h"
57#include "vos_packet.h"
58#include "vos_nvitem.h"
59#include "sirApi.h"
60#include "wlan_qct_pal_packet.h"
Mihir Shete40a55652014-03-02 14:14:47 +053061#include "wlan_qct_pal_device.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070062#include "wlan_qct_wda.h"
63#include "wlan_qct_wda_msg.h"
64#include "wlan_qct_wdi_cfg.h"
65#include "wlan_qct_wdi.h"
66#include "wlan_qct_wdi_ds.h"
67#include "wlan_hal_cfg.h"
68/**********************/
69#include "wniApi.h"
70#include "cfgApi.h"
71#include "limApi.h"
72#include "wlan_qct_tl.h"
73#include "wlan_qct_tli_ba.h"
74#include "limUtils.h"
75#include "btcApi.h"
76#include "vos_sched.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070077#include "pttMsgApi.h"
78#include "wlan_qct_sys.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070079/* Used MACRO's */
80/* Get WDA context from vOSS module */
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080081#define WDA_2_4_GHZ_MAX_FREQ 3000
Jeff Johnson295189b2012-06-20 16:38:30 -070082#define VOS_GET_WDA_CTXT(a) vos_get_context(VOS_MODULE_ID_WDA, a)
83#define VOS_GET_MAC_CTXT(a) vos_get_context(VOS_MODULE_ID_PE, a)
Jeff Johnson295189b2012-06-20 16:38:30 -070084#define WDA_BA_TX_FRM_THRESHOLD (5)
Jeff Johnson295189b2012-06-20 16:38:30 -070085#define CONVERT_WDI2SIR_STATUS(x) \
86 ((WDI_STATUS_SUCCESS != (x)) ? eSIR_FAILURE : eSIR_SUCCESS)
87
Abhishek Singhe721fb42015-11-30 14:22:10 +053088/* Threshold to print tx time taken in ms*/
89#define WDA_TX_TIME_THRESHOLD 1000
90/* Recover with ssr if tx timeouts continuously
91 * for threshold number of times.
92 */
Sravan Kumar Kairam1113ee72017-01-06 14:52:09 +053093#define WDA_TX_FAILURE_RECOVERY_THRESHOLD 5
94/* BTQM flush FW dump command */
95#define WDA_TX_FW_RECOVERY_THRESHOLD 3
Abhishek Singhe721fb42015-11-30 14:22:10 +053096
Jeff Johnson295189b2012-06-20 16:38:30 -070097#define IS_WDI_STATUS_FAILURE(status) \
98 ((WDI_STATUS_SUCCESS != (status)) && (WDI_STATUS_PENDING != (status)))
Jeff Johnson295189b2012-06-20 16:38:30 -070099#define CONVERT_WDI2VOS_STATUS(x) \
100 ((IS_WDI_STATUS_FAILURE(x)) ? VOS_STATUS_E_FAILURE : VOS_STATUS_SUCCESS)
101
102/* macro's for acessing TL API/data structures */
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -0700103#define WDA_TL_GET_STA_STATE(a, b, c) WLANTL_GetSTAState(a, b, c)
Jeff Johnson295189b2012-06-20 16:38:30 -0700104#define WDA_TL_GET_TX_PKTCOUNT(a, b, c, d) WLANTL_GetTxPktCount(a, b, c, d)
Jeff Johnson295189b2012-06-20 16:38:30 -0700105#define WDA_GET_BA_TXFLAG(a, b, c) \
106 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) & (1 << (c)))
107
108#define WDA_SET_BA_TXFLAG(a, b, c) \
109 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) |= (1 << (c)))
110
111#define WDA_CLEAR_BA_TXFLAG(a, b, c) \
112 (((a)->wdaStaInfo[b].ucUseBaBitmap) &= ~(1 << c))
Jeff Johnson295189b2012-06-20 16:38:30 -0700113#define WDA_TL_BA_SESSION_ADD(a, b, c, d, e, f, g) \
114 WLANTL_BaSessionAdd(a, b, c, d, e, f, g)
Jeff Johnson295189b2012-06-20 16:38:30 -0700115/* timer related Macros */
116#define WDA_CREATE_TIMER(a, b, c, d, e, f, g) \
117 tx_timer_create(a, b, c, d, e, f, g)
118#define WDA_START_TIMER(a) tx_timer_activate(a)
119#define WDA_STOP_TIMER(a) tx_timer_deactivate(a)
120#define WDA_DESTROY_TIMER(a) tx_timer_delete(a)
Jeff Johnson32d95a32012-09-10 13:15:23 -0700121#define WDA_WDI_START_TIMEOUT (WDI_RESPONSE_TIMEOUT + 5000)
Jeff Johnson295189b2012-06-20 16:38:30 -0700122
123#define WDA_LAST_POLLED_THRESHOLD(a, curSta, tid) \
124 ((a)->wdaStaInfo[curSta].framesTxed[tid] + WDA_BA_TX_FRM_THRESHOLD)
Jeff Johnson295189b2012-06-20 16:38:30 -0700125#define WDA_BA_MAX_WINSIZE (64)
Jeff Johnson295189b2012-06-20 16:38:30 -0700126#define WDA_INVALID_KEY_INDEX 0xFF
Jeff Johnson295189b2012-06-20 16:38:30 -0700127#define WDA_NUM_PWR_SAVE_CFG 11
Jeff Johnson295189b2012-06-20 16:38:30 -0700128#define WDA_TX_COMPLETE_TIME_OUT_VALUE 1000
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800129#define WDA_TRAFFIC_STATS_TIME_OUT_VALUE 1000
Jeff Johnson295189b2012-06-20 16:38:30 -0700130
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700131#define WDA_MAX_RETRIES_TILL_RING_EMPTY 1000 /* MAX 10000 msec = 10 seconds wait */
Jeff Johnson295189b2012-06-20 16:38:30 -0700132
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700133#define WDA_WAIT_MSEC_TILL_RING_EMPTY 10 /* 10 msec wait per cycle */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -0700134#define WDA_IS_NULL_MAC_ADDRESS(mac_addr) \
135 ((mac_addr[0] == 0x00) && (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) &&\
Hu Wang412440a2016-06-16 17:17:28 +0800136 (mac_addr[3] == 0x00) && (mac_addr[4] == 0x00) && (mac_addr[5] == 0x00))
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -0700137
138#define WDA_MAC_ADDR_ARRAY(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
139#define WDA_MAC_ADDRESS_STR "%02x:%02x:%02x:%02x:%02x:%02x"
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -0800140#define WDA_DUMPCMD_WAIT_TIMEOUT 10000
Sreelakshmi Konamki60ccfb32016-07-08 12:53:12 +0530141#define WDA_BA_MAX_RETRY_THRESHOLD 10
142#define WDA_BA_RETRY_TIME 300000 /* Time is in msec, equal to 5 mins */
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -0800143
Jeff Johnson295189b2012-06-20 16:38:30 -0700144/* extern declarations */
145extern void vos_WDAComplete_cback(v_PVOID_t pVosContext);
Hoonki Lee9af07cf2013-04-24 01:21:58 -0700146extern wpt_uint8 WDI_GetActiveSessionsCount (void *pWDICtx, wpt_macAddr macBSSID, wpt_boolean skipBSSID);
147
Jeff Johnson295189b2012-06-20 16:38:30 -0700148/* forward declarations */
149void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
150 void *pBodyptr, tANI_U32 bodyVal) ;
151VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
152 WDI_StartReqParamsType *wdiStartParams ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700153VOS_STATUS WDA_wdiCompleteCB(v_PVOID_t pVosContext) ;
154VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams);
155
156extern v_BOOL_t sys_validateStaConfig( void *pImage, unsigned long cbFile,
157 void **ppStaConfig, v_SIZE_t *pcbStaConfig ) ;
Sachin Ahujaa4b33a32014-06-18 13:22:00 +0530158void processCfgDownloadReq(tpAniSirGlobal pMac) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700159void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
160 WDI_ConfigBSSReqInfoType *wdiBssParams, tAddBssParams *wdaBssParams) ;
161void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
162 WDI_ConfigStaReqInfoType *wdiStaParams, tAddStaParams *wdaStaParams) ;
163void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
164 void* pUserData ) ;
165static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA) ;
166static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA);
Sreelakshmi Konamki60ccfb32016-07-08 12:53:12 +0530167bool WDA_AllowAddBA(tpAniSirGlobal pMAc, tANI_U8 staId, tANI_U8 tid);
Jeff Johnson295189b2012-06-20 16:38:30 -0700168void WDA_BaCheckActivity(tWDA_CbContext *pWDA) ;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800169void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700170void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams, void* pUserData);
Jeff Johnson295189b2012-06-20 16:38:30 -0700171#ifdef WLAN_FEATURE_VOWIFI_11R
172VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA, tAggrAddTsParams *pAggrAddTsReqParams);
173#endif /* WLAN_FEATURE_VOWIFI_11R */
174
Jeff Johnson295189b2012-06-20 16:38:30 -0700175void WDA_TimerHandler(v_VOID_t *pWDA, tANI_U32 timerInfo) ;
176void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pContext) ;
177VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700178#ifdef FEATURE_WLAN_SCAN_PNO
179static VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA, tSirPNOScanReq *pPNOScanReqParams);
180static VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA, tSirSetRSSIFilterReq* pRssiFilterParams);
181static VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA, tSirUpdateScanParams *pUpdateScanParams);
182#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700183#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -0700184VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,tSirRoamOffloadScanReq *pRoamOffloadScanReqParams);
Kapil Gupta04ab1992016-06-26 13:36:51 +0530185VOS_STATUS WDA_ProcessPERRoamScanOffloadReq(tWDA_CbContext *pWDA,
186 tSirPERRoamOffloadScanReq *pPERRoamOffloadScanReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700187void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData);
Kapil Gupta04ab1992016-06-26 13:36:51 +0530188void WDA_PERRoamOffloadScanReqCallback(WDI_Status status, void* pUserData);
189void WDA_PERRoamTriggerScanReqCallback(WDI_Status status, void* pUserData);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700190void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType);
191void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType);
192#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700193#ifdef WLAN_FEATURE_PACKET_FILTERING
194static VOS_STATUS WDA_Process8023MulticastListReq (
195 tWDA_CbContext *pWDA,
196 tSirRcvFltMcAddrList *pRcvFltMcAddrLis
197 );
198static VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (
199 tWDA_CbContext *pWDA,
200 tSirRcvPktFilterCfgType *pRcvPktFilterCfg
201 );
202static VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (
203 tWDA_CbContext *pWDA,
204 tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp
205 );
206static VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (
207 tWDA_CbContext *pWDA,
208 tSirRcvFltPktClearParam *pRcvFltPktClearParam
209 );
210#endif // WLAN_FEATURE_PACKET_FILTERING
Jeff Johnson295189b2012-06-20 16:38:30 -0700211VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA, tSirSetPowerParamsReq *pPowerParams);
Jeff Johnson295189b2012-06-20 16:38:30 -0700212static VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
213 tpTxControlParams pTxCtrlParam);
Jeff Johnson295189b2012-06-20 16:38:30 -0700214VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
215 v_U8_t *pDefaultKeyId,
216 v_U8_t *pNumKeys,
217 WDI_KeysType *pWdiKeys );
218
219#ifdef WLAN_FEATURE_GTK_OFFLOAD
220static VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA, tpSirGtkOffloadParams pGtkOffloadParams);
221static VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA, tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp);
222#endif // WLAN_FEATURE_GTK_OFFLOAD
223
c_hpothu92367912014-05-01 15:18:17 +0530224v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
225 tSirBcnMissRateReq *pData);
226
Jeff Johnson295189b2012-06-20 16:38:30 -0700227VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
228 tAniSetTmLevelReq *setTmLevelReq);
Mohit Khanna4a70d262012-09-11 16:30:12 -0700229#ifdef WLAN_FEATURE_11AC
230VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
231 tUpdateVHTOpMode *pData);
232#endif
Leo Chang9056f462013-08-01 19:21:11 -0700233
234#ifdef FEATURE_WLAN_LPHB
235VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
236 tSirLPHBReq *pData);
237#endif /* FEATURE_WLAN_LPHB */
Sunil Duttbd736ed2014-05-26 21:19:41 +0530238
Abhishek Singh00b71972016-01-07 10:51:04 +0530239#ifdef WLAN_FEATURE_RMC
240void WDA_IBSSPeerInfoRequestHandler(v_PVOID_t pVosContext,
241 v_PVOID_t pData);
242#endif /* WLAN_FEATURE_RMC */
243
Dino Mycle41bdc942014-06-10 11:30:24 +0530244#ifdef WLAN_FEATURE_EXTSCAN
245VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
246 tSirEXTScanStartReqParams *wdaRequest);
247VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
248 tSirEXTScanStopReqParams *wdaRequest);
249VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
250 tSirEXTScanGetCachedResultsReqParams *wdaRequest);
251VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
252 tSirGetEXTScanCapabilitiesReqParams *wdaRequest);
253VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
254 tSirEXTScanSetBssidHotListReqParams *wdaRequest);
255VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
256 tSirEXTScanResetBssidHotlistReqParams *wdaRequest);
Padma, Santhosh Kumarc1f7f052015-08-26 12:29:01 +0530257VOS_STATUS WDA_ProcessHighPriorityDataInfoInd(tWDA_CbContext *pWDA,
258 tSirHighPriorityDataInfoInd *wdaRequest);
Dino Mycle41bdc942014-06-10 11:30:24 +0530259#endif /* WLAN_FEATURE_EXTSCAN */
260
Sunil Duttbd736ed2014-05-26 21:19:41 +0530261#ifdef WLAN_FEATURE_LINK_LAYER_STATS
262VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
263 tSirLLStatsSetReq *wdaRequest);
264
265VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
266 tSirLLStatsGetReq *wdaRequest);
267
268VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
269 tSirLLStatsClearReq *wdaRequest);
270#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Abhishek Singh85b74712014-10-08 11:38:19 +0530271
272v_VOID_t WDA_ProcessFWStatsGetReq(tWDA_CbContext *pWDA,
273 tSirFWStatsGetReq *wdaRequest);
274
Srinivas Dasari4dae48f2014-11-26 21:14:16 +0530275VOS_STATUS WDA_ProcessEncryptMsgReq(tWDA_CbContext *pWDA,
276 u8 *wdaRequest);
Abhishek Singh41988ba2015-05-25 19:42:29 +0530277VOS_STATUS
278WDA_ProcessSetRtsCtsHTVhtInd(tWDA_CbContext *pWDA,
279 tANI_U32 val);
Srinivas Dasari4dae48f2014-11-26 21:14:16 +0530280
c_manjeecfd1efb2015-09-25 19:32:34 +0530281VOS_STATUS
282WDA_ProcessFwrMemDumpReq(tWDA_CbContext *pWDA,
283 tAniFwrDumpReq* pFwrMemDumpReq);
Srinivas Dasari32a79262015-02-19 13:04:49 +0530284
Katya Nigamf0511f62015-05-05 16:40:57 +0530285VOS_STATUS WDA_ProcessMonStartReq( tWDA_CbContext *pWDA, void* wdaRequest);
286VOS_STATUS WDA_ProcessMonStopReq( tWDA_CbContext *pWDA, void* wdaRequest);
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +0530287VOS_STATUS WDA_ProcessEnableDisableCAEventInd(tWDA_CbContext *pWDA, tANI_U8 val);
Arun Khandavalli7eeb1592015-10-19 21:36:57 +0530288
289VOS_STATUS WDA_ProcessWifiConfigReq(tWDA_CbContext *pWDA,
290 tSetWifiConfigParams *pwdaWificonfig);
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +0530291
292VOS_STATUS WDA_ProcessStartOemDataReqIndNew(tWDA_CbContext *pWDA,
293 tOemDataReqNewConfig *pOemDataReqNewConfig);
294
Mahesh A Saptasagarcfc65ae2015-12-22 15:06:10 +0530295
296v_VOID_t WDA_ProcessAntennaDiversitySelectionReq(tWDA_CbContext *pWDA,
297 tSirAntennaDiversitySelectionReq *pData);
298
Mahesh A Saptasagar7d432952016-02-09 14:01:03 +0530299VOS_STATUS WDA_ProcessBcnMissPenaltyCount(tWDA_CbContext *pWDA,
300 tModifyRoamParamsReqParams *params);
Srinivas Dasari32a79262015-02-19 13:04:49 +0530301/*
302 * FUNCTION: WDA_ProcessNanRequest
303 * Process NAN request
304 */
305VOS_STATUS WDA_ProcessNanRequest(tWDA_CbContext *pWDA,
306 tNanRequest *wdaRequest)
307{
308 WDI_Status status = WDI_STATUS_SUCCESS;
309 tWDA_ReqParams *pWdaParams;
310 WDI_NanRequestType *wdiRequest = NULL;
311 size_t wdiReqLength = sizeof(WDI_NanRequestType)
312 - sizeof(wdiRequest->request_data)
313 + wdaRequest->request_data_len;
314
315 wdiRequest = (WDI_NanRequestType *)vos_mem_malloc(wdiReqLength);
316
317 if (NULL == wdiRequest)
318 {
319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
320 "%s: VOS MEM Alloc Failure, size : %zu", __func__,
321 wdiReqLength);
322 vos_mem_free(wdaRequest);
323 return VOS_STATUS_E_NOMEM;
324 }
325
326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
327 "WDA: Process Nan Request length: %zu", wdiReqLength);
328
329 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
330 if (NULL == pWdaParams)
331 {
332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
333 "%s: VOS MEM Alloc Failure for tWDA_ReqParams", __func__);
334 VOS_ASSERT(0);
335 vos_mem_free(wdaRequest);
336 vos_mem_free(wdiRequest);
337 return VOS_STATUS_E_NOMEM;
338 }
339
340 wdiRequest->request_data_len = wdaRequest->request_data_len;
341
342 vos_mem_copy( wdiRequest->request_data,
343 wdaRequest->request_data,
344 wdaRequest->request_data_len);
345
346 vos_mem_free(wdaRequest);
347
348 pWdaParams->pWdaContext = pWDA;
349 pWdaParams->wdaMsgParam = NULL;
350 pWdaParams->wdaWdiApiMsgParam = wdiRequest;
351
352 status = WDI_NanRequest(wdiRequest, pWdaParams);
353
354 if (IS_WDI_STATUS_FAILURE(status))
355 {
356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
357 "Failure to request. Free all the memory " );
358 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
359 vos_mem_free(pWdaParams);
360 }
361
362 return CONVERT_WDI2VOS_STATUS(status) ;
363}
364
Padma, Santhosh Kumar9093b202015-07-21 15:37:38 +0530365/**
366 * wda_state_info_dump() - prints state information of wda layer
367 */
368static void wda_state_info_dump(void)
369{
370 v_CONTEXT_t vos_ctx_ptr = NULL;
371 tWDA_CbContext *wda = NULL ;
Srinivas Dasari32a79262015-02-19 13:04:49 +0530372
Padma, Santhosh Kumar9093b202015-07-21 15:37:38 +0530373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
374 "<------ %s " ,__func__);
375
376 /* Get the Global VOSS Context */
377 vos_ctx_ptr = vos_get_global_context(VOS_MODULE_ID_VOSS, NULL);
378
379 if (NULL != vos_ctx_ptr)
380 wda = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA,
381 vos_ctx_ptr );
382 else {
383 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
384 "%s: Invalid Global VOSS Context", __func__);
385 VOS_ASSERT(0);
386 return;
387 }
388
389 if (NULL != wda)
390 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
391 "wdaState: %d linkState: %d", wda->wdaState,
392 wda->linkState);
393 else {
394 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
395 "%s: Invalid WDA Context", __func__);
396 VOS_ASSERT(0);
397 }
398}
399
400/**
401 * wda_register_debug_callback() - registration function for wda layer
402 * to print wda state information
403 */
404static void wda_register_debug_callback(void)
405{
406 vos_register_debug_callback(VOS_MODULE_ID_WDA, &wda_state_info_dump);
407}
Srinivas Dasari32a79262015-02-19 13:04:49 +0530408
Jeff Johnson295189b2012-06-20 16:38:30 -0700409/*
410 * FUNCTION: WDA_open
411 * Allocate the WDA context
412 */
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530413VOS_STATUS WDA_open(v_PVOID_t pVosContext, v_PVOID_t devHandle,
Jeff Johnson295189b2012-06-20 16:38:30 -0700414 tMacOpenParameters *pMacParams )
415{
416 tWDA_CbContext *wdaContext;
417 VOS_STATUS status;
418 WDI_DeviceCapabilityType wdiDevCapability = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700419 /* Allocate WDA context */
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +0530420 status = vos_alloc_context(pVosContext, VOS_MODULE_ID_WDA,
Jeff Johnson295189b2012-06-20 16:38:30 -0700421 (v_VOID_t **)&wdaContext, sizeof(tWDA_CbContext)) ;
422 if(!VOS_IS_STATUS_SUCCESS(status))
423 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +0530424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "%s: Failed to "
425 "allocate context for WDA - status = %d",__func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700426 return VOS_STATUS_E_NOMEM;
427 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700428 /*__asm int 3;*/
429 vos_mem_zero(wdaContext,sizeof(tWDA_CbContext));
430
431 /* Initialize data structures */
432 wdaContext->pVosContext = pVosContext;
433 wdaContext->wdaState = WDA_INIT_STATE;
434 wdaContext->uTxFlowMask = WDA_TXFLOWMASK;
Sravan Kumar Kairambe037222016-06-19 12:56:24 +0530435 vos_lock_init(&wdaContext->mgmt_pkt_lock);
436
Jeff Johnson295189b2012-06-20 16:38:30 -0700437 /* Initialize WDA-WDI synchronization event */
438 status = vos_event_init(&wdaContext->wdaWdiEvent);
439 if(!VOS_IS_STATUS_SUCCESS(status))
440 {
441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800442 "WDI Sync Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800443 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700444 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700445 /* Init Frame transfer event */
446 status = vos_event_init(&wdaContext->txFrameEvent);
447 if(!VOS_IS_STATUS_SUCCESS(status))
448 {
449 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800450 "VOS Mgmt Frame Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800451 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700452 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700453 status = vos_event_init(&wdaContext->suspendDataTxEvent);
454 if(!VOS_IS_STATUS_SUCCESS(status))
455 {
456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800457 "VOS suspend data tx Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800458 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700459 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700460 status = vos_event_init(&wdaContext->waitOnWdiIndicationCallBack);
461 if(!VOS_IS_STATUS_SUCCESS(status))
462 {
463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800464 "VOS wait On Wdi Ind Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800465 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700466 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700467 vos_trace_setLevel(VOS_MODULE_ID_WDA,VOS_TRACE_LEVEL_ERROR);
Jeff Johnson295189b2012-06-20 16:38:30 -0700468 wdaContext->driverMode = pMacParams->driverType;
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530469 if(WDI_STATUS_SUCCESS != WDI_Init(devHandle, &wdaContext->pWdiContext,
Jeff Johnson295189b2012-06-20 16:38:30 -0700470 &wdiDevCapability, pMacParams->driverType))
471 {
472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
473 "WDI Init failed" );
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800474 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700475 }
476 else
477 {
478 pMacParams->maxStation = wdiDevCapability.ucMaxSTASupported ;
479 pMacParams->maxBssId = wdiDevCapability.ucMaxBSSSupported;
480 pMacParams->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
Jeff Johnson295189b2012-06-20 16:38:30 -0700481 /* update max STA in WDA used for BA */
482 wdaContext->wdaMaxSta = pMacParams->maxStation;
483 /* store the frameTransRequired flag in wdaContext, to send this to HAL
484 * in WDA_Start
485 */
486 wdaContext->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
487 }
Padma, Santhosh Kumar9093b202015-07-21 15:37:38 +0530488
489 wda_register_debug_callback();
490
Jeff Johnson295189b2012-06-20 16:38:30 -0700491 return status;
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800492
493error:
494 vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
495 return VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -0700496}
497
Jeff Johnson295189b2012-06-20 16:38:30 -0700498/*
499 * FUNCTION: WDA_preStart
500 * Trigger DAL-AL to start CFG download
501 */
502VOS_STATUS WDA_preStart(v_PVOID_t pVosContext)
503{
504 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
505 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700506 /*
507 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
508 */
509 wdaMsg.type = WNI_CFG_DNLD_REQ ;
510 wdaMsg.bodyptr = NULL;
511 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700512 /* post the message.. */
513 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
514 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
515 {
516 vosStatus = VOS_STATUS_E_BADMSG;
517 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700518 return( vosStatus );
519}
Jeff Johnson295189b2012-06-20 16:38:30 -0700520/*
521 * FUNCTION: WDA_wdiStartCallback
522 * Once WDI_Start is finished, WDI start callback will be called by WDI
523 * to indicate completion of WDI_Start.
524 */
525void WDA_wdiStartCallback(WDI_StartRspParamsType *wdiRspParams,
526 void *pVosContext)
527{
528 tWDA_CbContext *wdaContext;
529 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700530 if (NULL == pVosContext)
531 {
532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700533 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700534 return;
535 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700536 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
537 if (NULL == wdaContext)
538 {
539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700540 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700541 return;
542 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700543 if (WDI_STATUS_SUCCESS != wdiRspParams->wdiStatus)
544 {
545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700546 "%s: WDI_Start() failure reported", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700547 }
548 else
549 {
550 wdaContext->wdaState = WDA_START_STATE;
551 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700552 /* extract and save version information from the Start Response */
553 wdaContext->wcnssWlanCompiledVersion.major =
554 wdiRspParams->wlanCompiledVersion.major;
555 wdaContext->wcnssWlanCompiledVersion.minor =
556 wdiRspParams->wlanCompiledVersion.minor;
557 wdaContext->wcnssWlanCompiledVersion.version =
558 wdiRspParams->wlanCompiledVersion.version;
559 wdaContext->wcnssWlanCompiledVersion.revision =
560 wdiRspParams->wlanCompiledVersion.revision;
561 wdaContext->wcnssWlanReportedVersion.major =
562 wdiRspParams->wlanReportedVersion.major;
563 wdaContext->wcnssWlanReportedVersion.minor =
564 wdiRspParams->wlanReportedVersion.minor;
565 wdaContext->wcnssWlanReportedVersion.version =
566 wdiRspParams->wlanReportedVersion.version;
567 wdaContext->wcnssWlanReportedVersion.revision =
568 wdiRspParams->wlanReportedVersion.revision;
569 wpalMemoryCopy(wdaContext->wcnssSoftwareVersionString,
570 wdiRspParams->wcnssSoftwareVersion,
571 sizeof(wdaContext->wcnssSoftwareVersionString));
572 wpalMemoryCopy(wdaContext->wcnssHardwareVersionString,
573 wdiRspParams->wcnssHardwareVersion,
574 sizeof(wdaContext->wcnssHardwareVersionString));
Jeff Johnson295189b2012-06-20 16:38:30 -0700575 /* Notify WDA_start that WDI_Start has completed */
576 status = vos_event_set(&wdaContext->wdaWdiEvent);
Jeff Johnson43971f52012-07-17 12:26:56 -0700577 if (VOS_STATUS_SUCCESS != status)
Jeff Johnson295189b2012-06-20 16:38:30 -0700578 {
579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700580 "%s: Unable to unblock WDA_start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700581 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700582 return;
583}
584
Jeff Johnson295189b2012-06-20 16:38:30 -0700585/*
586 * FUNCTION: WDA_start
587 * Prepare TLV configuration and call WDI_Start.
588 */
Jeff Johnson295189b2012-06-20 16:38:30 -0700589VOS_STATUS WDA_start(v_PVOID_t pVosContext)
590{
591 tWDA_CbContext *wdaContext;
592 VOS_STATUS status;
593 WDI_Status wdiStatus;
594 WDI_StartReqParamsType wdiStartParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700595 if (NULL == pVosContext)
596 {
597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700598 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700599 return VOS_STATUS_E_FAILURE;
600 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700601 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
602 if (NULL == wdaContext)
603 {
604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700605 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700606 return VOS_STATUS_E_FAILURE;
607 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700608 /* Non-FTM mode, WDA status for START must be INIT
609 * FTM mode, WDA Status for START can be INIT or STOP */
610 if ( (WDA_INIT_STATE != wdaContext->wdaState) &&
611 (WDA_STOP_STATE != wdaContext->wdaState) )
612 {
613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
614 "%s: Invoked from wrong state %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700615 __func__, wdaContext->wdaState );
Jeff Johnson295189b2012-06-20 16:38:30 -0700616 return VOS_STATUS_E_FAILURE;
617 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700618 /* initialize the wdiStartParam. Note that we can create this on
619 the stack since we won't exit until WDI_Start() completes or
620 times out */
621 vos_mem_set(&wdiStartParam, sizeof(wdiStartParam), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700622 wdiStartParam.wdiDriverType = wdaContext->driverMode;
Jeff Johnson295189b2012-06-20 16:38:30 -0700623 /* prepare the config TLV for the WDI */
624 status = WDA_prepareConfigTLV(pVosContext, &wdiStartParam);
625 if ( !VOS_IS_STATUS_SUCCESS(status) )
626 {
627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700628 "%s: Unable to prepare Config TLV", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700629 return VOS_STATUS_E_FAILURE;
630 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700631 /* note from here onwards if an error occurs we must
632 reclaim the config TLV buffer */
Jeff Johnson295189b2012-06-20 16:38:30 -0700633 wdiStartParam.wdiLowLevelIndCB = WDA_lowLevelIndCallback;
634 wdiStartParam.pIndUserData = (v_PVOID_t *)wdaContext;
635 wdiStartParam.wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700636 /* initialize the WDA-WDI synchronization event */
637 vos_event_reset(&wdaContext->wdaWdiEvent);
Jeff Johnson295189b2012-06-20 16:38:30 -0700638 /* call WDI start */
639 wdiStatus = WDI_Start(&wdiStartParam,
640 (WDI_StartRspCb)WDA_wdiStartCallback,
641 (v_VOID_t *)pVosContext);
642 if ( IS_WDI_STATUS_FAILURE(wdiStatus) )
643 {
644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700645 "%s: WDI Start failed", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700646 vos_mem_free(wdiStartParam.pConfigBuffer);
647 return VOS_STATUS_E_FAILURE;
648 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700649 /* wait for WDI start to invoke our callback */
650 status = vos_wait_single_event( &wdaContext->wdaWdiEvent,
651 WDA_WDI_START_TIMEOUT );
652 if ( !VOS_IS_STATUS_SUCCESS(status) )
653 {
654 if ( VOS_STATUS_E_TIMEOUT == status )
655 {
656 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700657 "%s: Timeout occurred during WDI_Start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700658 }
659 else
660 {
661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
662 "%s: Error %d while waiting for WDI_Start",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700663 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700664 }
665 vos_mem_free(wdiStartParam.pConfigBuffer);
Siddharth Bhalbea38ad2014-10-12 14:10:52 +0530666 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700667 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700668 /* WDI_Start() has completed so we can resume our work */
Jeff Johnson295189b2012-06-20 16:38:30 -0700669 /* we no longer need the config TLV */
670 vos_mem_free(wdiStartParam.pConfigBuffer);
Jeff Johnson295189b2012-06-20 16:38:30 -0700671 /* if we are not in the START state then WDI_Start() failed */
672 if (WDA_START_STATE != wdaContext->wdaState)
673 {
674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700675 "%s: WDI_Start() failure detected", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700676 return VOS_STATUS_E_FAILURE;
677 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700678 /* FTM mode does not need to monitor BA activity */
679 if ( eDRIVER_TYPE_MFG != wdaContext->driverMode )
680 {
681 status = wdaCreateTimers(wdaContext) ;
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -0800682 if(VOS_STATUS_SUCCESS == status)
683 {
684 wdaContext->wdaTimersCreated = VOS_TRUE;
685 }
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +0530686 else
687 {
688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
689 FL("wda create timers failed"));
690 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700691 }
Leo Chang9d76f622013-08-23 16:34:52 -0700692 else
693 {
694 vos_event_init(&wdaContext->ftmStopDoneEvent);
695 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700696 return status;
697}
698
Jeff Johnson295189b2012-06-20 16:38:30 -0700699/*
700 * FUNCTION: WDA_prepareConfigTLV
701 * Function to prepare CFG for DAL(WDA)
702 */
703VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
704 WDI_StartReqParamsType *wdiStartParams )
705{
706 /* get pMac to acess CFG data base */
707 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
708 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
709 tHalCfg *tlvStruct = NULL ;
710 tANI_U8 *tlvStructStart = NULL ;
711 tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
712 v_PVOID_t *configParam;
713 tANI_U32 configParamSize;
714 tANI_U32 *configDataValue;
715 WDI_WlanVersionType wcnssCompiledApiVersion;
Wilson Tsaof8b37942013-09-06 10:49:00 -0700716 tANI_U8 i;
717
Jeff Johnson295189b2012-06-20 16:38:30 -0700718 if ((NULL == pMac)||(NULL == wdaContext))
719 {
720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700721 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700722 VOS_ASSERT(0);
723 return VOS_STATUS_E_FAILURE;
724 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700725 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
726 WNI_CFG_STA_ID_LEN +
727 WNI_CFG_EDCA_WME_ACBK_LEN +
728 WNI_CFG_EDCA_WME_ACBE_LEN +
729 WNI_CFG_EDCA_WME_ACVI_LEN +
730 WNI_CFG_EDCA_WME_ACVO_LEN +
731 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700732 /* malloc memory for all configs in one shot */
733 configParam = vos_mem_malloc(configParamSize);
734
735 if(NULL == configParam )
736 {
737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700738 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700739 VOS_ASSERT(0) ;
740 return VOS_STATUS_E_NOMEM;
741 }
742 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700743 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700744 tlvStruct = (tHalCfg *)configParam;
745 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700746 /* TODO: Remove Later */
747 /* QWLAN_HAL_CFG_STA_ID */
748 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
749 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
750 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
751 eSIR_SUCCESS)
752 {
753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
754 "Failed to get value for WNI_CFG_STA_ID");
755 goto handle_failure;
756 }
757 tlvStruct->length = strLength ;
758 /* calculate the pad bytes to have the CFG in aligned format */
759 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
760 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700761 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
762 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700763 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
764 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
765 tlvStruct->length = sizeof(tANI_U32);
766 configDataValue = (tANI_U32 *)(tlvStruct + 1);
767 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
768 != eSIR_SUCCESS)
769 {
770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
771 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
772 goto handle_failure;
773 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700774 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
775 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700776 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
777 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
778 tlvStruct->length = sizeof(tANI_U32);
779 configDataValue = (tANI_U32 *)(tlvStruct + 1);
780 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
781 eSIR_SUCCESS)
782 {
783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
784 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
785 goto handle_failure;
786 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700787 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
788 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700789 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
790 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
791 tlvStruct->length = sizeof(tANI_U32);
792 configDataValue = (tANI_U32 *)(tlvStruct + 1);
793 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
794 != eSIR_SUCCESS)
795 {
796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
797 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
798 goto handle_failure;
799 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700800 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
801 + sizeof(tHalCfg) + tlvStruct->length)) ;
802
803 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
804 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
805 tlvStruct->length = sizeof(tANI_U32);
806 configDataValue = (tANI_U32 *)(tlvStruct + 1);
807 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
808 configDataValue ) != eSIR_SUCCESS)
809 {
810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
811 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
812 goto handle_failure;
813 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700814 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
815 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700816 /* QWLAN_HAL_CFG_CAL_PERIOD */
817 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
818 tlvStruct->length = sizeof(tANI_U32);
819 configDataValue = (tANI_U32 *)(tlvStruct + 1);
820 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
821 != eSIR_SUCCESS)
822 {
823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
824 "Failed to get value for WNI_CFG_CAL_PERIOD");
825 goto handle_failure;
826 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700827 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
828 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700829 /* QWLAN_HAL_CFG_CAL_CONTROL */
830 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
831 tlvStruct->length = sizeof(tANI_U32);
832 configDataValue = (tANI_U32 *)(tlvStruct + 1);
833 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
834 != eSIR_SUCCESS)
835 {
836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
837 "Failed to get value for WNI_CFG_CAL_CONTROL");
838 goto handle_failure;
839 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700840 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
841 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700842 /* QWLAN_HAL_CFG_PROXIMITY */
843 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
844 tlvStruct->length = sizeof(tANI_U32);
845 configDataValue = (tANI_U32 *)(tlvStruct + 1);
846 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
847 != eSIR_SUCCESS)
848 {
849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
850 "Failed to get value for WNI_CFG_PROXIMITY");
851 goto handle_failure;
852 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700853 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
854 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700855 /* QWLAN_HAL_CFG_NETWORK_DENSITY */
856 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
857 tlvStruct->length = sizeof(tANI_U32);
858 configDataValue = (tANI_U32 *)(tlvStruct + 1);
859 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
860 != eSIR_SUCCESS)
861 {
862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
863 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
864 goto handle_failure;
865 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700866 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
867 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700868 /* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */
869 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
870 tlvStruct->length = sizeof(tANI_U32);
871 configDataValue = (tANI_U32 *)(tlvStruct + 1);
872 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
873 eSIR_SUCCESS)
874 {
875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
876 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
877 goto handle_failure;
878 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700879 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
880 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700881 /* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */
882 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
883 tlvStruct->length = sizeof(tANI_U32);
884 configDataValue = (tANI_U32 *)(tlvStruct + 1);
885 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
886 configDataValue ) != eSIR_SUCCESS)
887 {
888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
889 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
890 goto handle_failure;
891 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700892 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
893 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700894 /* QWLAN_HAL_CFG_RTS_THRESHOLD */
895 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
896 tlvStruct->length = sizeof(tANI_U32);
897 configDataValue = (tANI_U32 *)(tlvStruct + 1);
898 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
899 eSIR_SUCCESS)
900 {
901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
902 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
903 goto handle_failure;
904 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700905 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
906 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700907 /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
908 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
909 tlvStruct->length = sizeof(tANI_U32);
910 configDataValue = (tANI_U32 *)(tlvStruct + 1);
911 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
912 eSIR_SUCCESS)
913 {
914 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
915 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
916 goto handle_failure;
917 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700918 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
919 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700920 /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
921 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
922 tlvStruct->length = sizeof(tANI_U32);
923 configDataValue = (tANI_U32 *)(tlvStruct + 1);
924 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
925 eSIR_SUCCESS)
926 {
927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
928 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
929 goto handle_failure;
930 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700931 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
932 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700933 /* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */
934 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
935 tlvStruct->length = sizeof(tANI_U32);
936 configDataValue = (tANI_U32 *)(tlvStruct + 1);
937 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
938 configDataValue ) != eSIR_SUCCESS)
939 {
940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
941 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
942 goto handle_failure;
943 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700944 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
945 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700946 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
947 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
948 tlvStruct->length = sizeof(tANI_U32);
949 configDataValue = (tANI_U32 *)(tlvStruct + 1);
950 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
951 configDataValue ) != eSIR_SUCCESS)
952 {
953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
954 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
955 goto handle_failure;
956 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700957 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
958 + sizeof(tHalCfg) + tlvStruct->length));
959
960 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
961 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
962 tlvStruct->length = sizeof(tANI_U32);
963 configDataValue = (tANI_U32 *)(tlvStruct + 1);
964 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
965 configDataValue ) != eSIR_SUCCESS)
966 {
967 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
968 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
969 goto handle_failure;
970 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700971 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
972 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700973 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
974 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
975 tlvStruct->length = sizeof(tANI_U32);
976 configDataValue = (tANI_U32 *)(tlvStruct + 1);
977 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
978 configDataValue ) != eSIR_SUCCESS)
979 {
980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
981 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
982 goto handle_failure;
983 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700984 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
985 + sizeof(tHalCfg) + tlvStruct->length));
986
987 /* QWLAN_HAL_CFG_FIXED_RATE */
988 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
989 tlvStruct->length = sizeof(tANI_U32);
990 configDataValue = (tANI_U32 *)(tlvStruct + 1);
991 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
992 != eSIR_SUCCESS)
993 {
994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
995 "Failed to get value for WNI_CFG_FIXED_RATE");
996 goto handle_failure;
997 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700998 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
999 + sizeof(tHalCfg) + tlvStruct->length));
1000
1001 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
1002 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
1003 tlvStruct->length = sizeof(tANI_U32);
1004 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1005 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
1006 != eSIR_SUCCESS)
1007 {
1008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1009 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
1010 goto handle_failure;
1011 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001012 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
1013 + sizeof(tHalCfg) + tlvStruct->length));
1014
1015 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
1016 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
1017 tlvStruct->length = sizeof(tANI_U32);
1018 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1019 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
1020 configDataValue ) != eSIR_SUCCESS)
1021 {
1022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1023 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
1024 goto handle_failure;
1025 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001026 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
1027 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001028 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
1029 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
1030 tlvStruct->length = sizeof(tANI_U32);
1031 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1032 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
1033 configDataValue ) != eSIR_SUCCESS)
1034 {
1035 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1036 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
1037 goto handle_failure;
1038 }
1039 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
1040 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001041 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
1042 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
1043 tlvStruct->length = sizeof(tANI_U32);
1044 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1045 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
1046 configDataValue ) != eSIR_SUCCESS)
1047 {
1048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1049 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
1050 goto handle_failure;
1051 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001052 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1053 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001054 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
1055 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
1056 tlvStruct->length = sizeof(tANI_U32);
1057 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1058 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
1059 configDataValue ) != eSIR_SUCCESS)
1060 {
1061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1062 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
1063 goto handle_failure;
1064 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001065 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1066 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001067 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
1068 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
1069 tlvStruct->length = sizeof(tANI_U32);
1070 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1071 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
1072 configDataValue ) != eSIR_SUCCESS)
1073 {
1074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1075 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
1076 goto handle_failure;
1077 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001078 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1079 + sizeof(tHalCfg) + tlvStruct->length);
1080
Jeff Johnson295189b2012-06-20 16:38:30 -07001081 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
1082 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
1083 tlvStruct->length = sizeof(tANI_U32);
1084 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1085 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
1086 configDataValue ) != eSIR_SUCCESS)
1087 {
1088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1089 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
1090 goto handle_failure;
1091 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001092 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1093 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001094 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
1095 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
1096 tlvStruct->length = sizeof(tANI_U32);
1097 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1098 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
1099 configDataValue ) != eSIR_SUCCESS)
1100 {
1101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1102 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
1103 goto handle_failure;
1104 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001105 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1106 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001107 /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
1108 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
1109 tlvStruct->length = sizeof(tANI_U32);
1110 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1111 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
1112 eSIR_SUCCESS)
1113 {
1114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1115 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
1116 goto handle_failure;
1117 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001118 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1119 + sizeof(tHalCfg) + tlvStruct->length);
1120
1121 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
1122 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
1123 tlvStruct->length = sizeof(tANI_U32);
1124 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1125 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
1126 configDataValue ) != eSIR_SUCCESS)
1127 {
1128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1129 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
1130 goto handle_failure;
1131 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001132 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1133 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001134 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
1135 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
1136 tlvStruct->length = sizeof(tANI_U32);
1137 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1138 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
1139 configDataValue ) != eSIR_SUCCESS)
1140 {
1141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1142 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
1143 goto handle_failure;
1144 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001145 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1146 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001147 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
1148 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
1149 tlvStruct->length = sizeof(tANI_U32);
1150 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1151 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
1152 configDataValue ) != eSIR_SUCCESS)
1153 {
1154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1155 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
1156 goto handle_failure;
1157 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001158 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1159 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001160 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
1161 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
1162 tlvStruct->length = sizeof(tANI_U32);
1163 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1164 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
1165 configDataValue ) != eSIR_SUCCESS)
1166 {
1167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1168 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
1169 goto handle_failure;
1170 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001171 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1172 + sizeof(tHalCfg) + tlvStruct->length);
1173
1174 /* QWLAN_HAL_CFG_STATS_PERIOD */
1175 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
1176 tlvStruct->length = sizeof(tANI_U32);
1177 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1178 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
1179 eSIR_SUCCESS)
1180 {
1181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1182 "Failed to get value for WNI_CFG_STATS_PERIOD");
1183 goto handle_failure;
1184 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001185 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1186 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001187 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
1188 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
1189 tlvStruct->length = sizeof(tANI_U32);
1190 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1191 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
1192 eSIR_SUCCESS)
1193 {
1194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1195 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
1196 goto handle_failure;
1197 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001198 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1199 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001200 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
1201 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
1202 tlvStruct->length = sizeof(tANI_U32);
1203 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1204 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
1205 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -07001206 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1207 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001208 /* QWLAN_HAL_CFG_DTIM_PERIOD */
1209 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
1210 tlvStruct->length = sizeof(tANI_U32);
1211 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1212 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
1213 != eSIR_SUCCESS)
1214 {
1215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1216 "Failed to get value for WNI_CFG_DTIM_PERIOD");
1217 goto handle_failure;
1218 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001219 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1220 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001221 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
1222 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
1223 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
1224 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1225 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
1226 &strLength) != eSIR_SUCCESS)
1227 {
1228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1229 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1230 goto handle_failure;
1231 }
1232 tlvStruct->length = strLength;
1233 /* calculate the pad bytes to have the CFG in aligned format */
1234 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1235 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001236 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1237 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001238 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1239 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1240 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1241 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1242 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1243 &strLength) != eSIR_SUCCESS)
1244 {
1245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1246 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1247 goto handle_failure;
1248 }
1249 tlvStruct->length = strLength;
1250 /* calculate the pad bytes to have the CFG in aligned format */
1251 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1252 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001253 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1254 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001255 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1256 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1257 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1258 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1259 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1260 &strLength) != eSIR_SUCCESS)
1261 {
1262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1263 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1264 goto handle_failure;
1265 }
1266 tlvStruct->length = strLength;
1267 /* calculate the pad bytes to have the CFG in aligned format */
1268 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1269 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001270 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1271 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001272 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1273 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1274 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1275 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1276 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1277 &strLength) != eSIR_SUCCESS)
1278 {
1279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1280 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1281 goto handle_failure;
1282 }
1283 tlvStruct->length = strLength;
1284 /* calculate the pad bytes to have the CFG in aligned format */
1285 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1286 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001287 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1288 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001289 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1290 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1291 tlvStruct->length = sizeof(tANI_U32);
1292 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1293 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1294 != eSIR_SUCCESS)
1295 {
1296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1297 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1298 goto handle_failure;
1299 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001300 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1301 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001302 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1303 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1304 tlvStruct->length = sizeof(tANI_U32);
1305 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1306 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1307 != eSIR_SUCCESS)
1308 {
1309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1310 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1311 goto handle_failure;
1312 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001313 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1314 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001315 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1316 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1317 tlvStruct->length = sizeof(tANI_U32);
1318 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1319 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1320 != eSIR_SUCCESS)
1321 {
1322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1323 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1324 goto handle_failure;
1325 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001326 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1327 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001328 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1329 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1330 tlvStruct->length = sizeof(tANI_U32);
1331 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1332 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1333 != eSIR_SUCCESS)
1334 {
1335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1336 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1337 goto handle_failure;
1338 }
1339 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1340 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001341 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1342 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1343 tlvStruct->length = sizeof(tANI_U32);
1344 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1345 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1346 != eSIR_SUCCESS)
1347 {
1348 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1349 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1350 goto handle_failure;
1351 }
1352 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1353 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001354 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1355 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1356 tlvStruct->length = sizeof(tANI_U32);
1357 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1358 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1359 != eSIR_SUCCESS)
1360 {
1361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1362 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1363 goto handle_failure;
1364 }
1365 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1366 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001367 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1368 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1369 tlvStruct->length = sizeof(tANI_U32);
1370 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1371 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1372 != eSIR_SUCCESS)
1373 {
1374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1375 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1376 goto handle_failure;
1377 }
1378 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1379 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001380 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1381 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1382 tlvStruct->length = sizeof(tANI_U32);
1383 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1384 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
1385 != eSIR_SUCCESS)
1386 {
1387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1388 "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
1389 goto handle_failure;
1390 }
1391 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1392 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001393 /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
1394 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1395 tlvStruct->length = sizeof(tANI_U32);
1396 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1397 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1398 != eSIR_SUCCESS)
1399 {
1400 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1401 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1402 goto handle_failure;
1403 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001404 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1405 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001406 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1407 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1408 tlvStruct->length = sizeof(tANI_U32);
1409 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1410 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1411 != eSIR_SUCCESS)
1412 {
1413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1414 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1415 goto handle_failure;
1416 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001417 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1418 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001419 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1420 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1421 tlvStruct->length = sizeof(tANI_U32);
1422 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1423 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1424 != eSIR_SUCCESS)
1425 {
1426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1427 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1428 goto handle_failure;
1429 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001430 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1431 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001432 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1433 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1434 * into FW, so the parameters are added here.
1435 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001436 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1437 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1438 tlvStruct->length = sizeof(tANI_U32);
1439 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1440 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1441 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1442 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001443 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1444 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1445 tlvStruct->length = sizeof(tANI_U32);
1446 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1447 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1448 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1449 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001450 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1451 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1452 tlvStruct->length = sizeof(tANI_U32);
1453 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1454 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1455 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1456 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001457 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1458 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1459 tlvStruct->length = sizeof(tANI_U32);
1460 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1461 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1462 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1463 + sizeof(tHalCfg) + tlvStruct->length) ;
1464
1465 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1466 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1467 tlvStruct->length = sizeof(tANI_U32);
1468 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1469 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1470 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1471 + sizeof(tHalCfg) + tlvStruct->length) ;
1472
1473 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1474 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1475 tlvStruct->length = sizeof(tANI_U32);
1476 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1477 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1478 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1479 + sizeof(tHalCfg) + tlvStruct->length) ;
1480
1481 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1482 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1483 tlvStruct->length = sizeof(tANI_U32);
1484 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1485 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1486 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1487 + sizeof(tHalCfg) + tlvStruct->length) ;
1488
1489 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1490 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1491 tlvStruct->length = sizeof(tANI_U32);
1492 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1493 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1494 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1495 + sizeof(tHalCfg) + tlvStruct->length) ;
1496
1497 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1498 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1499 tlvStruct->length = sizeof(tANI_U32);
1500 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1501 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1502 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1503 + sizeof(tHalCfg) + tlvStruct->length) ;
1504
1505 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1506 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1507 tlvStruct->length = sizeof(tANI_U32);
1508 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1509 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1510 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1511 + sizeof(tHalCfg) + tlvStruct->length) ;
1512
1513 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1514 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1515 tlvStruct->length = sizeof(tANI_U32);
1516 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1517 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1518 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1519 + sizeof(tHalCfg) + tlvStruct->length) ;
1520
1521 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1522 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1523 tlvStruct->length = sizeof(tANI_U32);
1524 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1525 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1526 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1527 + sizeof(tHalCfg) + tlvStruct->length) ;
1528
1529 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1530 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1531 tlvStruct->length = sizeof(tANI_U32);
1532 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1533 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1534 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1535 + sizeof(tHalCfg) + tlvStruct->length) ;
1536
1537 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1538 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1539 tlvStruct->length = sizeof(tANI_U32);
1540 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1541 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1542 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1543 + sizeof(tHalCfg) + tlvStruct->length) ;
1544
1545 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1546 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1547 tlvStruct->length = sizeof(tANI_U32);
1548 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1549 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1550 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1551 + sizeof(tHalCfg) + tlvStruct->length) ;
1552
1553 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1554 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1555 tlvStruct->length = sizeof(tANI_U32);
1556 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1557 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1558 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1559 + sizeof(tHalCfg) + tlvStruct->length) ;
1560
Wilson Tsaof8b37942013-09-06 10:49:00 -07001561 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_VICTIM; i++)
1562 {
1563 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WAN_FREQ */
1564 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WAN_FREQ + i*4;
1565 tlvStruct->length = sizeof(tANI_U32);
1566 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1567 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWANFreq[i];
1568 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1569 + sizeof(tHalCfg) + tlvStruct->length) ;
1570
1571 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WLAN_FREQ */
1572 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WLAN_FREQ + i*4;
1573 tlvStruct->length = sizeof(tANI_U32);
1574 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1575 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWLANFreq[i];
1576 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1577 + sizeof(tHalCfg) + tlvStruct->length) ;
1578
1579 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG */
1580 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG + i*4;
1581 tlvStruct->length = sizeof(tANI_U32);
1582 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1583 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig[i];
1584 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1585 + sizeof(tHalCfg) + tlvStruct->length) ;
1586
1587 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG2 */
1588 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG2 + i*4;
1589 tlvStruct->length = sizeof(tANI_U32);
1590 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1591 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig2[i];
1592 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1593 + sizeof(tHalCfg) + tlvStruct->length) ;
1594 }
1595
1596 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF */
1597 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF ;
1598 tlvStruct->length = sizeof(tANI_U32);
1599 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1600 *configDataValue = pMac->btc.btcConfig.mwsCoexModemBackoff;
1601 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1602 + sizeof(tHalCfg) + tlvStruct->length) ;
1603
1604 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_CONFIG; i++)
1605 {
1606 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_CONFIGX */
1607 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_CONFIG1 + i;
1608 tlvStruct->length = sizeof(tANI_U32);
1609 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1610 *configDataValue = pMac->btc.btcConfig.mwsCoexConfig[i];
1611 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1612 + sizeof(tHalCfg) + tlvStruct->length) ;
1613 }
1614
1615 /* [COEX] QWLAN_HAL_CFG_SAR_POWER_BACKOFF */
1616 tlvStruct->type = QWLAN_HAL_CFG_SAR_POWER_BACKOFF ;
1617 tlvStruct->length = sizeof(tANI_U32);
1618 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1619 *configDataValue = pMac->btc.btcConfig.SARPowerBackoff;
1620 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1621 + sizeof(tHalCfg) + tlvStruct->length) ;
1622
Jeff Johnson32d95a32012-09-10 13:15:23 -07001623 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001624 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1625 tlvStruct->length = sizeof(tANI_U32);
1626 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1627 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1628 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1629 wcnssCompiledApiVersion.minor,
1630 wcnssCompiledApiVersion.version,
1631 wcnssCompiledApiVersion.revision);
1632 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1633 + sizeof(tHalCfg) + tlvStruct->length) ;
1634
Jeff Johnsond13512a2012-07-17 11:42:19 -07001635 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1636 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1637 tlvStruct->length = sizeof(tANI_U32);
1638 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1639 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1640 configDataValue ) != eSIR_SUCCESS)
1641 {
1642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1643 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1644 goto handle_failure;
1645 }
1646
1647 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1648 + sizeof(tHalCfg) + tlvStruct->length) ;
1649 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1650 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1651 tlvStruct->length = sizeof(tANI_U32);
1652 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1653 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1654 configDataValue ) != eSIR_SUCCESS)
1655 {
1656 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1657 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1658 goto handle_failure;
1659 }
1660
1661 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1662 + sizeof(tHalCfg) + tlvStruct->length) ;
1663
1664 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1665 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1666 tlvStruct->length = sizeof(tANI_U32);
1667 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1668 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1669 != eSIR_SUCCESS)
1670 {
1671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1672 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1673 goto handle_failure;
1674 }
1675
1676 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1677 + sizeof(tHalCfg) + tlvStruct->length) ;
1678
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08001679 /* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */
1680 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION ;
1681 tlvStruct->length = sizeof(tANI_U32);
1682 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1683 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION, configDataValue)
1684 != eSIR_SUCCESS)
1685 {
1686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1687 "Failed to get value for WNI_CFG_ENABLE_LPWR_IMG_TRANSITION");
1688 goto handle_failure;
1689 }
AnjaneeDevi Kapparapu5cdb72a2016-10-19 15:16:09 +05301690
1691 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1692 + sizeof(tHalCfg) + tlvStruct->length);
1693
Gopichand Nakkala976e3252013-01-03 15:45:56 -08001694#ifdef WLAN_SOFTAP_VSTA_FEATURE
1695 tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
1696 tlvStruct->length = sizeof(tANI_U32);
1697 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1698 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
1699 != eSIR_SUCCESS)
1700 {
1701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1702 "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
1703 goto handle_failure;
1704 }
1705
1706 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1707 + sizeof(tHalCfg) + tlvStruct->length) ;
1708#endif
1709
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08001710 /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
1711 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
1712 tlvStruct->length = sizeof(tANI_U32);
1713 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1714
1715 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
1716 != eSIR_SUCCESS)
1717 {
1718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1719 "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
1720 goto handle_failure;
1721 }
1722
1723 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1724 + sizeof(tHalCfg) + tlvStruct->length) ;
1725
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301726/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */
1727 tlvStruct->type = QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT ;
1728 tlvStruct->length = sizeof(tANI_U32);
1729 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1730 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
1731 configDataValue ) != eSIR_SUCCESS)
1732 {
1733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1734 "Failed to get value for WNI_CFG_AP_LINK_MONITOR_TIMEOUT");
1735 goto handle_failure;
1736 }
1737
1738 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1739 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301740#ifdef FEATURE_WLAN_TDLS
1741 /* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */
1742 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_MASK;
1743 tlvStruct->length = sizeof(tANI_U32);
1744 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1745 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK,
1746 configDataValue ) != eSIR_SUCCESS)
1747 {
1748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1749 "Failed to get value for WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK");
1750 goto handle_failure;
1751 }
1752 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1753 + sizeof(tHalCfg) + tlvStruct->length) ;
1754
1755 /* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */
1756 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE;
1757 tlvStruct->length = sizeof(tANI_U32);
1758 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1759 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_BUF_STA_ENABLED,
1760 configDataValue ) != eSIR_SUCCESS)
1761 {
1762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1763 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1764 goto handle_failure;
1765 }
1766 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1767 + sizeof(tHalCfg) + tlvStruct->length) ;
1768 /* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */
1769 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME;
1770 tlvStruct->length = sizeof(tANI_U32);
1771 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1772 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_PUAPSD_INACT_TIME,
1773 configDataValue ) != eSIR_SUCCESS)
1774 {
1775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1776 "Failed to get value for WNI_CFG_TDLS_PUAPSD_INACT_TIME");
1777 goto handle_failure;
1778 }
1779 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1780 + sizeof(tHalCfg) + tlvStruct->length) ;
1781 /* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */
1782 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP;
1783 tlvStruct->length = sizeof(tANI_U32);
1784 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1785 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_RX_FRAME_THRESHOLD,
1786 configDataValue ) != eSIR_SUCCESS)
1787 {
1788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1789 "Failed to get value for WNI_CFG_TDLS_RX_FRAME_THRESHOLD");
1790 goto handle_failure;
1791 }
1792 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1793 + sizeof(tHalCfg) + tlvStruct->length) ;
Naresh Jayaramf73f3762014-02-04 16:13:20 +05301794 /* QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE */
1795 tlvStruct->type = QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE;
1796 tlvStruct->length = sizeof(tANI_U32);
1797 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1798 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_OFF_CHANNEL_ENABLED,
1799 configDataValue ) != eSIR_SUCCESS)
1800 {
1801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1802 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1803 goto handle_failure;
1804 }
1805 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1806 + sizeof(tHalCfg) + tlvStruct->length) ;
1807
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301808#endif
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301809
Sudhir Sattayappa Kohallida1be202013-07-11 12:04:30 -07001810 /* QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN */
1811 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE ;
1812 tlvStruct->length = sizeof(tANI_U32);
1813 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1814 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_ADAPT_RX_DRAIN,
1815 configDataValue ) != eSIR_SUCCESS)
1816 {
1817 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1818 "Failed to get value for WNI_CFG_ENABLE_ADAPT_RX_DRAIN");
1819 goto handle_failure;
1820 }
1821
1822 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1823 + sizeof(tHalCfg) + tlvStruct->length) ;
Yue Ma0fd23872013-08-01 15:56:47 -07001824
1825 /* QWLAN_HAL_CFG_FLEX_CONNECT_POWER_FACTOR */
1826 tlvStruct->type = QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR;
1827 tlvStruct->length = sizeof(tANI_U32);
1828 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1829 if(wlan_cfgGetInt(pMac, WNI_CFG_FLEX_CONNECT_POWER_FACTOR, configDataValue)
1830 != eSIR_SUCCESS)
1831 {
1832 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1833 "Failed to get value for WNI_CFG_FLEX_CONNECT_POWER_FACTOR");
1834 goto handle_failure;
1835 }
1836 tlvStruct = (tHalCfg *)(((tANI_U8 *) tlvStruct
1837 + sizeof(tHalCfg) + tlvStruct->length));
1838
Madan Mohan Koyyalamudica454572013-08-07 19:57:03 +05301839 /* QWLAN_HAL_CFG_ANTENNA_DIVERSITY */
1840 tlvStruct->type = QWLAN_HAL_CFG_ANTENNA_DIVERSITY;
1841 tlvStruct->length = sizeof(tANI_U32);
1842 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1843 if (wlan_cfgGetInt(pMac, WNI_CFG_ANTENNA_DIVESITY,
1844 configDataValue ) != eSIR_SUCCESS)
1845 {
1846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1847 "Failed to get value for WNI_CFG_ANTENNA_DIVESITY");
1848 goto handle_failure;
1849 }
1850
1851 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1852 + sizeof(tHalCfg) + tlvStruct->length) ;
1853
Madan Mohan Koyyalamudi2558bc92013-08-24 16:54:31 +05301854 /* QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT */
1855 tlvStruct->type = QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT ;
1856 tlvStruct->length = sizeof(tANI_U32);
1857 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1858 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_LINK_MONITOR_TIMEOUT,
1859 configDataValue ) != eSIR_SUCCESS)
1860 {
1861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1862 "Failed to get value for WNI_CFG_GO_LINK_MONITOR_TIMEOUT");
1863 goto handle_failure;
1864 }
1865 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1866 + sizeof(tHalCfg) + tlvStruct->length) ;
1867
Kiet Lam4bbd3cb2013-11-07 20:03:49 +05301868 /* QWLAN_HAL_CFG_ATH_DISABLE */
1869 tlvStruct->type = QWLAN_HAL_CFG_ATH_DISABLE ;
1870 tlvStruct->length = sizeof(tANI_U32);
1871 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1872 if(wlan_cfgGetInt(pMac, WNI_CFG_ATH_DISABLE,
1873 configDataValue ) != eSIR_SUCCESS)
1874 {
1875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1876 "Failed to get value for WNI_CFG_ATH_DISABLE");
1877 goto handle_failure;
1878 }
1879 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1880 + sizeof(tHalCfg) + tlvStruct->length) ;
1881
c_hpothu6d7dc922013-12-02 12:36:41 +05301882 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_WLAN_LEN */
1883 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1884 tlvStruct->length = sizeof(tANI_U32);
1885 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1886 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_WLAN_LEN,
1887 configDataValue ) != eSIR_SUCCESS)
1888 {
1889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1890 "Failed to get value for WNI_CFG_BTC_ACTIVE_WLAN_LEN");
1891 goto handle_failure;
1892 }
1893 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1894 + sizeof(tHalCfg) + tlvStruct->length) ;
1895
1896 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1897 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1898 tlvStruct->length = sizeof(tANI_U32);
1899 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1900 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_BT_LEN,
1901 configDataValue ) != eSIR_SUCCESS)
1902 {
1903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1904 "Failed to get value for WNI_CFG_BTC_ACTIVE_BT_LEN");
1905 goto handle_failure;
1906 }
1907 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1908 + sizeof(tHalCfg) + tlvStruct->length) ;
1909
1910 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN */
1911 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1912 tlvStruct->length = sizeof(tANI_U32);
1913 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1914 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN,
1915 configDataValue ) != eSIR_SUCCESS)
1916 {
1917 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1918 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN");
1919 goto handle_failure;
1920 }
1921 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1922 + sizeof(tHalCfg) + tlvStruct->length) ;
1923
1924 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1925 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1926 tlvStruct->length = sizeof(tANI_U32);
1927 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1928 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_BT_LEN,
1929 configDataValue ) != eSIR_SUCCESS)
1930 {
1931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1932 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_BT_LEN");
1933 goto handle_failure;
1934 }
1935 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1936 + sizeof(tHalCfg) + tlvStruct->length) ;
1937
AnjaneeDevi Kapparapu50239e32014-01-07 18:09:33 +05301938 /* QWLAN_HAL_CFG_ASD_PROBE_INTERVAL */
1939 tlvStruct->type = QWLAN_HAL_CFG_ASD_PROBE_INTERVAL ;
1940 tlvStruct->length = sizeof(tANI_U32);
1941 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1942 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_PROBE_INTERVAL,
1943 configDataValue ) != eSIR_SUCCESS)
1944 {
1945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1946 "Failed to get value for WNI_CFG_ASD_PROBE_INTERVAL");
1947 goto handle_failure;
1948 }
1949 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1950 + sizeof(tHalCfg) + tlvStruct->length) ;
1951
1952 /* QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD */
1953 tlvStruct->type = QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD ;
1954 tlvStruct->length = sizeof(tANI_U32);
1955 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1956 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_TRIGGER_THRESHOLD,
1957 configDataValue ) != eSIR_SUCCESS)
1958 {
1959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1960 "Failed to get value for WNI_CFG_ASD_TRIGGER_THRESHOLD");
1961 goto handle_failure;
1962 }
1963 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1964 + sizeof(tHalCfg) + tlvStruct->length) ;
1965
1966 /* QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD */
1967 tlvStruct->type = QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD ;
1968 tlvStruct->length = sizeof(tANI_U32);
1969 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1970 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD,
1971 configDataValue ) != eSIR_SUCCESS)
1972 {
1973 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1974 "Failed to get value for WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD");
1975 goto handle_failure;
1976 }
1977 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1978 + sizeof(tHalCfg) + tlvStruct->length) ;
1979
Leela Venkata Kiran Kumar Reddy Chirala22c159b2013-12-23 18:19:13 -08001980 /* QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO */
1981 tlvStruct->type = QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO ;
1982 tlvStruct->length = sizeof(tANI_U32);
1983 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1984 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CTS2S_DURING_SCO,
1985 configDataValue ) != eSIR_SUCCESS)
1986 {
1987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1988 "Failed to get value for WNI_CFG_BTC_CTS2S_DURING_SCO");
1989 goto handle_failure;
1990 }
1991 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1992 + sizeof(tHalCfg) + tlvStruct->length) ;
1993
c_hpothu5bd1ae42014-03-07 20:28:22 +05301994 /* QWLAN_HAL_CFG_RA_FILTER_ENABLE */
1995 tlvStruct->type = QWLAN_HAL_CFG_RA_FILTER_ENABLE ;
1996 tlvStruct->length = sizeof(tANI_U32);
1997 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1998
1999 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_FILTER_ENABLE,
2000 configDataValue ) != eSIR_SUCCESS)
2001 {
2002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2003 "Failed to get value for WNI_CFG_RA_FILTER_ENABLE");
2004 goto handle_failure;
2005 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05302006 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2007 + sizeof(tHalCfg) + tlvStruct->length) ;
2008
2009 /* QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL */
2010 tlvStruct->type = QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL ;
2011 tlvStruct->length = sizeof(tANI_U32);
2012 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2013
2014 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_RATE_LIMIT_INTERVAL,
2015 configDataValue ) != eSIR_SUCCESS)
2016 {
2017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2018 "Failed to get value for WNI_CFG_RA_RATE_LIMIT_INTERVAL");
2019 goto handle_failure;
2020 }
c_hpothu2d0f1c42014-04-01 18:38:51 +05302021 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2022 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu5bd1ae42014-03-07 20:28:22 +05302023
c_hpothu2d0f1c42014-04-01 18:38:51 +05302024 /* QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE */
2025 tlvStruct->type = QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE ;
2026 tlvStruct->length = sizeof(tANI_U32);
2027 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2028
2029 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE,
2030 configDataValue ) != eSIR_SUCCESS)
2031 {
2032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2033 "Failed to get value for WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE");
2034 goto handle_failure;
2035 }
2036 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2037 + sizeof(tHalCfg) + tlvStruct->length) ;
2038
2039 /* QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE */
2040 tlvStruct->type = QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE ;
2041 tlvStruct->length = sizeof(tANI_U32);
2042 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2043
2044 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE,
2045 configDataValue ) != eSIR_SUCCESS)
2046 {
2047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2048 "Failed to get value for WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE");
2049 goto handle_failure;
2050 }
2051 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2052 + sizeof(tHalCfg) + tlvStruct->length) ;
2053
2054 /* QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD */
2055 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD ;
2056 tlvStruct->length = sizeof(tANI_U32);
2057 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2058
2059 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD,
2060 configDataValue ) != eSIR_SUCCESS)
2061 {
2062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2063 "Failed to get value for WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD");
2064 goto handle_failure;
2065 }
2066 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2067 + sizeof(tHalCfg) + tlvStruct->length) ;
2068
2069 /* QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD */
2070 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD ;
2071 tlvStruct->length = sizeof(tANI_U32);
2072 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2073
2074 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD,
2075 configDataValue ) != eSIR_SUCCESS)
2076 {
2077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2078 "Failed to get value for WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD");
2079 goto handle_failure;
2080 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05302081 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2082 + sizeof(tHalCfg) + tlvStruct->length) ;
2083
Mihir Shetec34258c2014-07-30 17:50:27 +05302084 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP */
2085 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP ;
2086 tlvStruct->length = sizeof(tANI_U32);
2087 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2088
2089 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_SP,
2090 configDataValue ) != eSIR_SUCCESS)
2091 {
2092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2093 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_SP");
2094 goto handle_failure;
2095 }
2096 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2097 + sizeof(tHalCfg) + tlvStruct->length) ;
2098
2099 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT */
2100 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT ;
2101 tlvStruct->length = sizeof(tANI_U32);
2102 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2103
2104 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT,
2105 configDataValue ) != eSIR_SUCCESS)
2106 {
2107 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2108 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT");
2109 goto handle_failure;
2110 }
2111 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2112 + sizeof(tHalCfg) + tlvStruct->length) ;
2113
2114 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT */
2115 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT ;
2116 tlvStruct->length = sizeof(tANI_U32);
2117 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2118
2119 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT,
2120 configDataValue ) != eSIR_SUCCESS)
2121 {
2122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2123 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT");
2124 goto handle_failure;
2125 }
2126 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2127 + sizeof(tHalCfg) + tlvStruct->length) ;
2128
2129 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW */
2130 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW ;
2131 tlvStruct->length = sizeof(tANI_U32);
2132 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2133
2134 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW,
2135 configDataValue ) != eSIR_SUCCESS)
2136 {
2137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2138 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW");
2139 goto handle_failure;
2140 }
2141 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2142 + sizeof(tHalCfg) + tlvStruct->length) ;
2143
2144 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW */
2145 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW ;
2146 tlvStruct->length = sizeof(tANI_U32);
2147 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2148
2149 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW,
2150 configDataValue ) != eSIR_SUCCESS)
2151 {
2152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2153 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW");
2154 goto handle_failure;
2155 }
2156 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2157 + sizeof(tHalCfg) + tlvStruct->length) ;
2158
2159 /* QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE */
2160 tlvStruct->type = QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE ;
2161 tlvStruct->length = sizeof(tANI_U32);
2162 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2163
2164 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE,
2165 configDataValue ) != eSIR_SUCCESS)
2166 {
2167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2168 "Failed to get value for WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE");
2169 goto handle_failure;
2170 }
2171 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2172 + sizeof(tHalCfg) + tlvStruct->length) ;
2173
2174 /* QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS */
2175 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS ;
2176 tlvStruct->length = sizeof(tANI_U32);
2177 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2178
2179 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS,
2180 configDataValue ) != eSIR_SUCCESS)
2181 {
2182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2183 "Failed to get value for WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS");
2184 goto handle_failure;
2185 }
2186 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2187 + sizeof(tHalCfg) + tlvStruct->length) ;
2188
2189 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS */
2190 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS ;
2191 tlvStruct->length = sizeof(tANI_U32);
2192 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2193
2194 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_WMMPS,
2195 configDataValue ) != eSIR_SUCCESS)
2196 {
2197 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2198 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_WMMPS");
2199 goto handle_failure;
2200 }
2201 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2202 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu03d961b2014-09-19 16:45:00 +05302203
2204 /* QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE */
2205 tlvStruct->type = QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE ;
2206 tlvStruct->length = sizeof(tANI_U32);
2207 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2208
2209 if (wlan_cfgGetInt(pMac, WNI_CFG_BURST_MODE_BE_TXOP_VALUE,
2210 configDataValue ) != eSIR_SUCCESS)
2211 {
2212 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2213 "Failed to get value for WNI_CFG_BURST_MODE_BE_TXOP_VALUE");
2214 goto handle_failure;
2215 }
2216 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2217 + sizeof(tHalCfg) + tlvStruct->length) ;
2218
Deepthi Gowri9025aa62014-11-07 19:45:36 +05302219 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE */
2220 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE ;
2221 tlvStruct->length = sizeof(tANI_U32);
2222 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2223
2224 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE,
2225 configDataValue ) != eSIR_SUCCESS)
2226 {
2227 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2228 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE");
2229 goto handle_failure;
2230 }
2231 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2232 + sizeof(tHalCfg) + tlvStruct->length) ;
2233
Naresh Jayaramf5bbe3f2014-12-29 18:32:47 +05302234 /* QWLAN_HAL_CFG_BTC_FAST_WLAN_CONN_PREF */
2235 tlvStruct->type = QWLAN_HAL_CFG_BTC_FAST_WLAN_CONN_PREF ;
2236 tlvStruct->length = sizeof(tANI_U32);
2237 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2238
2239 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FAST_WLAN_CONN_PREF,
2240 configDataValue ) != eSIR_SUCCESS)
2241 {
2242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2243 "Failed to get value for WNI_CFG_BTC_FAST_WLAN_CONN_PREF");
2244 goto handle_failure;
2245 }
2246 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2247 + sizeof(tHalCfg) + tlvStruct->length) ;
Deepthi Gowri9025aa62014-11-07 19:45:36 +05302248
jagadeeshaf2d0ce2015-03-31 11:45:30 +05302249 /* QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT */
2250 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT;
2251 tlvStruct->length = sizeof(tANI_U32);
2252 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2253
2254 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_RTSCTS_HTVHT,
2255 configDataValue ) != eSIR_SUCCESS)
2256 {
2257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2258 "Failed to get value for WNI_CFG_ENABLE_RTSCTS_HTVHT");
2259 goto handle_failure;
2260 }
2261 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2262 + sizeof(tHalCfg) + tlvStruct->length) ;
2263
Sachin Ahuja41b61902015-06-18 18:32:15 +05302264
2265 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN */
2266 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN ;
2267 tlvStruct->length = sizeof(tANI_U32);
2268 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2269
2270 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN,
2271 configDataValue ) != eSIR_SUCCESS)
2272 {
2273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2274 "Failed to get value for WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN");
2275 goto handle_failure;
2276 }
2277 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2278 + sizeof(tHalCfg) + tlvStruct->length) ;
2279
2280 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN */
2281 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN ;
2282 tlvStruct->length = sizeof(tANI_U32);
2283 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2284
2285 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN,
2286 configDataValue ) != eSIR_SUCCESS)
2287 {
2288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2289 "Failed to get value for WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN");
2290 goto handle_failure;
2291 }
Sachin Ahuja41b61902015-06-18 18:32:15 +05302292 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2293 + sizeof(tHalCfg) + tlvStruct->length) ;
2294
Hanumantha Reddy Pothula9a8ccab2015-07-03 14:33:17 +05302295 /* QWLAN_HAL_CFG_LINK_FAIL_TIMEOUT */
2296 tlvStruct->type = QWLAN_HAL_CFG_LINK_FAIL_TIMEOUT ;
2297 tlvStruct->length = sizeof(tANI_U32);
2298 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2299
2300 if (wlan_cfgGetInt(pMac, WNI_CFG_LINK_FAIL_TIMEOUT,
2301 configDataValue ) != eSIR_SUCCESS)
2302 {
2303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2304 "Failed to get value for WNI_CFG_LINK_FAIL_TIMEOUT");
2305 goto handle_failure;
2306 }
2307 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2308 + sizeof(tHalCfg) + tlvStruct->length) ;
2309
2310 /* QWLAN_HAL_CFG_LINK_FAIL_TX_CNT */
2311 tlvStruct->type = QWLAN_HAL_CFG_LINK_FAIL_TX_CNT ;
2312 tlvStruct->length = sizeof(tANI_U32);
2313 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2314
2315 if (wlan_cfgGetInt(pMac, WNI_CFG_LINK_FAIL_TX_CNT,
2316 configDataValue ) != eSIR_SUCCESS)
2317 {
2318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2319 "Failed to get value for WNI_CFG_LINK_FAIL_TX_CNT");
2320 goto handle_failure;
2321 }
2322 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2323 + sizeof(tHalCfg) + tlvStruct->length) ;
Sachin Ahuja41b61902015-06-18 18:32:15 +05302324
Hanumantha Reddy Pothulae0216f92015-08-11 18:30:06 +05302325 /* QWLAN_HAL_CFG_TOGGLE_ARP_BDRATES */
2326 tlvStruct->type = QWLAN_HAL_CFG_TOGGLE_ARP_BDRATES;
2327 tlvStruct->length = sizeof(tANI_U32);
2328 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2329
2330 if (wlan_cfgGetInt(pMac, WNI_CFG_TOGGLE_ARP_BDRATES,
2331 configDataValue ) != eSIR_SUCCESS)
2332 {
2333 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2334 "Failed to get value for WNI_CFG_TOGGLE_ARP_BDRATES");
2335 goto handle_failure;
2336 }
2337 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2338 + sizeof(tHalCfg) + tlvStruct->length) ;
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +05302339 /* QWLAN_HAL_CFG_OPTIMIZE_CA_EVENT */
2340 tlvStruct->type = QWLAN_HAL_CFG_OPTIMIZE_CA_EVENT ;
2341 tlvStruct->length = sizeof(tANI_U32);
2342 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2343 if (wlan_cfgGetInt(pMac, WNI_CFG_OPTIMIZE_CA_EVENT,
2344 configDataValue ) != eSIR_SUCCESS)
2345 {
2346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2347 "Failed to get value for WNI_CFG_OPTIMIZE_CA_EVENT");
2348 goto handle_failure;
2349 }
2350 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2351 + sizeof(tHalCfg) + tlvStruct->length) ;
Hanumantha Reddy Pothulae0216f92015-08-11 18:30:06 +05302352
Padma, Santhosh Kumare2eb0fa2015-08-26 13:40:47 +05302353 /* QWLAN_HAL_CFG_EXT_SCAN_CONC_MODE */
2354 tlvStruct->type = QWLAN_HAL_CFG_EXT_SCAN_CONC_MODE ;
2355 tlvStruct->length = sizeof(tANI_U32);
2356 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2357
2358 if (wlan_cfgGetInt(pMac, WNI_CFG_EXT_SCAN_CONC_MODE,
2359 configDataValue ) != eSIR_SUCCESS)
2360 {
2361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2362 "Failed to get value for WNI_CFG_EXT_SCAN_CONC_MODE");
2363 goto handle_failure;
2364 }
2365 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2366 + sizeof(tHalCfg) + tlvStruct->length) ;
2367
Sachin Ahujae9f85aa2015-12-08 19:57:04 +05302368 /* QWLAN_HAL_CFG_BAR_WAKEUP_HOST_DISABLE */
2369 tlvStruct->type = QWLAN_HAL_CFG_BAR_WAKEUP_HOST_DISABLE;
2370 tlvStruct->length = sizeof(tANI_U32);
2371 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2372
2373 if (wlan_cfgGetInt(pMac, WNI_CFG_DISABLE_BAR_WAKE_UP_HOST,
2374 configDataValue ) != eSIR_SUCCESS)
2375 {
2376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2377 "Failed to get value for WNI_CFG_DISABLE_BAR_WAKE_UP_HOST");
2378 goto handle_failure;
2379 }
2380 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2381 + sizeof(tHalCfg) + tlvStruct->length) ;
Manjeet Singh3d8e0942016-02-09 19:06:08 +05302382
2383 /* QWLAN_HAL_CFG_SAR_BOFFSET_CORRECTION_ENABLE */
2384 tlvStruct->type = QWLAN_HAL_CFG_SAR_BOFFSET_CORRECTION_ENABLE;
2385 tlvStruct->length = sizeof(tANI_U32);
2386 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2387
2388 if (wlan_cfgGetInt(pMac, WNI_CFG_SAR_BOFFSET_SET_CORRECTION,
2389 configDataValue ) != eSIR_SUCCESS)
2390 {
2391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2392 "Failed to get value for WNI_CFG_SAR_BOFFSET_SET_CORRECTION");
2393 goto handle_failure;
2394 }
2395 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2396 + sizeof(tHalCfg) + tlvStruct->length) ;
Manjeet Singh67024b02016-10-26 15:34:20 +05302397 /* QWLAN_HAL_CFG_BTC_DISABLE_WLAN_LINK_CRITICAL */
2398 tlvStruct->type = QWLAN_HAL_CFG_BTC_DISABLE_WLAN_LINK_CRITICAL ;
2399 tlvStruct->length = sizeof(tANI_U32);
2400 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2401
2402 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DISABLE_WLAN_LINK_CRITICAL,
2403 configDataValue ) != eSIR_SUCCESS)
2404 {
2405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2406 "Failed to get value for WNI_CFG_BTC_DISABLE_WLAN_LINK_CRITICAL");
2407 goto handle_failure;
2408 }
2409 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2410 + sizeof(tHalCfg) + tlvStruct->length) ;
Manjeet Singh3d8e0942016-02-09 19:06:08 +05302411
Padma, Santhosh Kumar36183352016-11-08 17:48:34 +05302412 /* QWLAN_HAL_CFG_DISABLE_SCAN_DURING_SCO */
2413 tlvStruct->type = QWLAN_HAL_CFG_DISABLE_SCAN_DURING_SCO ;
2414 tlvStruct->length = sizeof(tANI_U32);
2415 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2416
2417 if (wlan_cfgGetInt(pMac, WNI_CFG_DISABLE_SCAN_DURING_SCO,
2418 configDataValue ) != eSIR_SUCCESS)
2419 {
2420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2421 "Failed to get value for WNI_CFG_DISABLE_SCAN_DURING_SCO");
2422 goto handle_failure;
2423 }
2424 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2425 + sizeof(tHalCfg) + tlvStruct->length) ;
Anurag Chouhana9116af2016-11-23 00:03:08 +05302426
2427 /* QWLAN_HAL_CFG_CONS_BCNMISS_COUNT */
2428 tlvStruct->type = QWLAN_HAL_CFG_CONS_BCNMISS_COUNT;
2429 tlvStruct->length = sizeof(tANI_U32);
2430 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2431 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CONC_BMISS, configDataValue)
2432 != eSIR_SUCCESS)
2433 {
2434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2435 "Failed to get value for WNI_CFG_ENABLE_CONC_BMISS");
2436 goto handle_failure;
2437 }
2438
2439 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2440 + sizeof(tHalCfg) + tlvStruct->length);
2441
2442 /* QWLAN_HAL_CFG_UNITS_OF_BCN_WAIT_TIME */
2443 tlvStruct->type = QWLAN_HAL_CFG_UNITS_OF_BCN_WAIT_TIME;
2444 tlvStruct->length = sizeof(tANI_U32);
2445 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2446 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_UNITS_BWAIT, configDataValue)
2447 != eSIR_SUCCESS)
2448 {
2449 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2450 "Failed to get value for WNI_CFG_ENABLE_UNITS_BWAIT");
2451 goto handle_failure;
2452 }
2453
2454 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2455 + sizeof(tHalCfg) + tlvStruct->length);
2456
Ashish Kumar Dhanotiyabf6bcea2017-08-17 19:14:33 +05302457 /* QWLAN_HAL_CFG_TRIGGER_NULLFRAME_BEFORE_HB */
2458 tlvStruct->type = QWLAN_HAL_CFG_TRIGGER_NULLFRAME_BEFORE_HB;
2459 tlvStruct->length = sizeof(tANI_U32);
2460 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2461 if(wlan_cfgGetInt(pMac, WNI_CFG_TRIGGER_NULLFRAME_BEFORE_HB,
2462 configDataValue) != eSIR_SUCCESS)
2463 {
2464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2465 "Failed to get WNI_CFG_TRIGGER_NULLFRAME_BEFORE_HB");
2466 goto handle_failure;
2467 }
2468
2469 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2470 + sizeof(tHalCfg) + tlvStruct->length);
Ashish Kumar Dhanotiya17866e12018-01-16 19:53:43 +05302471
2472 /* QWLAN_HAL_CFG_ENABLE_POWERSAVE_OFFLOAD */
2473 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_POWERSAVE_OFFLOAD;
2474 tlvStruct->length = sizeof(tANI_U32);
2475 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2476 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_POWERSAVE_OFFLOAD,
2477 configDataValue) != eSIR_SUCCESS)
2478 {
2479 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2480 "Failed to get WNI_CFG_ENABLE_POWERSAVE_OFFLOAD");
2481 goto handle_failure;
2482 }
2483
2484 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2485 + sizeof(tHalCfg) + tlvStruct->length);
2486 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart;
Jeff Johnson295189b2012-06-20 16:38:30 -07002487#ifdef WLAN_DEBUG
2488 {
2489 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07002490 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2491 "****** Dumping CFG TLV ***** ");
2492 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
2493 {
2494 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2495 "%02x %02x %02x %02x %02x %02x %02x %02x",
2496 tlvStructStart[i],
2497 tlvStructStart[i+1],
2498 tlvStructStart[i+2],
2499 tlvStructStart[i+3],
2500 tlvStructStart[i+4],
2501 tlvStructStart[i+5],
2502 tlvStructStart[i+6],
2503 tlvStructStart[i+7]);
2504 }
2505 /* Dump the bytes in the last line*/
2506 for (; i < wdiStartParams->usConfigBufferLen; i++)
2507 {
2508 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2509 "%02x ",tlvStructStart[i]);
2510 }
2511 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2512 "**************************** ");
2513 }
2514#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002515 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002516handle_failure:
2517 vos_mem_free(configParam);
2518 return VOS_STATUS_E_FAILURE;
2519}
Anurag Chouhan83026002016-12-13 22:46:21 +05302520
2521#ifdef DHCP_SERVER_OFFLOAD
2522/**
2523 * wda_dhcp_server_offload_rsp_callback() - response to the dhcp server offload
2524 * @wdi_rsp: pointer to the dhcp server offload response
2525 * @user_data: pointer to user data
2526 *
2527 * Return: None
2528 */
2529void wda_dhcp_server_offload_rsp_callback(wdi_dhcp_server_offload_rsp_param_t*
2530 wdi_rsp,
2531 void* user_data)
2532{
2533 tWDA_ReqParams *wda_params = (tWDA_ReqParams *)user_data;
2534 sir_dhcp_srv_offload_info_t *dhcp_srv_offload_info;
2535 VOS_STATUS status;
2536
2537 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2538 "<------ %s " ,__func__);
2539
2540 if(NULL == wda_params)
2541 {
2542 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2543 "%s: pWdaParams received NULL", __func__);
2544 VOS_ASSERT(0);
2545 return;
2546 }
2547
2548 if(NULL == wda_params->wdaMsgParam)
2549 {
2550 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2551 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
2552 VOS_ASSERT(0);
2553 vos_mem_free(wda_params->wdaWdiApiMsgParam);
2554 vos_mem_free(wda_params);
2555 return;
2556 }
2557
2558 dhcp_srv_offload_info = (sir_dhcp_srv_offload_info_t *)
2559 wda_params->wdaMsgParam;
2560
2561 if(dhcp_srv_offload_info->dhcp_offload_callback)
2562 {
2563 dhcp_srv_offload_info->dhcp_offload_callback(
2564 dhcp_srv_offload_info->dhcp_server_offload_cb_context,
2565 CONVERT_WDI2VOS_STATUS(wdi_rsp->status));
2566 }
2567 else
2568 {
2569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2570 "%s: pFWLoggingInitParams callback is NULL", __func__);
2571 }
2572
2573 status = CONVERT_WDI2VOS_STATUS(wdi_rsp->status);
2574 if (status)
2575 {
2576 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2577 "%s: DHCP server offload failed with status=%d", __func__, status);
2578 VOS_ASSERT(0);
2579 }
2580
2581 vos_mem_free(wda_params->wdaWdiApiMsgParam);
2582 vos_mem_free(wda_params->wdaMsgParam);
2583 vos_mem_free(wda_params);
2584 return;
2585}
2586#endif /* DHCP_SERVER_OFFLOAD */
2587
Anurag Chouhan0b29de02016-12-16 13:18:40 +05302588#ifdef MDNS_OFFLOAD
2589/**
2590 * wda_mdns_enable_rsp_callback() - response to the mdns enable server offload
2591 * @wdi_rsp: pointer to the mdns enable offload response
2592 * @user_data: pointer to user data
2593 *
2594 * Return: None
2595 */
2596void wda_mdns_enable_rsp_callback(wdi_mdns_enable_offload_rsp_param_t*
2597 wdi_rsp,
2598 void* user_data)
2599{
2600 tWDA_ReqParams *wda_params = (tWDA_ReqParams *)user_data;
2601 sir_mdns_offload_info_t *mdns_offload_info;
2602 VOS_STATUS status;
2603
2604 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2605 "<------ %s " ,__func__);
2606
2607 if(NULL == wda_params)
2608 {
2609 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2610 "%s: pWdaParams received NULL", __func__);
2611 VOS_ASSERT(0);
2612 return ;
2613 }
2614
2615 if(NULL == wda_params->wdaMsgParam)
2616 {
2617 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2618 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
2619 VOS_ASSERT(0);
2620 vos_mem_free(wda_params->wdaWdiApiMsgParam);
2621 vos_mem_free(wda_params);
2622 return ;
2623 }
2624
2625 mdns_offload_info = (sir_mdns_offload_info_t *)
2626 wda_params->wdaMsgParam;
2627
2628 if(mdns_offload_info->mdns_enable_callback)
2629 {
2630 mdns_offload_info->mdns_enable_callback(mdns_offload_info->
2631 mdns_enable_cb_context,
2632 CONVERT_WDI2VOS_STATUS(wdi_rsp->
2633 status));
2634 }
2635 else
2636 {
2637 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2638 "%s: mdns_enable callback is NULL", __func__);
2639 }
2640
2641 status = CONVERT_WDI2VOS_STATUS(wdi_rsp->status);
2642 if (status)
2643 {
2644 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2645 "%s: MDNS offload failed with status=%d", __func__, status);
2646 VOS_ASSERT(0);
2647 }
2648
2649 vos_mem_free(wda_params->wdaWdiApiMsgParam);
2650 vos_mem_free(wda_params->wdaMsgParam);
2651 vos_mem_free(wda_params);
2652
2653 return;
2654}
2655
2656/**
2657 * wda_mdns_fqdn_rsp_callback() - response to the mdns fqdn offload
2658 * @wdi_rsp: pointer to the mdns fqdn offload response
2659 * @user_data: pointer to user data
2660 *
2661 * Return: None
2662 */
2663void wda_mdns_fqdn_rsp_callback(wdi_mdns_set_fqdn_rsp_param_t*
2664 wdi_rsp,
2665 void* user_data)
2666{
2667 tWDA_ReqParams *wda_params = (tWDA_ReqParams *)user_data;
2668 sir_mdns_fqdn_info_t *mdns_fqdn_info;
2669 VOS_STATUS status;
2670
2671 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2672 "<------ %s " ,__func__);
2673
2674 if(NULL == wda_params)
2675 {
2676 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2677 "%s: pWdaParams received NULL", __func__);
2678 VOS_ASSERT(0);
2679 return ;
2680 }
2681
2682 if(NULL == wda_params->wdaMsgParam)
2683 {
2684 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2685 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
2686 VOS_ASSERT(0);
2687 vos_mem_free(wda_params->wdaWdiApiMsgParam);
2688 vos_mem_free(wda_params);
2689 return ;
2690 }
2691
2692 mdns_fqdn_info = (sir_mdns_fqdn_info_t *)
2693 wda_params->wdaMsgParam;
2694
2695 if(mdns_fqdn_info->mdns_fqdn_callback)
2696 {
2697 mdns_fqdn_info->mdns_fqdn_callback(mdns_fqdn_info->
2698 mdns_fqdn_cb_context,
2699 CONVERT_WDI2VOS_STATUS(wdi_rsp->
2700 status));
2701 }
2702 else
2703 {
2704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2705 "%s: mdns_fqdn callback is NULL", __func__);
2706 }
2707
2708 status = CONVERT_WDI2VOS_STATUS(wdi_rsp->status);
2709 if (status)
2710 {
2711 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2712 "%s: MDNS FQDN offload failed with status=%d", __func__, status);
2713 VOS_ASSERT(0);
2714 }
2715
2716 vos_mem_free(wda_params->wdaWdiApiMsgParam);
2717 vos_mem_free(wda_params->wdaMsgParam);
2718 vos_mem_free(wda_params);
2719
2720 return;
2721}
2722
2723/**
2724 * wda_mdns_resp_rsp_callback() - response to the mdns resp offload
2725 * @wdi_rsp: pointer to the mdns fqdn offload response
2726 * @user_data: pointer to user data
2727 *
2728 * Return: None
2729 */
2730void wda_mdns_resp_rsp_callback
2731(
2732 wdi_mdns_set_rsp_param_t*
2733 wdi_rsp,
2734 void* user_data)
2735{
2736 tWDA_ReqParams *wda_params = (tWDA_ReqParams *)user_data;
2737 sir_mdns_resp_info_t *mdns_resp_info;
2738 VOS_STATUS status;
2739
2740 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2741 "<------ %s " ,__func__);
2742
2743 if(NULL == wda_params)
2744 {
2745 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2746 "%s: pWdaParams received NULL", __func__);
2747 VOS_ASSERT(0);
2748 return ;
2749 }
2750
2751 if(NULL == wda_params->wdaMsgParam)
2752 {
2753 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2754 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
2755 VOS_ASSERT(0);
2756 vos_mem_free(wda_params->wdaWdiApiMsgParam);
2757 vos_mem_free(wda_params);
2758 return ;
2759 }
2760
2761 mdns_resp_info = (sir_mdns_resp_info_t *)
2762 wda_params->wdaMsgParam;
2763
2764 if(mdns_resp_info->mdns_resp_callback)
2765 {
2766 mdns_resp_info->mdns_resp_callback(mdns_resp_info->
2767 mdns_resp_cb_context,
2768 CONVERT_WDI2VOS_STATUS(wdi_rsp->
2769 status));
2770 }
2771 else
2772 {
2773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2774 "%s: mdns_fqdn callback is NULL", __func__);
2775 }
2776
2777 status = CONVERT_WDI2VOS_STATUS(wdi_rsp->status);
2778 if (status)
2779 {
2780 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2781 "%s: MDNS FQDN offload failed with status=%d", __func__, status);
2782 VOS_ASSERT(0);
2783 }
2784
2785 vos_mem_free(wda_params->wdaWdiApiMsgParam);
2786 vos_mem_free(wda_params->wdaMsgParam);
2787 vos_mem_free(wda_params);
2788
2789 return;
2790}
2791
2792/**
2793 * wda_get_stats_rsp_callback() - response to the mdns stats offload
2794 * @wdi_rsp: pointer to the mdns fqdn offload response
2795 * @user_data: pointer to user data
2796 *
2797 * Return: None
2798 */
2799void wda_get_stats_rsp_callback
2800(
2801 wdi_mdns_stats_rsp_param_t*
2802 wdi_rsp,
2803 void* user_data)
2804{
2805 tWDA_ReqParams *wda_params = (tWDA_ReqParams *)user_data;
2806 sir_get_mdns_stats_info_t *mdns_stats_info;
2807 VOS_STATUS status;
2808
2809 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2810 "<------ %s " ,__func__);
2811
2812 if(NULL == wda_params)
2813 {
2814 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2815 "%s: pWdaParams received NULL", __func__);
2816 VOS_ASSERT(0);
2817 return ;
2818 }
2819
2820 if(NULL == wda_params->wdaMsgParam)
2821 {
2822 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2823 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
2824 VOS_ASSERT(0);
2825 vos_mem_free(wda_params->wdaWdiApiMsgParam);
2826 vos_mem_free(wda_params);
2827 return ;
2828 }
2829
2830 mdns_stats_info = (sir_get_mdns_stats_info_t *)
2831 wda_params->wdaMsgParam;
2832
2833 status = CONVERT_WDI2VOS_STATUS(wdi_rsp->status);
2834 if (status)
2835 {
2836 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2837 "%s: MDNS FQDN offload failed with status=%d", __func__, status);
2838 VOS_ASSERT(0);
2839 }
2840
2841 vos_mem_free(wda_params->wdaWdiApiMsgParam);
2842 vos_mem_free(wda_params->wdaMsgParam);
2843 vos_mem_free(wda_params);
2844
2845 return;
2846}
2847#endif /* MDNS_OFFLOAD */
2848
Jeff Johnson295189b2012-06-20 16:38:30 -07002849/*
2850 * FUNCTION: WDA_wdiCompleteCB
2851 * call the voss call back function
Anurag Chouhan0b29de02016-12-16 13:18:40 +05302852 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002853void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07002854{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002855 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2856 tWDA_CbContext *wdaContext;
2857
2858 if(NULL == pWdaParams)
2859 {
2860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002861 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002862 VOS_ASSERT(0) ;
2863 return ;
2864 }
2865
2866 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
2867
Jeff Johnson295189b2012-06-20 16:38:30 -07002868 if (NULL == wdaContext)
2869 {
2870 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002871 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002872 return ;
2873 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002874
Jeff Johnson295189b2012-06-20 16:38:30 -07002875 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002876 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07002877 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002878 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002879 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002880 vos_mem_free(pWdaParams);
2881
Jeff Johnson295189b2012-06-20 16:38:30 -07002882 if(WDI_STATUS_SUCCESS != status)
2883 {
2884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2885 "WDI stop callback returned failure" );
2886 VOS_ASSERT(0) ;
2887 }
2888 else
2889 {
2890 wdaContext->wdaState = WDA_STOP_STATE;
2891 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002892
Leo Chang9d76f622013-08-23 16:34:52 -07002893 /* FTM Driver stop procedure should be synced.
2894 * Stop and Close will happen on same context */
2895 if (eDRIVER_TYPE_MFG == wdaContext->driverMode)
2896 {
2897 if (VOS_STATUS_SUCCESS != vos_event_set(&wdaContext->ftmStopDoneEvent))
2898 {
2899 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2900 "%s: FTM Stop Event Set Fail", __func__);
2901 VOS_ASSERT(0);
2902 }
2903 }
2904
Jeff Johnson295189b2012-06-20 16:38:30 -07002905 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002906 vos_WDAComplete_cback(wdaContext->pVosContext);
2907
Jeff Johnson295189b2012-06-20 16:38:30 -07002908 return ;
2909}
Jeff Johnson295189b2012-06-20 16:38:30 -07002910/*
2911 * FUNCTION: WDA_stop
2912 * call WDI_stop
2913 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002914VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
2915{
2916 WDI_Status wdiStatus;
2917 VOS_STATUS status = VOS_STATUS_SUCCESS;
2918 WDI_StopReqParamsType *wdiStopReq;
2919 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002920 tWDA_ReqParams *pWdaParams ;
2921
Jeff Johnson295189b2012-06-20 16:38:30 -07002922 if (NULL == pWDA)
2923 {
2924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002925 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002926 VOS_ASSERT(0);
2927 return VOS_STATUS_E_FAILURE;
2928 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002929 if (pWDA->wdiFailed == true)
2930 {
2931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002932 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002933 return VOS_STATUS_E_ALREADY;
2934 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002935
Jeff Johnson295189b2012-06-20 16:38:30 -07002936 /* FTM mode stay START_STATE */
2937 if( (WDA_READY_STATE != pWDA->wdaState) &&
2938 (WDA_INIT_STATE != pWDA->wdaState) &&
2939 (WDA_START_STATE != pWDA->wdaState) )
2940 {
2941 VOS_ASSERT(0);
2942 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002943 wdiStopReq = (WDI_StopReqParamsType *)
2944 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
2945 if(NULL == wdiStopReq)
2946 {
2947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002948 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002949 VOS_ASSERT(0);
2950 return VOS_STATUS_E_NOMEM;
2951 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002952
Jeff Johnson295189b2012-06-20 16:38:30 -07002953 wdiStopReq->wdiStopReason = reason;
2954 wdiStopReq->wdiReqStatusCB = NULL;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302955
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002956 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2957 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07002958 {
2959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002960 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002961 VOS_ASSERT(0);
2962 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002963 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07002964 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002965
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002966 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
2967 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07002968 {
2969 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002970 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002971 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002972
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002973 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
2974 pWdaParams->wdaMsgParam = NULL;
2975 pWdaParams->pWdaContext = pWDA;
2976
Jeff Johnson295189b2012-06-20 16:38:30 -07002977 /* call WDI stop */
2978 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002979 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
2980
Jeff Johnson295189b2012-06-20 16:38:30 -07002981 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
2982 {
2983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2984 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002985 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2986 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002987 status = VOS_STATUS_E_FAILURE;
2988 }
Leo Chang9d76f622013-08-23 16:34:52 -07002989
2990 /* FTM Driver stop procedure should be synced.
2991 * Stop and Close will happen on same context */
2992 if (eDRIVER_TYPE_MFG == pWDA->driverMode)
2993 {
2994 status = vos_wait_single_event(&pWDA->ftmStopDoneEvent,
2995 WDI_RESPONSE_TIMEOUT);
2996 if (status != VOS_STATUS_SUCCESS)
2997 {
2998 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2999 "%s: FTM Stop Timepoout", __func__);
3000 VOS_ASSERT(0);
Leo Chang9d76f622013-08-23 16:34:52 -07003001 }
c_hpothu0d36bc42014-07-03 17:43:45 +05303002 vos_event_destroy(&pWDA->ftmStopDoneEvent);
Leo Chang9d76f622013-08-23 16:34:52 -07003003 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003004 return status;
3005}
Jeff Johnson295189b2012-06-20 16:38:30 -07003006/*
3007 * FUNCTION: WDA_close
3008 * call WDI_close and free the WDA context
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05303009 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003010VOS_STATUS WDA_close(v_PVOID_t pVosContext)
3011{
Jeff Johnson43971f52012-07-17 12:26:56 -07003012 VOS_STATUS status = VOS_STATUS_SUCCESS;
3013 WDI_Status wstatus;
3014 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003015 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07003016 if (NULL == wdaContext)
3017 {
3018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003019 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003020 return VOS_STATUS_E_FAILURE;
3021 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003022 if((WDA_INIT_STATE != wdaContext->wdaState) &&
3023 (WDA_STOP_STATE != wdaContext->wdaState))
3024 {
3025 VOS_ASSERT(0);
3026 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003027 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07003028 wstatus = WDI_Close();
3029 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07003030 {
3031 status = VOS_STATUS_E_FAILURE;
3032 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003033 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07003034 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07003035 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
3036 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003037 {
3038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08003039 "WDI Sync Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07003040 status = VOS_STATUS_E_FAILURE;
3041 }
3042
Jeff Johnson43971f52012-07-17 12:26:56 -07003043 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07003044 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003045 {
3046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08003047 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07003048 status = VOS_STATUS_E_FAILURE;
3049 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003050 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07003051 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003052 {
3053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08003054 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07003055 status = VOS_STATUS_E_FAILURE;
3056 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003057 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07003058 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003059 {
3060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08003061 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07003062 status = VOS_STATUS_E_FAILURE;
3063 }
Sravan Kumar Kairam38017112016-10-12 13:32:32 +05303064
3065 vos_lock_destroy(&wdaContext->mgmt_pkt_lock);
3066
Jeff Johnson295189b2012-06-20 16:38:30 -07003067 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07003068 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07003069 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07003070 {
3071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3072 "error in WDA close " );
3073 status = VOS_STATUS_E_FAILURE;
3074 }
Sravan Kumar Kairam38017112016-10-12 13:32:32 +05303075
Jeff Johnson295189b2012-06-20 16:38:30 -07003076 return status;
3077}
Jeff Johnson295189b2012-06-20 16:38:30 -07003078/*
3079 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
3080 * returns 1 if the compiled version is greater than or equal to the input version
3081 */
3082
3083uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
3084{
3085 VOS_STATUS status = VOS_STATUS_SUCCESS;
3086 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
3087 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07003088 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07003089 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
3090 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
3091 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
3092 (compiledVersion.revision >= revision)))
3093 return 1;
3094 else
3095 return 0;
3096}
Jeff Johnson295189b2012-06-20 16:38:30 -07003097/*
3098 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
3099 * returns 1 if the compiled version is greater than or equal to the input version
3100 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003101uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
3102{
3103 VOS_STATUS status = VOS_STATUS_SUCCESS;
3104 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
3105 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07003106 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07003107 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
3108 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
3109 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
3110 (reportedVersion.revision >= revision)))
3111 return 1;
3112 else
3113 return 0;
3114}
Jeff Johnson295189b2012-06-20 16:38:30 -07003115/*
3116 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
3117 * Returns the version of the WCNSS WLAN API with which the HOST
3118 * device driver was compiled
3119 */
3120VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
3121 tSirVersionType *pVersion)
3122{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05303123 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003124 if ((NULL == pvosGCtx) || (NULL == pVersion))
3125 {
3126 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003127 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003128 VOS_ASSERT(0);
3129 return VOS_STATUS_E_FAILURE;
3130 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003131 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
3132 if (NULL == pWDA )
3133 {
3134 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003135 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003136 VOS_ASSERT(0);
3137 return VOS_STATUS_E_FAILURE;
3138 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003139 *pVersion = pWDA->wcnssWlanCompiledVersion;
3140 return VOS_STATUS_SUCCESS;
3141}
Jeff Johnson295189b2012-06-20 16:38:30 -07003142/*
3143 * FUNCTION: WDA_GetWcnssWlanReportedVersion
3144 * Returns the version of the WCNSS WLAN API with which the WCNSS
3145 * device driver was compiled
3146 */
3147VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
3148 tSirVersionType *pVersion)
3149{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05303150 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003151 if ((NULL == pvosGCtx) || (NULL == pVersion))
3152 {
3153 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003154 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003155 VOS_ASSERT(0);
3156 return VOS_STATUS_E_FAILURE;
3157 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003158 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
3159 if (NULL == pWDA )
3160 {
3161 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003162 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003163 VOS_ASSERT(0);
3164 return VOS_STATUS_E_FAILURE;
3165 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003166 *pVersion = pWDA->wcnssWlanReportedVersion;
3167 return VOS_STATUS_SUCCESS;
3168}
Jeff Johnson295189b2012-06-20 16:38:30 -07003169/*
3170 * FUNCTION: WDA_GetWcnssSoftwareVersion
3171 * Returns the WCNSS Software version string
3172 */
3173VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
3174 tANI_U8 *pVersion,
3175 tANI_U32 versionBufferSize)
3176{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05303177 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003178 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003179 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003180 if ((NULL == pvosGCtx) || (NULL == pVersion))
3181 {
3182 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003183 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003184 VOS_ASSERT(0);
3185 return VOS_STATUS_E_FAILURE;
3186 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003187 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
3188 if (NULL == pWDA )
3189 {
3190 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003191 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003192 VOS_ASSERT(0);
3193 return VOS_STATUS_E_FAILURE;
3194 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003195 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
3196 return VOS_STATUS_SUCCESS;
3197}
Jeff Johnson295189b2012-06-20 16:38:30 -07003198/*
3199 * FUNCTION: WDA_GetWcnssHardwareVersion
3200 * Returns the WCNSS Hardware version string
3201 */
3202VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
3203 tANI_U8 *pVersion,
3204 tANI_U32 versionBufferSize)
3205{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05303206 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003207 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003208 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003209 if ((NULL == pvosGCtx) || (NULL == pVersion))
3210 {
3211 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003212 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003213 VOS_ASSERT(0);
3214 return VOS_STATUS_E_FAILURE;
3215 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003216 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
3217 if (NULL == pWDA )
3218 {
3219 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003220 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003221 VOS_ASSERT(0);
3222 return VOS_STATUS_E_FAILURE;
3223 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003224 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
3225 return VOS_STATUS_SUCCESS;
3226}
Jeff Johnson295189b2012-06-20 16:38:30 -07003227/*
3228 * FUNCTION: WDA_WniCfgDnld
3229 * Trigger CFG Download
3230 */
3231VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
3232{
3233 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05303234 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnsonab81a082013-04-03 16:00:31 -07003235
Jeff Johnson295189b2012-06-20 16:38:30 -07003236 if (NULL == pMac )
3237 {
3238 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003239 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003240 VOS_ASSERT(0);
3241 return VOS_STATUS_E_FAILURE;
3242 }
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05303243 processCfgDownloadReq(pMac);
Jeff Johnson295189b2012-06-20 16:38:30 -07003244 return vosStatus;
3245}
Jeff Johnson295189b2012-06-20 16:38:30 -07003246/* -----------------------------------------------------------------
3247 * WDI interface
3248 * -----------------------------------------------------------------
3249 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003250/*
3251 * FUNCTION: WDA_suspendDataTxCallback
3252 * call back function called from TL after suspend Transmission
3253 */
3254VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
3255 v_U8_t* ucSTAId,
3256 VOS_STATUS vosStatus)
3257{
3258 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07003259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003260 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003261 if (NULL == pWDA )
3262 {
3263 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003264 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003265 VOS_ASSERT(0);
3266 return VOS_STATUS_E_FAILURE;
3267 }
3268 if(VOS_IS_STATUS_SUCCESS(vosStatus))
3269 {
3270 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
3271 }
3272 else
3273 {
3274 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
3275 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003276 /* Trigger the event to bring the WDA TL suspend function to come
3277 * out of wait*/
3278 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
3279 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
3280 {
3281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08003282 "NEW VOS Event Set failed - status = %d", vosStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003283 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003284 /* If TL suspended had timedout before this callback was called, resume back
3285 * TL.*/
3286 if (pWDA->txSuspendTimedOut)
3287 {
3288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08003289 "Late TLSuspendCallback, resuming TL back again");
Jeff Johnson295189b2012-06-20 16:38:30 -07003290 WDA_ResumeDataTx(pWDA);
3291 pWDA->txSuspendTimedOut = FALSE;
3292 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003293 return VOS_STATUS_SUCCESS;
3294}
Jeff Johnson295189b2012-06-20 16:38:30 -07003295/*
3296 * FUNCTION: WDA_suspendDataTx
3297 * Update TL to suspend the data Transmission
3298 */
3299VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
3300{
3301 VOS_STATUS status = VOS_STATUS_E_FAILURE;
3302 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07003303
3304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003305 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003306 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07003307 if (pWDA->txSuspendTimedOut)
3308 {
3309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08003310 "TL suspend timedout previously, CB not called yet");
Jeff Johnson295189b2012-06-20 16:38:30 -07003311 return status;
3312 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003313 /* Reset the event to be not signalled */
3314 status = vos_event_reset(&pWDA->suspendDataTxEvent);
3315 if(!VOS_IS_STATUS_SUCCESS(status))
3316 {
3317 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08003318 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -07003319 return VOS_STATUS_E_FAILURE;
3320 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003321 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07003322 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07003323 WDA_SuspendDataTxCallback);
3324 if(status != VOS_STATUS_SUCCESS)
3325 {
3326 return status;
3327 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003328 /* Wait for the event to be set by the TL, to get the response of
3329 * suspending the TX queues, this event should be set by the Callback
3330 * function called by TL*/
3331 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
3332 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
3333 if(!VOS_IS_STATUS_SUCCESS(status))
3334 {
3335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3336 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003337 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07003338 /* Set this flag to true when TL suspend times out, so that when TL
3339 * suspend eventually happens and calls the callback, TL can be resumed
3340 * right away by looking at this flag when true.*/
3341 pWDA->txSuspendTimedOut = TRUE;
3342 }
3343 else
3344 {
3345 pWDA->txSuspendTimedOut = FALSE;
3346 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003347 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
3348 {
3349 status = VOS_STATUS_SUCCESS;
3350 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003351 return status;
3352}
Jeff Johnson295189b2012-06-20 16:38:30 -07003353/*
3354 * FUNCTION: WDA_resumeDataTx
3355 * Update TL to resume the data Transmission
3356 */
3357VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
3358{
3359 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07003360
3361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003362 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07003363
3364 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07003365 return status;
3366}
Jeff Johnson295189b2012-06-20 16:38:30 -07003367/*
3368 * FUNCTION: WDA_InitScanReqCallback
3369 * Trigger Init SCAN callback
3370 */
3371void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
3372{
3373 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3374 tWDA_CbContext *pWDA;
3375 tInitScanParams *pWDA_ScanParam ;
3376 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003378 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003379 if(NULL == pWdaParams)
3380 {
3381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003382 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003383 VOS_ASSERT(0) ;
3384 return ;
3385 }
3386 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3387 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003388 if(NULL == pWDA_ScanParam)
3389 {
3390 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003391 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07003392 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003393 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3394 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003395 return ;
3396 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003397 if(WDI_STATUS_SUCCESS != wdiStatus)
3398 {
3399 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003400 if(VOS_STATUS_SUCCESS != status)
3401 {
3402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003403 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003404 }
3405 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003406 /* free WDI command buffer */
3407 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003408 vos_mem_free(pWdaParams) ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05303409
3410
Jeff Johnson295189b2012-06-20 16:38:30 -07003411 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003412 /* without converting the Status to Failure or Success Just
3413 pass the same status to lim */
3414 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003415 /* send SCAN RSP message back to PE */
3416 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003417 return ;
3418}
3419
3420/*
3421 * FUNCTION: WDA_ProcessInitScanReq
3422 * Trigger Init SCAN in DAL
3423 */
3424VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
3425 tInitScanParams *initScanParams)
3426{
3427 WDI_Status status = WDI_STATUS_SUCCESS ;
3428 WDI_InitScanReqParamsType *wdiInitScanParam =
3429 (WDI_InitScanReqParamsType *)vos_mem_malloc(
3430 sizeof(WDI_InitScanReqParamsType)) ;
3431 tWDA_ReqParams *pWdaParams;
3432 tANI_U8 i = 0;
3433
3434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003435 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003436 if(NULL == wdiInitScanParam)
3437 {
3438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003439 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003440 VOS_ASSERT(0);
3441 return VOS_STATUS_E_NOMEM;
3442 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003443 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3444 if(NULL == pWdaParams)
3445 {
3446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003447 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003448 VOS_ASSERT(0);
3449 vos_mem_free(wdiInitScanParam);
3450 return VOS_STATUS_E_NOMEM;
3451 }
3452
3453 /* Copy init Scan params to WDI structure */
3454 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
3455 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
3456 sizeof(tSirMacAddr)) ;
3457 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
3458 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
3459 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003460 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
3461 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07003462 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
3463 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003464 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
3465 {
3466 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
3467 initScanParams->scanEntry.bssIdx[i] ;
3468 }
3469
3470 /* if Frame length, copy macMgmtHdr or WDI structure */
3471 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
3472 {
3473 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
3474 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
3475 }
3476 wdiInitScanParam->wdiReqStatusCB = NULL ;
3477
Jeff Johnson295189b2012-06-20 16:38:30 -07003478 /* Store Init Req pointer, as this will be used for response */
3479 pWdaParams->pWdaContext = pWDA;
3480 pWdaParams->wdaMsgParam = initScanParams;
3481 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003482 /* first try to suspend TX */
3483 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003484 if(WDI_STATUS_SUCCESS != status)
3485 {
3486 goto handleWdiFailure;
3487 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003488 /* call DAL API to pass init scan request to DAL */
3489 status = WDI_InitScanReq(wdiInitScanParam,
3490 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003491 if(IS_WDI_STATUS_FAILURE(status))
3492 {
3493 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3494 "error in WDA Init Scan, Resume Tx " );
3495 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003496 VOS_ASSERT(0) ;
3497
3498 goto handleWdiFailure;
3499 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003500 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003501handleWdiFailure:
3502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3503 "Failure in WDI Api, free all the memory " );
3504 /* free WDI command buffer */
3505 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3506 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003507 /* send Failure to PE */
3508 initScanParams->status = eSIR_FAILURE ;
3509 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003510 return CONVERT_WDI2VOS_STATUS(status) ;
3511}
3512
Jeff Johnson295189b2012-06-20 16:38:30 -07003513/*
3514 * FUNCTION: WDA_StartScanReqCallback
3515 * send Start SCAN RSP back to PE
3516 */
3517void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
3518 void* pUserData)
3519{
3520 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3521 tWDA_CbContext *pWDA;
3522 tStartScanParams *pWDA_ScanParam;
3523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003524 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003525 if(NULL == pWdaParams)
3526 {
3527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003528 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003529 VOS_ASSERT(0) ;
3530 return ;
3531 }
3532 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3533 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003534 if(NULL == pWDA_ScanParam)
3535 {
3536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003537 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003538 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003539 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003540 return ;
3541 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003542 if(NULL == pWdaParams->wdaWdiApiMsgParam)
3543 {
3544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003545 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003546 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003547 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003548 return ;
3549 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003550 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3551 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003552
Jeff Johnson295189b2012-06-20 16:38:30 -07003553
3554 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003555 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003556 /* send SCAN RSP message back to PE */
3557 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003558 return ;
3559}
3560
Jeff Johnson295189b2012-06-20 16:38:30 -07003561/*
3562 * FUNCTION: WDA_ProcessStartScanReq
3563 * Trigger start SCAN in WDI
3564 */
3565VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
3566 tStartScanParams *startScanParams)
3567{
3568 WDI_Status status = WDI_STATUS_SUCCESS;
3569 WDI_StartScanReqParamsType *wdiStartScanParams =
3570 (WDI_StartScanReqParamsType *)vos_mem_malloc(
3571 sizeof(WDI_StartScanReqParamsType)) ;
3572 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003573 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003574 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003575 if(NULL == wdiStartScanParams)
3576 {
3577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003578 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003579 VOS_ASSERT(0);
3580 return VOS_STATUS_E_NOMEM;
3581 }
3582 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3583 if(NULL == pWdaParams)
3584 {
3585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003586 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003587 VOS_ASSERT(0);
3588 vos_mem_free(wdiStartScanParams);
3589 return VOS_STATUS_E_NOMEM;
3590 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003591 /* Copy init Scan params to WDI structure */
3592 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
3593 wdiStartScanParams->wdiReqStatusCB = NULL ;
3594
Jeff Johnson295189b2012-06-20 16:38:30 -07003595 /* Store Init Req pointer, as this will be used for response */
3596 /* store Params pass it to WDI */
3597 pWdaParams->pWdaContext = pWDA;
3598 pWdaParams->wdaMsgParam = startScanParams;
3599 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003600 /* call DAL API to pass init scan request to DAL */
3601 status = WDI_StartScanReq(wdiStartScanParams,
3602 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003603 /* failure returned by WDI API */
3604 if(IS_WDI_STATUS_FAILURE(status))
3605 {
3606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3607 "Failure in Start Scan WDI API, free all the memory "
3608 "It should be due to previous abort scan." );
3609 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3610 vos_mem_free(pWdaParams) ;
3611 startScanParams->status = eSIR_FAILURE ;
3612 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
3613 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003614 return CONVERT_WDI2VOS_STATUS(status) ;
3615}
Jeff Johnson295189b2012-06-20 16:38:30 -07003616/*
3617 * FUNCTION: WDA_EndScanReqCallback
3618 * END SCAN callback
3619 */
3620void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
3621{
3622 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3623 tWDA_CbContext *pWDA;
3624 tEndScanParams *endScanParam;
3625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003626 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003627 if(NULL == pWdaParams)
3628 {
3629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003630 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003631 VOS_ASSERT(0) ;
3632 return ;
3633 }
3634 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3635 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003636 if(NULL == endScanParam)
3637 {
3638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003639 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003640 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003641 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3642 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003643 return ;
3644 }
3645
3646 /* Free WDI command buffer */
3647 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3648 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003649 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003650 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003651 /* send response back to PE */
3652 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
3653 return ;
3654}
3655
Jeff Johnson295189b2012-06-20 16:38:30 -07003656/*
3657 * FUNCTION: WDA_ProcessEndScanReq
3658 * Trigger END SCAN in WDI
3659 */
3660VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
3661 tEndScanParams *endScanParams)
3662{
3663 WDI_Status status = WDI_STATUS_SUCCESS;
3664 WDI_EndScanReqParamsType *wdiEndScanParams =
3665 (WDI_EndScanReqParamsType *)vos_mem_malloc(
3666 sizeof(WDI_EndScanReqParamsType)) ;
3667 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003669 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003670 if(NULL == wdiEndScanParams)
3671 {
3672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003673 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003674 VOS_ASSERT(0);
3675 return VOS_STATUS_E_NOMEM;
3676 }
3677 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3678 if(NULL == pWdaParams)
3679 {
3680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003681 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003682 VOS_ASSERT(0);
3683 vos_mem_free(wdiEndScanParams);
3684 return VOS_STATUS_E_NOMEM;
3685 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003686 /* Copy init Scan params to WDI structure */
3687 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
3688 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003689 /* Store Init Req pointer, as this will be used for response */
3690 /* store Params pass it to WDI */
3691 pWdaParams->pWdaContext = pWDA;
3692 pWdaParams->wdaMsgParam = endScanParams;
3693 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003694 /* call DAL API to pass init scan request to DAL */
3695 status = WDI_EndScanReq(wdiEndScanParams,
3696 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003697 if(IS_WDI_STATUS_FAILURE(status))
3698 {
3699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3700 "Failure in End Scan WDI API, free all the memory "
3701 "It should be due to previous abort scan." );
3702 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3703 vos_mem_free(pWdaParams) ;
3704 endScanParams->status = eSIR_FAILURE ;
3705 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
3706 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003707 return CONVERT_WDI2VOS_STATUS(status) ;
3708}
Jeff Johnson295189b2012-06-20 16:38:30 -07003709/*
3710 * FUNCTION: WDA_FinishScanReqCallback
3711 * Trigger Finish SCAN callback
3712 */
3713void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
3714{
3715 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3716 tWDA_CbContext *pWDA;
3717 tFinishScanParams *finishScanParam;
3718 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003720 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003721 if(NULL == pWdaParams)
3722 {
3723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003724 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003725 VOS_ASSERT(0) ;
3726 return ;
3727 }
3728
3729 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3730 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003731 if(NULL == finishScanParam)
3732 {
3733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003734 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003735 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003736 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3737 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003738 return ;
3739 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003740 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3741 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003742 /*
3743 * Now Resume TX, if we reached here means, TX is already suspended, we
3744 * have to resume it unconditionaly
3745 */
3746 status = WDA_ResumeDataTx(pWDA) ;
3747
3748 if(VOS_STATUS_SUCCESS != status)
3749 {
3750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003751 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003752 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003753 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003754 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
3755 return ;
3756}
Jeff Johnson295189b2012-06-20 16:38:30 -07003757/*
3758 * FUNCTION: WDA_ProcessFinshScanReq
3759 * Trigger Finish SCAN in WDI
3760 */
3761VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
3762 tFinishScanParams *finishScanParams)
3763{
3764 WDI_Status status = WDI_STATUS_SUCCESS;
3765 WDI_FinishScanReqParamsType *wdiFinishScanParams =
3766 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
3767 sizeof(WDI_FinishScanReqParamsType)) ;
3768 tWDA_ReqParams *pWdaParams ;
3769 tANI_U8 i = 0;
3770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003771 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003772 if(NULL == wdiFinishScanParams)
3773 {
3774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003775 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003776 VOS_ASSERT(0);
3777 return VOS_STATUS_E_NOMEM;
3778 }
3779 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3780 if(NULL == pWdaParams)
3781 {
3782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003783 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003784 VOS_ASSERT(0);
3785 vos_mem_free(wdiFinishScanParams);
3786 return VOS_STATUS_E_NOMEM;
3787 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003788 /* Copy init Scan params to WDI structure */
3789 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
3790 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
3791 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003792 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
3793 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
3794 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
3795 finishScanParams->frameLength ;
3796 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
3797 finishScanParams->currentOperChannel ;
3798 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
3799 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
3800 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003801 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
3802 {
3803 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
3804 finishScanParams->scanEntry.bssIdx[i] ;
3805 }
3806
3807
Jeff Johnson295189b2012-06-20 16:38:30 -07003808 /* if Frame length, copy macMgmtHdr ro WDI structure */
3809 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
3810 {
3811 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
3812 &finishScanParams->macMgmtHdr,
3813 sizeof(WDI_MacMgmtHdr)) ;
3814 }
3815 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003816 /* Store Init Req pointer, as this will be used for response */
3817 /* store Params pass it to WDI */
3818 pWdaParams->pWdaContext = pWDA;
3819 pWdaParams->wdaMsgParam = finishScanParams;
3820 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003821 /* call DAL API to pass init scan request to DAL */
3822 status = WDI_FinishScanReq(wdiFinishScanParams,
3823 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003824
Jeff Johnson295189b2012-06-20 16:38:30 -07003825
3826 /*
3827 * WDI API returns failure..
3828 */
3829 if(IS_WDI_STATUS_FAILURE( status))
3830 {
3831 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3832 "Failure in Finish Scan WDI API, free all the memory " );
3833 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3834 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003835 finishScanParams->status = eSIR_FAILURE ;
3836 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
3837 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003838 return CONVERT_WDI2VOS_STATUS(status) ;
3839}
Jeff Johnson295189b2012-06-20 16:38:30 -07003840/*---------------------------------------------------------------------
3841 * ASSOC API's
3842 *---------------------------------------------------------------------
3843 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003844/*
Sachin Ahuja935eda782014-07-30 14:57:41 +05303845 * FUNCTION: WDA_JoinRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07003846 * Trigger Init SCAN callback
3847 */
Sachin Ahuja935eda782014-07-30 14:57:41 +05303848void WDA_JoinRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07003849{
3850 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3851 tWDA_CbContext *pWDA;
3852 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003854 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003855 if(NULL == pWdaParams)
3856 {
3857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003858 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003859 VOS_ASSERT(0) ;
3860 return ;
3861 }
3862 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3863 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003864 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3865 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003866 /* reset macBSSID */
3867 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07003868 /* reset macSTASelf */
3869 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003870 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003871 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003872 return ;
3873}
Sachin Ahuja935eda782014-07-30 14:57:41 +05303874
3875/*
3876 * FUNCTION: WDA_JoinReqCallback
3877 * Free memory and send SWITCH CHANNEL RSP back to PE.
3878 * Invoked when Enter JOIN REQ failed in WDI and no RSP callback is generated.
3879 */
3880void WDA_JoinReqCallback(WDI_Status wdiStatus, void* pUserData)
3881{
3882 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3883 tWDA_CbContext *pWDA;
3884 tSwitchChannelParams *joinReqParam;
3885
3886 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3887 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
3888
3889 if(NULL == pWdaParams)
3890 {
3891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3892 "%s: pWdaParams received NULL", __func__);
3893 VOS_ASSERT(0);
3894 return;
3895 }
3896
3897 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3898 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3899 joinReqParam->status = wdiStatus;
3900
3901 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3902 {
3903 /* reset macBSSID */
3904 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
3905 /* reset macSTASelf */
3906 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
3907
3908 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3909 vos_mem_free(pWdaParams);
3910 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
3911 }
3912
3913 return;
3914}
3915
Jeff Johnson295189b2012-06-20 16:38:30 -07003916/*
3917 * FUNCTION: WDA_ProcessJoinReq
3918 * Trigger Join REQ in WDI
3919 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003920VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
3921 tSwitchChannelParams* joinReqParam)
3922{
3923 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003924 WDI_JoinReqParamsType *wdiJoinReqParam =
3925 (WDI_JoinReqParamsType *)vos_mem_malloc(
3926 sizeof(WDI_JoinReqParamsType)) ;
3927 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003929 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003930 if(NULL == wdiJoinReqParam)
3931 {
3932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003933 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003934 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003935 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003936 return VOS_STATUS_E_NOMEM;
3937 }
3938 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3939 if(NULL == pWdaParams)
3940 {
3941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003942 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003943 VOS_ASSERT(0);
3944 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003945 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003946 return VOS_STATUS_E_NOMEM;
3947 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003948
3949 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
3950 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
3951 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
3952 {
3953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3954 "%s: received join request when BSSID or self-STA is NULL "
3955 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003956 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003957 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
3958 VOS_ASSERT(0);
3959 vos_mem_free(wdiJoinReqParam);
3960 vos_mem_free(pWdaParams);
3961 joinReqParam->status = eSIR_FAILURE ;
3962 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3963 return VOS_STATUS_E_INVAL;
3964 }
3965
Jeff Johnson295189b2012-06-20 16:38:30 -07003966 /* copy the BSSID for pWDA */
3967 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
3968 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003969 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
3970 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003971 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
3972 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07003973#ifdef WLAN_FEATURE_VOWIFI
3974 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
3975 joinReqParam->maxTxPower ;
3976#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003977 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
3978 joinReqParam->localPowerConstraint ;
3979#endif
3980 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
3981 joinReqParam->secondaryChannelOffset ;
3982 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
3983
Sachin Ahuja935eda782014-07-30 14:57:41 +05303984 wdiJoinReqParam->wdiReqStatusCB = WDA_JoinReqCallback;
3985 wdiJoinReqParam->pUserData = pWdaParams;
3986
Jeff Johnson295189b2012-06-20 16:38:30 -07003987 /* Store Init Req pointer, as this will be used for response */
3988 /* store Params pass it to WDI */
3989 pWdaParams->pWdaContext = pWDA;
3990 pWdaParams->wdaMsgParam = joinReqParam;
3991 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003992 status = WDI_JoinReq(wdiJoinReqParam,
Sachin Ahuja935eda782014-07-30 14:57:41 +05303993 (WDI_JoinRspCb )WDA_JoinRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003994 if(IS_WDI_STATUS_FAILURE(status))
3995 {
3996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3997 "Failure in Join WDI API, free all the memory " );
3998 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3999 vos_mem_free(pWdaParams) ;
4000 joinReqParam->status = eSIR_FAILURE ;
4001 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
4002 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004003 return CONVERT_WDI2VOS_STATUS(status) ;
4004}
Jeff Johnson295189b2012-06-20 16:38:30 -07004005/*
4006 * FUNCTION: WDA_SwitchChannelReqCallback
4007 * send Switch channel RSP back to PE
4008 */
4009void WDA_SwitchChannelReqCallback(
4010 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
4011{
4012 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
4013 tWDA_CbContext *pWDA;
4014 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004015 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004016 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004017 if(NULL == pWdaParams)
4018 {
4019 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004020 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004021 VOS_ASSERT(0) ;
4022 return ;
4023 }
4024 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4025 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
4026
4027#ifdef WLAN_FEATURE_VOWIFI
4028 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
4029#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004030 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4031 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004032 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004033 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004034 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004035 return ;
4036}
Jeff Johnson295189b2012-06-20 16:38:30 -07004037/*
4038 * FUNCTION: WDA_ProcessChannelSwitchReq
4039 * Request to WDI to switch channel REQ params.
4040 */
4041VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
4042 tSwitchChannelParams *pSwitchChanParams)
4043{
4044 WDI_Status status = WDI_STATUS_SUCCESS ;
4045 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
4046 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
4047 sizeof(WDI_SwitchChReqParamsType)) ;
4048 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004050 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004051 if(NULL == wdiSwitchChanParam)
4052 {
4053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004054 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004055 VOS_ASSERT(0);
4056 return VOS_STATUS_E_NOMEM;
4057 }
4058 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4059 if(NULL == pWdaParams)
4060 {
4061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004062 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004063 VOS_ASSERT(0);
4064 vos_mem_free(wdiSwitchChanParam);
4065 return VOS_STATUS_E_NOMEM;
4066 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004067 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
4068#ifndef WLAN_FEATURE_VOWIFI
4069 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
4070 pSwitchChanParams->localPowerConstraint;
4071#endif
4072 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
4073 pSwitchChanParams->secondaryChannelOffset;
4074 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004075 /* Store req pointer, as this will be used for response */
4076 /* store Params pass it to WDI */
4077 pWdaParams->pWdaContext = pWDA;
4078 pWdaParams->wdaMsgParam = pSwitchChanParams;
4079 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004080#ifdef WLAN_FEATURE_VOWIFI
4081 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
4082 = pSwitchChanParams->maxTxPower;
4083 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
4084 pSwitchChanParams ->selfStaMacAddr,
4085 sizeof(tSirMacAddr));
4086#endif
4087 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
4088 pSwitchChanParams->bssId,
4089 sizeof(tSirMacAddr));
4090
4091 status = WDI_SwitchChReq(wdiSwitchChanParam,
4092 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004093 if(IS_WDI_STATUS_FAILURE(status))
4094 {
4095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4096 "Failure in process channel switch Req WDI API, free all the memory " );
4097 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4098 vos_mem_free(pWdaParams) ;
4099 pSwitchChanParams->status = eSIR_FAILURE ;
4100 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
4101 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004102 return CONVERT_WDI2VOS_STATUS(status) ;
4103}
Kalikinkar dhara1e83b772014-02-06 12:59:22 -08004104
4105/*
4106 * FUNCTION: WDA_SwitchChannelReqCallback_V1
4107 * send Switch channel RSP back to PE
4108 */
4109void WDA_SwitchChannelReqCallback_V1(
4110 WDI_SwitchChRspParamsType_V1 *wdiSwitchChanRsp,
4111 void* pUserData)
4112{
4113 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
4114 tWDA_CbContext *pWDA;
4115 tSwitchChannelParams *pSwitchChanParams;
4116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4117 "<------ %s " ,__func__);
4118
4119 if (NULL == pWdaParams)
4120 {
4121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4122 "%s: pWdaParams received NULL", __func__);
4123 VOS_ASSERT(0);
4124 return ;
4125 }
4126 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4127 pSwitchChanParams =
4128 (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
4129 pSwitchChanParams->channelSwitchSrc =
4130 wdiSwitchChanRsp->channelSwitchSrc;
4131#ifdef WLAN_FEATURE_VOWIFI
4132 pSwitchChanParams->txMgmtPower =
4133 wdiSwitchChanRsp->ucTxMgmtPower;
4134#endif
4135 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4136 vos_mem_free(pWdaParams);
4137 pSwitchChanParams->status =
4138 wdiSwitchChanRsp->wdiStatus ;
4139 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
4140 (void *)pSwitchChanParams , 0);
4141 return;
4142}
4143
4144/*
4145 * FUNCTION: WDA_ProcessChannelSwitchReq_V1
4146 * Request to WDI to switch channel REQ params.
4147 */
4148VOS_STATUS WDA_ProcessChannelSwitchReq_V1(tWDA_CbContext *pWDA,
4149 tSwitchChannelParams *pSwitchChanParams)
4150{
4151 WDI_Status status = WDI_STATUS_SUCCESS ;
4152 WDI_SwitchChReqParamsType_V1 *wdiSwitchChanParam =
4153 (WDI_SwitchChReqParamsType_V1 *)vos_mem_malloc(
4154 sizeof(WDI_SwitchChReqParamsType_V1)) ;
4155 tWDA_ReqParams *pWdaParams ;
4156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4157 "------> %s " ,__func__);
4158 if (NULL == wdiSwitchChanParam)
4159 {
4160 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4161 "%s: VOS MEM Alloc Failure", __func__);
4162 VOS_ASSERT(0);
4163 return VOS_STATUS_E_NOMEM;
4164 }
4165 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4166 if (NULL == pWdaParams)
4167 {
4168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4169 "%s: VOS MEM Alloc Failure", __func__);
4170 VOS_ASSERT(0);
4171 vos_mem_free(wdiSwitchChanParam);
4172 return VOS_STATUS_E_NOMEM;
4173 }
4174 wdiSwitchChanParam->wdiChInfo.channelSwitchSrc =
4175 pSwitchChanParams->channelSwitchSrc;
4176
4177 wdiSwitchChanParam->wdiChInfo.ucChannel =
4178 pSwitchChanParams->channelNumber;
4179#ifndef WLAN_FEATURE_VOWIFI
4180 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
4181 pSwitchChanParams->localPowerConstraint;
4182#endif
4183 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
4184 pSwitchChanParams->secondaryChannelOffset;
4185 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
4186 /* Store req pointer, as this will be used for response */
4187 /* store Params pass it to WDI */
4188 pWdaParams->pWdaContext = pWDA;
4189 pWdaParams->wdaMsgParam = pSwitchChanParams;
4190 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
4191#ifdef WLAN_FEATURE_VOWIFI
4192 wdiSwitchChanParam->wdiChInfo.cMaxTxPower =
4193 pSwitchChanParams->maxTxPower;
4194 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
4195 pSwitchChanParams ->selfStaMacAddr,
4196 sizeof(tSirMacAddr));
4197#endif
4198 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
4199 pSwitchChanParams->bssId,
4200 sizeof(tSirMacAddr));
4201
4202 status = WDI_SwitchChReq_V1(wdiSwitchChanParam,
4203 (WDI_SwitchChRspCb_V1)WDA_SwitchChannelReqCallback_V1,
4204 pWdaParams);
4205 if (IS_WDI_STATUS_FAILURE(status))
4206 {
4207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4208 "Failure in process channel switch Req WDI "
4209 "API, free all the memory " );
4210 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4211 vos_mem_free(pWdaParams) ;
4212 pSwitchChanParams->status = eSIR_FAILURE ;
4213 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
4214 (void *)pSwitchChanParams, 0) ;
4215 }
4216 return CONVERT_WDI2VOS_STATUS(status) ;
4217}
4218
Jeff Johnson295189b2012-06-20 16:38:30 -07004219/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304220 * FUNCTION: WDA_ConfigBssRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004221 * config BSS Req Callback, called by WDI
4222 */
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304223void WDA_ConfigBssRspCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
Jeff Johnson295189b2012-06-20 16:38:30 -07004224 ,void* pUserData)
4225{
4226 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4227 tWDA_CbContext *pWDA;
4228 tAddBssParams *configBssReqParam;
4229 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004231 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004232 if(NULL == pWdaParams)
4233 {
4234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004235 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004236 VOS_ASSERT(0) ;
4237 return ;
4238 }
4239 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4240 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
4241 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004242 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004243 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004244 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
4245 {
4246 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
4247 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07004248 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
4249 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
4250 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
4251
4252 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
4253 {
4254 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
4255 {
4256 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
4257 staConfigBssParam->staType = STA_ENTRY_BSSID;
4258 }
4259 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
4260 (staConfigBssParam->staType == STA_ENTRY_SELF))
4261 {
4262 /* This is the 1st add BSS Req for the BTAMP STA */
4263 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
4264 staConfigBssParam->staType = STA_ENTRY_BSSID;
4265 }
4266 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
4267 (staConfigBssParam->staType == STA_ENTRY_PEER))
4268 {
4269 /* This is the 2nd ADD BSS Request that is sent
4270 * on the BTAMP STA side. The Sta type is
4271 * set to STA_ENTRY_PEER here.*/
4272 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
4273 }
4274 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
4275 (staConfigBssParam->staType == STA_ENTRY_SELF))
4276 {
4277 /* statype is already set by PE.
4278 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
4279 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
4280 staConfigBssParam->staType = STA_ENTRY_BSSID;
4281 }
4282 else
4283 {
4284 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
4285 staConfigBssParam->staType = STA_ENTRY_PEER;
4286 }
4287 }
4288 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
4289 {
4290 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
4291 staConfigBssParam->staType = STA_ENTRY_SELF;
4292 }
4293 else
4294 {
4295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4296 "Invalid operation mode specified");
4297 VOS_ASSERT(0);
4298 }
4299
4300 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004301 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004302 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07004303 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07004304 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
4305 sizeof(tSirMacAddr));
4306 staConfigBssParam->txChannelWidthSet =
4307 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07004308 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
4309 staConfigBssParam->htCapable)
4310 {
4311 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
4312 wdiConfigBssRsp->ucBSSIdx;
4313 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
4314 WDA_VALID_STA_INDEX ;
Abhishek Singh0644e482014-10-06 18:38:23 +05304315 pWDA->wdaStaInfo[staConfigBssParam->staIdx].currentOperChan =
4316 configBssReqParam->currentOperChannel;
Jeff Johnson295189b2012-06-20 16:38:30 -07004317 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004318 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
4319 wdiConfigBssRsp->ucBSSIdx,
4320 wdiConfigBssRsp->ucSTAIdx))
4321 {
4322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004323 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004324 VOS_ASSERT(0) ;
4325 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004326 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
4327 {
4328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004329 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004330 VOS_ASSERT(0) ;
4331 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004332#ifdef WLAN_FEATURE_VOWIFI
4333 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
4334#endif
4335 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304336 else
4337 {
4338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4339 "%s: Failure with status %d", __func__,
4340 wdiConfigBssRsp->wdiStatus);
4341 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4342 WLAN_LOG_INDICATOR_HOST_DRIVER,
4343 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4344 FALSE, TRUE);
4345 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05304346 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
4347 sizeof(WDI_ConfigBSSReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004348 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4349 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004350 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004351 return ;
4352}
Jeff Johnson295189b2012-06-20 16:38:30 -07004353/*
4354 * FUNCTION: WDA_UpdateEdcaParamsForAC
4355 * Update WDI EDCA params with PE edca params
4356 */
4357void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
4358 WDI_EdcaParamRecord *wdiEdcaParam,
4359 tSirMacEdcaParamRecord *macEdcaParam)
4360{
4361 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
4362 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
4363 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
4364 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
4365 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
4366 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
4367}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304368void WDA_ConfigBssReqCallback(WDI_Status wdiStatus,
4369 void* pUserData)
4370{
4371 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4372 tWDA_CbContext *pWDA;
4373 tAddBssParams *addBssParams;
4374
4375 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4376 "<------ %s, wdiStatus: %d",
4377 __func__, wdiStatus);
4378
4379 if (NULL == pWdaParams)
4380 {
4381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4382 "%s: Invalid pWdaParams pointer", __func__);
4383 VOS_ASSERT(0);
4384 return;
4385 }
4386
4387 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4388 addBssParams = (tAddBssParams *)pWdaParams->wdaMsgParam;
4389
4390 addBssParams->status = wdiStatus;
4391
4392 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4393 {
4394 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4395 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304396 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4397 WLAN_LOG_INDICATOR_HOST_DRIVER,
4398 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4399 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304400 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)addBssParams , 0);
4401 }
4402
4403 return ;
4404}
4405
Jeff Johnson295189b2012-06-20 16:38:30 -07004406/*
4407 * FUNCTION: WDA_ProcessConfigBssReq
4408 * Configure BSS before starting Assoc with AP
4409 */
4410VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
4411 tAddBssParams* configBssReqParam)
4412{
4413 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05304414 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004415 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004417 "------> %s " ,__func__);
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05304418 if (NULL == configBssReqParam)
4419 {
4420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
4421 "%s: configBssReqParam is NULL", __func__);
4422 return VOS_STATUS_E_INVAL;
4423 }
4424
4425 wdiConfigBssReqParam = (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
4426 sizeof(WDI_ConfigBSSReqParamsType)) ;
4427
Jeff Johnson295189b2012-06-20 16:38:30 -07004428 if(NULL == wdiConfigBssReqParam)
4429 {
4430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004431 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004432 VOS_ASSERT(0);
4433 return VOS_STATUS_E_NOMEM;
4434 }
4435 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4436 if(NULL == pWdaParams)
4437 {
4438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004439 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004440 VOS_ASSERT(0);
4441 vos_mem_free(wdiConfigBssReqParam);
4442 return VOS_STATUS_E_NOMEM;
4443 }
Kiran4a17ebe2013-01-31 10:43:43 -08004444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4445 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07004446 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004447 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
4448 configBssReqParam) ;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304449 wdiConfigBssReqParam->wdiReqStatusCB = WDA_ConfigBssReqCallback;
4450 wdiConfigBssReqParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004451 /* Store Init Req pointer, as this will be used for response */
4452 /* store Params pass it to WDI */
4453 pWdaParams->pWdaContext = pWDA;
4454 pWdaParams->wdaMsgParam = configBssReqParam;
4455 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004456 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304457 (WDI_ConfigBSSRspCb )WDA_ConfigBssRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004458 if(IS_WDI_STATUS_FAILURE(status))
4459 {
4460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4461 "Failure in Config BSS WDI API, free all the memory " );
4462 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4463 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004464 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004465 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
4466 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004467 return CONVERT_WDI2VOS_STATUS(status) ;
4468}
Jeff Johnson295189b2012-06-20 16:38:30 -07004469#ifdef ENABLE_HAL_COMBINED_MESSAGES
4470/*
4471 * FUNCTION: WDA_PostAssocReqCallback
4472 * Post ASSOC req callback, send RSP back to PE
4473 */
4474void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
4475 void* pUserData)
4476{
4477 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4478 tPostAssocParams *postAssocReqParam =
4479 (tPostAssocParams *)pWDA->wdaMsgParam ;
4480 /*STA context within the BSS Params*/
4481 tAddStaParams *staPostAssocParam =
4482 &postAssocReqParam->addBssParams.staContext ;
4483 /*STA Params for self STA*/
4484 tAddStaParams *selfStaPostAssocParam =
4485 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004486 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004487 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004488 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004489 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004490 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
4491 {
4492 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
4493 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
4494 sizeof(tSirMacAddr)) ;
4495 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
4496 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
4497 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004498 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
4499 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05304500 vos_mem_zero(pWDA->wdaWdiApiMsgParam, sizeof(WDI_PostAssocReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004501 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
4502 pWDA->wdaWdiApiMsgParam = NULL;
4503 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004504 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004505 return ;
4506}
Jeff Johnson295189b2012-06-20 16:38:30 -07004507/*
4508 * FUNCTION: WDA_ProcessPostAssocReq
4509 * Trigger POST ASSOC processing in WDI
4510 */
4511VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
4512 tPostAssocParams *postAssocReqParam)
4513{
Jeff Johnson295189b2012-06-20 16:38:30 -07004514 WDI_Status status = WDI_STATUS_SUCCESS ;
4515
4516 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
4517 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
4518 sizeof(WDI_PostAssocReqParamsType)) ;
4519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004520 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004521
Jeff Johnson295189b2012-06-20 16:38:30 -07004522 if(NULL == wdiPostAssocReqParam)
4523 {
4524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004525 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004526 VOS_ASSERT(0);
4527 return VOS_STATUS_E_NOMEM;
4528 }
4529
4530 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
4531 {
4532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004533 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004534 VOS_ASSERT(0);
4535 return VOS_STATUS_E_FAILURE;
4536 }
4537
Jeff Johnson295189b2012-06-20 16:38:30 -07004538 /* update BSS params into WDI structure */
4539 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
4540 &postAssocReqParam->addBssParams) ;
4541 /* update STA params into WDI structure */
4542 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
4543 &postAssocReqParam->addStaParams) ;
4544
4545 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
4546 postAssocReqParam->addBssParams.highPerformance;
4547 WDA_UpdateEdcaParamsForAC(pWDA,
4548 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
4549 &postAssocReqParam->addBssParams.acbe);
4550 WDA_UpdateEdcaParamsForAC(pWDA,
4551 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
4552 &postAssocReqParam->addBssParams.acbk);
4553 WDA_UpdateEdcaParamsForAC(pWDA,
4554 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
4555 &postAssocReqParam->addBssParams.acvi);
4556 WDA_UpdateEdcaParamsForAC(pWDA,
4557 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
4558 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07004559 /* Store Init Req pointer, as this will be used for response */
4560 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004561 /* store Params pass it to WDI */
4562 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004563 status = WDI_PostAssocReq(wdiPostAssocReqParam,
4564 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004565 if(IS_WDI_STATUS_FAILURE(status))
4566 {
4567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4568 "Failure in Post Assoc WDI API, free all the memory " );
4569 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
4570 pWDA->wdaWdiApiMsgParam = NULL;
4571 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004572 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004573 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
4574 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004575 return CONVERT_WDI2VOS_STATUS(status) ;
4576}
4577#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004578/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304579 * FUNCTION: WDA_AddStaRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004580 * ADD STA req callback, send RSP back to PE
4581 */
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304582void WDA_AddStaRspCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -07004583 void* pUserData)
4584{
4585 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4586 tWDA_CbContext *pWDA;
4587 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004589 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004590 if(NULL == pWdaParams)
4591 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004593 VOS_ASSERT(0) ;
4594 return ;
4595 }
4596 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4597 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004598 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004599 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004600 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
4601 {
4602 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
4603 /*TODO: UMAC structure doesn't have these fields*/
4604 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
4605 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
4606 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
4607 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
4608 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
4609 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08004610#ifdef FEATURE_WLAN_TDLS
4611 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
4612 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
4613#else
Jeff Johnson295189b2012-06-20 16:38:30 -07004614 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08004615#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004616 {
4617 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
4618 wdiConfigStaRsp->ucBssIdx;
4619 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
4620 WDA_VALID_STA_INDEX ;
Abhishek Singhf08a82b2014-10-07 11:00:42 +05304621 pWDA->wdaStaInfo[addStaReqParam->staIdx].currentOperChan =
4622 addStaReqParam->currentOperChan;
Jeff Johnson295189b2012-06-20 16:38:30 -07004623 }
4624 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
4625 {
4626 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004627 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004628 VOS_ASSERT(0) ;
4629 return ;
4630 }
4631 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304632 else
4633 {
4634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4635 "%s: Failure with status %d", __func__,
4636 wdiConfigStaRsp->wdiStatus);
4637 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4638 WLAN_LOG_INDICATOR_HOST_DRIVER,
4639 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4640 FALSE, TRUE);
4641 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004642 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4643 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004644 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004645 return ;
4646}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304647void WDA_AddStaReqCallback(WDI_Status wdiStatus,
4648 void* pUserData)
4649{
4650 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4651 tWDA_CbContext *pWDA;
4652 tAddStaParams *addStaParams;
4653
4654 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4655 "<------ %s, wdiStatus: %d",
4656 __func__, wdiStatus);
4657
4658 if (NULL == pWdaParams)
4659 {
4660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4661 "%s: Invalid pWdaParams pointer", __func__);
4662 VOS_ASSERT(0);
4663 return;
4664 }
4665
4666 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4667 addStaParams = (tAddStaParams *)pWdaParams->wdaMsgParam;
4668
4669 addStaParams->status = wdiStatus;
4670
4671 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4672 {
4673 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4674 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304675 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4676 WLAN_LOG_INDICATOR_HOST_DRIVER,
4677 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4678 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304679 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaParams , 0);
4680 }
4681
4682 return ;
4683}
4684
Jeff Johnson295189b2012-06-20 16:38:30 -07004685/*
4686 * FUNCTION: WDA_ConfigStaReq
4687 * Trigger Config STA processing in WDI
4688 */
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304689VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
Jeff Johnson295189b2012-06-20 16:38:30 -07004690 tAddStaParams *addStaReqParam)
4691{
Jeff Johnson295189b2012-06-20 16:38:30 -07004692 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004693 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
4694 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
4695 sizeof(WDI_ConfigSTAReqParamsType)) ;
4696 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004697 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004698 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004699 if(NULL == wdiConfigStaReqParam)
4700 {
4701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004702 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004703 VOS_ASSERT(0);
4704 return VOS_STATUS_E_NOMEM;
4705 }
4706 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4707 if(NULL == pWdaParams)
4708 {
4709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004710 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004711 VOS_ASSERT(0);
4712 vos_mem_free(wdiConfigStaReqParam);
4713 return VOS_STATUS_E_NOMEM;
4714 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004715 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004716 /* update STA params into WDI structure */
4717 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
4718 addStaReqParam) ;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304719 wdiConfigStaReqParam->wdiReqStatusCB = WDA_AddStaReqCallback;
4720 wdiConfigStaReqParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004721 /* Store Init Req pointer, as this will be used for response */
4722 /* store Params pass it to WDI */
4723 pWdaParams->pWdaContext = pWDA;
4724 pWdaParams->wdaMsgParam = addStaReqParam;
4725 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304726
Jeff Johnson295189b2012-06-20 16:38:30 -07004727 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304728 (WDI_ConfigSTARspCb )WDA_AddStaRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004729 if(IS_WDI_STATUS_FAILURE(status))
4730 {
4731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4732 "Failure in Config STA WDI API, free all the memory " );
4733 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4734 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004735 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004736 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
4737 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004738 return CONVERT_WDI2VOS_STATUS(status) ;
4739}
Agrawal Ashisha8e8a722016-10-18 19:07:45 +05304740#ifdef SAP_AUTH_OFFLOAD
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304741
Agrawal Ashisha8e8a722016-10-18 19:07:45 +05304742/**
4743 * WDA_ProcessSapAuthOffloadAddStaReq(): process add sta command.
4744 *
4745 * @pWDA: WDA Call back context
4746 * @addStaReqParam: Add sta request params
4747 *
4748 * This function process sta params and store them to WDA layer.
4749 * It will register station entry to mempool as well.
4750 * As station is already in associated state in firmware this
4751 * function doesnt send any request to firmware and wait for response,
4752 * instead of that this function will send response from here.
4753 *
4754 * Return: Return VOS_STATUS
4755 */
4756VOS_STATUS WDA_ProcessSapAuthOffloadAddStaReq(tWDA_CbContext *pWDA,
4757 tAddStaParams *addStaReqParam)
4758{
4759 WDI_Status status = WDI_STATUS_SUCCESS ;
4760 WDI_AddStaParams wdiAddSTAParam = {0};
4761 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
4762 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
4763 sizeof(WDI_ConfigSTAReqParamsType)) ;
4764
4765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4766 "------> %s " ,__func__);
4767
4768 if (NULL == wdiConfigStaReqParam)
4769 {
4770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4771 "%s: VOS MEM Alloc Failure", __func__);
4772 VOS_ASSERT(0);
4773 return VOS_STATUS_E_NOMEM;
4774 }
4775
4776 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
4777 /* update STA params into WDI structure */
4778 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
4779 addStaReqParam);
4780 wdiAddSTAParam.ucSTAIdx = wdiConfigStaReqParam->wdiReqInfo.staIdx;
4781 wdiAddSTAParam.ucStaType = WDI_STA_ENTRY_PEER;
4782 /* MAC Address of STA */
4783 wpalMemoryCopy(wdiAddSTAParam.staMacAddr,
4784 wdiConfigStaReqParam->wdiReqInfo.macSTA,
4785 WDI_MAC_ADDR_LEN);
4786
4787 wpalMemoryCopy(wdiAddSTAParam.macBSSID,
4788 wdiConfigStaReqParam->wdiReqInfo.macBSSID,
4789 WDI_MAC_ADDR_LEN);
4790
4791 wdiAddSTAParam.dpuIndex = addStaReqParam->dpuIndex;
4792 wdiAddSTAParam.dpuSig = addStaReqParam->ucUcastSig;
4793 wdiAddSTAParam.bcastDpuIndex = addStaReqParam->bcastDpuIndex;
4794 wdiAddSTAParam.bcastDpuSignature = addStaReqParam->ucBcastSig;
4795 wdiAddSTAParam.bcastMgmtDpuIndex = addStaReqParam->bcastMgmtDpuIdx;
4796 wdiAddSTAParam.bcastMgmtDpuSignature = addStaReqParam->ucMgmtSig;
Agrawal Ashishedd0f622016-12-19 20:27:02 +05304797 wdiAddSTAParam.ucWmmEnabled = addStaReqParam->wmmEnabled;
4798 wdiAddSTAParam.ucRmfEnabled = addStaReqParam->rmfEnabled;
4799 wdiAddSTAParam.ucBSSIdx = addStaReqParam->bssIdx;
4800 wdiAddSTAParam.ucHTCapable = addStaReqParam->htCapable;
4801
Agrawal Ashisha8e8a722016-10-18 19:07:45 +05304802
4803 WDI_STATableAddSta(pWDA->pWdiContext, &wdiAddSTAParam);
4804 pWDA->wdaStaInfo[wdiConfigStaReqParam->wdiReqInfo.staIdx].ucValidStaIndex =
4805 WDA_VALID_STA_INDEX;
4806 pWDA->wdaStaInfo[wdiConfigStaReqParam->wdiReqInfo.staIdx].currentOperChan =
4807 addStaReqParam->currentOperChan;
4808
4809 if (WDI_STATUS_SUCCESS !=
4810 WDI_STATableFindStaidByAddr(pWDA->pWdiContext,
4811 wdiConfigStaReqParam->wdiReqInfo.macSTA,
4812 (wpt_uint8 *)&wdiConfigStaReqParam->wdiReqInfo.staIdx))
4813 {
4814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4815 "%s: Failed to get selfStaIdx!", __func__);
4816 }
4817 if (WDI_DS_AddSTAMemPool(pWDA->pWdiContext,
4818 wdiConfigStaReqParam->wdiReqInfo.staIdx))
4819 {
4820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4821 "%s: add STA into mempool fail", __func__);
4822 VOS_ASSERT(0) ;
4823 }
4824 vos_mem_free(wdiConfigStaReqParam);
4825 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
4826 return status;
4827}
4828#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004829/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304830 * FUNCTION: WDA_DelBSSRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004831 * Dens DEL BSS RSP back to PE
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304832 */
4833void WDA_DelBSSRspCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -07004834 void* pUserData)
4835{
4836 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4837 tWDA_CbContext *pWDA;
4838 tDeleteBssParams *delBssReqParam;
4839 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07004840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004841 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004842 if(NULL == pWdaParams)
4843 {
4844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004845 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004846 VOS_ASSERT(0) ;
4847 return ;
4848 }
4849 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4850 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004851 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004852 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
4853 {
4854 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
4855 sizeof(tSirMacAddr)) ;
4856 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304857 else
4858 {
4859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4860 "%s: Failure with status %d", __func__,
4861 wdiDelBssRsp->wdiStatus);
4862 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4863 WLAN_LOG_INDICATOR_HOST_DRIVER,
4864 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4865 FALSE, TRUE);
4866 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004867 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
4868 {
4869 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004870 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004871 VOS_ASSERT(0) ;
4872 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004873 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
4874 {
4875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004876 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004877 VOS_ASSERT(0) ;
4878 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004879 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
4880 {
4881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004882 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004883 VOS_ASSERT(0) ;
4884 }
Mihir Shete2ab1d492014-06-04 14:21:05 +05304885
4886 WLANTL_StartForwarding(staIdx,0,0);
4887
Jeff Johnson295189b2012-06-20 16:38:30 -07004888 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4889 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004890 /* reset the the system role*/
4891 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
4892
4893 /* Reset the BA related information */
4894 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
4895 {
4896 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
4897 {
4898 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
4899 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05304900 pWDA->wdaStaInfo[staIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004901 /* Reset framesTxed counters here */
4902 for(tid = 0; tid < STACFG_MAX_TC; tid++)
4903 {
4904 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
4905 }
4906 }
4907 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304908
Jeff Johnson295189b2012-06-20 16:38:30 -07004909 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004910 return ;
4911}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304912void WDA_DelBSSReqCallback(WDI_Status wdiStatus,
4913 void* pUserData)
4914{
4915 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4916 tWDA_CbContext *pWDA;
4917 tDeleteBssParams *delbssParams;
4918
4919 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4920 "<------ %s, wdiStatus: %d",
4921 __func__, wdiStatus);
4922
4923 if (NULL == pWdaParams)
4924 {
4925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4926 "%s: Invalid pWdaParams pointer", __func__);
4927 VOS_ASSERT(0);
4928 return;
4929 }
4930
4931 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4932 delbssParams = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
4933
4934 delbssParams->status = wdiStatus ;
4935
4936 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4937 {
4938 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4939 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304940 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4941 WLAN_LOG_INDICATOR_HOST_DRIVER,
4942 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4943 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304944 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delbssParams , 0) ;
4945 }
4946
4947 return ;
4948}
Jeff Johnson295189b2012-06-20 16:38:30 -07004949
Jeff Johnson295189b2012-06-20 16:38:30 -07004950/*
4951 * FUNCTION: WDA_ProcessDelBssReq
4952 * Init DEL BSS req with WDI
4953 */
4954VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
4955 tDeleteBssParams *delBssParam)
4956{
4957 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004958 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
4959 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
4960 sizeof(WDI_DelBSSReqParamsType)) ;
4961 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004963 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004964 if(NULL == wdiDelBssReqParam)
4965 {
4966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304967 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004968 VOS_ASSERT(0);
4969 return VOS_STATUS_E_NOMEM;
4970 }
4971 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4972 if(NULL == pWdaParams)
4973 {
4974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004975 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004976 VOS_ASSERT(0);
4977 vos_mem_free(wdiDelBssReqParam);
4978 return VOS_STATUS_E_NOMEM;
4979 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004980 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304981 wdiDelBssReqParam->wdiReqStatusCB = WDA_DelBSSReqCallback ;
4982 wdiDelBssReqParam->pUserData = pWdaParams;
4983
Jeff Johnson295189b2012-06-20 16:38:30 -07004984 /* Store Init Req pointer, as this will be used for response */
4985 /* store Params pass it to WDI */
4986 pWdaParams->pWdaContext = pWDA;
4987 pWdaParams->wdaMsgParam = delBssParam;
4988 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304989
Jeff Johnson295189b2012-06-20 16:38:30 -07004990 status = WDI_DelBSSReq(wdiDelBssReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304991 (WDI_DelBSSRspCb )WDA_DelBSSRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004992 if(IS_WDI_STATUS_FAILURE(status))
4993 {
4994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4995 "Failure in Del BSS WDI API, free all the memory " );
4996 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4997 vos_mem_free(pWdaParams) ;
4998 delBssParam->status = eSIR_FAILURE ;
4999 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
5000 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005001 return CONVERT_WDI2VOS_STATUS(status) ;
5002}
Jeff Johnson295189b2012-06-20 16:38:30 -07005003/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05305004 * FUNCTION: WDA_DelSTARspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07005005 * Dens DEL STA RSP back to PE
Abhishek Singhf1221ab2015-08-04 16:38:39 +05305006 */
5007void WDA_DelSTARspCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -07005008 void* pUserData)
5009{
5010 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5011 tWDA_CbContext *pWDA;
5012 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005014 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005015 if(NULL == pWdaParams)
5016 {
5017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005018 "%s: pWdaParams received NULL", __func__);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05305019 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005020 return ;
5021 }
5022 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5023 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005024 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005025 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
5026 {
5027 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
5028 {
5029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005030 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005031 VOS_ASSERT(0) ;
5032 }
5033 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
Mihir Shete2ab1d492014-06-04 14:21:05 +05305034 WLANTL_StartForwarding(delStaReqParam->staIdx,0,0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005035 }
Abhishek Singh837adf22015-10-01 17:37:37 +05305036 else
5037 {
5038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5039 "%s: Failure with status %d", __func__,
5040 wdiDelStaRsp->wdiStatus);
5041 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
5042 WLAN_LOG_INDICATOR_HOST_DRIVER,
5043 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
5044 FALSE, TRUE);
5045 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005046 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5047 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005048 /*Reset the BA information corresponding to this STAIdx */
5049 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
5050 WDA_INVALID_STA_INDEX;
5051 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05305052 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005053 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005054 return ;
5055}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05305056void WDA_DelSTAReqCallback(WDI_Status wdiStatus,
5057 void* pUserData)
5058{
5059 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5060 tWDA_CbContext *pWDA;
5061 tDeleteStaParams *delStaParams;
5062
5063 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5064 "<------ %s, wdiStatus: %d",
5065 __func__, wdiStatus);
5066
5067 if (NULL == pWdaParams)
5068 {
5069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5070 "%s: Invalid pWdaParams pointer", __func__);
5071 VOS_ASSERT(0);
5072 return;
5073 }
5074
5075 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5076 delStaParams = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
5077
5078 delStaParams->status = wdiStatus ;
5079
5080 if (IS_WDI_STATUS_FAILURE(wdiStatus))
5081 {
5082 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5083 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05305084 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
5085 WLAN_LOG_INDICATOR_HOST_DRIVER,
5086 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
5087 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05305088 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParams , 0) ;
5089 }
5090
5091 return ;
5092}
5093
Agrawal Ashisha8e8a722016-10-18 19:07:45 +05305094#ifdef SAP_AUTH_OFFLOAD
5095/**
5096 * WDA_ProcessSapAuthOffloadDelStaReq(): process del sta command.
5097 *
5098 * @pWDA: WDA Call back context
5099 * @delStaParam: Del sta request params
5100 *
5101 * This function process sta params and remove entry from WDA layer.
5102 * It will unregister station entry from mempool as well.
5103 * As station is already in disassociated state in firmware this
5104 * function doesn't send any request to firmware and wait for response,
5105 * instead of that this function will send response from here.
5106 *
5107 * Return: Return VOS_STATUS
5108 */
5109void WDA_ProcessSapAuthOffloadDelStaReq(tWDA_CbContext *pWDA,
5110 tDeleteStaParams *delStaParam)
5111
5112{
5113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5114 "------> %s " ,__func__);
5115
5116 if (WDI_DS_DelSTAMemPool(pWDA->pWdiContext, delStaParam->staIdx))
5117 {
5118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5119 "%s: DEL STA from MemPool Fail", __func__);
5120 // VOS_ASSERT(0) ;
5121 }
Agrawal Ashishbc69baa2016-12-16 13:39:34 +05305122 WLANTL_StartForwarding(delStaParam->staIdx, 0, 0);
Agrawal Ashisha8e8a722016-10-18 19:07:45 +05305123 WDI_STATableDelSta(pWDA->pWdiContext, delStaParam->staIdx);
5124 pWDA->wdaStaInfo[delStaParam->staIdx].ucValidStaIndex =
5125 WDA_INVALID_STA_INDEX;
5126 pWDA->wdaStaInfo[delStaParam->staIdx].currentOperChan = 0;
Agrawal Ashishbc69baa2016-12-16 13:39:34 +05305127 pWDA->wdaStaInfo[delStaParam->staIdx].ucUseBaBitmap = 0;
Agrawal Ashisha8e8a722016-10-18 19:07:45 +05305128 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0);
5129 return ;
5130}
5131#endif
5132
Jeff Johnson295189b2012-06-20 16:38:30 -07005133/*
5134 * FUNCTION: WDA_ProcessDelStaReq
5135 * Init DEL STA req with WDI
5136 */
5137VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
5138 tDeleteStaParams *delStaParam)
5139{
5140 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005141 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
5142 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
5143 sizeof(WDI_DelSTAReqParamsType)) ;
5144 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005146 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005147 if(NULL == wdiDelStaReqParam)
5148 {
5149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005150 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005151 VOS_ASSERT(0);
5152 return VOS_STATUS_E_NOMEM;
5153 }
5154 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5155 if(NULL == pWdaParams)
5156 {
5157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005158 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005159 VOS_ASSERT(0);
5160 vos_mem_free(wdiDelStaReqParam);
5161 return VOS_STATUS_E_NOMEM;
5162 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005163 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05305164 wdiDelStaReqParam->wdiReqStatusCB = WDA_DelSTAReqCallback ;
5165 wdiDelStaReqParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005166 /* Store Init Req pointer, as this will be used for response */
5167 /* store Params pass it to WDI */
5168 pWdaParams->pWdaContext = pWDA;
5169 pWdaParams->wdaMsgParam = delStaParam;
5170 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05305171
Jeff Johnson295189b2012-06-20 16:38:30 -07005172 status = WDI_DelSTAReq(wdiDelStaReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05305173 (WDI_DelSTARspCb )WDA_DelSTARspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005174 if(IS_WDI_STATUS_FAILURE(status))
5175 {
5176 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5177 "Failure in Del STA WDI API, free all the memory status = %d",
5178 status );
5179 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5180 vos_mem_free(pWdaParams) ;
5181 delStaParam->status = eSIR_FAILURE ;
5182 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
5183 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005184 return CONVERT_WDI2VOS_STATUS(status) ;
5185}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05305186void WDA_ProcessAddStaSelfRspCallback(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07005187{
5188 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5189 tWDA_CbContext *pWDA;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05305190 tAddStaSelfParams *pAddStaSelfRsp = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07005191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005192 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005193 if(NULL == pWdaParams)
5194 {
5195 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005196 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005197 VOS_ASSERT(0) ;
5198 return ;
5199 }
5200 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5201 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005202 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5203 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005204 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
5205 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
5206 pwdiAddSTASelfRsp->macSelfSta,
5207 sizeof(pAddStaSelfRsp->selfMacAddr));
Siddharth Bhal85f99b12014-05-09 08:09:07 +05305208 pWDA->wdaAddSelfStaParams.ucSTASelfIdx = pwdiAddSTASelfRsp->ucSTASelfIdx;
5209 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaRspCounter++;
5210 if (pAddStaSelfRsp->status == eSIR_FAILURE)
5211 {
5212 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_RSP_WDI_FAIL;
5213 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Abhishek Singh837adf22015-10-01 17:37:37 +05305214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5215 "%s: Failure with status %d failcnter %d", __func__,
5216 pwdiAddSTASelfRsp->wdiStatus,
5217 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter);
5218 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
5219 WLAN_LOG_INDICATOR_HOST_DRIVER,
5220 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
5221 FALSE, TRUE);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05305222 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005223 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005224 return ;
5225}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05305226void WDA_ProcessAddStaSelfReqCallback(WDI_Status wdiStatus,
5227 void* pUserData)
5228{
5229 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5230 tWDA_CbContext *pWDA;
5231 tAddStaSelfParams *addStaSelfParams;
5232
5233 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5234 "<------ %s, wdiStatus: %d",
5235 __func__, wdiStatus);
5236
5237 if (NULL == pWdaParams)
5238 {
5239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5240 "%s: Invalid pWdaParams pointer", __func__);
5241 VOS_ASSERT(0);
5242 return;
5243 }
5244
5245 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5246 addStaSelfParams = (tAddStaSelfParams *)pWdaParams->wdaMsgParam;
5247
5248 addStaSelfParams->status = wdiStatus ;
5249
5250 if (IS_WDI_STATUS_FAILURE(wdiStatus))
5251 {
5252 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5253 vos_mem_free(pWdaParams) ;
5254 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason
5255 = WDA_ADDSTA_REQ_WDI_FAIL;
5256 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Abhishek Singh837adf22015-10-01 17:37:37 +05305257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5258 "%s: Failure with status %d failcnter %d", __func__,
5259 wdiStatus,
5260 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter);
5261 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
5262 WLAN_LOG_INDICATOR_HOST_DRIVER,
5263 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
5264 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05305265 WDA_SendMsg(pWDA, WDA_ADD_STA_SELF_RSP, (void *)addStaSelfParams , 0);
5266 }
5267
5268 return ;
5269}
Siddharth Bhal85f99b12014-05-09 08:09:07 +05305270
Jeff Johnson295189b2012-06-20 16:38:30 -07005271/*
5272 * FUNCTION: WDA_ProcessAddStaSelfReq
5273 *
5274 */
5275VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
5276{
5277 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07005278 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005279 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
5280 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
5281 sizeof(WDI_AddSTASelfReqParamsType)) ;
5282 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005284 "------> %s " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05305285 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaReqCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07005286 if( NULL == wdiAddStaSelfReq )
5287 {
5288 VOS_ASSERT( 0 );
5289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005290 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05305291 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
5292 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07005293 return( VOS_STATUS_E_NOMEM );
5294 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005295 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005296 if( NULL == pWdaParams )
5297 {
5298 VOS_ASSERT( 0 );
5299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005300 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05305301 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
5302 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07005303 vos_mem_free(wdiAddStaSelfReq) ;
5304 return( VOS_STATUS_E_NOMEM );
5305 }
Abhishek Singhf1221ab2015-08-04 16:38:39 +05305306 wdiAddStaSelfReq->wdiReqStatusCB = WDA_ProcessAddStaSelfReqCallback;
5307 wdiAddStaSelfReq->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005308 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
Kiran Kumar Lokere0ad5cd32013-06-25 11:26:22 -07005309 wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07005310 /* Store Init Req pointer, as this will be used for response */
5311 /* store Params pass it to WDI */
5312 pWdaParams->pWdaContext = pWDA;
5313 pWdaParams->wdaMsgParam = pAddStaSelfReq;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05305314 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
5315
5316 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq,
5317 WDA_ProcessAddStaSelfRspCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005318
Jeff Johnson43971f52012-07-17 12:26:56 -07005319 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07005320 {
5321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5322 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07005323 wstatus );
5324 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07005325 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5326 vos_mem_free(pWdaParams) ;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05305327 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_WDI_FAIL;
5328 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07005329 pAddStaSelfReq->status = eSIR_FAILURE ;
5330 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
5331 }
Jeff Johnson43971f52012-07-17 12:26:56 -07005332 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07005333}
Jeff Johnson295189b2012-06-20 16:38:30 -07005334/*
5335 * FUNCTION: WDA_DelSTASelfRespCallback
5336 *
5337 */
5338void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
5339 wdiDelStaSelfRspParams , void* pUserData)
5340{
5341 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5342 tWDA_CbContext *pWDA;
5343 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005345 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005346 if (NULL == pWdaParams)
5347 {
5348 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005349 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005350 VOS_ASSERT(0);
5351 return;
5352 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005353 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5354 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005355 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005356 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005357
5358 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5359 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05305360 if (WDI_STATUS_SUCCESS != delStaSelfParams->status)
Abhishek Singh1c6ee5d2015-12-14 12:31:42 +05305361 {
Abhishek Singh837adf22015-10-01 17:37:37 +05305362 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5363 "%s: Failure with status %d", __func__,
5364 wdiDelStaSelfRspParams->wdiStatus);
5365 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
5366 WLAN_LOG_INDICATOR_HOST_DRIVER,
5367 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
5368 FALSE, TRUE);
Abhishek Singh1c6ee5d2015-12-14 12:31:42 +05305369 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005370 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005371 return ;
5372}
Jeff Johnson295189b2012-06-20 16:38:30 -07005373/*
5374 * FUNCTION: WDA_DelSTASelfReqCallback
5375 *
5376 */
5377void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
5378 void* pUserData)
5379{
5380 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5381 tWDA_CbContext *pWDA;
5382 tDelStaSelfParams *delStaSelfParams;
5383
5384 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson2ef57602017-09-19 08:31:46 -07005385 "<------ %s, wdiStatus: %d pWdaParams: %pK",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005386 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005387
5388 if (NULL == pWdaParams)
5389 {
5390 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005391 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005392 VOS_ASSERT(0);
5393 return;
5394 }
5395
5396 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5397 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
5398
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005399 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005400
5401 if(IS_WDI_STATUS_FAILURE(wdiStatus))
5402 {
5403 VOS_ASSERT(0);
5404 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5405 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05305406 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
5407 WLAN_LOG_INDICATOR_HOST_DRIVER,
5408 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
5409 FALSE, TRUE);
Jeff Johnson295189b2012-06-20 16:38:30 -07005410 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
5411 }
5412
5413 return ;
5414}
5415
5416/*
5417 * FUNCTION: WDA_DelSTASelfReq
5418 * Trigger Config STA processing in WDI
5419 */
5420VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
5421 tDelStaSelfParams* pDelStaSelfReqParam)
5422{
5423 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07005424 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005425 tWDA_ReqParams *pWdaParams = NULL;
5426 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
5427 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
5428 sizeof(WDI_DelSTASelfReqParamsType)) ;
5429
Jeff Johnson295189b2012-06-20 16:38:30 -07005430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005431 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005432 if( NULL == wdiDelStaSelfReq )
5433 {
5434 VOS_ASSERT( 0 );
5435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005436 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005437 return( VOS_STATUS_E_NOMEM );
5438 }
5439
5440 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5441 if( NULL == pWdaParams )
5442 {
5443 VOS_ASSERT( 0 );
5444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005445 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005446 vos_mem_free(wdiDelStaSelfReq) ;
5447 return( VOS_STATUS_E_NOMEM );
5448 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005449 pWdaParams->pWdaContext = pWDA;
5450 /* Store param pointer as passed in by caller */
5451 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
5452 /* store Params pass it to WDI */
5453 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07005454 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
5455 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
5456
5457 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
5458 wdiDelStaSelfReq->pUserData = pWdaParams;
5459
Jeff Johnson43971f52012-07-17 12:26:56 -07005460 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07005461 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
5462
Jeff Johnson43971f52012-07-17 12:26:56 -07005463 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07005464 {
5465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
5466 "Failure in Del Sta Self REQ WDI API, free all the memory " );
5467 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07005468 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07005469 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5470 vos_mem_free(pWdaParams) ;
5471 pDelStaSelfReqParam->status = eSIR_FAILURE ;
5472 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
5473 }
Jeff Johnson43971f52012-07-17 12:26:56 -07005474 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07005475}
5476
Jeff Johnson295189b2012-06-20 16:38:30 -07005477/*
5478 * FUNCTION: WDA_SendMsg
5479 * Send Message back to PE
5480 */
5481void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
5482 void *pBodyptr, tANI_U32 bodyVal)
5483{
5484 tSirMsgQ msg = {0} ;
5485 tANI_U32 status = VOS_STATUS_SUCCESS ;
5486 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07005487 msg.type = msgType;
5488 msg.bodyval = bodyVal;
5489 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07005490 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07005491 if (VOS_STATUS_SUCCESS != status)
5492 {
5493 if(NULL != pBodyptr)
5494 {
5495 vos_mem_free(pBodyptr);
5496 }
5497 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005498 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005499 VOS_ASSERT(0) ;
5500 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005501 return ;
5502}
Jeff Johnson295189b2012-06-20 16:38:30 -07005503/*
5504 * FUNCTION: WDA_UpdateBSSParams
5505 * Translated WDA/PE BSS info into WDI BSS info..
5506 */
5507void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
5508 WDI_ConfigBSSReqInfoType *wdiBssParams,
5509 tAddBssParams *wdaBssParams)
5510{
5511 v_U8_t keyIndex = 0;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05305512 v_U8_t i = 0;
5513
Jeff Johnson295189b2012-06-20 16:38:30 -07005514 /* copy bssReq Params to WDI structure */
5515 vos_mem_copy(wdiBssParams->macBSSID,
5516 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
5517 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
5518 sizeof(tSirMacAddr)) ;
5519 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
5520 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
5521 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005522 wdiBssParams->ucShortSlotTimeSupported =
5523 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005524 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
5525 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
5526 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
5527 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
5528 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
5529
5530 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
5531 wdiBssParams->ucTXOPProtectionFullSupport =
5532 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005533 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
5534 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005535 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005536 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
5537 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
5538 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
5539 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
5540
Chet Lanctot186b5732013-03-18 10:26:30 -07005541 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
5542
Jeff Johnson295189b2012-06-20 16:38:30 -07005543 /* copy SSID into WDI structure */
5544 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
5545 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
5546 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005547 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
5548 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005549 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07005550#ifdef WLAN_FEATURE_VOWIFI
5551 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
5552#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005553 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07005554 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07005555#ifdef WLAN_FEATURE_VOWIFI_11R
5556 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07005557 if(wdiBssParams->bExtSetStaKeyParamValid)
5558 {
5559 /* copy set STA key params to WDI structure */
5560 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
5561 wdaBssParams->extSetStaKeyParam.staIdx;
5562 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
5563 wdaBssParams->extSetStaKeyParam.encType;
5564 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
5565 wdaBssParams->extSetStaKeyParam.wepType;
5566 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
5567 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005568 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
5569 {
Jeff Johnson43971f52012-07-17 12:26:56 -07005570 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005571 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
5572 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
5573 {
5574 WDA_GetWepKeysFromCfg( pWDA,
5575 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
5576 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
5577 wdiBssParams->wdiExtSetKeyParam.wdiKey );
5578 }
5579 else
5580 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005581 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5582 keyIndex++)
5583 {
5584 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
5585 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
5586 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
5587 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
5588 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
5589 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05305590
5591 if(WDA_getHostWlanFeatCaps(DISA) && WDA_getFwWlanFeatCaps(DISA))
5592 {
5593 for (i = 0; i < WLAN_MAX_KEY_RSC_LEN; i ++)
5594 {
5595 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc[i] =
5596 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc[i]);
5597 }
5598
5599 for (i = 0; i < SIR_MAC_MAX_KEY_LENGTH; i++)
5600 {
5601 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key[i] =
5602 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].key[i]);
5603 }
5604 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5605 FL("%s: Negated Keys"), __func__);
5606 }
5607 else
5608 {
5609 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5610 FL("%s: No change in Keys "), __func__);
5611 vos_mem_copy(
5612 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
5613 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc,
5614 WLAN_MAX_KEY_RSC_LEN);
5615 vos_mem_copy(
5616 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
5617 wdaBssParams->extSetStaKeyParam.key[keyIndex].key,
5618 SIR_MAC_MAX_KEY_LENGTH);
5619 }
5620
Jeff Johnson295189b2012-06-20 16:38:30 -07005621 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
5622 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
5623 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
5624 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07005625 }
Srinivas Dasari9b57b112014-11-27 12:25:23 +05305626 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
Jeff Johnson295189b2012-06-20 16:38:30 -07005627 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005628 }
5629 }
5630 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
5631 }
5632 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
5633 {
5634 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
5635 sizeof(wdaBssParams->extSetStaKeyParam) );
5636 }
5637#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07005638#ifdef WLAN_FEATURE_11AC
5639 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
5640 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
5641#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005642
5643 return ;
5644}
Jeff Johnson295189b2012-06-20 16:38:30 -07005645/*
5646 * FUNCTION: WDA_UpdateSTAParams
5647 * Translated WDA/PE BSS info into WDI BSS info..
5648 */
5649void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
5650 WDI_ConfigStaReqInfoType *wdiStaParams,
5651 tAddStaParams *wdaStaParams)
5652{
5653 tANI_U8 i = 0;
5654 /* Update STA params */
5655 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
5656 sizeof(tSirMacAddr)) ;
5657 wdiStaParams->usAssocId = wdaStaParams->assocId;
5658 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07005659 wdiStaParams->staIdx = wdaStaParams->staIdx;
5660
Jeff Johnson295189b2012-06-20 16:38:30 -07005661 wdiStaParams->ucShortPreambleSupported =
5662 wdaStaParams->shortPreambleSupported;
5663 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
5664 sizeof(tSirMacAddr)) ;
5665 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
5666
5667 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
5668
5669 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
5670 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
5671 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
5672 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
5673 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
5674 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
5675 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
5676
5677 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
5678 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07005679 wdiStaParams->wdiSupportedRates.opRateMode =
5680 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07005681 for(i = 0;i < WDI_NUM_11B_RATES;i++)
5682 {
5683 wdiStaParams->wdiSupportedRates.llbRates[i] =
5684 wdaStaParams->supportedRates.llbRates[i];
5685 }
5686 for(i = 0;i < WDI_NUM_11A_RATES;i++)
5687 {
5688 wdiStaParams->wdiSupportedRates.llaRates[i] =
5689 wdaStaParams->supportedRates.llaRates[i];
5690 }
5691 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
5692 {
5693 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
5694 wdaStaParams->supportedRates.aniLegacyRates[i];
5695 }
5696 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
5697 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07005698#ifdef WLAN_FEATURE_11AC
5699 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
5700 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
5701 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
5702 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
5703#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005704 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
5705 {
5706 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
5707 wdaStaParams->supportedRates.supportedMCSSet[i];
5708 }
5709 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
5710 wdaStaParams->supportedRates.rxHighestDataRate;
5711
5712 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
5713
5714 wdiStaParams->wdiAction = wdaStaParams->updateSta;
5715
5716 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
5717 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
5718 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
5719
5720 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
5721 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
5722 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
5723 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07005724 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07005725#ifdef WLAN_FEATURE_11AC
5726 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
5727 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08005728 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Abhishek Singh6927fa02014-06-27 17:19:55 +05305729 wdiStaParams->vhtTxMUBformeeCapable = wdaStaParams->vhtTxMUBformeeCapable;
5730 /* When MU vhtTxMUBformeeCapable is set, SU ucVhtTxBFEnabled
5731 * must be set by default */
5732 if ( wdiStaParams->vhtTxMUBformeeCapable )
5733 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxMUBformeeCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07005734#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08005735 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
5736 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07005737 return ;
5738}
Jeff Johnson295189b2012-06-20 16:38:30 -07005739/*
5740 * -------------------------------------------------------------------------
5741 * CFG update to WDI
5742 * -------------------------------------------------------------------------
5743 */
5744
5745 /*
5746 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
5747 * Convert the WNI CFG ID to HAL CFG ID
5748 */
mukul sharma6b53e202016-11-23 19:29:18 +05305749static inline tANI_U16 WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07005750{
5751 switch(wniCfgId)
5752 {
5753 case WNI_CFG_STA_ID:
5754 return QWLAN_HAL_CFG_STA_ID;
5755 case WNI_CFG_CURRENT_TX_ANTENNA:
5756 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
5757 case WNI_CFG_CURRENT_RX_ANTENNA:
5758 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
5759 case WNI_CFG_LOW_GAIN_OVERRIDE:
5760 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
5761 case WNI_CFG_POWER_STATE_PER_CHAIN:
5762 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
5763 case WNI_CFG_CAL_PERIOD:
5764 return QWLAN_HAL_CFG_CAL_PERIOD;
5765 case WNI_CFG_CAL_CONTROL:
5766 return QWLAN_HAL_CFG_CAL_CONTROL;
5767 case WNI_CFG_PROXIMITY:
5768 return QWLAN_HAL_CFG_PROXIMITY;
5769 case WNI_CFG_NETWORK_DENSITY:
5770 return QWLAN_HAL_CFG_NETWORK_DENSITY;
5771 case WNI_CFG_MAX_MEDIUM_TIME:
5772 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
5773 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
5774 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
5775 case WNI_CFG_RTS_THRESHOLD:
5776 return QWLAN_HAL_CFG_RTS_THRESHOLD;
5777 case WNI_CFG_SHORT_RETRY_LIMIT:
5778 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
5779 case WNI_CFG_LONG_RETRY_LIMIT:
5780 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
5781 case WNI_CFG_FRAGMENTATION_THRESHOLD:
5782 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
5783 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
5784 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
5785 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
5786 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
5787 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
5788 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
5789 case WNI_CFG_FIXED_RATE:
5790 return QWLAN_HAL_CFG_FIXED_RATE;
5791 case WNI_CFG_RETRYRATE_POLICY:
5792 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
5793 case WNI_CFG_RETRYRATE_SECONDARY:
5794 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
5795 case WNI_CFG_RETRYRATE_TERTIARY:
5796 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
5797 case WNI_CFG_FORCE_POLICY_PROTECTION:
5798 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
5799 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
5800 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
5801 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
5802 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
5803 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
5804 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
5805 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
5806 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
5807 case WNI_CFG_MAX_BA_SESSIONS:
5808 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
5809 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
5810 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
5811 case WNI_CFG_PS_ENABLE_BCN_FILTER:
5812 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
5813 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
5814 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
5815 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
5816 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
5817 case WNI_CFG_STATS_PERIOD:
5818 return QWLAN_HAL_CFG_STATS_PERIOD;
5819 case WNI_CFG_CFP_MAX_DURATION:
5820 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
5821#if 0 /*This is not part of CFG*/
5822 case WNI_CFG_FRAME_TRANS_ENABLED:
5823 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
5824#endif
5825 case WNI_CFG_DTIM_PERIOD:
5826 return QWLAN_HAL_CFG_DTIM_PERIOD;
5827 case WNI_CFG_EDCA_WME_ACBK:
5828 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
5829 case WNI_CFG_EDCA_WME_ACBE:
5830 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
5831 case WNI_CFG_EDCA_WME_ACVI:
5832 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
5833 case WNI_CFG_EDCA_WME_ACVO:
5834 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
5835#if 0
5836 case WNI_CFG_TELE_BCN_WAKEUP_EN:
5837 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
5838 case WNI_CFG_TELE_BCN_TRANS_LI:
5839 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
5840 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
5841 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
5842 case WNI_CFG_TELE_BCN_MAX_LI:
5843 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
5844 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
5845 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
5846#endif
5847 case WNI_CFG_ENABLE_CLOSE_LOOP:
5848 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08005849 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
5850 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
AnjaneeDevi Kapparapu5cdb72a2016-10-19 15:16:09 +05305851 case WNI_CFG_ENABLE_CONC_BMISS:
5852 return QWLAN_HAL_CFG_CONS_BCNMISS_COUNT;
5853 case WNI_CFG_ENABLE_UNITS_BWAIT:
5854 return QWLAN_HAL_CFG_UNITS_OF_BCN_WAIT_TIME;
jagadeeshaf2d0ce2015-03-31 11:45:30 +05305855 case WNI_CFG_ENABLE_RTSCTS_HTVHT:
5856 return QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT;
mukul sharma6b53e202016-11-23 19:29:18 +05305857 case WNI_CFG_ENABLE_MC_ADDR_LIST:
5858 return QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
Ravi Kumar bokka7d032762016-12-12 23:33:01 +05305859 case WNI_CFG_HEART_BEAT_THRESHOLD:
5860 return QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
5861
Jeff Johnson295189b2012-06-20 16:38:30 -07005862 default:
5863 {
5864 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005865 "There is no HAL CFG Id corresponding to WNI CFG Id: %d",
Jeff Johnson295189b2012-06-20 16:38:30 -07005866 wniCfgId);
mukul sharma6b53e202016-11-23 19:29:18 +05305867 return QWLAN_HAL_CFG_MAX_PARAMS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005868 }
5869 }
5870}
Jeff Johnson295189b2012-06-20 16:38:30 -07005871/*
5872 * FUNCTION: WDA_UpdateCfgCallback
5873 *
5874 */
5875void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
5876{
5877 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
5878 WDI_UpdateCfgReqParamsType *wdiCfgParam =
5879 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005881 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005882 /*
5883 * currently there is no response message is expected between PE and
5884 * WDA, Failure return from WDI is a ASSERT condition
5885 */
5886 if(WDI_STATUS_SUCCESS != wdiStatus)
5887 {
5888 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005889 "%s: CFG (%d) config failure", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07005890 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
5891 }
5892
5893 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
5894 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5895 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07005896 return ;
5897}
Jeff Johnson295189b2012-06-20 16:38:30 -07005898/*
5899 * FUNCTION: WDA_UpdateCfg
5900 *
5901 */
5902VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
5903{
5904
5905 WDI_Status status = WDI_STATUS_SUCCESS ;
5906 tANI_U32 val =0;
5907 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
5908 tHalCfg *configData;
5909 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
5910 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07005911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005912 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005913 if (NULL == pMac )
5914 {
5915 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005916 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07005917 return VOS_STATUS_E_FAILURE;
5918 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005919 if(WDA_START_STATE != pWDA->wdaState)
5920 {
5921 return VOS_STATUS_E_FAILURE;
5922 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005923 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
5924 {
5925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005926 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005927 VOS_ASSERT(0);
5928 return VOS_STATUS_E_FAILURE;
5929 }
mukul sharma6b53e202016-11-23 19:29:18 +05305930
Jeff Johnson295189b2012-06-20 16:38:30 -07005931 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
5932 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005933 if(NULL == wdiCfgReqParam)
5934 {
5935 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005936 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005937 VOS_ASSERT(0);
5938 return VOS_STATUS_E_NOMEM;
5939 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005940 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
5941 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005942 if(NULL == wdiCfgReqParam->pConfigBuffer)
5943 {
5944 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005945 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005946 vos_mem_free(wdiCfgReqParam);
5947 VOS_ASSERT(0);
5948 return VOS_STATUS_E_NOMEM;
5949 }
mukul sharma6b53e202016-11-23 19:29:18 +05305950
Jeff Johnson295189b2012-06-20 16:38:30 -07005951 /*convert the WNI CFG Id to HAL CFG Id*/
5952 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
5953 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
5954
5955 /*TODO: revisit this for handling string parameters */
5956 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
5957 &val) != eSIR_SUCCESS)
5958 {
5959 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005960 "Failed to cfg get id %d", cfgParam->bodyval);
Jeff Johnson295189b2012-06-20 16:38:30 -07005961 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
5962 vos_mem_free(wdiCfgReqParam);
5963 return eSIR_FAILURE;
5964 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005965 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
5966 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
5967 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
5968 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
5969 wdiCfgReqParam->wdiReqStatusCB = NULL ;
5970
5971 /* store Params pass it to WDI */
5972 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005973#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
5974 status = WDI_UpdateCfgReq(wdiCfgReqParam,
5975 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005976 if(IS_WDI_STATUS_FAILURE(status))
5977 {
5978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5979 "Failure in Update CFG WDI API, free all the memory " );
5980 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
5981 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5982 pWDA->wdaWdiCfgApiMsgParam = NULL;
5983 /* Failure is not expected */
5984 VOS_ASSERT(0) ;
5985 }
5986#else
5987 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
5988 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5989 pWDA->wdaWdiCfgApiMsgParam = NULL;
5990#endif
5991 return CONVERT_WDI2VOS_STATUS(status) ;
5992}
5993
mukul sharma6b53e202016-11-23 19:29:18 +05305994/*
5995 * FUNCTION: WDA_UpdateCfgIntParamCb
5996 *
5997 */
5998void WDA_UpdateCfgIntParamCb(WDI_Status wdiStatus, void* pUserData)
5999{
6000 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
6001 WDI_UpdateCfgReqParamsType *wdiCfgParam =
6002 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgUpdateIntMsg ;
6003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6004 "<------ %s " ,__func__);
6005 /*
6006 * currently there is no response message is expected between PE and
6007 * WDA, Failure return from WDI is a ASSERT condition
6008 */
6009 if (WDI_STATUS_SUCCESS != wdiStatus)
6010 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6011 "%s: CFG (%d) config failure", __func__,
6012 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
6013
6014 if (wdiCfgParam && wdiCfgParam->pConfigBuffer)
6015 {
6016 vos_mem_free(wdiCfgParam->pConfigBuffer);
6017 wdiCfgParam->pConfigBuffer = NULL;
6018 }
6019
6020 if (pWDA->wdaWdiCfgUpdateIntMsg)
6021 {
6022 vos_mem_free(pWDA->wdaWdiCfgUpdateIntMsg);
6023 pWDA->wdaWdiCfgUpdateIntMsg = NULL;
6024 }
6025
6026 return ;
6027}
6028
6029/*
6030 * FUNCTION: WDA_UpdateCfgIntParam
6031 *
6032 */
6033VOS_STATUS WDA_UpdateCfgIntParam(tWDA_CbContext *pWDA,
6034 tSirUpdateCfgIntParam *cfgParam)
6035{
6036
6037 WDI_Status status = WDI_STATUS_SUCCESS ;
6038 tANI_U32 val =0;
6039 tpAniSirGlobal pMac;
6040 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
6041 tHalCfg *tlvStruct = NULL ;
6042 tANI_U8 *tlvStructStart = NULL ;
6043 v_PVOID_t *configParam;
6044 tANI_U32 configParamSize;
6045 tANI_U32 *configDataValue;
6046 tANI_U32 cfgId;
6047 tANI_U32 tlv_type = QWLAN_HAL_CFG_MAX_PARAMS;
6048
6049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6050 " ------> %s " ,__func__);
6051
6052 if (cfgParam)
6053 {
6054 cfgId = cfgParam->cfgId;
6055 }
6056 else
6057 {
6058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6059 FL("Invoked with NULL cfgParam"));
6060 return VOS_STATUS_E_FAILURE;
6061 }
6062
6063 if (!pWDA)
6064 {
6065 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6066 FL("Invoked with invalid WDA context"));
6067 return VOS_STATUS_E_FAILURE;
6068 }
6069
6070 if (NULL != pWDA->wdaWdiCfgUpdateIntMsg)
6071 {
6072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6073 FL("wdaWdiCfgApiMsgParam is not NULL"));
6074
6075 return VOS_STATUS_E_FAILURE;
6076 }
6077
6078 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
6079 if (NULL == pMac)
6080 {
6081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6082 FL("Invoked with invalid MAC context "));
6083 return VOS_STATUS_E_FAILURE;
6084 }
6085
6086 if (wlan_cfgGetInt(pMac, (tANI_U16)cfgId , &val) != eSIR_SUCCESS)
6087 {
6088 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6089 FL("Fail to cfg get id %d"), cfgId);
6090 return VOS_STATUS_E_FAILURE;
6091 }
6092
6093 /* Get TLV type */
6094 tlv_type = WDA_ConvertWniCfgIdToHALCfgId(cfgId);
6095 if (tlv_type == QWLAN_HAL_CFG_MAX_PARAMS)
6096 {
6097 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6098 "Failed to Convert cfg to hal id %d", cfgId);
6099 return VOS_STATUS_E_FAILURE;
6100 }
6101
6102 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
6103 sizeof(WDI_UpdateCfgReqParamsType)) ;
6104 if (NULL == wdiCfgReqParam)
6105 {
6106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6107 "%s: VOS MEM Alloc Failure", __func__);
6108 return VOS_STATUS_E_NOMEM;
6109 }
6110
6111 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * 1;
6112 configParam = vos_mem_malloc(configParamSize);
6113 if (NULL == configParam)
6114 {
6115 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6116 "%s: VOS MEM Alloc Failure", __func__);
6117 vos_mem_free(wdiCfgReqParam);
6118 return VOS_STATUS_E_NOMEM;
6119 }
6120
6121 vos_mem_set(configParam, configParamSize, 0);
6122 wdiCfgReqParam->pConfigBuffer = configParam;
6123 tlvStruct = (tHalCfg *)configParam;
6124 tlvStructStart = (tANI_U8 *)configParam;
6125 /* Set TLV type */
6126 tlvStruct->type = tlv_type;
6127 tlvStruct->length = sizeof(tANI_U32);
6128 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6129 *configDataValue = (tANI_U32)val;
6130 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6131 "cfg_id %d tlv_type %d tlv_value %d \n",
6132 cfgId, tlvStruct->type, val);
6133 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6134 + sizeof(tHalCfg) + tlvStruct->length)) ;
6135 wdiCfgReqParam->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
6136 wdiCfgReqParam->wdiReqStatusCB = NULL;
6137 /* store Params pass it to WDI */
6138 pWDA->wdaWdiCfgUpdateIntMsg = (void *)wdiCfgReqParam ;
6139 status = WDI_UpdateCfgReq(wdiCfgReqParam,
6140 (WDI_UpdateCfgRspCb )WDA_UpdateCfgIntParamCb, pWDA) ;
6141 if (IS_WDI_STATUS_FAILURE(status))
6142 {
6143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6144 "Failure in WDA_UpdateCfgIntParam WDI API, free memory ");
6145 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
6146 wdiCfgReqParam->pConfigBuffer = NULL;
6147 vos_mem_free(pWDA->wdaWdiCfgUpdateIntMsg);
6148 pWDA->wdaWdiCfgUpdateIntMsg = NULL;
6149 }
6150
6151 return CONVERT_WDI2VOS_STATUS(status);
6152}
6153
Jeff Johnson295189b2012-06-20 16:38:30 -07006154VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
6155 v_U8_t *pDefaultKeyId,
6156 v_U8_t *pNumKeys,
6157 WDI_KeysType *pWdiKeys )
6158{
6159 v_U32_t i, j, defKeyId = 0;
6160 v_U32_t val = SIR_MAC_KEY_LENGTH;
6161 VOS_STATUS status = WDI_STATUS_SUCCESS;
6162 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006163 if (NULL == pMac )
6164 {
6165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006166 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07006167 return VOS_STATUS_E_FAILURE;
6168 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006169 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
6170 &defKeyId ))
6171 {
6172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6173 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
6174 }
6175
6176 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07006177 /* Need to extract ALL of the configured WEP Keys */
6178 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
6179 {
6180 val = SIR_MAC_KEY_LENGTH;
6181 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
6182 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
6183 pWdiKeys[j].key,
6184 &val ))
6185 {
6186 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08006187 "WEP Key index [%d] may not configured in CFG",i);
Jeff Johnson295189b2012-06-20 16:38:30 -07006188 }
6189 else
6190 {
6191 pWdiKeys[j].keyId = (tANI_U8) i;
6192 /*
6193 * Actually, a DC (Don't Care) because
6194 * this is determined (and set) by PE/MLME
6195 */
6196 pWdiKeys[j].unicast = 0;
6197 /*
6198 * Another DC (Don't Care)
6199 */
6200 pWdiKeys[j].keyDirection = eSIR_TX_RX;
6201 /* Another DC (Don't Care). Unused for WEP */
6202 pWdiKeys[j].paeRole = 0;
6203 /* Determined from wlan_cfgGetStr() above.*/
6204 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07006205 j++;
6206 *pNumKeys = (tANI_U8) j;
6207 }
6208 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006209 return status;
6210}
Jeff Johnson295189b2012-06-20 16:38:30 -07006211/*
6212 * FUNCTION: WDA_SetBssKeyReqCallback
6213 * send SET BSS key RSP back to PE
6214 */
6215void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
6216{
6217 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6218 tWDA_CbContext *pWDA;
6219 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006221 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006222 if(NULL == pWdaParams)
6223 {
6224 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006225 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006226 VOS_ASSERT(0) ;
6227 return ;
6228 }
6229 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6230 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05306231 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
6232 sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006233 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6234 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006235 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006236 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006237 return ;
6238}
Jeff Johnson295189b2012-06-20 16:38:30 -07006239/*
6240 * FUNCTION: WDA_ProcessSetBssKeyReq
6241 * Request to WDI for programming the BSS key( key for
6242 * broadcast/multicast frames Encryption)
6243 */
6244VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
6245 tSetBssKeyParams *setBssKeyParams )
6246{
6247 WDI_Status status = WDI_STATUS_SUCCESS ;
6248 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
6249 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
6250 sizeof(WDI_SetBSSKeyReqParamsType)) ;
6251 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006252 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07006253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006254 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006255 if(NULL == wdiSetBssKeyParam)
6256 {
6257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006258 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006259 VOS_ASSERT(0);
6260 return VOS_STATUS_E_NOMEM;
6261 }
6262 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6263 if(NULL == pWdaParams)
6264 {
6265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006266 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006267 VOS_ASSERT(0);
6268 vos_mem_free(wdiSetBssKeyParam);
6269 return VOS_STATUS_E_NOMEM;
6270 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006271 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006272 /* copy set BSS params to WDI structure */
6273 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
6274 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
6275 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07006276 if(setBssKeyParams->encType != eSIR_ED_NONE)
6277 {
6278 if( setBssKeyParams->numKeys == 0 &&
6279 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
6280 setBssKeyParams->encType == eSIR_ED_WEP104))
6281 {
6282 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07006283 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
6284 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
6285 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
6286 }
6287 else
6288 {
6289 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
6290 {
6291 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
6292 setBssKeyParams->key[keyIndex].keyId;
6293 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
6294 setBssKeyParams->key[keyIndex].unicast;
6295 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
6296 setBssKeyParams->key[keyIndex].keyDirection;
6297 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
6298 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
6299 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
6300 setBssKeyParams->key[keyIndex].paeRole;
6301 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
6302 setBssKeyParams->key[keyIndex].keyLength;
6303 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
6304 setBssKeyParams->key[keyIndex].key,
6305 SIR_MAC_MAX_KEY_LENGTH);
6306 }
6307 }
6308 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006309 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
6310 setBssKeyParams->singleTidRc;
6311 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006312 /* Store set key pointer, as this will be used for response */
6313 /* store Params pass it to WDI */
6314 pWdaParams->pWdaContext = pWDA;
6315 pWdaParams->wdaMsgParam = setBssKeyParams;
6316 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006317 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
6318 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
6319
6320 if(IS_WDI_STATUS_FAILURE(status))
6321 {
6322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6323 "Failure in Set BSS Key Req WDI API, free all the memory " );
6324 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6325 vos_mem_free(pWdaParams) ;
6326 setBssKeyParams->status = eSIR_FAILURE ;
6327 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
6328 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006329 return CONVERT_WDI2VOS_STATUS(status) ;
6330}
Jeff Johnson295189b2012-06-20 16:38:30 -07006331/*
6332 * FUNCTION: WDA_RemoveBssKeyReqCallback
6333 * send SET BSS key RSP back to PE
6334 */
6335void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
6336{
6337 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6338 tWDA_CbContext *pWDA;
6339 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006341 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006342 if(NULL == pWdaParams)
6343 {
6344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006345 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006346 VOS_ASSERT(0) ;
6347 return ;
6348 }
6349 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6350 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006351 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6352 vos_mem_free(pWdaParams) ;
6353
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006354 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006355 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006356 return ;
6357}
Siddharth Bhal171788a2014-09-29 21:02:40 +05306358
6359/*
Siddharth Bhal64246172015-02-27 01:04:37 +05306360 * FUNCTION: WDA_GetFrameLogRspCallback
6361 * recieves get frame log response from FW
6362 */
6363void WDA_GetFrameLogRspCallback(WDI_GetFrameLogRspParamType* wdiRsp,
6364 void* pUserData)
6365{
6366 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6367 tWDA_CbContext *pWDA = NULL;
6368 tAniGetFrameLogReq *pGetFrameLogReqParams = NULL;
6369
6370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6371 "<------ Entering: %s " ,__func__);
6372 if(NULL == pWdaParams)
6373 {
6374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6375 "%s: pWdaParams received NULL", __func__);
6376 VOS_ASSERT(0) ;
6377 return ;
6378 }
6379
6380 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6381 if (NULL == pWDA)
6382 {
6383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6384 "%s:pWDA is NULL", __func__);
6385 VOS_ASSERT(0);
6386 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6387 vos_mem_free(pWdaParams);
6388 return ;
6389 }
6390
6391 pGetFrameLogReqParams = (tAniGetFrameLogReq *)pWdaParams->wdaMsgParam;
6392 if(NULL == pGetFrameLogReqParams)
6393 {
6394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6395 "%s: pGetFrameLogReqParams received NULL", __func__);
6396 VOS_ASSERT(0);
6397 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6398 vos_mem_free(pWdaParams);
6399 return;
6400 }
6401
Siddharth Bhal64246172015-02-27 01:04:37 +05306402 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
6403 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Abhishek Singh611295e2015-07-09 11:11:54 +05306404 "%s:GetFrameLog with rsp status %d flag %d", __func__,
6405 wdiRsp->wdiStatus,pGetFrameLogReqParams->getFrameLogCmdFlag);
Siddharth Bhal64246172015-02-27 01:04:37 +05306406 }
6407
6408 /* free WDI command buffer only */
6409 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6410 vos_mem_free(pWdaParams->wdaMsgParam);
6411 vos_mem_free(pWdaParams);
6412
6413 return ;
6414
6415}
Gupta, Kapil7c34b322015-09-30 13:12:35 +05306416
6417/*
6418 * FUNCTION: WDA_RssiMonitorStopRspCallback
6419 * recieves Rssi Monitor stop response from FW
6420 */
6421void WDA_RssiMonitorStopRspCallback(WDI_RssiMonitorStopRspParamType *wdiRsp,
6422 void* pUserData)
6423{
6424 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6425 tSirRssiMonitorReq *pRssiMonitorReqParams;
6426
6427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6428 "<------ %s " ,__func__);
6429
6430 if(NULL == pWdaParams)
6431 {
6432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6433 "%s: pWdaParams received NULL", __func__);
6434 VOS_ASSERT(0);
6435 return ;
6436 }
6437
6438 if(NULL == pWdaParams->wdaMsgParam)
6439 {
6440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6441 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
6442 VOS_ASSERT(0);
6443 vos_mem_free(pWdaParams);
6444 return ;
6445 }
6446
6447 pRssiMonitorReqParams = (tSirRssiMonitorReq *)pWdaParams->wdaMsgParam;
6448
6449 if(pRssiMonitorReqParams->rssiMonitorCallback)
6450 {
6451 pRssiMonitorReqParams->rssiMonitorCallback(
6452 pRssiMonitorReqParams->rssiMonitorCbContext,
6453 CONVERT_WDI2VOS_STATUS(wdiRsp->status));
6454 }
6455 else
6456 {
6457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6458 "%s: pFWLoggingInitParams callback is NULL", __func__);
6459 }
6460
6461 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6462 vos_mem_free(pWdaParams->wdaMsgParam);
6463 vos_mem_free(pWdaParams);
6464
6465 return;
6466}
6467
6468/*
6469 * FUNCTION: WDA_RssiMonitorStartRspCallback
6470 * recieves Rssi Monitor start response from FW
6471 */
6472void WDA_RssiMonitorStartRspCallback(WDI_RssiMonitorStartRspParamType* wdiRsp,
6473 void* pUserData)
6474{
6475 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6476 tSirRssiMonitorReq *pRssiMonitorReqParams;
6477
6478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6479 "<------ %s " ,__func__);
6480
6481 if(NULL == pWdaParams)
6482 {
6483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6484 "%s: pWdaParams received NULL", __func__);
6485 VOS_ASSERT(0);
6486 return ;
6487 }
6488
6489 if(NULL == pWdaParams->wdaMsgParam)
6490 {
6491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6492 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
6493 VOS_ASSERT(0);
6494 vos_mem_free(pWdaParams);
6495 return ;
6496 }
6497
6498 pRssiMonitorReqParams = (tSirRssiMonitorReq *)pWdaParams->wdaMsgParam;
6499
6500 if(pRssiMonitorReqParams->rssiMonitorCallback)
6501 {
6502 pRssiMonitorReqParams->rssiMonitorCallback(
6503 pRssiMonitorReqParams->rssiMonitorCbContext,
6504 CONVERT_WDI2VOS_STATUS(wdiRsp->status));
6505 }
6506 else
6507 {
6508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6509 "%s: pFWLoggingInitParams callback is NULL", __func__);
6510 }
6511
6512 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6513 vos_mem_free(pWdaParams->wdaMsgParam);
6514 vos_mem_free(pWdaParams);
6515
6516 return;
6517}
6518
Siddharth Bhal64246172015-02-27 01:04:37 +05306519/*
Siddharth Bhald1be97f2015-05-27 22:39:59 +05306520 * FUNCTION: WDA_FWLoggingInitRspCallback
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05306521 * recieves Mgmt Logging init response from FW
6522 */
Siddharth Bhald1be97f2015-05-27 22:39:59 +05306523void WDA_FWLoggingInitRspCallback(WDI_FWLoggingInitRspParamType* wdiRsp,
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05306524 void* pUserData)
6525{
6526 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Siddharth Bhald1be97f2015-05-27 22:39:59 +05306527 tSirFWLoggingInitParam *pFWLoggingInitParams;
c_manjeecfd1efb2015-09-25 19:32:34 +05306528 tAniLoggingInitRsp *pLoggingInitRsp;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05306529
6530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6531 "<------ %s " ,__func__);
6532
6533 if(NULL == pWdaParams)
6534 {
6535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6536 "%s: pWdaParams received NULL", __func__);
6537 VOS_ASSERT(0);
6538 return ;
6539 }
6540
6541 if(NULL == pWdaParams->wdaMsgParam)
6542 {
6543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6544 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
6545 VOS_ASSERT(0);
6546 vos_mem_free(pWdaParams);
6547 return ;
6548 }
6549
c_manjeecfd1efb2015-09-25 19:32:34 +05306550 pLoggingInitRsp = (tAniLoggingInitRsp *)vos_mem_malloc(sizeof(tAniLoggingInitRsp)) ;
6551 if(NULL == pWdaParams)
6552 {
6553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6554 "%s: VOS MEM Alloc Failure for pLoggingInitRsp", __func__);
6555 VOS_ASSERT(0);
6556 vos_mem_free(pWdaParams);
6557 return;
6558 }
6559
Siddharth Bhald1be97f2015-05-27 22:39:59 +05306560 pFWLoggingInitParams = (tSirFWLoggingInitParam *)pWdaParams->wdaMsgParam;
c_manjeecfd1efb2015-09-25 19:32:34 +05306561 vos_mem_copy(pLoggingInitRsp, wdiRsp, sizeof(tAniLoggingInitRsp));
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05306562
Siddharth Bhald1be97f2015-05-27 22:39:59 +05306563 if(pFWLoggingInitParams->fwlogInitCallback)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05306564 {
Siddharth Bhald1be97f2015-05-27 22:39:59 +05306565 pFWLoggingInitParams->fwlogInitCallback(
6566 pFWLoggingInitParams->fwlogInitCbContext,
c_manjeecfd1efb2015-09-25 19:32:34 +05306567 pLoggingInitRsp);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05306568 }
6569 else
6570 {
6571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +05306572 "%s: pFWLoggingInitParams callback is NULL", __func__);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05306573 }
6574
c_manjeecfd1efb2015-09-25 19:32:34 +05306575 vos_mem_free(pLoggingInitRsp);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05306576 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6577 vos_mem_free(pWdaParams->wdaMsgParam);
6578 vos_mem_free(pWdaParams);
6579
6580 return;
6581}
6582
6583/*
Siddharth Bhal171788a2014-09-29 21:02:40 +05306584 * FUNCTION: WDA_SpoofMacAddrRspCallback
6585 * recieves spoof mac addr response from FW
6586 */
6587void WDA_SpoofMacAddrRspCallback(WDI_SpoofMacAddrRspParamType* wdiRsp, void* pUserData)
6588{
6589 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6590 tWDA_CbContext *pWDA;
Siddharth Bhal029d6732014-10-09 21:31:23 +05306591
Siddharth Bhal171788a2014-09-29 21:02:40 +05306592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6593 "<------ %s " ,__func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05306594
Siddharth Bhal171788a2014-09-29 21:02:40 +05306595 if(NULL == pWdaParams)
6596 {
6597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6598 "%s: pWdaParams received NULL", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05306599 VOS_ASSERT(0);
Siddharth Bhal171788a2014-09-29 21:02:40 +05306600 return ;
6601 }
Siddharth Bhal171788a2014-09-29 21:02:40 +05306602 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Siddharth Bhal171788a2014-09-29 21:02:40 +05306603
Siddharth Bhal029d6732014-10-09 21:31:23 +05306604 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
Siddharth Bhal171788a2014-09-29 21:02:40 +05306605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhal029d6732014-10-09 21:31:23 +05306606 "%s:Spoofing with rsp status %d", __func__, wdiRsp->wdiStatus);
Siddharth Bhal171788a2014-09-29 21:02:40 +05306607 }
Siddharth Bhal029d6732014-10-09 21:31:23 +05306608 WDA_SendMsg(pWDA, WDA_SPOOF_MAC_ADDR_RSP, NULL,
6609 CONVERT_WDI2SIR_STATUS(wdiRsp->wdiStatus));
Siddharth Bhal171788a2014-09-29 21:02:40 +05306610
Siddharth Bhal171788a2014-09-29 21:02:40 +05306611 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Siddharth Bhal029d6732014-10-09 21:31:23 +05306612 vos_mem_free(pWdaParams->wdaMsgParam);
Siddharth Bhal171788a2014-09-29 21:02:40 +05306613 vos_mem_free(pWdaParams);
Siddharth Bhal029d6732014-10-09 21:31:23 +05306614
6615 return;
Siddharth Bhal171788a2014-09-29 21:02:40 +05306616}
6617
Jeff Johnson295189b2012-06-20 16:38:30 -07006618/*
6619 * FUNCTION: WDA_ProcessRemoveBssKeyReq
6620 * Request to WDI to remove the BSS key( key for broadcast/multicast
6621 * frames Encryption)
6622 */
6623VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
6624 tRemoveBssKeyParams *removeBssKeyParams )
6625{
6626 WDI_Status status = WDI_STATUS_SUCCESS ;
6627 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
6628 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
6629 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
6630 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006632 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006633 if(NULL == wdiRemoveBssKeyParam)
6634 {
6635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006636 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006637 VOS_ASSERT(0);
6638 return VOS_STATUS_E_NOMEM;
6639 }
6640 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6641 if(NULL == pWdaParams)
6642 {
6643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006644 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006645 VOS_ASSERT(0);
6646 vos_mem_free(wdiRemoveBssKeyParam);
6647 return VOS_STATUS_E_NOMEM;
6648 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006649 /* copy Remove BSS key params to WDI structure*/
6650 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
6651 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
6652 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
6653 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
6654 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006655 /* Store remove key pointer, as this will be used for response */
6656 /* store Params pass it to WDI */
6657 pWdaParams->pWdaContext = pWDA;
6658 pWdaParams->wdaMsgParam = removeBssKeyParams;
6659 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006660 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
6661 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006662 if(IS_WDI_STATUS_FAILURE(status))
6663 {
6664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6665 "Failure in Remove BSS Key Req WDI API, free all the memory " );
6666 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6667 vos_mem_free(pWdaParams) ;
6668 removeBssKeyParams->status = eSIR_FAILURE ;
6669 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
6670 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006671 return CONVERT_WDI2VOS_STATUS(status) ;
6672}
Jeff Johnson295189b2012-06-20 16:38:30 -07006673/*
6674 * FUNCTION: WDA_SetBssKeyReqCallback
6675 * send SET BSS key RSP back to PE
6676 */
6677void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
6678{
6679 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6680 tWDA_CbContext *pWDA;
6681 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006683 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006684 if(NULL == pWdaParams)
6685 {
6686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006687 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006688 VOS_ASSERT(0) ;
6689 return ;
6690 }
6691 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6692 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05306693 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
6694 sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006695 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6696 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006697 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006698 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006699 return ;
6700}
Jeff Johnson295189b2012-06-20 16:38:30 -07006701/*
6702 * FUNCTION: WDA_ProcessSetStaKeyReq
6703 * Request to WDI for programming the STA key( key for Unicast frames
6704 * Encryption)
6705 */
6706VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
6707 tSetStaKeyParams *setStaKeyParams )
6708{
6709 WDI_Status status = WDI_STATUS_SUCCESS ;
6710 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
6711 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
6712 sizeof(WDI_SetSTAKeyReqParamsType)) ;
6713 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006714 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07006715 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006716 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006717 if(NULL == wdiSetStaKeyParam)
6718 {
6719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006720 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006721 VOS_ASSERT(0);
6722 return VOS_STATUS_E_NOMEM;
6723 }
6724 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6725 if(NULL == pWdaParams)
6726 {
6727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006728 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006729 VOS_ASSERT(0);
6730 vos_mem_free(wdiSetStaKeyParam);
6731 return VOS_STATUS_E_NOMEM;
6732 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006733 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006734 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006735 /* copy set STA key params to WDI structure */
6736 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
6737 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
6738 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
6739 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006740 if(setStaKeyParams->encType != eSIR_ED_NONE)
6741 {
Jeff Johnson43971f52012-07-17 12:26:56 -07006742 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07006743 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
6744 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
6745 {
6746 WDA_GetWepKeysFromCfg( pWDA,
6747 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
6748 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
6749 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
6750 }
6751 else
6752 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006753 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
6754 keyIndex++)
6755 {
6756 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
6757 setStaKeyParams->key[keyIndex].keyId;
6758 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
6759 setStaKeyParams->key[keyIndex].unicast;
6760 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
6761 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07006762 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
6763 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
6764 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
6765 setStaKeyParams->key[keyIndex].paeRole;
6766 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
6767 setStaKeyParams->key[keyIndex].keyLength;
6768 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
6769 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
6770 /* set default index to index which have key direction as WDI_TX_DEFAULT */
6771 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
6772 {
6773 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
6774 }
6775 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006776 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
6777 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07006778 }
6779 }
6780 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
6781 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006782 /* Store set key pointer, as this will be used for response */
6783 /* store Params pass it to WDI */
6784 pWdaParams->pWdaContext = pWDA;
6785 pWdaParams->wdaMsgParam = setStaKeyParams;
6786 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006787 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
6788 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006789 if(IS_WDI_STATUS_FAILURE(status))
6790 {
6791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6792 "Failure in set STA Key Req WDI API, free all the memory " );
6793 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6794 vos_mem_free(pWdaParams) ;
6795 setStaKeyParams->status = eSIR_FAILURE ;
6796 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
6797 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006798 return CONVERT_WDI2VOS_STATUS(status) ;
6799}
Jeff Johnson295189b2012-06-20 16:38:30 -07006800/*
6801 * FUNCTION: WDA_SetBcastStaKeyReqCallback
6802 * send SET Bcast STA key RSP back to PE
6803 */
6804void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
6805{
6806 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6807 tWDA_CbContext *pWDA;
6808 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006810 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006811 if(NULL == pWdaParams)
6812 {
6813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006814 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006815 VOS_ASSERT(0) ;
6816 return ;
6817 }
6818 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6819 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006820 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6821 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006822 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006823 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006824 return ;
6825}
6826
Jeff Johnson295189b2012-06-20 16:38:30 -07006827/*
6828 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
6829 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
6830 * Encryption)
6831 */
6832VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
6833 tSetStaKeyParams *setStaKeyParams )
6834{
6835 WDI_Status status = WDI_STATUS_SUCCESS ;
6836 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
6837 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
6838 sizeof(WDI_SetSTAKeyReqParamsType)) ;
6839 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006840 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07006841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006842 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006843 if(NULL == wdiSetStaKeyParam)
6844 {
6845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006846 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006847 VOS_ASSERT(0);
6848 return VOS_STATUS_E_NOMEM;
6849 }
6850 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6851 if(NULL == pWdaParams)
6852 {
6853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006854 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006855 VOS_ASSERT(0);
6856 vos_mem_free(wdiSetStaKeyParam);
6857 return VOS_STATUS_E_NOMEM;
6858 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006859 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006860 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006861 /* copy set STA key params to WDI structure */
6862 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
6863 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
6864 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
6865 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006866 if(setStaKeyParams->encType != eSIR_ED_NONE)
6867 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006868 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
6869 keyIndex++)
6870 {
6871 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
6872 setStaKeyParams->key[keyIndex].keyId;
6873 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
6874 setStaKeyParams->key[keyIndex].unicast;
6875 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
6876 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07006877 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
6878 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
6879 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
6880 setStaKeyParams->key[keyIndex].paeRole;
6881 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
6882 setStaKeyParams->key[keyIndex].keyLength;
6883 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
6884 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
6885 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006886 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
6887 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07006888 }
6889 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07006890 /* Store set key pointer, as this will be used for response */
6891 /* store Params pass it to WDI */
6892 pWdaParams->pWdaContext = pWDA;
6893 pWdaParams->wdaMsgParam = setStaKeyParams;
6894 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006895 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
6896 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006897 if(IS_WDI_STATUS_FAILURE(status))
6898 {
6899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6900 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
6901 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6902 vos_mem_free(pWdaParams) ;
6903 setStaKeyParams->status = eSIR_FAILURE ;
6904 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
6905 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006906 return CONVERT_WDI2VOS_STATUS(status) ;
6907}
Jeff Johnson295189b2012-06-20 16:38:30 -07006908/*
6909 * FUNCTION: WDA_RemoveStaKeyReqCallback
6910 * send SET BSS key RSP back to PE
6911 */
6912void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
6913{
6914 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6915 tWDA_CbContext *pWDA;
6916 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006917 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006918 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006919 if(NULL == pWdaParams)
6920 {
6921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006922 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006923 VOS_ASSERT(0) ;
6924 return ;
6925 }
6926 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6927 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006928 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6929 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006930 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006931 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006932 return ;
6933}
6934
Jeff Johnson295189b2012-06-20 16:38:30 -07006935/*
6936 * FUNCTION: WDA_ProcessRemoveStaKeyReq
6937 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
6938 */
6939VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
6940 tRemoveStaKeyParams *removeStaKeyParams )
6941{
6942 WDI_Status status = WDI_STATUS_SUCCESS ;
6943 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
6944 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
6945 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
6946 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006948 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006949 if(NULL == wdiRemoveStaKeyParam)
6950 {
6951 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006952 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006953 VOS_ASSERT(0);
6954 return VOS_STATUS_E_NOMEM;
6955 }
6956 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6957 if(NULL == pWdaParams)
6958 {
6959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006960 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006961 VOS_ASSERT(0);
6962 vos_mem_free(wdiRemoveStaKeyParam);
6963 return VOS_STATUS_E_NOMEM;
6964 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006965 /* copy remove STA key params to WDI structure*/
6966 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
6967 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
6968 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
6969 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
6970 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006971 /* Store remove key pointer, as this will be used for response */
6972 /* store Params pass it to WDI */
6973 pWdaParams->pWdaContext = pWDA;
6974 pWdaParams->wdaMsgParam = removeStaKeyParams;
6975 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006976 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
6977 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006978 if(IS_WDI_STATUS_FAILURE(status))
6979 {
6980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6981 "Failure in remove STA Key Req WDI API, free all the memory " );
6982 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6983 vos_mem_free(pWdaParams) ;
6984 removeStaKeyParams->status = eSIR_FAILURE ;
6985 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
6986 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006987 return CONVERT_WDI2VOS_STATUS(status) ;
6988}
Jeff Johnson295189b2012-06-20 16:38:30 -07006989/*
6990 * FUNCTION: WDA_IsHandleSetLinkStateReq
6991 * Update the WDA state and return the status to handle this message or not
6992 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006993WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
6994 tWDA_CbContext *pWDA,
6995 tLinkStateParams *linkStateParams)
6996{
6997 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006998 switch(linkStateParams->state)
6999 {
7000 case eSIR_LINK_PREASSOC_STATE:
7001 case eSIR_LINK_BTAMP_PREASSOC_STATE:
7002 /*
7003 * set the WDA state to PRE ASSOC
7004 * copy the BSSID into pWDA to use it in join request and return,
7005 * No need to handle these messages.
7006 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07007007 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
7008 {
7009 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07007010 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07007011 }
7012 else
7013 {
7014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007015 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07007016 VOS_ASSERT(0);
7017 }
7018
7019 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
7020 {
7021 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07007022 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07007023 }
7024 else
7025 {
7026 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007027 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07007028 VOS_ASSERT(0);
7029 }
7030
Jeff Johnson295189b2012-06-20 16:38:30 -07007031 /* UMAC is issuing the setlink state with PREASSOC twice (before set
7032 *channel and after ) so reset the WDA state to ready when the second
7033 * time UMAC issue the link state with PREASSOC
7034 */
7035 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
7036 {
7037 /* RESET WDA state back to WDA_READY_STATE */
7038 pWDA->wdaState = WDA_READY_STATE;
7039 }
7040 else
7041 {
7042 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
7043 }
7044 //populate linkState info in WDACbCtxt
7045 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07007046 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07007047 default:
7048 if(pWDA->wdaState != WDA_READY_STATE)
7049 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07007050 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
7051 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
7052 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
7053 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
7054 *the ASSERT in WDA_Stop during module unload.*/
7055 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
7056 {
7057 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07007058 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07007059 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07007060 else
7061 {
7062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07007063 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07007064 status = WDA_IGNORE_SET_LINK_STATE;
7065 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007066 }
7067 break;
7068 }
7069
7070 return status;
7071}
Jeff Johnson295189b2012-06-20 16:38:30 -07007072/*
7073 * FUNCTION: WDA_SetLinkStateCallback
7074 * call back function for set link state from WDI
7075 */
7076void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
7077{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307078 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007079 tLinkStateParams *linkStateParams;
7080 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007082 "<------ %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307083 if (NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007084 {
7085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007086 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007087 VOS_ASSERT(0) ;
7088 return ;
7089 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007090 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307091 if (NULL == pWDA)
7092 {
7093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7094 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307095 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7096 vos_mem_free(pWdaParams->wdaMsgParam);
7097 vos_mem_free(pWdaParams);
7098
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307099 VOS_ASSERT(0);
7100 return ;
7101 }
7102
Jeff Johnson295189b2012-06-20 16:38:30 -07007103 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007104 /*
7105 * In STA mode start the BA activity check timer after association
7106 * and in AP mode start BA activity check timer after BSS start */
7107 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
7108 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07007109 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
7110 ((status == WDI_STATUS_SUCCESS) &&
7111 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07007112 {
7113 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
7114 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007115 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007116 /*
7117 * No respone required for WDA_SET_LINK_STATE so free the request
7118 * param here
7119 */
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307120 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7121 vos_mem_free(pWdaParams);
7122
Jeff Johnson295189b2012-06-20 16:38:30 -07007123 return ;
7124}
Jeff Johnson295189b2012-06-20 16:38:30 -07007125/*
7126 * FUNCTION: WDA_ProcessSetLinkState
7127 * Request to WDI to set the link status.
7128 */
7129VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
7130 tLinkStateParams *linkStateParams)
7131{
7132 WDI_Status status = WDI_STATUS_SUCCESS ;
7133 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
7134 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
7135 sizeof(WDI_SetLinkReqParamsType)) ;
7136 tWDA_ReqParams *pWdaParams ;
7137 tpAniSirGlobal pMac;
7138 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
7139
7140 if(NULL == pMac)
7141 {
7142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007143 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007144 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07007145 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007146 return VOS_STATUS_E_FAILURE;
7147 }
7148
7149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007150 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007151 if(NULL == wdiSetLinkStateParam)
7152 {
7153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007154 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007155 VOS_ASSERT(0);
7156 return VOS_STATUS_E_NOMEM;
7157 }
7158 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7159 if(NULL == pWdaParams)
7160 {
7161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007162 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007163 VOS_ASSERT(0);
7164 vos_mem_free(wdiSetLinkStateParam);
7165 return VOS_STATUS_E_NOMEM;
7166 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007167 if(WDA_IGNORE_SET_LINK_STATE ==
7168 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
7169 {
7170 status = WDI_STATUS_E_FAILURE;
7171 }
7172 else
7173 {
7174 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
7175 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007176 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
7177 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007178 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
7179 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007180 pWdaParams->pWdaContext = pWDA;
7181 /* Store remove key pointer, as this will be used for response */
7182 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007183 /* store Params pass it to WDI */
7184 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
7185 /* Stop Timer only other than GO role and concurrent session */
7186 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07007187 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07007188 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
7189 {
7190 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
7191 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007192 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
7193 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007194 if(IS_WDI_STATUS_FAILURE(status))
7195 {
7196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7197 "Failure in set link state Req WDI API, free all the memory " );
7198 }
7199 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007200 if(IS_WDI_STATUS_FAILURE(status))
7201 {
7202 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07007203 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07007204 vos_mem_free(pWdaParams);
7205 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007206 return CONVERT_WDI2VOS_STATUS(status) ;
7207}
Jeff Johnson295189b2012-06-20 16:38:30 -07007208/*
7209 * FUNCTION: WDA_GetStatsReqParamsCallback
7210 * send the response to PE with Stats received from WDI
7211 */
7212void WDA_GetStatsReqParamsCallback(
7213 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
7214 void* pUserData)
7215{
Jeff Johnson295189b2012-06-20 16:38:30 -07007216 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05307217 vos_msg_t vosMsg;
Jeff Johnson295189b2012-06-20 16:38:30 -07007218
7219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007220 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007221 pGetPEStatsRspParams =
7222 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
7223 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
7224
7225 if(NULL == pGetPEStatsRspParams)
7226 {
7227 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007228 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007229 VOS_ASSERT(0);
7230 return;
7231 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007232 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05307233 pGetPEStatsRspParams->msgType = eWNI_SME_GET_STATISTICS_RSP;
Jeff Johnson295189b2012-06-20 16:38:30 -07007234 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
7235 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07007236
7237 //Fill the Session Id Properly in PE
7238 pGetPEStatsRspParams->sessionId = 0;
7239 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007240 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007241 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
7242 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07007243 vos_mem_copy( pGetPEStatsRspParams + 1,
7244 wdiGetStatsRsp + 1,
7245 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05307246
7247 vosMsg.type = eWNI_SME_GET_STATISTICS_RSP;
7248 vosMsg.bodyptr = (void *)pGetPEStatsRspParams;
7249 vosMsg.bodyval = 0;
7250 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME,
7251 (vos_msg_t*)&vosMsg))
7252 {
7253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7254 "%s: fail to post eWNI_SME_GET_STATISTICS_RSP", __func__);
7255 vos_mem_free(pGetPEStatsRspParams);
7256 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007257
7258 return;
7259}
7260
Jeff Johnson295189b2012-06-20 16:38:30 -07007261/*
7262 * FUNCTION: WDA_ProcessGetStatsReq
7263 * Request to WDI to get the statistics
7264 */
7265VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
7266 tAniGetPEStatsReq *pGetStatsParams)
7267{
7268 WDI_Status status = WDI_STATUS_SUCCESS ;
7269 WDI_GetStatsReqParamsType wdiGetStatsParam;
7270 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05307271 vos_msg_t vosMsg;
7272
Jeff Johnson295189b2012-06-20 16:38:30 -07007273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007274 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007275 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
7276 pGetStatsParams->staId;
7277 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
7278 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07007279 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007280 status = WDI_GetStatsReq(&wdiGetStatsParam,
7281 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007282 if(IS_WDI_STATUS_FAILURE(status))
7283 {
7284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7285 "Failure in Get Stats Req WDI API, free all the memory " );
7286 pGetPEStatsRspParams =
7287 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
7288 if(NULL == pGetPEStatsRspParams)
7289 {
7290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007291 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007292 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007293 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007294 return VOS_STATUS_E_NOMEM;
7295 }
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05307296 pGetPEStatsRspParams->msgType = eWNI_SME_GET_STATISTICS_RSP;
Jeff Johnson295189b2012-06-20 16:38:30 -07007297 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
7298 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
7299 pGetPEStatsRspParams->rc = eSIR_FAILURE;
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05307300
7301 vosMsg.type = eWNI_SME_GET_STATISTICS_RSP;
7302 vosMsg.bodyptr = (void *)pGetPEStatsRspParams;
7303 vosMsg.bodyval = 0;
7304 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME,
7305 (vos_msg_t*)&vosMsg))
7306 {
7307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7308 "%s: fail to post eWNI_SME_GET_STATISTICS_RSP", __func__);
7309 vos_mem_free(pGetPEStatsRspParams);
7310 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007311 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007312 /* Free the request message */
7313 vos_mem_free(pGetStatsParams);
7314 return CONVERT_WDI2VOS_STATUS(status);
7315}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08007316
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08007317#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08007318/*
7319 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
7320 * send the response to PE with roam Rssi received from WDI
7321 */
7322void WDA_GetRoamRssiReqParamsCallback(
7323 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
7324 void* pUserData)
7325{
7326 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7327 tWDA_CbContext *pWDA = NULL;
7328 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
7329 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
7330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7331 "<------ %s " ,__func__);
7332 if(NULL == pWdaParams)
7333 {
7334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7335 "%s: pWdaParams received NULL", __func__);
7336 VOS_ASSERT(0) ;
7337 return ;
7338 }
7339 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7340 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
7341
7342 if(NULL == pGetRoamRssiReqParams)
7343 {
7344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7345 "%s: pGetRoamRssiReqParams received NULL", __func__);
7346 VOS_ASSERT(0);
7347 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7348 vos_mem_free(pWdaParams);
7349 return ;
7350 }
7351 pGetRoamRssiRspParams =
7352 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
7353
7354 if(NULL == pGetRoamRssiRspParams)
7355 {
7356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7357 "%s: VOS MEM Alloc Failure", __func__);
7358 VOS_ASSERT(0);
7359 return;
7360 }
7361 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
7362 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007363 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08007364 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
7365 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
7366
7367 /* Assign get roam rssi req (backup) in to the response */
7368 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
7369
7370 /* free WDI command buffer */
7371 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7372 vos_mem_free(pWdaParams) ;
7373
7374 /* send response to UMAC*/
7375 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
7376
7377 return;
7378}
7379
7380
7381
7382/*
7383 * FUNCTION: WDA_ProcessGetRoamRssiReq
7384 * Request to WDI to get the statistics
7385 */
7386VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
7387 tAniGetRssiReq *pGetRoamRssiParams)
7388{
7389 WDI_Status status = WDI_STATUS_SUCCESS ;
7390 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
7391 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
7392 tWDA_ReqParams *pWdaParams = NULL;
7393
7394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7395 "------> %s " ,__func__);
7396 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
7397 pGetRoamRssiParams->staId;
7398 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
7399
7400 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7401 if(NULL == pWdaParams)
7402 {
7403 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7404 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05307405 vos_mem_free(pGetRoamRssiParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08007406 VOS_ASSERT(0);
7407 return VOS_STATUS_E_NOMEM;
7408 }
7409
7410 /* Store Init Req pointer, as this will be used for response */
7411 pWdaParams->pWdaContext = pWDA;
7412
7413 /* Take Get roam Rssi req backup as it stores the callback to be called after
7414 receiving the response */
7415 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
7416 pWdaParams->wdaWdiApiMsgParam = NULL;
7417
7418 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
7419 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
7420 if(IS_WDI_STATUS_FAILURE(status))
7421 {
7422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7423 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
7424 pGetRoamRssiRspParams =
7425 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
7426 if(NULL == pGetRoamRssiRspParams)
7427 {
7428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7429 "%s: VOS MEM Alloc Failure", __func__);
7430 VOS_ASSERT(0);
Abhishek Singh1e2bfa32014-01-02 15:44:15 +05307431 vos_mem_free(pGetRoamRssiParams);
7432 vos_mem_free(pWdaParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08007433 return VOS_STATUS_E_NOMEM;
7434 }
7435 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
7436 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
7437 pGetRoamRssiRspParams->rssi = 0;
7438 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
7439 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
7440 (void *)pGetRoamRssiRspParams, 0) ;
7441 }
7442 return CONVERT_WDI2VOS_STATUS(status);
7443}
7444#endif
7445
7446
Jeff Johnson295189b2012-06-20 16:38:30 -07007447/*
7448 * FUNCTION: WDA_UpdateEDCAParamCallback
7449 * call back function for Update EDCA params from WDI
7450 */
7451void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
7452{
7453 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7454 tEdcaParams *pEdcaParams;
7455
7456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007457 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007458 if(NULL == pWdaParams)
7459 {
7460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007461 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007462 VOS_ASSERT(0) ;
7463 return ;
7464 }
7465 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007466 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7467 vos_mem_free(pWdaParams);
7468 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007469 return ;
7470}
Jeff Johnson295189b2012-06-20 16:38:30 -07007471/*
7472 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
7473 * Request to WDI to Update the EDCA params.
7474 */
7475VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
7476 tEdcaParams *pEdcaParams)
7477{
7478 WDI_Status status = WDI_STATUS_SUCCESS ;
7479 WDI_UpdateEDCAParamsType *wdiEdcaParam =
7480 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
7481 sizeof(WDI_UpdateEDCAParamsType)) ;
7482 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007484 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007485 if(NULL == wdiEdcaParam)
7486 {
7487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007488 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007489 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007490 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007491 return VOS_STATUS_E_NOMEM;
7492 }
7493 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7494 if(NULL == pWdaParams)
7495 {
7496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007497 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007498 VOS_ASSERT(0);
7499 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007500 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007501 return VOS_STATUS_E_NOMEM;
7502 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007503 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
Bansidhar Gopalachari5dcf9e02013-07-29 19:53:58 -07007504 /*
7505 Since firmware is not using highperformance flag, we have removed
7506 this flag from wdiEDCAInfo structure to match sizeof the structure
7507 between host and firmware.In future if we are planning to use
7508 highperformance flag then Please define this flag in wdiEDCAInfo
7509 structure, update it here and send it to firmware. i.e.
7510 Following is the original line which we removed as part of the fix
7511 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid =
7512 pEdcaParams->highPerformance;
7513 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007514 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
7515 &pEdcaParams->acbe);
7516 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
7517 &pEdcaParams->acbk);
7518 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
7519 &pEdcaParams->acvi);
7520 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
7521 &pEdcaParams->acvo);
7522 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007523 pWdaParams->pWdaContext = pWDA;
7524 /* Store remove key pointer, as this will be used for response */
7525 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007526 /* store Params pass it to WDI */
7527 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007528 status = WDI_UpdateEDCAParams(wdiEdcaParam,
7529 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007530 if(IS_WDI_STATUS_FAILURE(status))
7531 {
7532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7533 "Failure in Update EDCA Params WDI API, free all the memory " );
7534 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7535 vos_mem_free(pWdaParams);
7536 vos_mem_free(pEdcaParams);
7537 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007538 return CONVERT_WDI2VOS_STATUS(status) ;
7539}
Jeff Johnson295189b2012-06-20 16:38:30 -07007540/*
7541 * FUNCTION: WDA_AddBAReqCallback
7542 * send ADD BA RSP back to PE
7543 */
7544void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
7545 void* pUserData)
7546{
7547 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7548 tWDA_CbContext *pWDA;
7549 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007551 "<------ %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307552 if (NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007553 {
7554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007555 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007556 VOS_ASSERT(0) ;
7557 return ;
7558 }
7559 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307560 if (NULL == pWDA)
7561 {
7562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7563 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307564 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7565 vos_mem_free(pWdaParams->wdaMsgParam);
7566 vos_mem_free(pWdaParams);
7567
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307568 VOS_ASSERT(0);
7569 return ;
7570 }
7571
Jeff Johnson295189b2012-06-20 16:38:30 -07007572 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007573 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7574 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007575 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007576 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007577 return ;
7578}
7579
Jeff Johnson295189b2012-06-20 16:38:30 -07007580/*
7581 * FUNCTION: WDA_ProcessAddBAReq
7582 * Request to WDI to Update the ADDBA REQ params.
7583 */
7584VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
Abhishek Singh01c73d12015-03-12 15:13:44 +05307585 tANI_U16 baSessionID, tANI_U8 staIdx, tANI_U8 ucWinSize, tAddBAParams *pAddBAReqParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007586{
Jeff Johnson43971f52012-07-17 12:26:56 -07007587 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007588 WDI_AddBAReqParamsType *wdiAddBAReqParam =
7589 (WDI_AddBAReqParamsType *)vos_mem_malloc(
7590 sizeof(WDI_AddBAReqParamsType)) ;
7591 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007593 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007594 if(NULL == wdiAddBAReqParam)
7595 {
7596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007597 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007598 VOS_ASSERT(0);
7599 return VOS_STATUS_E_NOMEM;
7600 }
7601 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7602 if(NULL == pWdaParams)
7603 {
7604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007605 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007606 VOS_ASSERT(0);
7607 vos_mem_free(wdiAddBAReqParam);
7608 return VOS_STATUS_E_NOMEM;
7609 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007610 do
7611 {
7612 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007613 wdiAddBaInfo->ucSTAIdx = staIdx ;
7614 wdiAddBaInfo->ucBaSessionID = baSessionID ;
Abhishek Singh01c73d12015-03-12 15:13:44 +05307615 wdiAddBaInfo->ucWinSize = ucWinSize ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007616 } while(0) ;
7617 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007618 pWdaParams->pWdaContext = pWDA;
7619 /* store Params pass it to WDI */
7620 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
7621 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07007622 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
7623 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007624
Jeff Johnson43971f52012-07-17 12:26:56 -07007625 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007626 {
7627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07007628 "Failure in ADD BA REQ Params WDI API, free all the memory" );
7629 status = CONVERT_WDI2VOS_STATUS(wstatus);
7630 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007631 vos_mem_free(pWdaParams);
7632 pAddBAReqParams->status = eSIR_FAILURE;
7633 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
7634 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007635 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007636}
Jeff Johnson295189b2012-06-20 16:38:30 -07007637/*
7638 * FUNCTION: WDA_AddBASessionReqCallback
7639 * send ADD BA SESSION RSP back to PE/(or TL)
7640 */
7641void WDA_AddBASessionReqCallback(
7642 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
7643{
7644 VOS_STATUS status = VOS_STATUS_SUCCESS ;
7645 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307646 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007647 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007649 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007650 if(NULL == pWdaParams)
7651 {
7652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007653 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007654 VOS_ASSERT(0) ;
7655 return ;
7656 }
7657 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307658 if (NULL == pWDA)
7659 {
7660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7661 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307662 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7663 vos_mem_free(pWdaParams->wdaMsgParam);
7664 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307665 VOS_ASSERT(0);
7666 return ;
7667 }
7668
Jeff Johnson295189b2012-06-20 16:38:30 -07007669 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007670 if( NULL == pAddBAReqParams )
7671 {
Jeff Johnson295189b2012-06-20 16:38:30 -07007672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007673 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007674 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007675 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7676 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007677 return ;
7678 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007679 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7680 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007681 /*
Deepthi Gowriba794fc2015-03-27 17:14:01 +05307682 * if BA direction is for recipient, update TL with BA session params and send
Jeff Johnson295189b2012-06-20 16:38:30 -07007683 * another request to HAL(/WDI) (ADD_BA_REQ)
7684 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007685 if((VOS_STATUS_SUCCESS ==
7686 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
Deepthi Gowriba794fc2015-03-27 17:14:01 +05307687 (eBA_RECIPIENT == pAddBAReqParams->baDirection))
Jeff Johnson295189b2012-06-20 16:38:30 -07007688 {
7689 /* Update TL with BA info received from HAL/WDI */
7690 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
7691 wdiAddBaSession->usBaSessionID,
7692 wdiAddBaSession->ucSTAIdx,
7693 wdiAddBaSession->ucBaTID,
7694 wdiAddBaSession->ucBaBufferSize,
7695 wdiAddBaSession->ucWinSize,
7696 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07007697 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
Abhishek Singh01c73d12015-03-12 15:13:44 +05307698 wdiAddBaSession->ucSTAIdx,
7699 wdiAddBaSession->ucWinSize, pAddBAReqParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007700 }
7701 else
7702 {
7703 pAddBAReqParams->status =
7704 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
7705
7706 /* Setting Flag to indicate that Set BA is success */
7707 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
7708 {
7709 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
7710 tANI_U8 tid = wdiAddBaSession->ucBaTID;
7711 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
7712 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007713 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
7714 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007715 /*Reset the WDA state to READY */
7716 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07007717 return ;
7718}
7719
Jeff Johnson295189b2012-06-20 16:38:30 -07007720/*
7721 * FUNCTION: WDA_ProcessAddBASessionReq
7722 * Request to WDI to Update the ADDBA REQ params.
7723 */
7724VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
7725 tAddBAParams *pAddBAReqParams)
7726{
7727 WDI_Status status = WDI_STATUS_SUCCESS ;
7728 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
7729 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
7730 sizeof(WDI_AddBASessionReqParamsType)) ;
7731 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07007732 WLANTL_STAStateType tlSTAState = 0;
7733
Jeff Johnson295189b2012-06-20 16:38:30 -07007734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007735 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007736 if(NULL == wdiAddBASessionReqParam)
7737 {
7738 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007739 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007740 VOS_ASSERT(0);
7741 return VOS_STATUS_E_NOMEM;
7742 }
7743 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7744 if(NULL == pWdaParams)
7745 {
7746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007747 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007748 VOS_ASSERT(0);
7749 vos_mem_free(wdiAddBASessionReqParam);
7750 return VOS_STATUS_E_NOMEM;
7751 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007752 /*
7753 * Populate ADD BA parameters and pass these paarmeters to WDI.
7754 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
7755 * the state to track if these is BA recipient case or BA initiator
7756 * case.
7757 */
7758 do
7759 {
7760 WDI_AddBASessionReqinfoType *wdiBAInfoType =
7761 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
7762 /* vos_mem_copy(wdiBAInfoType->macBSSID,
7763 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
7764 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
7765 vos_mem_copy(wdiBAInfoType->macPeerAddr,
7766 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007767 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07007768 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
7769 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
7770 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
7771 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
7772 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Deepthi Gowriba794fc2015-03-27 17:14:01 +05307773
Jeff Johnson295189b2012-06-20 16:38:30 -07007774 }while(0) ;
7775 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007776 pWdaParams->pWdaContext = pWDA;
7777 /* Store ADD BA pointer, as this will be used for response */
7778 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
7779 /* store Params pass it to WDI */
7780 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07007781
7782 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
7783 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
7784 */
7785 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
7786 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
7787 {
SaidiReddy Yenugaa8b32f92016-07-27 19:29:18 +05307788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007789 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.", pAddBAReqParams->staIdx, tlSTAState );
Hoonki Leea0631ce2013-04-15 16:59:08 -07007790 status = WDI_STATUS_E_NOT_ALLOWED;
7791 pAddBAReqParams->status =
7792 CONVERT_WDI2SIR_STATUS(status) ;
7793 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
7794 /*Reset the WDA state to READY */
7795 pWDA->wdaState = WDA_READY_STATE;
7796 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7797 vos_mem_free(pWdaParams);
7798
7799 return CONVERT_WDI2VOS_STATUS(status) ;
7800 }
7801
Jeff Johnson295189b2012-06-20 16:38:30 -07007802 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
7803 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007804 if(IS_WDI_STATUS_FAILURE(status))
7805 {
7806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007807 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d", status);
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07007808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007809 "Send ADD BA failure response to PE");
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07007810 pAddBAReqParams->status =
7811 CONVERT_WDI2SIR_STATUS(status) ;
7812 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07007813 /*Reset the WDA state to READY */
7814 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07007815 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007816 vos_mem_free(pWdaParams);
7817 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007818 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007819}
Jeff Johnson295189b2012-06-20 16:38:30 -07007820/*
7821 * FUNCTION: WDA_DelBANotifyTL
7822 * send DEL BA IND to TL
7823 */
7824void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
7825 tDelBAParams *pDelBAReqParams)
7826{
7827 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
7828 //tSirMsgQ msg;
7829 vos_msg_t vosMsg;
7830 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07007831 if(NULL == pDelBAInd)
7832 {
7833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007834 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007835 VOS_ASSERT(0) ;
7836 return;
7837 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007838 pDelBAInd->mesgType = WDA_DELETEBA_IND;
7839 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
7840 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
7841 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07007842
Jeff Johnson295189b2012-06-20 16:38:30 -07007843
7844 vosMsg.type = WDA_DELETEBA_IND;
7845 vosMsg.bodyptr = pDelBAInd;
7846 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
7847 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
7848 {
7849 vosStatus = VOS_STATUS_E_BADMSG;
7850 }
7851}
Jeff Johnson295189b2012-06-20 16:38:30 -07007852/*
7853 * FUNCTION: WDA_DelBAReqCallback
7854 * send DEL BA RSP back to PE
7855 */
7856void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
7857{
7858 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7859 tWDA_CbContext *pWDA;
7860 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007862 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007863 if(NULL == pWdaParams)
7864 {
7865 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007866 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007867 VOS_ASSERT(0) ;
7868 return ;
7869 }
7870 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307871
Jeff Johnson295189b2012-06-20 16:38:30 -07007872 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007873 /* Notify TL about DEL BA in case of recipinet */
7874 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
7875 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
7876 {
7877 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
7878 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007879 /*
7880 * No respone required for WDA_DELBA_IND so just free the request
7881 * param here
7882 */
7883 vos_mem_free(pDelBAReqParams);
7884 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7885 vos_mem_free(pWdaParams);
7886 return ;
7887}
7888
Jeff Johnson295189b2012-06-20 16:38:30 -07007889/*
7890 * FUNCTION: WDA_ProcessDelBAReq
7891 * Request to WDI to Update the DELBA REQ params.
7892 */
7893VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
7894 tDelBAParams *pDelBAReqParams)
7895{
7896 WDI_Status status = WDI_STATUS_SUCCESS ;
7897 WDI_DelBAReqParamsType *wdiDelBAReqParam =
7898 (WDI_DelBAReqParamsType *)vos_mem_malloc(
7899 sizeof(WDI_DelBAReqParamsType)) ;
7900 tWDA_ReqParams *pWdaParams ;
7901 tANI_U16 staIdx = 0;
7902 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07007903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007904 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007905 if(NULL == wdiDelBAReqParam)
7906 {
7907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007908 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007909 VOS_ASSERT(0);
7910 return VOS_STATUS_E_NOMEM;
7911 }
7912 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7913 if(NULL == pWdaParams)
7914 {
7915 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007916 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007917 VOS_ASSERT(0);
7918 vos_mem_free(wdiDelBAReqParam);
7919 return VOS_STATUS_E_NOMEM;
7920 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007921 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
7922 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
7923 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
7924 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007925 pWdaParams->pWdaContext = pWDA;
7926 /* Store DEL BA pointer, as this will be used for response */
7927 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007928 /* store Params pass it to WDI */
7929 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007930 /* if BA exchange over the air is failed, clear this tid in BaBitmap
7931 * maintained in WDA, so that WDA can retry for another BA session
7932 */
7933 staIdx = pDelBAReqParams->staIdx;
7934 tid = pDelBAReqParams->baTID;
7935 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07007936 status = WDI_DelBAReq(wdiDelBAReqParam,
7937 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007938 if(IS_WDI_STATUS_FAILURE(status))
7939 {
7940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7941 "Failure in DEL BA REQ Params WDI API, free all the memory " );
7942 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7943 vos_mem_free(pWdaParams->wdaMsgParam);
7944 vos_mem_free(pWdaParams);
7945 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007946 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007947}
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007948
7949/*
7950 * FUNCTION: WDA_UpdateChReqCallback
7951 *
7952 */
7953void WDA_UpdateChReqCallback(WDI_Status status, void* pUserData)
7954{
Siddharth Bhala006c122014-05-03 12:13:27 +05307955 tWDA_ReqParams *pWdaParams;
7956 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
7957 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
7958 WDI_UpdateChannelReqinfoType *pChanInfoType;
7959 tSirUpdateChanList *pChanList;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007960
7961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7962 "<------ %s " ,__func__);
Siddharth Bhala006c122014-05-03 12:13:27 +05307963 if(NULL == pUserData)
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007964 {
7965 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhala006c122014-05-03 12:13:27 +05307966 "%s: pUserData received NULL", __func__);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007967 VOS_ASSERT(0);
7968 return;
7969 }
7970
Siddharth Bhala006c122014-05-03 12:13:27 +05307971 pWdaParams = (tWDA_ReqParams *)pUserData;
7972 pwdiUpdateChReqParam =
7973 (WDI_UpdateChReqParamsType *)pWdaParams->wdaWdiApiMsgParam;
7974 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
7975 pChanInfoType = pwdiUpdateChanReqType->pchanParam;
7976 pChanList = (tSirUpdateChanList *)pWdaParams->wdaMsgParam;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007977 /*
7978 * currently there is no response message is expected between PE and
7979 * WDA, Failure return from WDI is a ASSERT condition
7980 */
7981 vos_mem_free(pChanInfoType);
7982 vos_mem_free(pChanList);
7983 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7984 vos_mem_free(pWdaParams);
7985
7986 return;
7987}
7988
7989/*
7990 * FUNCTION: WDA_ProcessUpdateChannelList
7991 * Request to WDI to Update the ChannelList params.
7992 */
7993VOS_STATUS WDA_ProcessUpdateChannelList(tWDA_CbContext *pWDA,
7994 tSirUpdateChanList *pChanList)
7995{
7996 WDI_Status status = WDI_STATUS_SUCCESS;
7997 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
7998 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
7999 WDI_UpdateChannelReqinfoType *pChanInfoType;
8000 tWDA_ReqParams *pWdaParams;
8001 wpt_uint8 i;
8002
8003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8004 "------> %s " ,__func__);
8005 if(NULL == pChanList)
8006 {
8007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8008 "%s: NULL pChanList", __func__);
8009 VOS_ASSERT(0);
8010 return VOS_STATUS_E_INVAL;
8011 }
8012
8013 if(!WDA_getFwWlanFeatCaps(UPDATE_CHANNEL_LIST))
8014 {
Ratheesh S P36dbc932015-08-07 14:28:57 +05308015 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08008016 "Update channel list capability Not Supported");
8017 vos_mem_free(pChanList);
8018 return VOS_STATUS_E_INVAL;
8019 }
8020
8021 pwdiUpdateChReqParam = (WDI_UpdateChReqParamsType *)vos_mem_malloc(
8022 sizeof(WDI_UpdateChReqParamsType));
8023 if(NULL == pwdiUpdateChReqParam)
8024 {
8025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8026 "%s: VOS MEM Alloc Failed for WDI_UpdateChReqParamsType",
8027 __func__);
8028 VOS_ASSERT(0);
8029 vos_mem_free(pChanList);
8030 return VOS_STATUS_E_NOMEM;
8031 }
8032 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
8033 pChanInfoType = (WDI_UpdateChannelReqinfoType *)
8034 vos_mem_malloc(sizeof(WDI_UpdateChannelReqinfoType) *
8035 pChanList->numChan);
8036 if(NULL == pChanInfoType)
8037 {
8038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8039 "%s: VOS MEM Alloc Failure", __func__);
8040 VOS_ASSERT(0);
8041 vos_mem_free(pChanList);
8042 vos_mem_free(pwdiUpdateChReqParam);
8043 return VOS_STATUS_E_NOMEM;
8044 }
8045 vos_mem_zero(pChanInfoType, sizeof(WDI_UpdateChannelReqinfoType)
8046 * pChanList->numChan);
8047 pwdiUpdateChanReqType->pchanParam = pChanInfoType;
8048
8049 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8050 if(NULL == pWdaParams)
8051 {
8052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8053 "%s: VOS MEM Alloc Failure", __func__);
8054 VOS_ASSERT(0);
8055 vos_mem_free(pChanList);
8056 vos_mem_free(pChanInfoType);
8057 vos_mem_free(pwdiUpdateChReqParam);
8058 return VOS_STATUS_E_NOMEM;
8059 }
8060 pwdiUpdateChanReqType->numchan = pChanList->numChan;
8061
8062 for(i = 0; i < pwdiUpdateChanReqType->numchan; i++)
8063 {
8064 pChanInfoType->mhz =
8065 vos_chan_to_freq(pChanList->chanParam[i].chanId);
8066
8067 pChanInfoType->band_center_freq1 = pChanInfoType->mhz;
8068 pChanInfoType->band_center_freq2 = 0;
8069
8070 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8071 "chan[%d] = %u", i, pChanInfoType->mhz);
8072 if (pChanList->chanParam[i].dfsSet)
8073 {
8074 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_PASSIVE);
8075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8076 "chan[%d] DFS[%d]", pChanList->chanParam[i].chanId,
8077 pChanList->chanParam[i].dfsSet);
8078 }
8079
8080 if (pChanInfoType->mhz < WDA_2_4_GHZ_MAX_FREQ)
8081 {
8082 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11G);
8083 }
8084 else
8085 {
8086 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11A);
8087 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_HT);
8088 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_VHT);
8089 }
8090
8091 WDA_SET_CHANNEL_MAX_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
8092 WDA_SET_CHANNEL_REG_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
Sachin Ahujacb64fc82015-01-12 17:01:05 +05308093 WDA_SET_CUURENT_REG_DOMAIN(pChanInfoType, pChanList->regId);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08008094 pChanInfoType++;
8095 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08008096 pwdiUpdateChReqParam->wdiReqStatusCB = NULL;
8097 pWdaParams->pWdaContext = pWDA;
8098 pWdaParams->wdaMsgParam = (void *)pChanList;
8099 /* store Params pass it to WDI */
8100 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiUpdateChReqParam;
8101 status = WDI_UpdateChannelReq(pwdiUpdateChReqParam,
8102 (WDI_UpdateChannelRspCb)WDA_UpdateChReqCallback, pWdaParams);
8103 if(IS_WDI_STATUS_FAILURE(status))
8104 {
8105 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8106 "Failure in Update Channel REQ Params WDI API, free all the memory");
8107 vos_mem_free(pwdiUpdateChanReqType->pchanParam);
8108 vos_mem_free(pwdiUpdateChReqParam);
8109 vos_mem_free(pWdaParams->wdaMsgParam);
8110 vos_mem_free(pWdaParams);
8111 }
8112 return CONVERT_WDI2VOS_STATUS(status);
8113}
8114
Jeff Johnson295189b2012-06-20 16:38:30 -07008115/*
8116 * FUNCTION: WDA_AddTSReqCallback
8117 * send ADD TS RSP back to PE
8118 */
8119void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
8120{
8121 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308122 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008123 tAddTsParams *pAddTsReqParams;
8124
8125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008126 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008127 if(NULL == pWdaParams)
8128 {
8129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008130 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008131 VOS_ASSERT(0) ;
8132 return ;
8133 }
8134 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308135 if (NULL == pWDA)
8136 {
8137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8138 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308139 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8140 vos_mem_free(pWdaParams->wdaMsgParam);
8141 vos_mem_free(pWdaParams);
8142
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308143 VOS_ASSERT(0);
8144 return ;
8145 }
8146
Jeff Johnson295189b2012-06-20 16:38:30 -07008147 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
8148 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8149 vos_mem_free(pWdaParams);
8150
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008151 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008152 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008153 return ;
8154}
8155
Jeff Johnson295189b2012-06-20 16:38:30 -07008156/*
8157 * FUNCTION: WDA_ProcessAddTSReq
8158 * Request to WDI to Update the ADD TS REQ params.
8159 */
8160VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
8161 tAddTsParams *pAddTsReqParams)
8162{
8163 WDI_Status status = WDI_STATUS_SUCCESS ;
8164 WDI_AddTSReqParamsType *wdiAddTSReqParam =
8165 (WDI_AddTSReqParamsType *)vos_mem_malloc(
8166 sizeof(WDI_AddTSReqParamsType)) ;
8167 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008169 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008170 if(NULL == wdiAddTSReqParam)
8171 {
8172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008173 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008174 VOS_ASSERT(0);
8175 return VOS_STATUS_E_NOMEM;
8176 }
8177 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8178 if(NULL == pWdaParams)
8179 {
8180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008181 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008182 VOS_ASSERT(0);
8183 vos_mem_free(wdiAddTSReqParam);
8184 return VOS_STATUS_E_NOMEM;
8185 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008186 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
8187 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008188 //TS IE
8189 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
8190 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
8191 pAddTsReqParams->tspec.length;
8192
8193 //TS IE : TS INFO : TRAFFIC
8194 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
8195 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
8196 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
8197 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
8198 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
8199 pAddTsReqParams->tspec.tsinfo.traffic.psb;
8200 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
8201 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
8202 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
8203 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
8204 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
8205 pAddTsReqParams->tspec.tsinfo.traffic.direction;
8206 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
8207 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
8208 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
8209 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
8210
8211 //TS IE : TS INFO : SCHEDULE
8212 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
8213 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
8214 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
8215 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07008216 //TS IE
8217 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
8218 pAddTsReqParams->tspec.nomMsduSz;
8219 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
8220 pAddTsReqParams->tspec.maxMsduSz;
8221 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
8222 pAddTsReqParams->tspec.minSvcInterval;
8223 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
8224 pAddTsReqParams->tspec.maxSvcInterval;
8225 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
8226 pAddTsReqParams->tspec.inactInterval;
8227 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
8228 pAddTsReqParams->tspec.suspendInterval;
8229 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
8230 pAddTsReqParams->tspec.svcStartTime;
8231 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
8232 pAddTsReqParams->tspec.minDataRate;
8233 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
8234 pAddTsReqParams->tspec.meanDataRate;
8235 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
8236 pAddTsReqParams->tspec.peakDataRate;
8237 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
8238 pAddTsReqParams->tspec.maxBurstSz;
8239 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
8240 pAddTsReqParams->tspec.delayBound;
8241 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
8242 pAddTsReqParams->tspec.minPhyRate;
8243 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
8244 pAddTsReqParams->tspec.surplusBw;
8245 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
8246 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07008247 /* TODO: tAddTsParams doesn't have the following fields */
8248#if 0
8249 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
8250 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
8251 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
8252 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
8253#endif
8254 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
8255
8256 pWdaParams->pWdaContext = pWDA;
8257 /* Store ADD TS pointer, as this will be used for response */
8258 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008259 /* store Params pass it to WDI */
8260 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008261 status = WDI_AddTSReq(wdiAddTSReqParam,
8262 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008263 if(IS_WDI_STATUS_FAILURE(status))
8264 {
8265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8266 "Failure in ADD TS REQ Params WDI API, free all the memory " );
8267 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8268 vos_mem_free(pWdaParams);
8269 pAddTsReqParams->status = eSIR_FAILURE ;
8270 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
8271 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008272 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008273}
8274
Jeff Johnson295189b2012-06-20 16:38:30 -07008275/*
8276 * FUNCTION: WDA_DelTSReqCallback
8277 * send DEL TS RSP back to PE
8278 */
8279void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
8280{
8281 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008283 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008284 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8285 vos_mem_free(pWdaParams->wdaMsgParam) ;
8286 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008287 /*
8288 * No respone required for WDA_DEL_TS_REQ so just free the request
8289 * param here
8290 */
Jeff Johnson295189b2012-06-20 16:38:30 -07008291 return ;
8292}
8293
Jeff Johnson295189b2012-06-20 16:38:30 -07008294/*
8295 * FUNCTION: WDA_ProcessDelTSReq
8296 * Request to WDI to Update the DELTS REQ params.
8297 */
8298VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
8299 tDelTsParams *pDelTSReqParams)
8300{
8301 WDI_Status status = WDI_STATUS_SUCCESS ;
8302 WDI_DelTSReqParamsType *wdiDelTSReqParam =
8303 (WDI_DelTSReqParamsType *)vos_mem_malloc(
8304 sizeof(WDI_DelTSReqParamsType)) ;
8305 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008307 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008308 if(NULL == wdiDelTSReqParam)
8309 {
8310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008311 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008312 VOS_ASSERT(0);
8313 return VOS_STATUS_E_NOMEM;
8314 }
8315 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8316 if(NULL == pWdaParams)
8317 {
8318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008319 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008320 VOS_ASSERT(0);
8321 vos_mem_free(wdiDelTSReqParam);
8322 return VOS_STATUS_E_NOMEM;
8323 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008324 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
8325 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
8326 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
8327 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
8328 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008329 pWdaParams->pWdaContext = pWDA;
8330 /* Store DEL TS pointer, as this will be used for response */
8331 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008332 /* store Params pass it to WDI */
8333 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008334 status = WDI_DelTSReq(wdiDelTSReqParam,
8335 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008336 if(IS_WDI_STATUS_FAILURE(status))
8337 {
8338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8339 "Failure in DEL TS REQ Params WDI API, free all the memory " );
8340 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8341 vos_mem_free(pWdaParams->wdaMsgParam);
8342 vos_mem_free(pWdaParams);
8343 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008344 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008345}
Jeff Johnson295189b2012-06-20 16:38:30 -07008346/*
8347 * FUNCTION: WDA_UpdateBeaconParamsCallback
8348 * Free the memory. No need to send any response to PE in this case
8349 */
8350void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
8351{
8352 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008354 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008355 if(NULL == pWdaParams)
8356 {
8357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008358 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008359 VOS_ASSERT(0) ;
8360 return ;
8361 }
8362 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8363 vos_mem_free(pWdaParams->wdaMsgParam) ;
8364 vos_mem_free(pWdaParams);
8365 /*
8366 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
8367 * param here
8368 */
Jeff Johnson295189b2012-06-20 16:38:30 -07008369 return ;
8370}
Jeff Johnson295189b2012-06-20 16:38:30 -07008371/*
8372 * FUNCTION: WDA_ProcessUpdateBeaconParams
8373 * Request to WDI to send the beacon parameters to HAL to update the Hardware
8374 */
8375VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
8376 tUpdateBeaconParams *pUpdateBeaconParams)
8377{
8378 WDI_Status status = WDI_STATUS_SUCCESS ;
8379 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
8380 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
8381 sizeof(WDI_UpdateBeaconParamsType)) ;
8382 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008384 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008385 if(NULL == wdiUpdateBeaconParams)
8386 {
8387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008388 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008389 VOS_ASSERT(0);
8390 return VOS_STATUS_E_NOMEM;
8391 }
8392 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8393 if(NULL == pWdaParams)
8394 {
8395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008396 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008397 VOS_ASSERT(0);
8398 vos_mem_free(wdiUpdateBeaconParams);
8399 return VOS_STATUS_E_NOMEM;
8400 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008401 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
8402 pUpdateBeaconParams->bssIdx;
8403 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
8404 pUpdateBeaconParams->fShortPreamble;
8405 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
8406 pUpdateBeaconParams->fShortSlotTime;
8407 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
8408 pUpdateBeaconParams->beaconInterval;
8409 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
8410 pUpdateBeaconParams->llaCoexist;
8411 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
8412 pUpdateBeaconParams->llbCoexist;
8413 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
8414 pUpdateBeaconParams->llgCoexist;
8415 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
8416 pUpdateBeaconParams->ht20MhzCoexist;
8417 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
8418 pUpdateBeaconParams->llnNonGFCoexist;
8419 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
8420 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
8421 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
8422 pUpdateBeaconParams->fRIFSMode;
8423 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
8424 pUpdateBeaconParams->paramChangeBitmap;
8425 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
8426
8427 pWdaParams->pWdaContext = pWDA;
8428 /* Store UpdateBeacon Req pointer, as this will be used for response */
8429 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008430 /* store Params pass it to WDI */
8431 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008432 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
8433 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
8434 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008435 if(IS_WDI_STATUS_FAILURE(status))
8436 {
8437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8438 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
8439 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8440 vos_mem_free(pWdaParams->wdaMsgParam);
8441 vos_mem_free(pWdaParams);
8442 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008443 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008444}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08008445#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -07008446/*
8447 * FUNCTION: WDA_TSMStatsReqCallback
8448 * send TSM Stats RSP back to PE
8449 */
8450void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
8451{
8452 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8453 tWDA_CbContext *pWDA = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07008454 tpAniGetTsmStatsRsp pTsmRspParams = NULL;
8455 tpAniGetTsmStatsReq pGetTsmStatsReqParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008456
8457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008458 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008459 if(NULL == pWdaParams)
8460 {
8461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008462 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008463 VOS_ASSERT(0) ;
8464 return ;
8465 }
8466 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308467 if (NULL == pWDA)
8468 {
8469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8470 "%s:pWDA is NULL", __func__);
8471 VOS_ASSERT(0);
8472 return ;
8473 }
8474
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07008475 pGetTsmStatsReqParams = (tAniGetTsmStatsReq *)pWdaParams->wdaMsgParam;
8476
8477 if(NULL == pGetTsmStatsReqParams)
8478 {
8479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8480 "%s: pGetTsmStatsReqParams received NULL", __func__);
8481 VOS_ASSERT(0);
8482 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8483 vos_mem_free(pWdaParams);
8484 return;
8485 }
8486
8487 pTsmRspParams =
8488 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
Jeff Johnson295189b2012-06-20 16:38:30 -07008489 if( NULL == pTsmRspParams )
8490 {
8491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008492 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008493 VOS_ASSERT( 0 );
8494 return ;
8495 }
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07008496 vos_mem_set(pTsmRspParams, sizeof(tAniGetTsmStatsRsp), 0);
8497 pTsmRspParams->rc = pwdiTSMStatsRspParams->wdiStatus;
8498 pTsmRspParams->staId = pGetTsmStatsReqParams->staId;
8499
Jeff Johnson295189b2012-06-20 16:38:30 -07008500 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
8501 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
8502 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
8503 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
8504 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
8505 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
8506 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
8507 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
8508 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
8509 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07008510
8511 /* Assign get tsm stats req req (backup) in to the response */
8512 pTsmRspParams->tsmStatsReq = pGetTsmStatsReqParams;
8513
8514 /* free WDI command buffer */
8515 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8516 vos_mem_free(pWdaParams);
8517
Jeff Johnson295189b2012-06-20 16:38:30 -07008518 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008519 return ;
8520}
8521
8522
Jeff Johnson295189b2012-06-20 16:38:30 -07008523/*
8524 * FUNCTION: WDA_ProcessTsmStatsReq
8525 * Request to WDI to get the TSM Stats params.
8526 */
8527VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07008528 tpAniGetTsmStatsReq pTsmStats)
Jeff Johnson295189b2012-06-20 16:38:30 -07008529{
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07008530 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008531 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07008532 tWDA_ReqParams *pWdaParams = NULL;
8533 tAniGetTsmStatsRsp *pGetTsmStatsRspParams = NULL;
8534
Jeff Johnson295189b2012-06-20 16:38:30 -07008535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008536 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008537 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
8538 sizeof(WDI_TSMStatsReqParamsType));
8539 if(NULL == wdiTSMReqParam)
8540 {
8541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008542 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008543 VOS_ASSERT(0);
8544 return VOS_STATUS_E_NOMEM;
8545 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008546 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8547 if(NULL == pWdaParams)
8548 {
8549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008550 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008551 VOS_ASSERT(0);
8552 vos_mem_free(wdiTSMReqParam);
8553 return VOS_STATUS_E_NOMEM;
8554 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008555 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
8556 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
8557 pTsmStats->bssId,
8558 sizeof(wpt_macAddr));
8559 wdiTSMReqParam->wdiReqStatusCB = NULL ;
8560
8561 pWdaParams->pWdaContext = pWDA;
8562 /* Store TSM Stats pointer, as this will be used for response */
8563 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07008564 pWdaParams->wdaWdiApiMsgParam = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008565 status = WDI_TSMStatsReq(wdiTSMReqParam,
8566 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008567 if(IS_WDI_STATUS_FAILURE(status))
8568 {
8569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8570 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07008571 vos_mem_free(pWdaParams);
8572
8573 pGetTsmStatsRspParams =
8574 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
8575 if(NULL == pGetTsmStatsRspParams)
8576 {
8577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8578 "%s: VOS MEM Alloc Failure", __func__);
8579 VOS_ASSERT(0);
8580 vos_mem_free(pTsmStats);
8581 return VOS_STATUS_E_NOMEM;
8582 }
8583 pGetTsmStatsRspParams->staId = pTsmStats->staId;
8584 pGetTsmStatsRspParams->rc = eSIR_FAILURE;
8585 pGetTsmStatsRspParams->tsmStatsReq = pTsmStats;
8586
8587 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pGetTsmStatsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008588 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008589 return CONVERT_WDI2VOS_STATUS(status) ;
8590}
8591#endif
8592/*
8593 * FUNCTION: WDA_SendBeaconParamsCallback
8594 * No need to send any response to PE in this case
8595 */
8596void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
8597{
8598
Jeff Johnson295189b2012-06-20 16:38:30 -07008599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008600 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008601 return ;
8602}
Jeff Johnson295189b2012-06-20 16:38:30 -07008603/*
8604 * FUNCTION: WDA_ProcessSendBeacon
8605 * Request to WDI to send the beacon template to HAL to update the TPE memory and
8606 * start beacon trasmission
8607 */
8608VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
8609 tSendbeaconParams *pSendbeaconParams)
8610{
8611 WDI_Status status = WDI_STATUS_SUCCESS ;
8612 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008614 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008615 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
8616 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
8617 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
8618 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07008619 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
8620 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05308621 /* p2pIeOffset should be atleast greater than timIeOffset */
8622 if ((pSendbeaconParams->p2pIeOffset != 0) &&
8623 (pSendbeaconParams->p2pIeOffset <
8624 pSendbeaconParams->timIeOffset))
8625 {
8626 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8627 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308628 vos_mem_free(pSendbeaconParams);
Gopichand Nakkala81aef732013-03-22 11:15:19 +05308629 VOS_ASSERT( 0 );
8630 return WDI_STATUS_E_FAILURE;
8631 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008632 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
8633 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07008634 /* Copy the beacon template to local buffer */
8635 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
8636 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
8637 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
8638
Jeff Johnson295189b2012-06-20 16:38:30 -07008639 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
8640 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07008641 if(IS_WDI_STATUS_FAILURE(status))
8642 {
8643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8644 "Failure in SEND BEACON REQ Params WDI API" );
8645 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008646 vos_mem_free(pSendbeaconParams);
8647 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07008648}
Jeff Johnson295189b2012-06-20 16:38:30 -07008649/*
8650 * FUNCTION: WDA_UpdateProbeRspParamsCallback
8651 * No need to send any response to PE in this case
8652 */
8653void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
8654{
Jeff Johnson295189b2012-06-20 16:38:30 -07008655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008656 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008657 return ;
8658}
8659
Jeff Johnson295189b2012-06-20 16:38:30 -07008660/*
8661 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
8662 * Request to WDI to send the probe response template to HAL to update the TPE memory and
8663 * send probe response
8664 */
8665VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
8666 tSendProbeRespParams *pSendProbeRspParams)
8667{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008668 WDI_Status status = WDI_STATUS_SUCCESS;
8669 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
8670 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07008671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008672 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008673
8674 if (!wdiSendProbeRspParam)
Ratheesh S P62439fe2015-06-11 15:53:31 +05308675 {
8676 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008677 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308678 }
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008679
Jeff Johnson295189b2012-06-20 16:38:30 -07008680 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008681 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07008682 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008683 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07008684 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07008685 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008686 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07008687 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
8688 WDI_PROBE_REQ_BITMAP_IE_LEN);
Sreelakshmi Konamki7d7f6ca2017-05-15 15:32:02 +05308689 /* Copy the Probe Response template to local buffer */
8690 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate =
8691 vos_mem_malloc(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.
8692 uProbeRespTemplateLen);
8693 if(!wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate)
8694 {
8695 status = WDI_STATUS_MEM_FAILURE;
8696 goto free_mem;
8697 }
8698
8699 vos_mem_copy(
8700 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
8701 pSendProbeRspParams->pProbeRespTemplate,
8702 pSendProbeRspParams->probeRespTemplateLen);
Jeff Johnson295189b2012-06-20 16:38:30 -07008703
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008704 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008705
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008706 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07008707 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07008708 if(IS_WDI_STATUS_FAILURE(status))
8709 {
8710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8711 "Failure in SEND Probe RSP Params WDI API" );
Sreelakshmi Konamki7d7f6ca2017-05-15 15:32:02 +05308712 vos_mem_free(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.
8713 pProbeRespTemplate);
Jeff Johnson295189b2012-06-20 16:38:30 -07008714 }
Sreelakshmi Konamki7d7f6ca2017-05-15 15:32:02 +05308715free_mem:
Jeff Johnson295189b2012-06-20 16:38:30 -07008716 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07008717 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07008718 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07008719}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08008720#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -07008721/*
8722 * FUNCTION: WDA_SetMaxTxPowerCallBack
8723 * send the response to PE with power value received from WDI
8724 */
8725void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
8726 void* pUserData)
8727{
8728 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8729 tWDA_CbContext *pWDA = NULL;
8730 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
8731
8732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008733 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008734 if(NULL == pWdaParams)
8735 {
8736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008737 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008738 VOS_ASSERT(0) ;
8739 return ;
8740 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008741 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308742 if (NULL == pWDA)
8743 {
8744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8745 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308746 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8747 vos_mem_free(pWdaParams->wdaMsgParam);
8748 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308749 VOS_ASSERT(0);
8750 return ;
8751 }
8752
Jeff Johnson295189b2012-06-20 16:38:30 -07008753 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008754 if( NULL == pMaxTxPowerParams )
8755 {
8756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008757 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07008758 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008759 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8760 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008761 return ;
8762 }
Jeff Johnsone7245742012-09-05 17:12:55 -07008763
Jeff Johnson295189b2012-06-20 16:38:30 -07008764
8765 /*need to free memory for the pointers used in the
8766 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008767 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8768 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008769 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07008770
Jeff Johnson295189b2012-06-20 16:38:30 -07008771
8772 /* send response to UMAC*/
8773 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
8774
8775 return;
8776}
Jeff Johnson295189b2012-06-20 16:38:30 -07008777/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008778 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07008779 * Request to WDI to send set Max Tx Power Request
8780 */
8781 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
8782 tMaxTxPowerParams *MaxTxPowerParams)
8783{
8784 WDI_Status status = WDI_STATUS_SUCCESS;
8785 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
8786 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008787
Jeff Johnson295189b2012-06-20 16:38:30 -07008788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008789 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008790
Jeff Johnson295189b2012-06-20 16:38:30 -07008791 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
8792 sizeof(WDI_SetMaxTxPowerParamsType));
8793 if(NULL == wdiSetMaxTxPowerParams)
8794 {
8795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008796 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008797 VOS_ASSERT(0);
8798 return VOS_STATUS_E_NOMEM;
8799 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008800 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8801 if(NULL == pWdaParams)
8802 {
8803 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008804 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008805 vos_mem_free(wdiSetMaxTxPowerParams);
8806 VOS_ASSERT(0);
8807 return VOS_STATUS_E_NOMEM;
8808 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008809 /* Copy.Max.Tx.Power Params to WDI structure */
8810 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
8811 MaxTxPowerParams->bssId,
8812 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008813 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
8814 MaxTxPowerParams->selfStaMacAddr,
8815 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008816 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
8817 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07008818 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008819 pWdaParams->pWdaContext = pWDA;
8820 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008821 /* store Params pass it to WDI */
8822 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008823 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
8824 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008825 if(IS_WDI_STATUS_FAILURE(status))
8826 {
8827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8828 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
8829 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8830 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008831 /* send response to UMAC*/
8832 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008833 }
8834 return CONVERT_WDI2VOS_STATUS(status);
8835
8836}
Jeff Johnson295189b2012-06-20 16:38:30 -07008837#endif
schang86c22c42013-03-13 18:41:24 -07008838
8839/*
Arif Hussaina5ebce02013-08-09 15:09:58 -07008840 * FUNCTION: WDA_SetMaxTxPowerPerBandCallBack
8841 * send the response to PE with power value received from WDI
8842 */
8843void WDA_SetMaxTxPowerPerBandCallBack(WDI_SetMaxTxPowerPerBandRspMsg
8844 *pwdiSetMaxTxPowerPerBandRsp,
8845 void* pUserData)
8846{
8847 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8848 tWDA_CbContext *pWDA = NULL;
8849 tMaxTxPowerPerBandParams *pMxTxPwrPerBandParams = NULL;
8850
8851 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8852 "<------ %s ", __func__);
8853 if (NULL == pWdaParams)
8854 {
8855 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8856 "%s: pWdaParams received NULL", __func__);
8857 VOS_ASSERT(0);
8858 return ;
8859 }
8860 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308861 if (NULL == pWDA)
8862 {
8863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8864 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308865 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8866 vos_mem_free(pWdaParams->wdaMsgParam);
8867 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308868 VOS_ASSERT(0);
8869 return ;
8870 }
8871
Arif Hussaina5ebce02013-08-09 15:09:58 -07008872 pMxTxPwrPerBandParams = (tMaxTxPowerPerBandParams*)pWdaParams->wdaMsgParam;
8873 if ( NULL == pMxTxPwrPerBandParams )
8874 {
8875 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8876 "%s: pMxTxPwrPerBandParams received NULL ", __func__);
8877 VOS_ASSERT(0);
8878 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8879 vos_mem_free(pWdaParams);
8880 return;
8881 }
8882
8883 /*need to free memory for the pointers used in the
8884 WDA Process.Set Max Tx Power Req function*/
8885 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8886 vos_mem_free(pWdaParams);
8887 pMxTxPwrPerBandParams->power = pwdiSetMaxTxPowerPerBandRsp->ucPower;
8888
8889 /* send response to UMAC*/
8890 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
8891 pMxTxPwrPerBandParams, 0);
8892
8893 return;
8894}
8895
8896/*
8897 * FUNCTION: WDA_ProcessSetMaxTxPowerPerBandReq
8898 * Request to WDI to send set Max Tx Power Per band Request
8899 */
8900 VOS_STATUS WDA_ProcessSetMaxTxPowerPerBandReq(tWDA_CbContext *pWDA,
8901 tMaxTxPowerPerBandParams
8902 *MaxTxPowerPerBandParams)
8903{
8904 WDI_Status status = WDI_STATUS_SUCCESS;
8905 WDI_SetMaxTxPowerPerBandParamsType *wdiSetMxTxPwrPerBandParams = NULL;
8906 tWDA_ReqParams *pWdaParams = NULL;
8907
8908 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8909 "------> %s ", __func__);
8910
8911 wdiSetMxTxPwrPerBandParams = vos_mem_malloc(
8912 sizeof(WDI_SetMaxTxPowerPerBandParamsType));
8913
8914 if (NULL == wdiSetMxTxPwrPerBandParams)
8915 {
8916 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8917 "%s: VOS MEM Alloc Failure", __func__);
8918 VOS_ASSERT(0);
8919 return VOS_STATUS_E_NOMEM;
8920 }
8921 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8922 if (NULL == pWdaParams)
8923 {
8924 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8925 "%s: VOS MEM Alloc Failure", __func__);
8926 vos_mem_free(wdiSetMxTxPwrPerBandParams);
8927 VOS_ASSERT(0);
8928 return VOS_STATUS_E_NOMEM;
8929 }
8930 /* Copy.Max.Tx.Power.Per.Band Params to WDI structure */
8931 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.bandInfo = \
8932 MaxTxPowerPerBandParams->bandInfo;
8933 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.ucPower = \
8934 MaxTxPowerPerBandParams->power;
8935 wdiSetMxTxPwrPerBandParams->wdiReqStatusCB = NULL;
8936 pWdaParams->pWdaContext = pWDA;
8937 pWdaParams->wdaMsgParam = (void *)MaxTxPowerPerBandParams;
8938 /* store Params pass it to WDI */
8939 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMxTxPwrPerBandParams;
8940 status = WDI_SetMaxTxPowerPerBandReq(wdiSetMxTxPwrPerBandParams,
8941 WDA_SetMaxTxPowerPerBandCallBack,
8942 pWdaParams);
8943 if (IS_WDI_STATUS_FAILURE(status))
8944 {
8945 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8946 "Failure in SET MAX TX Power REQ Params WDI API,"
8947 " free all the memory");
8948 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8949 vos_mem_free(pWdaParams);
8950 /* send response to UMAC*/
8951 WDA_SendMsg(pWDA,
8952 WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
8953 MaxTxPowerPerBandParams, 0);
8954 }
8955 return CONVERT_WDI2VOS_STATUS(status);
8956}
8957
8958/*
schang86c22c42013-03-13 18:41:24 -07008959 * FUNCTION: WDA_SetTxPowerCallBack
8960 * send the response to PE with power value received from WDI
8961 */
8962void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
8963 void* pUserData)
8964{
8965 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8966 tWDA_CbContext *pWDA = NULL;
8967 tSirSetTxPowerReq *pTxPowerParams = NULL;
8968
8969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8970 "<------ %s ", __func__);
8971 if(NULL == pWdaParams)
8972 {
8973 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8974 "%s: pWdaParams received NULL", __func__);
8975 VOS_ASSERT(0) ;
8976 return ;
8977 }
8978 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308979 if (NULL == pWDA)
8980 {
8981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8982 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308983 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8984 vos_mem_free(pWdaParams->wdaMsgParam);
8985 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308986 VOS_ASSERT(0);
8987 return ;
8988 }
8989
schang86c22c42013-03-13 18:41:24 -07008990 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
8991 if(NULL == pTxPowerParams)
8992 {
8993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8994 "%s: pTxPowerParams received NULL " ,__func__);
8995 VOS_ASSERT(0);
8996 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8997 vos_mem_free(pWdaParams);
8998 return ;
8999 }
9000
9001 /*need to free memory for the pointers used in the
9002 WDA Process.Set Max Tx Power Req function*/
9003 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9004 vos_mem_free(pWdaParams);
9005
9006 /* send response to UMAC*/
9007 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
9008 return;
9009}
9010
9011/*
9012 * FUNCTION: WDA_ProcessSetTxPowerReq
9013 * Request to WDI to send set Tx Power Request
9014 */
9015 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
9016 tSirSetTxPowerReq *txPowerParams)
9017{
9018 WDI_Status status = WDI_STATUS_SUCCESS;
9019 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
9020 tWDA_ReqParams *pWdaParams = NULL;
9021
9022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9023 "------> %s ", __func__);
9024
9025 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
9026 sizeof(WDI_SetTxPowerParamsType));
9027 if(NULL == wdiSetTxPowerParams)
9028 {
9029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9030 "%s: VOS MEM Alloc Failure", __func__);
9031 VOS_ASSERT(0);
9032 return VOS_STATUS_E_NOMEM;
9033 }
9034 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9035 if(NULL == pWdaParams)
9036 {
9037 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9038 "%s: VOS MEM Alloc Failure", __func__);
9039 vos_mem_free(wdiSetTxPowerParams);
9040 VOS_ASSERT(0);
9041 return VOS_STATUS_E_NOMEM;
9042 }
9043 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
9044 txPowerParams->bssIdx;
9045 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
9046 txPowerParams->mwPower;
9047 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
9048 pWdaParams->pWdaContext = pWDA;
9049 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
9050 /* store Params pass it to WDI */
9051 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
9052 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
9053 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
9054 if(IS_WDI_STATUS_FAILURE(status))
9055 {
9056 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9057 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
9058 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9059 vos_mem_free(pWdaParams);
9060 /* send response to UMAC*/
9061 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
9062 }
9063 return CONVERT_WDI2VOS_STATUS(status);
9064}
9065
Jeff Johnson295189b2012-06-20 16:38:30 -07009066/*
9067 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
9068 * Free the memory. No need to send any response to PE in this case
9069 */
9070void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
9071{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009072 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9073
Jeff Johnson295189b2012-06-20 16:38:30 -07009074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009075 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009076
9077 if(NULL == pWdaParams)
9078 {
9079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009080 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009081 VOS_ASSERT(0) ;
9082 return ;
9083 }
9084
9085 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9086 vos_mem_free(pWdaParams->wdaMsgParam) ;
9087 vos_mem_free(pWdaParams);
9088
Jeff Johnson295189b2012-06-20 16:38:30 -07009089 /*
9090 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
9091 * so just free the request param here
9092 */
Jeff Johnson295189b2012-06-20 16:38:30 -07009093 return ;
9094}
9095
Jeff Johnson295189b2012-06-20 16:38:30 -07009096/*
9097 * FUNCTION: WDA_ProcessSetP2PGONOAReq
9098 * Request to WDI to set the P2P Group Owner Notice of Absence Req
9099 */
9100VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
9101 tP2pPsParams *pP2pPsConfigParams)
9102{
9103 WDI_Status status = WDI_STATUS_SUCCESS ;
9104 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
9105 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
9106 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009107 tWDA_ReqParams *pWdaParams = NULL;
9108
Jeff Johnson295189b2012-06-20 16:38:30 -07009109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009110 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009111 if(NULL == wdiSetP2PGONOAReqParam)
9112 {
9113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009114 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05309115 vos_mem_free(pP2pPsConfigParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009116 VOS_ASSERT(0);
9117 return VOS_STATUS_E_NOMEM;
9118 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009119
9120 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9121 if(NULL == pWdaParams)
9122 {
9123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009124 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009125 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009126 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009127 VOS_ASSERT(0);
9128 return VOS_STATUS_E_NOMEM;
9129 }
9130
Jeff Johnson295189b2012-06-20 16:38:30 -07009131 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
9132 pP2pPsConfigParams->opp_ps;
9133 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
9134 pP2pPsConfigParams->ctWindow;
9135 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
9136 pP2pPsConfigParams->count;
9137 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
9138 pP2pPsConfigParams->duration;
9139 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
9140 pP2pPsConfigParams->interval;
9141 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
9142 pP2pPsConfigParams->single_noa_duration;
9143 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
9144 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009145
Jeff Johnson295189b2012-06-20 16:38:30 -07009146 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
9147 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009148 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
9149
Jeff Johnson295189b2012-06-20 16:38:30 -07009150 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009151 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
9152 pWdaParams->pWdaContext = pWDA;
9153
Jeff Johnson295189b2012-06-20 16:38:30 -07009154 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009155 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
9156
Jeff Johnson295189b2012-06-20 16:38:30 -07009157 if(IS_WDI_STATUS_FAILURE(status))
9158 {
9159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9160 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009161 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9162 vos_mem_free(pWdaParams->wdaMsgParam);
9163 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009164 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009165 return CONVERT_WDI2VOS_STATUS(status);
9166
Jeff Johnson295189b2012-06-20 16:38:30 -07009167}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309168
9169#ifdef FEATURE_WLAN_TDLS
9170/*
9171 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
9172 * Free the memory. No need to send any response to PE in this case
9173 */
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05309174void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
9175 void* pUserData)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309176{
9177 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9178 tWDA_CbContext *pWDA = NULL;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05309179 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309180
9181
9182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9183 "<------ %s " ,__func__);
9184 if(NULL == pWdaParams)
9185 {
9186 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9187 "%s: pWdaParams received NULL", __func__);
9188 VOS_ASSERT(0) ;
9189 return ;
9190 }
9191 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
9192
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309193 if (NULL == pWDA)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309194 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309195 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9196 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05309197 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9198 vos_mem_free(pWdaParams->wdaMsgParam);
9199 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309200 VOS_ASSERT(0);
9201 return ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309202 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309203
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05309204 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
9205 if( NULL == pTdlsLinkEstablishParams )
9206 {
9207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9208 "%s: pTdlsLinkEstablishParams "
9209 "received NULL " ,__func__);
9210 VOS_ASSERT(0);
9211 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9212 vos_mem_free(pWdaParams);
9213 return ;
9214 }
9215 pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
9216 wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309217 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309218 vos_mem_free(pWdaParams);
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05309219 /* send response to UMAC*/
9220 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
9221
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309222 return ;
9223}
9224
9225VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
9226 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
9227{
9228 WDI_Status status = WDI_STATUS_SUCCESS ;
9229 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
9230 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
9231 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
9232 tWDA_ReqParams *pWdaParams = NULL;
9233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9234 "------> %s " ,__func__);
9235 if(NULL == wdiSetTDLSLinkEstablishReqParam)
9236 {
9237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9238 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05309239 vos_mem_free(pTdlsLinkEstablishParams);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309240 VOS_ASSERT(0);
9241 return VOS_STATUS_E_NOMEM;
9242 }
9243 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9244 if(NULL == pWdaParams)
9245 {
9246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9247 "%s: VOS MEM Alloc Failure", __func__);
9248 vos_mem_free(pTdlsLinkEstablishParams);
9249 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
9250 VOS_ASSERT(0);
9251 return VOS_STATUS_E_NOMEM;
9252 }
9253 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05309254 pTdlsLinkEstablishParams->staIdx;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309255 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05309256 pTdlsLinkEstablishParams->isResponder;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309257 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05309258 pTdlsLinkEstablishParams->uapsdQueues;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309259 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05309260 pTdlsLinkEstablishParams->maxSp;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309261 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05309262 pTdlsLinkEstablishParams->isBufsta;
Naresh Jayaramc7cbd782014-02-04 17:38:23 +05309263 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsOffChannelSupported =
9264 pTdlsLinkEstablishParams->isOffChannelSupported;
9265
9266 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannels,
9267 pTdlsLinkEstablishParams->validChannels,
9268 pTdlsLinkEstablishParams->validChannelsLen);
9269
9270 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannelsLen =
9271 pTdlsLinkEstablishParams->validChannelsLen;
9272
9273 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClasses,
9274 pTdlsLinkEstablishParams->validOperClasses,
9275 pTdlsLinkEstablishParams->validOperClassesLen);
9276 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClassesLen =
9277 pTdlsLinkEstablishParams->validOperClassesLen;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309278
9279 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
9280 /* Store msg pointer from PE, as this will be used for response */
9281 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
9282 /* store Params pass it to WDI */
9283 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
9284 pWdaParams->pWdaContext = pWDA;
9285
9286 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
9287 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
9288 WDA_SetTDLSLinkEstablishReqParamsCallback,
9289 pWdaParams);
9290 if(IS_WDI_STATUS_FAILURE(status))
9291 {
9292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9293 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
9294 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9295 vos_mem_free(pWdaParams->wdaMsgParam);
9296 vos_mem_free(pWdaParams);
9297 }
9298 return CONVERT_WDI2VOS_STATUS(status);
9299}
Atul Mittalc0f739f2014-07-31 13:47:47 +05309300
9301// tdlsoffchan
9302void WDA_SetTDLSChanSwitchReqParamsCallback(WDI_SetTdlsChanSwitchReqResp *wdiSetTdlsChanSwitchReqRsp,
9303 void* pUserData)
9304{
9305 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9306 tWDA_CbContext *pWDA = NULL;
9307 tTdlsChanSwitchParams *pTdlsChanSwitchParams;
9308
9309
9310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9311 "<------ %s " ,__func__);
9312 if(NULL == pWdaParams)
9313 {
9314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9315 "%s: pWdaParams received NULL", __func__);
Atul Mittalc0f739f2014-07-31 13:47:47 +05309316 VOS_ASSERT(0) ;
9317 return ;
9318 }
9319 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
9320
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309321 if (NULL == pWDA)
Atul Mittal60bd4292014-08-14 12:19:27 +05309322 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9324 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05309325 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9326 vos_mem_free(pWdaParams->wdaMsgParam);
9327 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309328 VOS_ASSERT(0);
9329 return ;
Atul Mittal60bd4292014-08-14 12:19:27 +05309330 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309331
Atul Mittalc0f739f2014-07-31 13:47:47 +05309332 pTdlsChanSwitchParams = (tTdlsChanSwitchParams *)pWdaParams->wdaMsgParam ;
Atul Mittal60bd4292014-08-14 12:19:27 +05309333 if( NULL == pTdlsChanSwitchParams )
Atul Mittalc0f739f2014-07-31 13:47:47 +05309334 {
9335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9336 "%s: pTdlsChanSwitchParams "
9337 "received NULL " ,__func__);
9338 VOS_ASSERT(0);
9339 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9340 vos_mem_free(pWdaParams);
9341 return ;
9342 }
9343 pTdlsChanSwitchParams->status = CONVERT_WDI2SIR_STATUS(
9344 wdiSetTdlsChanSwitchReqRsp->wdiStatus);
Atul Mittalc0f739f2014-07-31 13:47:47 +05309345 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9346 vos_mem_free(pWdaParams);
Atul Mittal60bd4292014-08-14 12:19:27 +05309347 /* send response to UMAC*/
9348 WDA_SendMsg(pWDA, WDA_SET_TDLS_CHAN_SWITCH_REQ_RSP, pTdlsChanSwitchParams, 0) ;
Atul Mittalc0f739f2014-07-31 13:47:47 +05309349
9350 return ;
9351}
9352VOS_STATUS WDA_ProcessSetTdlsChanSwitchReq(tWDA_CbContext *pWDA,
9353 tTdlsChanSwitchParams *pTdlsChanSwitchParams)
9354{
9355 WDI_Status status = WDI_STATUS_SUCCESS ;
9356 WDI_SetTDLSChanSwitchReqParamsType *wdiSetTDLSChanSwitchReqParam =
9357 (WDI_SetTDLSChanSwitchReqParamsType *)vos_mem_malloc(
9358 sizeof(WDI_SetTDLSChanSwitchReqParamsType));
9359 tWDA_ReqParams *pWdaParams = NULL;
9360
9361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9362 "Enter: %s ",__func__);
9363 if(NULL == wdiSetTDLSChanSwitchReqParam)
9364 {
9365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9366 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05309367 vos_mem_free(pTdlsChanSwitchParams);
Atul Mittalc0f739f2014-07-31 13:47:47 +05309368 VOS_ASSERT(0);
9369 return VOS_STATUS_E_NOMEM;
9370 }
9371
9372 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9373 if(NULL == pWdaParams)
9374 {
9375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9376 "%s: VOS MEM Alloc Failure", __func__);
9377 vos_mem_free(pTdlsChanSwitchParams);
9378 vos_mem_free(wdiSetTDLSChanSwitchReqParam);
9379 VOS_ASSERT(0);
9380 return VOS_STATUS_E_NOMEM;
9381 }
9382 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.staIdx =
9383 pTdlsChanSwitchParams->staIdx;
9384 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.isOffchannelInitiator =
9385 pTdlsChanSwitchParams->tdlsSwMode;
9386 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetOperClass =
9387 pTdlsChanSwitchParams->operClass;
9388 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetChannel =
9389 pTdlsChanSwitchParams->tdlsOffCh;
9390 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.secondaryChannelOffset =
9391 pTdlsChanSwitchParams->tdlsOffChBwOffset;
9392
9393
9394 /* Store msg pointer from PE, as this will be used for response */
9395 pWdaParams->wdaMsgParam = (void *)pTdlsChanSwitchParams ;
9396 /* store Params pass it to WDI */
9397 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSChanSwitchReqParam ;
9398 pWdaParams->pWdaContext = pWDA;
9399 status = WDI_SetTDLSChanSwitchReq(wdiSetTDLSChanSwitchReqParam,
9400 (WDI_SetTDLSChanSwitchReqParamsRspCb)
9401 WDA_SetTDLSChanSwitchReqParamsCallback,
9402 pWdaParams);
9403 if(IS_WDI_STATUS_FAILURE(status))
9404 {
9405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9406 "Failure in TDLS Channel Switch Req WDI API, free all the memory" );
9407 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9408 vos_mem_free(pWdaParams->wdaMsgParam);
9409 vos_mem_free(pWdaParams);
9410 }
9411 return CONVERT_WDI2VOS_STATUS(status);
9412}
9413#endif /*FEATURE_WLAN_TDLS*/
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05309414
9415
Jeff Johnson295189b2012-06-20 16:38:30 -07009416#ifdef WLAN_FEATURE_VOWIFI_11R
9417/*
9418 * FUNCTION: WDA_AggrAddTSReqCallback
9419 * send ADD AGGREGATED TS RSP back to PE
9420 */
9421void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
9422{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009423 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309424 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009425 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009426 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07009427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009428 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009429 if(NULL == pWdaParams)
9430 {
9431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009432 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009433 VOS_ASSERT(0) ;
9434 return ;
9435 }
9436
9437 pWDA = pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309438 if (NULL == pWDA)
9439 {
9440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9441 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05309442 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9443 vos_mem_free(pWdaParams->wdaMsgParam);
9444 vos_mem_free(pWdaParams);
9445
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309446 VOS_ASSERT(0);
9447 return ;
9448 }
9449
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009450 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009451
9452 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
9453 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009454 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009455 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009456 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009457
9458 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9459 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009460 return ;
9461}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07009462/*
9463 * FUNCTION: WDA_ProcessAddTSReq
9464 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
9465 */
9466VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
9467 tAggrAddTsParams *pAggrAddTsReqParams)
9468{
9469 WDI_Status status = WDI_STATUS_SUCCESS ;
9470 int i;
9471 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009472 tWDA_ReqParams *pWdaParams = NULL;
9473
9474
Jeff Johnson295189b2012-06-20 16:38:30 -07009475 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009476 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009477 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
9478 sizeof(WDI_AggrAddTSReqParamsType)) ;
9479 if(NULL == wdiAggrAddTSReqParam)
9480 {
9481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009482 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05309483 vos_mem_free(pAggrAddTsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009484 VOS_ASSERT(0);
9485 return VOS_STATUS_E_NOMEM;
9486 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009487
9488
9489 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9490 if(NULL == pWdaParams)
9491 {
9492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009493 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009494 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009495 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009496 VOS_ASSERT(0);
9497 return VOS_STATUS_E_NOMEM;
9498 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009499 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
9500 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
9501 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07009502 for( i = 0; i < WDI_MAX_NO_AC; i++ )
9503 {
9504 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
9505 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
9506 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07009507 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
9508 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
9509 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
9510 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
9511 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
9512 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
9513 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
9514 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
9515 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
9516 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
9517 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
9518 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
9519 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
9520 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
9521 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
9522 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07009523 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
9524 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07009525 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
9526 pAggrAddTsReqParams->tspec[i].nomMsduSz;
9527 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
9528 pAggrAddTsReqParams->tspec[i].maxMsduSz;
9529 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
9530 pAggrAddTsReqParams->tspec[i].minSvcInterval;
9531 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
9532 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
9533 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
9534 pAggrAddTsReqParams->tspec[i].inactInterval;
9535 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
9536 pAggrAddTsReqParams->tspec[i].suspendInterval;
9537 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
9538 pAggrAddTsReqParams->tspec[i].svcStartTime;
9539 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
9540 pAggrAddTsReqParams->tspec[i].minDataRate;
9541 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
9542 pAggrAddTsReqParams->tspec[i].meanDataRate;
9543 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
9544 pAggrAddTsReqParams->tspec[i].peakDataRate;
9545 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
9546 pAggrAddTsReqParams->tspec[i].maxBurstSz;
9547 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
9548 pAggrAddTsReqParams->tspec[i].delayBound;
9549 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
9550 pAggrAddTsReqParams->tspec[i].minPhyRate;
9551 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
9552 pAggrAddTsReqParams->tspec[i].surplusBw;
9553 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
9554 pAggrAddTsReqParams->tspec[i].mediumTime;
9555 }
9556
9557 /* TODO: tAggrAddTsParams doesn't have the following fields */
9558#if 0
9559 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
9560 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
9561 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
9562 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
9563#endif
9564 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
9565
9566 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009567 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009568 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009569 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
9570
9571 pWdaParams->pWdaContext = pWDA;
9572
Jeff Johnson295189b2012-06-20 16:38:30 -07009573 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009574 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
9575
Jeff Johnson295189b2012-06-20 16:38:30 -07009576 if(IS_WDI_STATUS_FAILURE(status))
9577 {
9578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9579 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009580
9581 /* send the failure response back to PE*/
9582 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
9583 {
9584 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
9585 }
9586
9587 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
9588 (void *)pAggrAddTsReqParams , 0) ;
Sen, Devendra8e4f8fc2016-09-07 12:42:46 +05309589
9590 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9591 vos_mem_free(pWdaParams);
9592
Jeff Johnson295189b2012-06-20 16:38:30 -07009593 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009594 return CONVERT_WDI2VOS_STATUS(status) ;
9595}
9596#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07009597/*
Mihir Shetea4306052014-03-25 00:02:54 +05309598 * FUNCTION: WDA_EnterImpsRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009599 * send Enter IMPS RSP back to PE
9600 */
Mihir Shetea4306052014-03-25 00:02:54 +05309601void WDA_EnterImpsRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009602{
Mihir Shetea4306052014-03-25 00:02:54 +05309603 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309604 tWDA_CbContext *pWDA = NULL;
Mihir Shetea4306052014-03-25 00:02:54 +05309605
Jeff Johnson295189b2012-06-20 16:38:30 -07009606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Mihir Shetea4306052014-03-25 00:02:54 +05309607 "<------ %s status=%d" ,__func__,status);
9608 if(NULL == pWdaParams)
9609 {
9610 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9611 "%s: pWdaParams received NULL", __func__);
9612 VOS_ASSERT(0);
9613 return;
9614 }
9615
9616 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309617 if (NULL == pWDA)
9618 {
9619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9620 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05309621 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9622 vos_mem_free(pWdaParams->wdaMsgParam);
9623 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309624 VOS_ASSERT(0);
9625 return ;
9626 }
Mihir Shetea4306052014-03-25 00:02:54 +05309627
9628 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9629 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309630 if (WDI_STATUS_SUCCESS != status)
9631 {
9632 pWDA->failureCounts.enterImpsFailureCount++;
9633 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9634 pWDA->failureCounts.enterImpsFailureCount)
9635 {
9636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9637 "%s: Status %d fail count %d", __func__, status,
9638 pWDA->failureCounts.enterImpsFailureCount);
9639 pWDA->failureCounts.enterImpsFailureCount = 0;
9640 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9641 WLAN_LOG_INDICATOR_HOST_DRIVER,
9642 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
9643 FALSE, TRUE);
9644 }
9645 }
9646 else
9647 {
9648 pWDA->failureCounts.enterImpsFailureCount = 0;
9649 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009650 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009651 return ;
9652}
Mihir Shetea4306052014-03-25 00:02:54 +05309653
9654
9655/*
9656 * FUNCTION: WDA_EnterImpsReqCallback
9657 * Free memory and send Enter IMPS RSP back to PE.
9658 * Invoked when Enter IMPS REQ failed in WDI and no RSP callback is generated.
9659 */
9660void WDA_EnterImpsReqCallback(WDI_Status wdiStatus, void* pUserData)
9661{
9662 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309663 tWDA_CbContext *pWDA = NULL;
Mihir Shetea4306052014-03-25 00:02:54 +05309664
9665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9666 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9667
9668 if(NULL == pWdaParams)
9669 {
9670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9671 "%s: pWdaParams received NULL", __func__);
9672 VOS_ASSERT(0);
9673 return;
9674 }
9675
9676 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309677 if (NULL == pWDA)
9678 {
9679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9680 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05309681 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9682 vos_mem_free(pWdaParams->wdaMsgParam);
9683 vos_mem_free(pWdaParams);
9684
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309685 VOS_ASSERT(0);
9686 return ;
9687 }
9688
Mihir Shetea4306052014-03-25 00:02:54 +05309689
9690 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9691 {
9692 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9693 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309694 pWDA->failureCounts.enterImpsFailureCount++;
9695 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9696 pWDA->failureCounts.enterImpsFailureCount)
9697 {
9698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9699 "%s: wdiStatus %d fail count %d", __func__, wdiStatus,
9700 pWDA->failureCounts.enterImpsFailureCount);
9701 pWDA->failureCounts.enterImpsFailureCount = 0;
9702 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9703 WLAN_LOG_INDICATOR_HOST_DRIVER,
9704 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
9705 FALSE, TRUE);
9706 }
Mihir Shetea4306052014-03-25 00:02:54 +05309707 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
9708 CONVERT_WDI2SIR_STATUS(wdiStatus));
9709 }
9710
9711 return;
9712}
Jeff Johnson295189b2012-06-20 16:38:30 -07009713/*
9714 * FUNCTION: WDA_ProcessEnterImpsReq
9715 * Request to WDI to Enter IMPS power state.
9716 */
9717VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
9718{
9719 WDI_Status status = WDI_STATUS_SUCCESS ;
Mihir Shetea4306052014-03-25 00:02:54 +05309720 WDI_EnterImpsReqParamsType *wdiEnterImpsReqParams;
9721 tWDA_ReqParams *pWdaParams;
Sushant Kaushik7438e252015-05-01 14:55:09 +05309722 static int failcnt = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07009723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009724 "------> %s " ,__func__);
Mihir Shetea4306052014-03-25 00:02:54 +05309725
9726
9727 wdiEnterImpsReqParams = vos_mem_malloc(sizeof(WDI_EnterImpsReqParamsType));
9728 if (NULL == wdiEnterImpsReqParams)
9729 {
9730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9731 "%s: VOS MEM Alloc Failure", __func__);
9732 VOS_ASSERT(0);
9733 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
9734 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
9735 return VOS_STATUS_E_NOMEM;
9736 }
9737
9738 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
9739 if (NULL == pWdaParams)
9740 {
9741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9742 "%s: VOS MEM Alloc Failure", __func__);
9743 VOS_ASSERT(0);
9744 vos_mem_free(wdiEnterImpsReqParams);
9745 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL ,
9746 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
9747 return VOS_STATUS_E_NOMEM;
9748 }
9749
9750 wdiEnterImpsReqParams->wdiReqStatusCB = WDA_EnterImpsReqCallback;
9751 wdiEnterImpsReqParams->pUserData = pWdaParams;
9752
9753 pWdaParams->wdaWdiApiMsgParam = wdiEnterImpsReqParams;
9754 pWdaParams->wdaMsgParam = NULL;
9755 pWdaParams->pWdaContext = pWDA;
9756
9757 status = WDI_EnterImpsReq(wdiEnterImpsReqParams,
9758 (WDI_EnterImpsRspCb)WDA_EnterImpsRspCallback,
9759 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009760 if(IS_WDI_STATUS_FAILURE(status))
9761 {
Sushant Kaushik7438e252015-05-01 14:55:09 +05309762 if (! (failcnt & 0xF))
9763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9764 "Failure in Enter IMPS REQ WDI API, free all the memory " );
9765 failcnt++;
Mihir Shetea4306052014-03-25 00:02:54 +05309766 vos_mem_free(wdiEnterImpsReqParams);
9767 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009768 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009769 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009770 return CONVERT_WDI2VOS_STATUS(status) ;
9771}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309772
9773/*
9774 * FUNCTION: WDA_ExitImpsRespCallback
9775 * send Exit IMPS RSP back to PE
9776 */
9777void WDA_ExitImpsRespCallback(WDI_Status status, void* pUserData)
9778{
9779 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9780 tWDA_CbContext *pWDA;
9781
9782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9783 "<------ %s " ,__func__);
9784
9785 if (NULL == pWdaParams)
9786 {
9787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9788 "%s: pWdaParams received NULL", __func__);
9789 VOS_ASSERT(0);
9790 return;
9791 }
9792 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9793
9794 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9795 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309796 if (WDI_STATUS_SUCCESS != status)
9797 {
9798 pWDA->failureCounts.exitImpsFailureCount++;
9799 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9800 pWDA->failureCounts.exitImpsFailureCount)
9801 {
9802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9803 "%s: Status %d fail count %d", __func__,
9804 status,
9805 pWDA->failureCounts.exitImpsFailureCount);
9806 pWDA->failureCounts.exitImpsFailureCount = 0;
9807 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9808 WLAN_LOG_INDICATOR_HOST_DRIVER,
9809 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9810 FALSE, TRUE);
9811 }
9812 }
9813 else
9814 {
9815 pWDA->failureCounts.exitImpsFailureCount = 0;
9816 }
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309817
9818 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status));
9819 return;
9820}
9821
Jeff Johnson295189b2012-06-20 16:38:30 -07009822/*
9823 * FUNCTION: WDA_ExitImpsReqCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009824 */
9825void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
9826{
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309827 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Abhishek Singh837adf22015-10-01 17:37:37 +05309828 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009830 "<------ %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309831 if(NULL == pWdaParams)
9832 {
9833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9834 "%s: pWdaParams received NULL", __func__);
9835 VOS_ASSERT(0);
9836 return;
9837 }
Abhishek Singh837adf22015-10-01 17:37:37 +05309838 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309839 if (IS_WDI_STATUS_FAILURE(status))
9840 {
9841 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9842 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309843
9844 pWDA->failureCounts.exitImpsFailureCount++;
9845 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9846 pWDA->failureCounts.exitImpsFailureCount)
9847 {
9848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9849 "%s: wdiStatus %d fail count %d", __func__,
9850 status,
9851 pWDA->failureCounts.exitImpsFailureCount);
9852 pWDA->failureCounts.exitImpsFailureCount = 0;
9853 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9854 WLAN_LOG_INDICATOR_HOST_DRIVER,
9855 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9856 FALSE, TRUE);
9857 }
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309858 if (WDI_STATUS_DEV_INTERNAL_FAILURE == status)
9859 {
9860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9861 FL("reload wlan driver"));
9862 wpalWlanReload();
9863 }
9864 }
9865 return;
Jeff Johnson295189b2012-06-20 16:38:30 -07009866}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309867
Jeff Johnson295189b2012-06-20 16:38:30 -07009868/*
9869 * FUNCTION: WDA_ProcessExitImpsReq
9870 * Request to WDI to Exit IMPS power state.
9871 */
9872VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
9873{
9874 WDI_Status status = WDI_STATUS_SUCCESS ;
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309875 tWDA_ReqParams *pWdaParams;
9876 WDI_ExitImpsReqParamsType *wdiExitImpsReqParams;
9877
Jeff Johnson295189b2012-06-20 16:38:30 -07009878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009879 "------> %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309880 wdiExitImpsReqParams = (WDI_ExitImpsReqParamsType *)vos_mem_malloc(
9881 sizeof(WDI_ExitImpsReqParamsType));
9882 if (NULL == wdiExitImpsReqParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009883 {
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9885 "%s: VOS MEM Alloc Failure", __func__);
9886 VOS_ASSERT(0);
9887 return VOS_STATUS_E_NOMEM;
9888 }
9889 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
9890 if(NULL == pWdaParams)
9891 {
9892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9893 "%s: VOS MEM Alloc Failure", __func__);
9894 VOS_ASSERT(0);
9895 vos_mem_free(wdiExitImpsReqParams);
9896 return VOS_STATUS_E_NOMEM;
9897 }
9898 wdiExitImpsReqParams->wdiReqStatusCB = WDA_ExitImpsReqCallback;
9899 wdiExitImpsReqParams->pUserData = pWdaParams;
9900
9901 /* Store param pointer as passed in by caller */
9902 /* store Params pass it to WDI */
9903 pWdaParams->wdaWdiApiMsgParam = wdiExitImpsReqParams;
9904 pWdaParams->pWdaContext = pWDA;
9905 pWdaParams->wdaMsgParam = wdiExitImpsReqParams;
9906 status = WDI_ExitImpsReq(wdiExitImpsReqParams,
9907 (WDI_ExitImpsRspCb)WDA_ExitImpsRespCallback,
9908 pWdaParams);
9909 if (IS_WDI_STATUS_FAILURE(status))
9910 {
9911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9912 "Failure in Exit IMPS REQ WDI API, free all the memory " );
9913 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9914 vos_mem_free(pWdaParams);
9915 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009916 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009917 return CONVERT_WDI2VOS_STATUS(status) ;
9918}
Jeff Johnson295189b2012-06-20 16:38:30 -07009919/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009920 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009921 * send Enter BMPS RSP back to PE
9922 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009923void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009924{
9925 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309926 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009927 tEnterBmpsParams *pEnterBmpsRspParams;
9928
Jeff Johnson295189b2012-06-20 16:38:30 -07009929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009930 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009931 if(NULL == pWdaParams)
9932 {
9933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009934 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009935 VOS_ASSERT(0) ;
9936 return ;
9937 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009938
9939 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309940 if (NULL == pWDA)
9941 {
9942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9943 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05309944
9945 if(pWdaParams->wdaWdiApiMsgParam)
9946 {
9947 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9948 }
9949 vos_mem_free(pWdaParams);
9950
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309951 VOS_ASSERT(0);
9952 return ;
9953 }
9954
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009955 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
9956
9957 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009958 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009959
9960 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009961 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05309962 if (eHAL_STATUS_SUCCESS != pEnterBmpsRspParams->status)
9963 {
9964 pWDA->failureCounts.enterBmpsFailureCount++;
9965 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9966 pWDA->failureCounts.enterBmpsFailureCount)
9967 {
9968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9969 "%s: wdiStatus %d fail count %d", __func__,
9970 pwdiEnterBmpsRsp->wdiStatus,
9971 pWDA->failureCounts.enterBmpsFailureCount);
9972 pWDA->failureCounts.enterBmpsFailureCount = 0;
9973 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9974 WLAN_LOG_INDICATOR_HOST_DRIVER,
9975 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
9976 FALSE, TRUE);
9977 }
9978 }
9979 else
9980 {
9981 pWDA->failureCounts.enterBmpsFailureCount = 0;
9982 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009983 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
9984
Jeff Johnson295189b2012-06-20 16:38:30 -07009985 return ;
9986}
Jeff Johnson295189b2012-06-20 16:38:30 -07009987/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009988 * FUNCTION: WDA_EnterBmpsReqCallback
9989 * Free memory and send Enter BMPS RSP back to PE.
9990 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
9991 */
9992void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
9993{
9994 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309995 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009996 tEnterBmpsParams *pEnterBmpsRspParams;
9997
9998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9999 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10000
10001 if(NULL == pWdaParams)
10002 {
10003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10004 "%s: pWdaParams received NULL", __func__);
10005 VOS_ASSERT(0);
10006 return;
10007 }
10008
10009 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010010 if (NULL == pWDA)
10011 {
10012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10013 "%s:pWDA is NULL", __func__);
10014 VOS_ASSERT(0);
10015 return ;
10016 }
10017
Yue Ma7f44bbe2013-04-12 11:47:39 -070010018 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
10019 pEnterBmpsRspParams->status = wdiStatus;
10020
10021 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10022 {
10023 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10024 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +053010025 pWDA->failureCounts.enterBmpsFailureCount++;
10026 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
10027 pWDA->failureCounts.enterBmpsFailureCount)
10028 {
10029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10030 "%s: wdiStatus %d fail count %d", __func__,
10031 wdiStatus,
10032 pWDA->failureCounts.enterBmpsFailureCount);
10033 pWDA->failureCounts.enterBmpsFailureCount = 0;
10034 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
10035 WLAN_LOG_INDICATOR_HOST_DRIVER,
10036 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
10037 FALSE, TRUE);
10038 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010039 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
10040 }
10041
10042 return;
10043}
10044/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010045 * FUNCTION: WDA_ProcessEnterBmpsReq
10046 * Request to WDI to Enter BMPS power state.
10047 */
10048VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
10049 tEnterBmpsParams *pEnterBmpsReqParams)
10050{
10051 WDI_Status status = WDI_STATUS_SUCCESS;
10052 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
10053 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010055 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010056 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
10057 {
10058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010059 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010060 VOS_ASSERT(0);
10061 return VOS_STATUS_E_FAILURE;
10062 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010063 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
10064 if (NULL == wdiEnterBmpsReqParams)
10065 {
10066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010067 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010068 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070010069 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
10070 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010071 return VOS_STATUS_E_NOMEM;
10072 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010073 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
10074 if (NULL == pWdaParams)
10075 {
10076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010077 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010078 VOS_ASSERT(0);
10079 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070010080 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
10081 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010082 return VOS_STATUS_E_NOMEM;
10083 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010084 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
10085 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
10086 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
10087 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080010088 // For ESE and 11R Roaming
Jeff Johnson295189b2012-06-20 16:38:30 -070010089 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
10090 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
10091 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010092 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
10093 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010094
Jeff Johnson295189b2012-06-20 16:38:30 -070010095 /* Store param pointer as passed in by caller */
10096 /* store Params pass it to WDI */
10097 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010098 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010099 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070010100 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010101 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010102 if (IS_WDI_STATUS_FAILURE(status))
10103 {
10104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10105 "Failure in Enter BMPS REQ WDI API, free all the memory" );
10106 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010107 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -070010108 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070010109 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010110 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010111 return CONVERT_WDI2VOS_STATUS(status);
10112}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070010113
10114
10115static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
10116 WDI_Status wdiStatus,
10117 tExitBmpsParams *pExitBmpsReqParams)
10118{
10119 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
10120
10121 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
10122}
10123
10124
Jeff Johnson295189b2012-06-20 16:38:30 -070010125/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010126 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010127 * send Exit BMPS RSP back to PE
10128 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010129void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010130{
10131 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010132 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010133 tExitBmpsParams *pExitBmpsRspParams;
10134
Jeff Johnson295189b2012-06-20 16:38:30 -070010135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010136 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010137 if(NULL == pWdaParams)
10138 {
10139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010140 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010141 VOS_ASSERT(0) ;
10142 return ;
10143 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010144
10145 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010146 if (NULL == pWDA)
10147 {
10148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10149 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053010150
10151 if(pWdaParams->wdaWdiApiMsgParam)
10152 {
10153 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10154 }
10155 vos_mem_free(pWdaParams);
10156
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010157 VOS_ASSERT(0);
10158 return ;
10159 }
10160
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010161 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
10162
10163 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010164 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010165
Jeff Johnson295189b2012-06-20 16:38:30 -070010166 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Abhishek Singh837adf22015-10-01 17:37:37 +053010167 vos_mem_free(pWdaParams);
10168
10169 if (WDI_STATUS_SUCCESS != pwdiExitBmpsRsp->wdiStatus)
10170 {
10171 pWDA->failureCounts.exitBmpsFailureCount++;
10172 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
10173 pWDA->failureCounts.exitBmpsFailureCount)
10174 {
10175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10176 "%s: Status %d fail count %d", __func__,
10177 pExitBmpsRspParams->status,
10178 pWDA->failureCounts.exitBmpsFailureCount);
10179 pWDA->failureCounts.exitBmpsFailureCount = 0;
10180 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
10181 WLAN_LOG_INDICATOR_HOST_DRIVER,
10182 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
10183 FALSE, TRUE);
10184 }
10185 }
10186 else
10187 {
10188 pWDA->failureCounts.exitBmpsFailureCount = 0;
10189 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010190
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010191 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010192 return ;
10193}
Jeff Johnson295189b2012-06-20 16:38:30 -070010194/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010195 * FUNCTION: WDA_ExitBmpsReqCallback
10196 * Free memory and send Exit BMPS RSP back to PE.
10197 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
10198 */
10199void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
10200{
10201 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010202 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010203 tExitBmpsParams *pExitBmpsRspParams;
10204
10205 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10206 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10207
10208 if(NULL == pWdaParams)
10209 {
10210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10211 "%s: pWdaParams received NULL", __func__);
10212 VOS_ASSERT(0);
10213 return;
10214 }
10215
10216 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010217 if (NULL == pWDA)
10218 {
10219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10220 "%s:pWDA is NULL", __func__);
10221 VOS_ASSERT(0);
10222 return ;
10223 }
10224
Yue Ma7f44bbe2013-04-12 11:47:39 -070010225 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
10226 pExitBmpsRspParams->status = wdiStatus;
10227
10228 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10229 {
10230 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10231 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +053010232 pWDA->failureCounts.exitBmpsFailureCount++;
10233 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
10234 pWDA->failureCounts.exitBmpsFailureCount)
10235 {
10236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10237 "%s: wdiStatus %d fail count %d", __func__,
10238 wdiStatus,
10239 pWDA->failureCounts.exitBmpsFailureCount);
10240 pWDA->failureCounts.exitBmpsFailureCount = 0;
10241 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
10242 WLAN_LOG_INDICATOR_HOST_DRIVER,
10243 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
10244 FALSE, TRUE);
10245 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010246 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
10247 }
10248
10249 return;
10250}
10251/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010252 * FUNCTION: WDA_ProcessExitBmpsReq
10253 * Request to WDI to Exit BMPS power state.
10254 */
10255VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
10256 tExitBmpsParams *pExitBmpsReqParams)
10257{
10258 WDI_Status status = WDI_STATUS_SUCCESS ;
10259 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
10260 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
10261 sizeof(WDI_ExitBmpsReqParamsType)) ;
10262 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010263 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010264 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010265 if(NULL == wdiExitBmpsReqParams)
10266 {
10267 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010268 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010269 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070010270 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010271 return VOS_STATUS_E_NOMEM;
10272 }
10273 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10274 if(NULL == pWdaParams)
10275 {
10276 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010277 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010278 VOS_ASSERT(0);
10279 vos_mem_free(wdiExitBmpsReqParams);
10280 return VOS_STATUS_E_NOMEM;
10281 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010282 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -070010283
10284 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
10285
Yue Ma7f44bbe2013-04-12 11:47:39 -070010286 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
10287 wdiExitBmpsReqParams->pUserData = pWdaParams;
10288
Jeff Johnson295189b2012-06-20 16:38:30 -070010289 /* Store param pointer as passed in by caller */
10290 /* store Params pass it to WDI */
10291 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
10292 pWdaParams->pWdaContext = pWDA;
10293 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010294 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010295 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010296 if(IS_WDI_STATUS_FAILURE(status))
10297 {
10298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10299 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010300 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10301 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070010302 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010303 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010304 return CONVERT_WDI2VOS_STATUS(status) ;
10305}
Jeff Johnson295189b2012-06-20 16:38:30 -070010306/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010307 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010308 * send Enter UAPSD RSP back to PE
10309 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010310void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010311{
10312 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010313 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010314 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010316 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010317 if(NULL == pWdaParams)
10318 {
10319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010320 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010321 VOS_ASSERT(0) ;
10322 return ;
10323 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010324
10325 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010326 if (NULL == pWDA)
10327 {
10328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10329 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053010330
10331 if(pWdaParams->wdaWdiApiMsgParam)
10332 {
10333 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10334 }
10335 vos_mem_free(pWdaParams);
10336
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010337 VOS_ASSERT(0);
10338 return ;
10339 }
10340
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010341 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
10342
10343 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010344 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010345
Jeff Johnson295189b2012-06-20 16:38:30 -070010346 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10347 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010348 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010349 return ;
10350}
Jeff Johnson295189b2012-06-20 16:38:30 -070010351/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010352 * FUNCTION: WDA_EnterUapsdReqCallback
10353 * Free memory and send Enter UAPSD RSP back to PE.
10354 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
10355 */
10356void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
10357{
10358 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10359 tWDA_CbContext *pWDA;
10360 tUapsdParams *pEnterUapsdRsqParams;
10361
10362 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10363 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10364
10365 if(NULL == pWdaParams)
10366 {
10367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10368 "%s: pWdaParams received NULL", __func__);
10369 VOS_ASSERT(0);
10370 return;
10371 }
10372
10373 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010374 if (NULL == pWDA)
10375 {
10376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10377 "%s:pWDA is NULL", __func__);
10378 VOS_ASSERT(0);
10379 return ;
10380 }
10381
Yue Ma7f44bbe2013-04-12 11:47:39 -070010382 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
10383 pEnterUapsdRsqParams->status = wdiStatus;
10384
10385 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10386 {
10387 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10388 vos_mem_free(pWdaParams);
10389 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
10390 }
10391
10392 return;
10393}
10394/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010395 * FUNCTION: WDA_ProcessEnterUapsdReq
10396 * Request to WDI to Enter UAPSD power state.
10397 */
10398VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
10399 tUapsdParams *pEnterUapsdReqParams)
10400{
10401 WDI_Status status = WDI_STATUS_SUCCESS ;
10402 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
10403 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
10404 sizeof(WDI_EnterUapsdReqParamsType)) ;
10405 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010407 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010408 if(NULL == wdiEnterUapsdReqParams)
10409 {
10410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010411 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010412 VOS_ASSERT(0);
10413 return VOS_STATUS_E_NOMEM;
10414 }
10415 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10416 if(NULL == pWdaParams)
10417 {
10418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010419 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010420 VOS_ASSERT(0);
10421 vos_mem_free(wdiEnterUapsdReqParams);
10422 return VOS_STATUS_E_NOMEM;
10423 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010424 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
10425 pEnterUapsdReqParams->beDeliveryEnabled;
10426 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
10427 pEnterUapsdReqParams->beTriggerEnabled;
10428 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
10429 pEnterUapsdReqParams->bkDeliveryEnabled;
10430 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
10431 pEnterUapsdReqParams->bkTriggerEnabled;
10432 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
10433 pEnterUapsdReqParams->viDeliveryEnabled;
10434 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
10435 pEnterUapsdReqParams->viTriggerEnabled;
10436 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
10437 pEnterUapsdReqParams->voDeliveryEnabled;
10438 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
10439 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -070010440 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070010441
Yue Ma7f44bbe2013-04-12 11:47:39 -070010442 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
10443 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010444
Jeff Johnson295189b2012-06-20 16:38:30 -070010445 /* Store param pointer as passed in by caller */
10446 /* store Params pass it to WDI */
10447 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
10448 pWdaParams->pWdaContext = pWDA;
10449 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010450 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010451 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010452 if(IS_WDI_STATUS_FAILURE(status))
10453 {
10454 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10455 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
10456 vos_mem_free(pWdaParams->wdaMsgParam) ;
10457 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10458 vos_mem_free(pWdaParams) ;
10459 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010460 return CONVERT_WDI2VOS_STATUS(status) ;
10461}
Jeff Johnson295189b2012-06-20 16:38:30 -070010462/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010463 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010464 * send Exit UAPSD RSP back to PE
10465 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010466void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010467{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010468
10469 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10470 tWDA_CbContext *pWDA;
10471 tExitUapsdParams *pExitUapsdRspParams;
10472
Jeff Johnson295189b2012-06-20 16:38:30 -070010473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010474 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010475 if(NULL == pWdaParams)
10476 {
10477 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010478 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010479 VOS_ASSERT(0);
10480 return;
10481 }
10482
10483 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10484 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
10485
10486 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010487 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010488
10489 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10490 vos_mem_free(pWdaParams) ;
10491
10492 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010493 return ;
10494}
Jeff Johnson295189b2012-06-20 16:38:30 -070010495/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010496 * FUNCTION: WDA_ExitUapsdReqCallback
10497 * Free memory and send Exit UAPSD RSP back to PE.
10498 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
10499 */
10500void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
10501{
10502 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010503 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010504 tExitUapsdParams *pExitUapsdRspParams;
10505
10506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10507 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10508
10509 if(NULL == pWdaParams)
10510 {
10511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10512 "%s: pWdaParams received NULL", __func__);
10513 VOS_ASSERT(0);
10514 return;
10515 }
10516
10517 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010518 if (NULL == pWDA)
10519 {
10520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10521 "%s:pWDA is NULL", __func__);
10522 VOS_ASSERT(0);
10523 return ;
10524 }
10525
Yue Ma7f44bbe2013-04-12 11:47:39 -070010526 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
10527 pExitUapsdRspParams->status = wdiStatus;
10528
10529 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10530 {
10531 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10532 vos_mem_free(pWdaParams);
10533 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
10534 }
10535
10536 return;
10537}
10538/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010539 * FUNCTION: WDA_ProcessExitUapsdReq
10540 * Request to WDI to Exit UAPSD power state.
10541 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010542VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
10543 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010544{
10545 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010546 tWDA_ReqParams *pWdaParams ;
10547 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
10548 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
10549 sizeof(WDI_ExitUapsdReqParamsType)) ;
10550
Jeff Johnson295189b2012-06-20 16:38:30 -070010551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010552 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010553
10554 if(NULL == wdiExitUapsdReqParams)
10555 {
10556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010557 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010558 VOS_ASSERT(0);
10559 return VOS_STATUS_E_NOMEM;
10560 }
10561 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10562 if(NULL == pWdaParams)
10563 {
10564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010565 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010566 VOS_ASSERT(0);
10567 vos_mem_free(wdiExitUapsdReqParams);
10568 return VOS_STATUS_E_NOMEM;
10569 }
10570
10571 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010572 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
10573 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010574
10575 /* Store param pointer as passed in by caller */
10576 /* store Params pass it to WDI */
10577 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
10578 pWdaParams->pWdaContext = pWDA;
10579 pWdaParams->wdaMsgParam = pExitUapsdParams;
10580
Yue Ma7f44bbe2013-04-12 11:47:39 -070010581 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010582 if(IS_WDI_STATUS_FAILURE(status))
10583 {
10584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10585 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010586 vos_mem_free(pWdaParams->wdaMsgParam) ;
10587 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10588 vos_mem_free(pWdaParams) ;
10589
Jeff Johnson295189b2012-06-20 16:38:30 -070010590 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010591 return CONVERT_WDI2VOS_STATUS(status) ;
10592}
10593
Jeff Johnson295189b2012-06-20 16:38:30 -070010594/*
10595 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
10596 *
10597 */
10598void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
10599{
10600 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010602 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010603 if(NULL == pWdaParams)
10604 {
10605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010606 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010607 VOS_ASSERT(0) ;
10608 return ;
10609 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010610 if( pWdaParams != NULL )
10611 {
10612 if( pWdaParams->wdaWdiApiMsgParam != NULL )
10613 {
10614 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10615 }
10616 if( pWdaParams->wdaMsgParam != NULL )
10617 {
10618 vos_mem_free(pWdaParams->wdaMsgParam) ;
10619 }
10620 vos_mem_free(pWdaParams) ;
10621 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010622 return ;
10623}
Jeff Johnson295189b2012-06-20 16:38:30 -070010624/*
10625 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
10626 * Request to WDI to set the power save params at start.
10627 */
10628VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
10629 tSirPowerSaveCfg *pPowerSaveCfg)
10630{
10631 WDI_Status status = WDI_STATUS_SUCCESS ;
10632 tHalCfg *tlvStruct = NULL ;
10633 tANI_U8 *tlvStructStart = NULL ;
10634 v_PVOID_t *configParam;
10635 tANI_U32 configParamSize;
10636 tANI_U32 *configDataValue;
10637 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
10638 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010640 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010641 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
10642 {
10643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010644 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010645 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010646 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -070010647 return VOS_STATUS_E_FAILURE;
10648 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010649 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
10650 if (NULL == wdiPowerSaveCfg)
10651 {
10652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010653 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010654 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010655 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -070010656 return VOS_STATUS_E_NOMEM;
10657 }
10658 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10659 if(NULL == pWdaParams)
10660 {
10661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010662 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010663 VOS_ASSERT(0);
10664 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010665 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -070010666 return VOS_STATUS_E_NOMEM;
10667 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010668 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
10669 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070010670 if(NULL == configParam)
10671 {
10672 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080010673 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010674 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070010675 vos_mem_free(pWdaParams);
10676 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010677 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -070010678 return VOS_STATUS_E_NOMEM;
10679 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010680 vos_mem_set(configParam, configParamSize, 0);
10681 wdiPowerSaveCfg->pConfigBuffer = configParam;
10682 tlvStruct = (tHalCfg *)configParam;
10683 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010684 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
10685 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
10686 tlvStruct->length = sizeof(tANI_U32);
10687 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10688 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -070010689 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10690 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010691 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
10692 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
10693 tlvStruct->length = sizeof(tANI_U32);
10694 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10695 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070010696 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10697 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010698 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
10699 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
10700 tlvStruct->length = sizeof(tANI_U32);
10701 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10702 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -070010703 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10704 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010705 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
10706 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
10707 tlvStruct->length = sizeof(tANI_U32);
10708 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10709 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -070010710 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10711 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010712 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
10713 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
10714 tlvStruct->length = sizeof(tANI_U32);
10715 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10716 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -070010717 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10718 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010719 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
10720 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
10721 tlvStruct->length = sizeof(tANI_U32);
10722 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10723 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -070010724 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10725 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010726 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
10727 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
10728 tlvStruct->length = sizeof(tANI_U32);
10729 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10730 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -070010731 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10732 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010733 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
10734 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
10735 tlvStruct->length = sizeof(tANI_U32);
10736 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10737 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
10738 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10739 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010740 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
10741 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
10742 tlvStruct->length = sizeof(tANI_U32);
10743 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10744 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
10745 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10746 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010747 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
10748 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
10749 tlvStruct->length = sizeof(tANI_U32);
10750 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10751 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -070010752 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10753 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010754 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
10755 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
10756 tlvStruct->length = sizeof(tANI_U32);
10757 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10758 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070010759 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10760 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010761 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010762 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010763 /* store Params pass it to WDI */
10764 pWdaParams->wdaMsgParam = configParam;
10765 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
10766 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070010767 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
10768 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010769 if(IS_WDI_STATUS_FAILURE(status))
10770 {
10771 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10772 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
10773 vos_mem_free(pWdaParams->wdaMsgParam);
10774 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10775 vos_mem_free(pWdaParams);
10776 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010777 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -070010778 return CONVERT_WDI2VOS_STATUS(status);
10779}
Jeff Johnson295189b2012-06-20 16:38:30 -070010780/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010781 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010782 *
10783 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010784void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010785{
Yue Ma7f44bbe2013-04-12 11:47:39 -070010786 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10787
Jeff Johnson295189b2012-06-20 16:38:30 -070010788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010789 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070010790
10791 if(NULL == pWdaParams)
10792 {
10793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10794 "%s: pWdaParams received NULL", __func__);
10795 VOS_ASSERT(0);
10796 return ;
10797 }
10798
10799 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -070010800 vos_mem_free(pWdaParams);
10801
Jeff Johnson295189b2012-06-20 16:38:30 -070010802 return ;
10803}
Jeff Johnson295189b2012-06-20 16:38:30 -070010804/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010805 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
10806 * Free memory.
10807 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
10808 */
10809void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
10810{
10811 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10812
10813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10814 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10815
10816 if(NULL == pWdaParams)
10817 {
10818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10819 "%s: pWdaParams received NULL", __func__);
10820 VOS_ASSERT(0);
10821 return;
10822 }
10823
10824 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10825 {
10826 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10827 vos_mem_free(pWdaParams);
10828 }
10829
10830 return;
10831}
10832/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010833 * FUNCTION: WDA_SetUapsdAcParamsReq
10834 * Request to WDI to set the UAPSD params for an ac (sta mode).
10835 */
10836VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
10837 tUapsdInfo *pUapsdInfo)
10838{
10839 WDI_Status status = WDI_STATUS_SUCCESS;
10840 tWDA_CbContext *pWDA = NULL ;
10841 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
10842 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
10843 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
10844 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010846 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010847 if(NULL == wdiUapsdParams)
10848 {
10849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010850 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010851 VOS_ASSERT(0);
10852 return VOS_STATUS_E_NOMEM;
10853 }
10854 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10855 if(NULL == pWdaParams)
10856 {
10857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010858 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010859 VOS_ASSERT(0);
10860 vos_mem_free(wdiUapsdParams);
10861 return VOS_STATUS_E_NOMEM;
10862 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010863 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
10864 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
10865 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
10866 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
10867 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
10868 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010869 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
10870 wdiUapsdParams->pUserData = pWdaParams;
10871
Jeff Johnson295189b2012-06-20 16:38:30 -070010872 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -070010873 pWdaParams->pWdaContext = pWDA;
10874 /* Store param pointer as passed in by caller */
10875 pWdaParams->wdaMsgParam = pUapsdInfo;
10876 /* store Params pass it to WDI */
10877 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010878 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010879 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070010880 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010881 if(IS_WDI_STATUS_FAILURE(status))
10882 {
10883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10884 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
10885 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10886 vos_mem_free(pWdaParams);
10887 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010888 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
10889 return VOS_STATUS_SUCCESS;
10890 else
10891 return VOS_STATUS_E_FAILURE;
10892
Jeff Johnson295189b2012-06-20 16:38:30 -070010893}
10894/*
10895 * FUNCTION: WDA_ClearUapsdAcParamsReq
10896 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
10897 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
10898 * and again enter the UPASD with the modified params. Hence the disable
10899 * function was kept empty.
10900 *
10901 */
10902VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
10903{
10904 /* do nothing */
10905 return VOS_STATUS_SUCCESS;
10906}
Jeff Johnson295189b2012-06-20 16:38:30 -070010907/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010908 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010909 *
10910 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010911void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010912{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010913 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10914
Jeff Johnson295189b2012-06-20 16:38:30 -070010915 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010916 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010917
10918 if(NULL == pWdaParams)
10919 {
10920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010921 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010922 VOS_ASSERT(0) ;
10923 return ;
10924 }
10925
10926 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10927 vos_mem_free(pWdaParams->wdaMsgParam);
10928 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010929
Jeff Johnson295189b2012-06-20 16:38:30 -070010930 //print a msg, nothing else to do
10931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010932 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010933 return ;
10934}
Jeff Johnson295189b2012-06-20 16:38:30 -070010935/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010936 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
10937 * Free memory.
10938 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
10939 */
10940void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
10941{
10942 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10943
10944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10945 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10946
10947 if(NULL == pWdaParams)
10948 {
10949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10950 "%s: pWdaParams received NULL", __func__);
10951 VOS_ASSERT(0);
10952 return;
10953 }
10954
10955 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10956 {
10957 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10958 vos_mem_free(pWdaParams->wdaMsgParam);
10959 vos_mem_free(pWdaParams);
10960 }
10961
10962 return;
10963}
10964/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010965 * FUNCTION: WDA_UpdateUapsdParamsReq
10966 * Request to WDI to update UAPSD params (in softAP mode) for a station.
10967 */
10968VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
10969 tUpdateUapsdParams* pUpdateUapsdInfo)
10970{
10971 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010972 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010973 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
10974 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
10975 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010976 tWDA_ReqParams *pWdaParams = NULL;
10977
Jeff Johnson295189b2012-06-20 16:38:30 -070010978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010979 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010980 if(NULL == wdiUpdateUapsdParams)
10981 {
10982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010983 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010984 VOS_ASSERT(0);
10985 return VOS_STATUS_E_NOMEM;
10986 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010987 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
10988 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
10989 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010990 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
10991 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010992
10993 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10994 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010995 {
10996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010997 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010998 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010999 vos_mem_free(pUpdateUapsdInfo);
11000 vos_mem_free(wdiUpdateUapsdParams);
11001 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -070011002 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011003 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011004 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -070011005 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011006 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
11007 pWdaParams->pWdaContext = pWDA;
11008
Jeff Johnson43971f52012-07-17 12:26:56 -070011009 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011010 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011011 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011012
Jeff Johnson43971f52012-07-17 12:26:56 -070011013 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011014 {
11015 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11016 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011017 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
11018 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11019 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070011020 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011021 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011022 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011023}
Jeff Johnson295189b2012-06-20 16:38:30 -070011024/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011025 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011026 *
11027 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011028void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011029{
11030 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011031 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011032 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011033 if(WDI_STATUS_SUCCESS != wdiStatus)
11034 {
11035 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011036 "%s: RXP config filter failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070011037 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011038 if(NULL == pWdaParams)
11039 {
11040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011041 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011042 VOS_ASSERT(0) ;
11043 return ;
11044 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011045 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11046 vos_mem_free(pWdaParams->wdaMsgParam);
11047 vos_mem_free(pWdaParams);
11048 return ;
11049}
Jeff Johnson295189b2012-06-20 16:38:30 -070011050/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011051 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
11052 * Free memory.
11053 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
11054 */
11055void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
11056{
11057 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11058
11059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11060 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11061
11062 if(NULL == pWdaParams)
11063 {
11064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11065 "%s: pWdaParams received NULL", __func__);
11066 VOS_ASSERT(0);
11067 return;
11068 }
11069
11070 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11071 {
11072 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11073 vos_mem_free(pWdaParams->wdaMsgParam);
11074 vos_mem_free(pWdaParams);
11075 }
11076
11077 return;
11078}
11079/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011080 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
11081 *
11082 */
11083VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
11084 tSirWlanSetRxpFilters *pWlanSuspendParam)
11085{
Jeff Johnson295189b2012-06-20 16:38:30 -070011086 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011087 WDI_Status wstatus;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +053011088 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011089 tWDA_ReqParams *pWdaParams ;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +053011090 /* Sanity Check
11091 * This is very unlikely and add assert to collect more info next time */
11092 if(NULL == pWlanSuspendParam)
11093 {
11094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11095 "%s: pWlanSuspendParam received NULL", __func__);
11096 VOS_ASSERT(0) ;
11097 return VOS_STATUS_E_FAULT;
11098 }
11099 wdiRxpFilterParams = (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
11100 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011102 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011103 if(NULL == wdiRxpFilterParams)
11104 {
11105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011106 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011107 VOS_ASSERT(0);
11108 vos_mem_free(pWlanSuspendParam);
11109 return VOS_STATUS_E_NOMEM;
11110 }
11111 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11112 if(NULL == pWdaParams)
11113 {
11114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011115 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011116 VOS_ASSERT(0);
11117 vos_mem_free(wdiRxpFilterParams);
11118 vos_mem_free(pWlanSuspendParam);
11119 return VOS_STATUS_E_NOMEM;
11120 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011121 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
11122 pWlanSuspendParam->setMcstBcstFilter;
11123 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
11124 pWlanSuspendParam->configuredMcstBcstFilterSetting;
11125
Yue Ma7f44bbe2013-04-12 11:47:39 -070011126 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
11127 wdiRxpFilterParams->pUserData = pWdaParams;
11128
Jeff Johnson295189b2012-06-20 16:38:30 -070011129 pWdaParams->pWdaContext = pWDA;
11130 pWdaParams->wdaMsgParam = pWlanSuspendParam;
11131 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070011132 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011133 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070011134 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011135 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011136 {
11137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11138 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011139 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011140 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11141 vos_mem_free(pWdaParams->wdaMsgParam);
11142 vos_mem_free(pWdaParams);
11143 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011144 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011145}
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011146
11147/*
Siddharth Bhal64246172015-02-27 01:04:37 +053011148 * FUNCTION: WDA_ProcessGetFrameLogReq
11149 * Request to WDI to get the Frame Log.
11150 */
11151VOS_STATUS WDA_ProcessGetFrameLogReq(tWDA_CbContext *pWDA,
11152 tAniGetFrameLogReq *pGetFrameLog)
11153{
11154 VOS_STATUS status = VOS_STATUS_SUCCESS;
11155 WDI_Status wstatus;
11156 WDI_GetFrameLogReqInfoType *wdiGetFrameLogInfo;
11157 tWDA_ReqParams *pWdaParams ;
11158
11159 /* Sanity Check*/
11160 if(NULL == pGetFrameLog)
11161 {
11162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011163 "%s: pFWLoggingInitParam received NULL", __func__);
Siddharth Bhal64246172015-02-27 01:04:37 +053011164 VOS_ASSERT(0) ;
11165 return VOS_STATUS_E_FAULT;
11166 }
11167
11168 wdiGetFrameLogInfo = (WDI_GetFrameLogReqInfoType *)vos_mem_malloc(
11169 sizeof(WDI_GetFrameLogReqInfoType));
11170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11171 "------> %s " ,__func__);
11172
11173 if(NULL == wdiGetFrameLogInfo)
11174 {
11175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11176 "%s: VOS MEM Alloc Failure", __func__);
11177 VOS_ASSERT(0);
11178 vos_mem_free(pGetFrameLog);
11179 return VOS_STATUS_E_NOMEM;
11180 }
11181
11182 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
11183 if(NULL == pWdaParams)
11184 {
11185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11186 "%s: VOS MEM Alloc Failure", __func__);
11187 VOS_ASSERT(0);
11188 vos_mem_free(wdiGetFrameLogInfo);
11189 vos_mem_free(pGetFrameLog);
11190 return VOS_STATUS_E_NOMEM;
11191 }
11192
11193 wdiGetFrameLogInfo->flags = pGetFrameLog->getFrameLogCmdFlag;
11194
11195 pWdaParams->pWdaContext = pWDA;
11196 pWdaParams->wdaMsgParam = pGetFrameLog;
11197 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGetFrameLogInfo;
11198
11199 wstatus = WDI_GetFrameLogReq(wdiGetFrameLogInfo,
11200 (WDI_GetFrameLogRspCb)WDA_GetFrameLogRspCallback,
11201 pWdaParams);
11202 if(IS_WDI_STATUS_FAILURE(wstatus))
11203 {
11204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11205 "Failure in get frame log REQ WDI API, free all the memory" );
11206 status = CONVERT_WDI2VOS_STATUS(wstatus);
11207 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11208 vos_mem_free(pWdaParams->wdaMsgParam);
11209 vos_mem_free(pWdaParams);
11210 }
11211 return status;
11212}
11213
Sachin Ahuja715aafc2015-07-21 23:35:10 +053011214
11215/*
11216 * FUNCTION: WDA_FatalEventLogsRspCallback
11217 * recieves Flush Logs response from FW
11218 */
11219
11220void WDA_FatalEventLogsRspCallback(WDI_FatalEventLogsRspParamType* wdiRsp,
11221 void* pUserData)
11222{
11223 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11224
11225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11226 "<------ %s,wdiStatus:%d " ,
11227 __func__, wdiRsp->wdiStatus);
11228 if(NULL == pWdaParams)
11229 {
11230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11231 "%s: pWdaParams received NULL", __func__);
11232 VOS_ASSERT(0);
11233 return ;
11234 }
11235
11236 if(NULL == pWdaParams->wdaMsgParam)
11237 {
11238 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11239 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
11240 VOS_ASSERT(0);
11241 vos_mem_free(pWdaParams);
11242 return ;
11243 }
11244
11245 if(IS_WDI_STATUS_FAILURE(wdiRsp->wdiStatus))
11246 {
11247 /*
11248 * If it is failure, it means JOb is already posted by FW
11249 * for logging, so for failure scenario also we will get the
11250 * done indication
11251 */
11252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11253 "%s: Fatal Event Rsp Failure,wdiStatus : %d ",
11254 __func__, wdiRsp->wdiStatus);
11255 }
11256
11257 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11258 vos_mem_free(pWdaParams->wdaMsgParam);
11259 vos_mem_free(pWdaParams);
11260
11261 return;
11262
11263}
11264
11265/*
11266 * FUNCTION: WDA_ProcessFatalEventLogsReq
11267 * Request to WDI to send the fatal Event Logs Req.
11268 */
11269
11270VOS_STATUS WDA_ProcessFatalEventLogsReq(tWDA_CbContext *pWDA,
11271 tSirFatalEventLogsReqParam *pFatalEventLogsReqParam)
11272{
11273 VOS_STATUS status = VOS_STATUS_SUCCESS;
11274 WDI_FatalEventLogsReqInfoType *wdiFatalEventLogsReqInfo;
11275 tWDA_ReqParams *pWdaParams ;
11276 WDI_Status wstatus;
11277
11278
11279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11280 "------> %s " ,__func__);
11281 if (NULL == pFatalEventLogsReqParam)
11282 {
11283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11284 "%s: pMgmtLoggingInitParam received NULL", __func__);
11285 VOS_ASSERT(0) ;
11286 return VOS_STATUS_E_FAULT;
11287 }
11288 wdiFatalEventLogsReqInfo = (WDI_FatalEventLogsReqInfoType *)vos_mem_malloc(
11289 sizeof(WDI_FatalEventLogsReqInfoType));
11290 if(NULL == wdiFatalEventLogsReqInfo)
11291 {
11292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11293 "%s: VOS MEM Alloc Failure", __func__);
11294 VOS_ASSERT(0);
11295 vos_mem_free(pFatalEventLogsReqParam);
11296 return VOS_STATUS_E_NOMEM;
11297 }
11298 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11299 if(NULL == pWdaParams)
11300 {
11301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11302 "%s: VOS MEM Alloc Failure", __func__);
11303 VOS_ASSERT(0);
11304 vos_mem_free(wdiFatalEventLogsReqInfo);
11305 vos_mem_free(pFatalEventLogsReqParam);
11306 return VOS_STATUS_E_NOMEM;
11307 }
11308 wdiFatalEventLogsReqInfo->reason_code = pFatalEventLogsReqParam->reason_code;
11309 pWdaParams->pWdaContext = pWDA;
11310 pWdaParams->wdaMsgParam = pFatalEventLogsReqParam;
11311 pWdaParams->wdaWdiApiMsgParam = (void *)wdiFatalEventLogsReqInfo;
11312
11313 wstatus = WDI_FatalEventLogsReq(wdiFatalEventLogsReqInfo,
11314 (WDI_FatalEventLogsRspCb)WDA_FatalEventLogsRspCallback,
11315 pWdaParams);
11316 if(IS_WDI_STATUS_FAILURE(wstatus))
11317 {
11318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11319 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
11320 status = CONVERT_WDI2VOS_STATUS(wstatus);
11321 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11322 vos_mem_free(pWdaParams->wdaMsgParam);
11323 vos_mem_free(pWdaParams);
11324 }
11325
11326 return status;
11327
11328}
11329
Siddharth Bhal64246172015-02-27 01:04:37 +053011330/*
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011331 * FUNCTION: WDA_ProcessFWLoggingInitReq
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011332 *
11333 */
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011334VOS_STATUS WDA_ProcessFWLoggingInitReq(tWDA_CbContext *pWDA,
11335 tSirFWLoggingInitParam *pFWLoggingInitParam)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011336{
11337 VOS_STATUS status = VOS_STATUS_SUCCESS;
11338 WDI_Status wstatus;
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011339 WDI_FWLoggingInitReqInfoType *wdiFWLoggingInitInfo;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011340 tWDA_ReqParams *pWdaParams ;
11341
11342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11343 "------> %s " ,__func__);
11344
11345 /* Sanity Check*/
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011346 if(NULL == pFWLoggingInitParam)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011347 {
11348 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011349 "%s: pFWLoggingInitParam received NULL", __func__);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011350 VOS_ASSERT(0) ;
11351 return VOS_STATUS_E_FAULT;
11352 }
11353
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011354 wdiFWLoggingInitInfo = (WDI_FWLoggingInitReqInfoType *)vos_mem_malloc(
11355 sizeof(WDI_FWLoggingInitReqInfoType));
11356 if(NULL == wdiFWLoggingInitInfo)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011357 {
11358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11359 "%s: VOS MEM Alloc Failure", __func__);
11360 VOS_ASSERT(0);
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011361 vos_mem_free(pFWLoggingInitParam);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011362 return VOS_STATUS_E_NOMEM;
11363 }
11364
11365 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11366 if(NULL == pWdaParams)
11367 {
11368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11369 "%s: VOS MEM Alloc Failure", __func__);
11370 VOS_ASSERT(0);
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011371 vos_mem_free(wdiFWLoggingInitInfo);
11372 vos_mem_free(pFWLoggingInitParam);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011373 return VOS_STATUS_E_NOMEM;
11374 }
11375
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011376 wdiFWLoggingInitInfo->enableFlag = pFWLoggingInitParam->enableFlag;
11377 wdiFWLoggingInitInfo->frameType = pFWLoggingInitParam->frameType;
11378 wdiFWLoggingInitInfo->frameSize = pFWLoggingInitParam->frameSize;
11379 wdiFWLoggingInitInfo->bufferMode = pFWLoggingInitParam->bufferMode;
11380 wdiFWLoggingInitInfo->continuousFrameLogging =
11381 pFWLoggingInitParam->continuousFrameLogging;
11382 wdiFWLoggingInitInfo->minLogBufferSize=
11383 pFWLoggingInitParam->minLogBufferSize;
11384 wdiFWLoggingInitInfo->maxLogBufferSize=
11385 pFWLoggingInitParam->maxLogBufferSize;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011386
11387 pWdaParams->pWdaContext = pWDA;
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011388 pWdaParams->wdaMsgParam = pFWLoggingInitParam;
11389 pWdaParams->wdaWdiApiMsgParam = (void *)wdiFWLoggingInitInfo;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011390
Siddharth Bhald1be97f2015-05-27 22:39:59 +053011391 wstatus = WDI_FWLoggingInitReq(wdiFWLoggingInitInfo,
11392 (WDI_FWLoggingInitRspCb)WDA_FWLoggingInitRspCallback,
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053011393 pWdaParams);
11394 if(IS_WDI_STATUS_FAILURE(wstatus))
11395 {
11396 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11397 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
11398 status = CONVERT_WDI2VOS_STATUS(wstatus);
11399 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11400 vos_mem_free(pWdaParams->wdaMsgParam);
11401 vos_mem_free(pWdaParams);
11402 }
11403
11404 return status;
11405}
11406
Jeff Johnson295189b2012-06-20 16:38:30 -070011407/*
Gupta, Kapil7c34b322015-09-30 13:12:35 +053011408 * FUNCTION: WDA_ProcessStartRssiMonitorReq
11409 *
11410 */
11411VOS_STATUS WDA_ProcessStartRssiMonitorReq(tWDA_CbContext *pWDA,
11412 tSirRssiMonitorReq *pRssiMonitorReqParam)
11413{
11414 VOS_STATUS status = VOS_STATUS_SUCCESS;
11415 WDI_Status wstatus;
11416 WDI_RssiMonitorReqInfoType *wdiRssiMonitorInfo;
11417 tWDA_ReqParams *pWdaParams ;
11418
11419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11420 "------> %s " ,__func__);
11421
11422 /* Sanity Check*/
11423 if(NULL == pRssiMonitorReqParam)
11424 {
11425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11426 "%s: pRssiMonitorReqParam received NULL", __func__);
11427 VOS_ASSERT(0) ;
11428 return VOS_STATUS_E_FAULT;
11429 }
11430
11431 wdiRssiMonitorInfo = (WDI_RssiMonitorReqInfoType *)vos_mem_malloc(
11432 sizeof(WDI_RssiMonitorReqInfoType));
11433 if(NULL == wdiRssiMonitorInfo)
11434 {
11435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11436 "%s: VOS MEM Alloc Failure", __func__);
11437 VOS_ASSERT(0);
11438 vos_mem_free(pRssiMonitorReqParam);
11439 return VOS_STATUS_E_NOMEM;
11440 }
11441
11442 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11443 if(NULL == pWdaParams)
11444 {
11445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11446 "%s: VOS MEM Alloc Failure", __func__);
11447 VOS_ASSERT(0);
11448 vos_mem_free(wdiRssiMonitorInfo);
11449 vos_mem_free(pRssiMonitorReqParam);
11450 return VOS_STATUS_E_NOMEM;
11451 }
11452
11453 wdiRssiMonitorInfo->requestId = pRssiMonitorReqParam->requestId;
11454 wdiRssiMonitorInfo->minRssi = pRssiMonitorReqParam->minRssi;
11455 wdiRssiMonitorInfo->maxRssi = pRssiMonitorReqParam->maxRssi;
11456 vos_mem_copy(wdiRssiMonitorInfo->currentBssId,
11457 &(pRssiMonitorReqParam->currentBssId), sizeof(tSirMacAddr));
11458
11459 pWdaParams->pWdaContext = pWDA;
11460 pWdaParams->wdaMsgParam = pRssiMonitorReqParam;
11461 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRssiMonitorInfo;
11462
11463 wstatus = WDI_StartRssiMonitorReq(wdiRssiMonitorInfo,
11464 (WDI_RssiMonitorStartRspCb)WDA_RssiMonitorStartRspCallback,
11465 pWdaParams);
11466 if(IS_WDI_STATUS_FAILURE(wstatus))
11467 {
11468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11469 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
11470 status = CONVERT_WDI2VOS_STATUS(wstatus);
11471 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11472 vos_mem_free(pWdaParams->wdaMsgParam);
11473 vos_mem_free(pWdaParams);
11474 }
11475
11476 return status;
11477}
11478
11479/*
11480 * FUNCTION: WDA_ProcessStopRssiMonitorReq
11481 *
11482 */
11483VOS_STATUS WDA_ProcessStopRssiMonitorReq(tWDA_CbContext *pWDA,
11484 tSirRssiMonitorReq *pRssiMonitorReqParam)
11485{
11486 VOS_STATUS status = VOS_STATUS_SUCCESS;
11487 WDI_Status wstatus;
11488 WDI_RssiMonitorReqInfoType *wdiRssiMonitorInfo;
11489 tWDA_ReqParams *pWdaParams ;
11490
11491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11492 "------> %s " ,__func__);
11493
11494 /* Sanity Check*/
11495 if(NULL == pRssiMonitorReqParam)
11496 {
11497 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11498 "%s: pRssiMonitorReqParam received NULL", __func__);
11499 VOS_ASSERT(0) ;
11500 return VOS_STATUS_E_FAULT;
11501 }
11502
11503 wdiRssiMonitorInfo = (WDI_RssiMonitorReqInfoType *)vos_mem_malloc(
11504 sizeof(WDI_RssiMonitorReqInfoType));
11505 if(NULL == wdiRssiMonitorInfo)
11506 {
11507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11508 "%s: VOS MEM Alloc Failure", __func__);
11509 VOS_ASSERT(0);
11510 vos_mem_free(pRssiMonitorReqParam);
11511 return VOS_STATUS_E_NOMEM;
11512 }
11513
11514 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11515 if(NULL == pWdaParams)
11516 {
11517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11518 "%s: VOS MEM Alloc Failure", __func__);
11519 VOS_ASSERT(0);
11520 vos_mem_free(wdiRssiMonitorInfo);
11521 vos_mem_free(pRssiMonitorReqParam);
11522 return VOS_STATUS_E_NOMEM;
11523 }
11524
11525 wdiRssiMonitorInfo->requestId = pRssiMonitorReqParam->requestId;
11526 vos_mem_copy(wdiRssiMonitorInfo->currentBssId,
11527 &(pRssiMonitorReqParam->currentBssId), sizeof(tSirMacAddr));
11528
11529 pWdaParams->pWdaContext = pWDA;
11530 pWdaParams->wdaMsgParam = pRssiMonitorReqParam;
11531 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRssiMonitorInfo;
11532
11533 wstatus = WDI_StopRssiMonitorReq(wdiRssiMonitorInfo,
11534 (WDI_RssiMonitorStopRspCb)WDA_RssiMonitorStopRspCallback,
11535 pWdaParams);
11536 if(IS_WDI_STATUS_FAILURE(wstatus))
11537 {
11538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11539 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
11540 status = CONVERT_WDI2VOS_STATUS(wstatus);
11541 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11542 vos_mem_free(pWdaParams->wdaMsgParam);
11543 vos_mem_free(pWdaParams);
11544 }
11545
11546 return status;
11547}
11548
11549
11550/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011551 * FUNCTION: WDA_WdiIndicationCallback
11552 *
11553 */
11554void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
11555 void* pUserData)
11556{
11557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011558 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011559}
Kapil Gupta2b44acb2016-12-30 16:49:51 +053011560
11561/**
11562 * WDA_ProcessWlanSuspendIndCallback: callback API for WDA_ProcessWlanSuspendInd
11563 * @wdiStatus: wdi status
11564 * @pUserData: suspend params
11565 *
11566 * Return: None
11567 */
11568void WDA_ProcessWlanSuspendIndCallback(WDI_Status wdiStatus, void* pUserData)
11569{
11570 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11571 tSirWlanSuspendParam *pWlanSuspendParam;
11572
11573 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11574 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11575
11576 if(NULL == pWdaParams)
11577 {
11578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11579 "%s: pWdaParams received NULL", __func__);
11580 return;
11581 }
11582
11583 pWlanSuspendParam = (tSirWlanSuspendParam *)pWdaParams->wdaMsgParam;
11584 if (pWlanSuspendParam == NULL)
11585 {
11586 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11587 "%s: suspend params NULL", __func__);
11588 vos_mem_free(pWdaParams);
11589 return;
11590 }
11591 if (pWlanSuspendParam->wlan_sus_callback)
11592 {
11593 pWlanSuspendParam->wlan_sus_callback(pWlanSuspendParam->context,
11594 CONVERT_WDI2VOS_STATUS(wdiStatus));
11595 }
11596 else
11597 {
11598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11599 "%s: wlan suspend callback is NULL", __func__);
11600 }
11601 if (pWdaParams->wdaMsgParam) {
11602 vos_mem_free(pWdaParams->wdaMsgParam);
11603 pWdaParams->wdaMsgParam = NULL;
11604 }
11605 vos_mem_free(pWdaParams);
11606 return;
11607}
11608
Jeff Johnson295189b2012-06-20 16:38:30 -070011609/*
11610 * FUNCTION: WDA_ProcessWlanSuspendInd
11611 *
11612 */
11613VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
11614 tSirWlanSuspendParam *pWlanSuspendParam)
11615{
11616 WDI_Status wdiStatus;
11617 WDI_SuspendParamsType wdiSuspendParams;
Kapil Gupta2b44acb2016-12-30 16:49:51 +053011618 tWDA_ReqParams *pWdaParams;
11619
Jeff Johnson295189b2012-06-20 16:38:30 -070011620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011621 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011622 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
11623 pWlanSuspendParam->configuredMcstBcstFilterSetting;
Kapil Gupta2b44acb2016-12-30 16:49:51 +053011624 wdiSuspendParams.wdiReqStatusCB = WDA_ProcessWlanSuspendIndCallback;
11625
11626 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
11627 if (!pWdaParams)
11628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11629 "%s memory allocation failed" ,__func__);
11630 pWdaParams->pWdaContext = pWDA;
11631 pWdaParams->wdaMsgParam = pWlanSuspendParam;
11632 wdiSuspendParams.pUserData = pWdaParams;
11633
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -070011635 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
11636 if(WDI_STATUS_PENDING == wdiStatus)
11637 {
11638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011639 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070011640 }
11641 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
11642 {
11643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011644 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070011645 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011646 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
11647}
11648
Chet Lanctot186b5732013-03-18 10:26:30 -070011649#ifdef WLAN_FEATURE_11W
11650/*
11651 * FUNCTION: WDA_ProcessExcludeUnecryptInd
11652 *
11653 */
11654VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
11655 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
11656{
11657 WDI_Status wdiStatus;
11658 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
11659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11660 "------> %s ", __func__);
11661
11662 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
11663 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
11664 sizeof(tSirMacAddr));
11665
11666 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
11667 wdiExclUnencryptParams.pUserData = pWDA;
11668
11669 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
11670 if(WDI_STATUS_PENDING == wdiStatus)
11671 {
11672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11673 "Pending received for %s:%d ", __func__, __LINE__ );
11674 }
11675 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
11676 {
11677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11678 "Failure in %s:%d ", __func__, __LINE__ );
11679 }
11680 vos_mem_free(pExclUnencryptParam);
11681 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
11682}
11683#endif
11684
Jeff Johnson295189b2012-06-20 16:38:30 -070011685/*
11686 * FUNCTION: WDA_ProcessWlanResumeCallback
11687 *
11688 */
11689void WDA_ProcessWlanResumeCallback(
11690 WDI_SuspendResumeRspParamsType *resumeRspParams,
11691 void* pUserData)
11692{
11693 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011695 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011696 if(NULL == pWdaParams)
11697 {
11698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011699 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011700 VOS_ASSERT(0) ;
11701 return ;
11702 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011703 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
11704 {
11705 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011706 "%s: Process Wlan Resume failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070011707 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011708 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11709 vos_mem_free(pWdaParams->wdaMsgParam);
11710 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011711 return ;
11712}
Jeff Johnson295189b2012-06-20 16:38:30 -070011713/*
11714 * FUNCTION: WDA_ProcessWlanResumeReq
11715 *
11716 */
11717VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
11718 tSirWlanResumeParam *pWlanResumeParam)
11719{
11720 WDI_Status wdiStatus;
11721 WDI_ResumeParamsType *wdiResumeParams =
11722 (WDI_ResumeParamsType *)vos_mem_malloc(
11723 sizeof(WDI_ResumeParamsType) ) ;
11724 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011726 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011727 if(NULL == wdiResumeParams)
11728 {
11729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011730 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011731 VOS_ASSERT(0);
11732 return VOS_STATUS_E_NOMEM;
11733 }
11734 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11735 if(NULL == pWdaParams)
11736 {
11737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011738 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011739 VOS_ASSERT(0);
11740 vos_mem_free(wdiResumeParams);
11741 return VOS_STATUS_E_NOMEM;
11742 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011743 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
11744 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -070011746 wdiResumeParams->wdiReqStatusCB = NULL;
11747 pWdaParams->wdaMsgParam = pWlanResumeParam;
11748 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
11749 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070011750 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
11751 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
11752 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011753 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11754 {
11755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11756 "Failure in Host Resume REQ WDI API, free all the memory " );
11757 VOS_ASSERT(0);
11758 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11759 vos_mem_free(pWdaParams->wdaMsgParam);
11760 vos_mem_free(pWdaParams);
11761 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011762 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
11763}
11764
Jeff Johnson295189b2012-06-20 16:38:30 -070011765/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011766 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011767 *
11768 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011769void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011770{
11771 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011773 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011774 if(NULL == pWdaParams)
11775 {
11776 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011777 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011778 VOS_ASSERT(0) ;
11779 return ;
11780 }
11781
11782 vos_mem_free(pWdaParams->wdaMsgParam) ;
11783 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11784 vos_mem_free(pWdaParams) ;
11785 /*
11786 * No respone required for SetBeaconFilter req so just free the request
11787 * param here
11788 */
11789
Jeff Johnson295189b2012-06-20 16:38:30 -070011790 return ;
11791}
Jeff Johnson295189b2012-06-20 16:38:30 -070011792/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011793 * FUNCTION: WDA_SetBeaconFilterReqCallback
11794 * Free memory.
11795 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
11796 */
11797void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
11798{
11799 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11800
11801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11802 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11803
11804 if(NULL == pWdaParams)
11805 {
11806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11807 "%s: pWdaParams received NULL", __func__);
11808 VOS_ASSERT(0);
11809 return;
11810 }
11811
11812 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11813 {
11814 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11815 vos_mem_free(pWdaParams->wdaMsgParam);
11816 vos_mem_free(pWdaParams);
11817 }
11818
11819 return;
11820}
11821/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011822 * FUNCTION: WDA_SetBeaconFilterReq
11823 * Request to WDI to send the beacon filtering related information.
11824 */
11825VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
11826 tBeaconFilterMsg* pBeaconFilterInfo)
11827{
11828 WDI_Status status = WDI_STATUS_SUCCESS;
11829 tANI_U8 *dstPtr, *srcPtr;
11830 tANI_U8 filterLength;
11831 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
11832 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
11833 sizeof(WDI_BeaconFilterReqParamsType) ) ;
11834 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011836 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011837 if(NULL == wdiBeaconFilterInfo)
11838 {
11839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011840 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011841 VOS_ASSERT(0);
11842 return VOS_STATUS_E_NOMEM;
11843 }
11844 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11845 if(NULL == pWdaParams)
11846 {
11847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011848 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011849 VOS_ASSERT(0);
11850 vos_mem_free(wdiBeaconFilterInfo);
11851 return VOS_STATUS_E_NOMEM;
11852 }
Abhishek Singhdfe0f742017-01-03 11:26:38 +053011853 vos_mem_zero(wdiBeaconFilterInfo, sizeof(WDI_BeaconFilterReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -070011854 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
11855 pBeaconFilterInfo->beaconInterval;
11856 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
11857 pBeaconFilterInfo->capabilityInfo;
11858 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
11859 pBeaconFilterInfo->capabilityMask;
11860 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -070011861
11862 //Fill the BssIdx
11863 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
11864
Jeff Johnson295189b2012-06-20 16:38:30 -070011865 //Fill structure with info contained in the beaconFilterTable
11866 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
11867 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
11868 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
11869 if(WDI_BEACON_FILTER_LEN < filterLength)
11870 {
11871 filterLength = WDI_BEACON_FILTER_LEN;
11872 }
11873 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -070011874 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
11875 wdiBeaconFilterInfo->pUserData = pWdaParams;
11876
Jeff Johnson295189b2012-06-20 16:38:30 -070011877 /* Store param pointer as passed in by caller */
11878 /* store Params pass it to WDI */
11879 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
11880 pWdaParams->pWdaContext = pWDA;
11881 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
11882
Jeff Johnson295189b2012-06-20 16:38:30 -070011883 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011884 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011885 if(IS_WDI_STATUS_FAILURE(status))
11886 {
11887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11888 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
11889 vos_mem_free(pWdaParams->wdaMsgParam) ;
11890 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11891 vos_mem_free(pWdaParams) ;
11892 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011893 return CONVERT_WDI2VOS_STATUS(status) ;
11894}
Jeff Johnson295189b2012-06-20 16:38:30 -070011895/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011896 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011897 *
11898 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011899void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011900{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011901 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
11902
Jeff Johnson295189b2012-06-20 16:38:30 -070011903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011904 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011905
11906 if(NULL == pWdaParams)
11907 {
11908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011909 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011910 VOS_ASSERT(0) ;
11911 return ;
11912 }
11913
11914 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11915 vos_mem_free(pWdaParams->wdaMsgParam);
11916 vos_mem_free(pWdaParams);
11917
Jeff Johnson295189b2012-06-20 16:38:30 -070011918 //print a msg, nothing else to do
11919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011920 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011921 return ;
11922}
Yue Ma7f44bbe2013-04-12 11:47:39 -070011923/*
11924 * FUNCTION: WDA_RemBeaconFilterReqCallback
11925 * Free memory.
11926 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
11927 */
11928void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
11929{
11930 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11931
11932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11933 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11934
11935 if(NULL == pWdaParams)
11936 {
11937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11938 "%s: pWdaParams received NULL", __func__);
11939 VOS_ASSERT(0);
11940 return;
11941 }
11942
11943 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11944 {
11945 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11946 vos_mem_free(pWdaParams->wdaMsgParam);
11947 vos_mem_free(pWdaParams);
11948 }
11949
11950 return;
11951}
Jeff Johnson295189b2012-06-20 16:38:30 -070011952 // TODO: PE does not have this feature for now implemented,
11953 // but the support for removing beacon filter exists between
11954 // HAL and FW. This function can be called whenever PE defines
11955 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -070011956/*
11957 * FUNCTION: WDA_RemBeaconFilterReq
11958 * Request to WDI to send the removal of beacon filtering related information.
11959 */
11960VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
11961 tRemBeaconFilterMsg* pBeaconFilterInfo)
11962{
11963 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011964 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011965 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
11966 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
11967 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011968 tWDA_ReqParams *pWdaParams ;
11969
Jeff Johnson295189b2012-06-20 16:38:30 -070011970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011971 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011972 if(NULL == wdiBeaconFilterInfo)
11973 {
11974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011975 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011976 VOS_ASSERT(0);
11977 return VOS_STATUS_E_NOMEM;
11978 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011979 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11980 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070011981 {
11982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011983 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011984 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011985 vos_mem_free(wdiBeaconFilterInfo);
11986 vos_mem_free(pBeaconFilterInfo);
11987 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -070011988 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011989
11990 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
11991 pBeaconFilterInfo->ucIeCount;
11992 //Fill structure with info contained in the ucRemIeId
11993 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
11994 pBeaconFilterInfo->ucRemIeId,
11995 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
11996 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
11997 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011998
11999 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012000 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -070012001 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012002 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
12003
12004 pWdaParams->pWdaContext = pWDA;
12005
Jeff Johnson43971f52012-07-17 12:26:56 -070012006 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012007 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070012008 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012009 {
12010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12011 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012012 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012013 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12014 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070012015 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012016 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012017 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012018}
Jeff Johnson295189b2012-06-20 16:38:30 -070012019/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012020 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012021 *
12022 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012023void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012024{
12025 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012026 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012027 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012028 if(NULL == pWdaParams)
12029 {
12030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012031 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012032 VOS_ASSERT(0) ;
12033 return ;
12034 }
12035
12036 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12037 vos_mem_free(pWdaParams) ;
12038
Jeff Johnson295189b2012-06-20 16:38:30 -070012039 return ;
12040}
Jeff Johnson295189b2012-06-20 16:38:30 -070012041/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012042 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
12043 * Free memory.
12044 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
12045 */
12046void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
12047{
12048 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12049
12050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12051 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12052
12053 if(NULL == pWdaParams)
12054 {
12055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12056 "%s: pWdaParams received NULL", __func__);
12057 VOS_ASSERT(0);
12058 return;
12059 }
12060
12061 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12062 {
12063 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12064 vos_mem_free(pWdaParams);
12065 }
12066
12067 return;
12068}
12069/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012070 * FUNCTION: WDA_SetRSSIThresholdsReq
12071 * Request to WDI to set the RSSI thresholds (sta mode).
12072 */
12073VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
12074{
12075 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012076 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012077 tWDA_CbContext *pWDA = NULL ;
12078 v_PVOID_t pVosContext = NULL;
12079 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
12080 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
12081 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
12082 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012083 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012084 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012085 if(NULL == wdiRSSIThresholdsInfo)
12086 {
12087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012088 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012089 VOS_ASSERT(0);
12090 return VOS_STATUS_E_NOMEM;
12091 }
12092 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12093 if(NULL == pWdaParams)
12094 {
12095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012096 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012097 VOS_ASSERT(0);
12098 vos_mem_free(wdiRSSIThresholdsInfo);
12099 return VOS_STATUS_E_NOMEM;
12100 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012101 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -070012102 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
12103 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
12104 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -070012105 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
12106 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
12107 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -070012108 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
12109 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
12110 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012111 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
12112 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012113 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
12114 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
12115
Jeff Johnson295189b2012-06-20 16:38:30 -070012116 /* Store param pointer as passed in by caller */
12117 /* store Params pass it to WDI */
12118 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
12119 pWdaParams->pWdaContext = pWDA;
12120 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -070012121 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012122 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070012123 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012124 {
12125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12126 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012127 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070012128 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12129 vos_mem_free(pWdaParams) ;
12130 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012131 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012132
12133}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012134/*
Yue Madb90ac12013-04-04 13:39:13 -070012135 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012136 *
12137 */
Yue Madb90ac12013-04-04 13:39:13 -070012138void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012139{
12140 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
12141
12142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012143 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012144 if(NULL == pWdaParams)
12145 {
12146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012147 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012148 VOS_ASSERT(0) ;
12149 return ;
12150 }
12151
12152 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12153 vos_mem_free(pWdaParams->wdaMsgParam);
12154 vos_mem_free(pWdaParams) ;
12155
12156 //print a msg, nothing else to do
12157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -070012158 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070012159 return ;
12160}
Jeff Johnson295189b2012-06-20 16:38:30 -070012161/*
Yue Madb90ac12013-04-04 13:39:13 -070012162 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -070012163 * Free memory.
12164 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -070012165 */
12166void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
12167{
12168 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12169
12170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12171 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12172
12173 if(NULL == pWdaParams)
12174 {
12175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12176 "%s: Invalid pWdaParams pointer", __func__);
12177 VOS_ASSERT(0);
12178 return;
12179 }
12180
12181 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12182 {
12183 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12184 vos_mem_free(pWdaParams->wdaMsgParam);
12185 vos_mem_free(pWdaParams);
12186 }
12187
12188 return;
12189}
12190/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012191 * FUNCTION: WDA_ProcessHostOffloadReq
12192 * Request to WDI to set the filter to minimize unnecessary host wakeup due
12193 * to broadcast traffic (sta mode).
12194 */
12195VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
12196 tSirHostOffloadReq *pHostOffloadParams)
12197{
12198 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012199 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012200 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
12201 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
12202 sizeof(WDI_HostOffloadReqParamsType)) ;
12203 tWDA_ReqParams *pWdaParams ;
12204
12205 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012206 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -070012207
12208 if(NULL == wdiHostOffloadInfo)
12209 {
12210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012211 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012212 VOS_ASSERT(0);
12213 return VOS_STATUS_E_NOMEM;
12214 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012215 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12216 if(NULL == pWdaParams)
12217 {
12218 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012219 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012220 VOS_ASSERT(0);
12221 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012222 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012223 return VOS_STATUS_E_NOMEM;
12224 }
12225
12226 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
12227 pHostOffloadParams->offloadType;
12228 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
12229 pHostOffloadParams->enableOrDisable;
12230
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012231 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
12232 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
12233
Jeff Johnson295189b2012-06-20 16:38:30 -070012234 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
12235 {
12236 case SIR_IPV4_ARP_REPLY_OFFLOAD:
12237 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
12238 pHostOffloadParams->params.hostIpv4Addr,
12239 4);
12240 break;
12241 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
12242 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
12243 pHostOffloadParams->params.hostIpv6Addr,
12244 16);
12245 break;
12246 case SIR_IPV6_NS_OFFLOAD:
12247 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
12248 pHostOffloadParams->params.hostIpv6Addr,
12249 16);
12250
12251#ifdef WLAN_NS_OFFLOAD
12252 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
12253 {
12254 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
12255 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
12256 16);
12257 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
12258 }
12259 else
12260 {
12261 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
12262 }
12263
12264 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
12265 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
12266 16);
12267 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
12268 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
12269 6);
12270
12271 //Only two are supported so let's go through them without a loop
12272 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
12273 {
12274 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
12275 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
12276 16);
12277 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
12278 }
12279 else
12280 {
12281 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
12282 }
12283
12284 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
12285 {
12286 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
12287 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
12288 16);
12289 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
12290 }
12291 else
12292 {
12293 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
12294 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +053012295 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
12296 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070012297 break;
12298#endif //WLAN_NS_OFFLOAD
12299 default:
12300 {
12301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12302 "No Handling for Offload Type %x in WDA "
12303 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
12304 //WDA_VOS_ASSERT(0) ;
12305 }
12306 }
Yue Madb90ac12013-04-04 13:39:13 -070012307 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
12308 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012309
Jeff Johnson295189b2012-06-20 16:38:30 -070012310 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012311 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012312 /* store Params pass it to WDI */
12313 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
12314 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012315
Jeff Johnson295189b2012-06-20 16:38:30 -070012316
Jeff Johnson43971f52012-07-17 12:26:56 -070012317 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -070012318 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012319
Jeff Johnson43971f52012-07-17 12:26:56 -070012320 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012321 {
Anurag Chouhan65ea6dc2016-10-25 19:59:14 +053012322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
c_hpothu86feba52014-10-28 15:51:18 +053012323 "Failure in host offload REQ WDI API, free all the memory %d",
12324 wstatus);
Jeff Johnson43971f52012-07-17 12:26:56 -070012325 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070012326 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12327 vos_mem_free(pWdaParams->wdaMsgParam);
12328 vos_mem_free(pWdaParams) ;
12329 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012330 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012331
12332}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012333/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012334 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012335 *
12336 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012337void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012338{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012339 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
12340
Jeff Johnson295189b2012-06-20 16:38:30 -070012341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012342 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012343
12344 if(NULL == pWdaParams)
12345 {
12346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012347 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012348 VOS_ASSERT(0) ;
12349 return ;
12350 }
12351
12352 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12353 vos_mem_free(pWdaParams->wdaMsgParam);
12354 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -070012355
Jeff Johnson295189b2012-06-20 16:38:30 -070012356 //print a msg, nothing else to do
12357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012358 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070012359 return ;
12360}
Jeff Johnson295189b2012-06-20 16:38:30 -070012361/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012362 * FUNCTION: WDA_KeepAliveReqCallback
12363 * Free memory.
12364 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
12365 */
12366void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
12367{
12368 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12369
12370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12371 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12372
12373 if(NULL == pWdaParams)
12374 {
12375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12376 "%s: pWdaParams received NULL", __func__);
12377 VOS_ASSERT(0);
12378 return;
12379 }
12380
12381 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12382 {
12383 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12384 vos_mem_free(pWdaParams->wdaMsgParam);
12385 vos_mem_free(pWdaParams);
12386 }
12387
12388 return;
12389}
12390/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012391 * FUNCTION: WDA_ProcessKeepAliveReq
12392 * Request to WDI to send Keep Alive packets to minimize unnecessary host
12393 * wakeup due to broadcast traffic (sta mode).
12394 */
12395VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
12396 tSirKeepAliveReq *pKeepAliveParams)
12397{
12398 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012399 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012400 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
12401 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
12402 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012403 tWDA_ReqParams *pWdaParams;
12404
Jeff Johnson295189b2012-06-20 16:38:30 -070012405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012406 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012407 if(NULL == wdiKeepAliveInfo)
12408 {
12409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012410 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012411 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012412 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012413 return VOS_STATUS_E_NOMEM;
12414 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012415
12416 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12417 if(NULL == pWdaParams)
12418 {
12419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012420 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012421 VOS_ASSERT(0);
12422 vos_mem_free(wdiKeepAliveInfo);
12423 vos_mem_free(pKeepAliveParams);
12424 return VOS_STATUS_E_NOMEM;
12425 }
12426
Jeff Johnson295189b2012-06-20 16:38:30 -070012427 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
12428 pKeepAliveParams->packetType;
12429 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
12430 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012431
12432 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
12433 pKeepAliveParams->bssId,
12434 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012435
12436 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
12437 {
12438 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
12439 pKeepAliveParams->hostIpv4Addr,
12440 SIR_IPV4_ADDR_LEN);
12441 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
12442 pKeepAliveParams->destIpv4Addr,
12443 SIR_IPV4_ADDR_LEN);
12444 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
12445 pKeepAliveParams->destMacAddr,
12446 SIR_MAC_ADDR_LEN);
12447 }
12448 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
12449 {
12450 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
12451 SIR_IPV4_ADDR_LEN,
12452 0);
12453 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
12454 SIR_IPV4_ADDR_LEN,
12455 0);
12456 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
12457 SIR_MAC_ADDR_LEN,
12458 0);
12459 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012460 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
12461 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012462
Jeff Johnson295189b2012-06-20 16:38:30 -070012463 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012464 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012465 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012466 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
12467 pWdaParams->pWdaContext = pWDA;
12468
Jeff Johnson295189b2012-06-20 16:38:30 -070012469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
12470 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
12471 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
12472 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
12473 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
12474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
12475 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
12476 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
12477 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
12478 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
12479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12480 "WDA DMAC : %d:%d:%d:%d:%d:%d",
12481 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
12482 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
12483 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
12484 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
12485 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
12486 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
12487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12488 "TimePeriod %d PacketType %d",
12489 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
12490 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -070012491 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012492 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012493
Jeff Johnson43971f52012-07-17 12:26:56 -070012494 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012495 {
12496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12497 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012498 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012499 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12500 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070012501 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012502 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012503 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012504
12505}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012506/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012507 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012508 *
12509 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012510void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012511 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
12512 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012513{
12514 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012516 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012517 if(NULL == pWdaParams)
12518 {
12519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012520 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012521 VOS_ASSERT(0) ;
12522 return ;
12523 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012524 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12525 vos_mem_free(pWdaParams->wdaMsgParam);
12526 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012527 return ;
12528}
Jeff Johnson295189b2012-06-20 16:38:30 -070012529/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012530 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
12531 * Free memory.
12532 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
12533 */
12534void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
12535{
12536 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12537
12538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12539 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12540
12541 if(NULL == pWdaParams)
12542 {
12543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12544 "%s: pWdaParams received NULL", __func__);
12545 VOS_ASSERT(0);
12546 return;
12547 }
12548
12549 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12550 {
12551 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12552 vos_mem_free(pWdaParams->wdaMsgParam);
12553 vos_mem_free(pWdaParams);
12554 }
12555
12556 return;
12557}
12558
12559/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012560 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
12561 * Request to WDI to add WOWL Bcast pattern
12562 */
12563VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
12564 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
12565{
12566 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012567 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012568 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
12569 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
12570 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
12571 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012573 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012574 if(NULL == wdiWowlAddBcPtrnInfo)
12575 {
12576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012577 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012578 VOS_ASSERT(0);
12579 return VOS_STATUS_E_NOMEM;
12580 }
12581 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12582 if(NULL == pWdaParams)
12583 {
12584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012585 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012586 VOS_ASSERT(0);
12587 vos_mem_free(wdiWowlAddBcPtrnInfo);
12588 return VOS_STATUS_E_NOMEM;
12589 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012590 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
12591 pWowlAddBcPtrnParams->ucPatternId;
12592 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
12593 pWowlAddBcPtrnParams->ucPatternByteOffset;
12594 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
12595 pWowlAddBcPtrnParams->ucPatternMaskSize;
12596 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
12597 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -070012598 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
12599 {
12600 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
12601 pWowlAddBcPtrnParams->ucPattern,
12602 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
12603 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
12604 pWowlAddBcPtrnParams->ucPatternMask,
12605 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
12606 }
12607 else
12608 {
12609 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
12610 pWowlAddBcPtrnParams->ucPattern,
12611 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
12612 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
12613 pWowlAddBcPtrnParams->ucPatternMask,
12614 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
12615
12616 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
12617 pWowlAddBcPtrnParams->ucPatternExt,
12618 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
12619 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
12620 pWowlAddBcPtrnParams->ucPatternMaskExt,
12621 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
12622 }
12623
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012624 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
12625 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
12626
Yue Ma7f44bbe2013-04-12 11:47:39 -070012627 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
12628 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012629 /* Store param pointer as passed in by caller */
12630 /* store Params pass it to WDI */
12631 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
12632 pWdaParams->pWdaContext = pWDA;
12633 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070012634 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012635 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070012636 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012637 {
12638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12639 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012640 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070012641 vos_mem_free(pWdaParams->wdaMsgParam) ;
12642 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12643 vos_mem_free(pWdaParams) ;
12644 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012645 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012646
12647}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012648/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012649 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012650 *
12651 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012652void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012653 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
12654 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012655{
12656 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012658 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012659 if(NULL == pWdaParams)
12660 {
12661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012662 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012663 VOS_ASSERT(0) ;
12664 return ;
12665 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012666 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12667 vos_mem_free(pWdaParams->wdaMsgParam);
12668 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012669 return ;
12670}
Jeff Johnson295189b2012-06-20 16:38:30 -070012671/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012672 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
12673 * Free memory.
12674 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
12675 */
12676void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
12677{
12678 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12679
12680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12681 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12682
12683 if(NULL == pWdaParams)
12684 {
12685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12686 "%s: pWdaParams received NULL", __func__);
12687 VOS_ASSERT(0);
12688 return;
12689 }
12690
12691 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12692 {
12693 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12694 vos_mem_free(pWdaParams->wdaMsgParam);
12695 vos_mem_free(pWdaParams);
12696 }
12697
12698 return;
12699}
12700/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012701 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
12702 * Request to WDI to delete WOWL Bcast pattern
12703 */
12704VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
12705 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
12706{
12707 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012708 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012709 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
12710 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
12711 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
12712 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012714 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012715 if(NULL == wdiWowlDelBcPtrnInfo)
12716 {
12717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012718 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012719 VOS_ASSERT(0);
12720 return VOS_STATUS_E_NOMEM;
12721 }
12722 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12723 if(NULL == pWdaParams)
12724 {
12725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012726 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012727 VOS_ASSERT(0);
12728 vos_mem_free(wdiWowlDelBcPtrnInfo);
12729 return VOS_STATUS_E_NOMEM;
12730 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012731 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
12732 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012733
12734 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
12735 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
12736
Yue Ma7f44bbe2013-04-12 11:47:39 -070012737 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
12738 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012739 /* Store param pointer as passed in by caller */
12740 /* store Params pass it to WDI */
12741 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
12742 pWdaParams->pWdaContext = pWDA;
12743 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070012744 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012745 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070012746 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012747 {
12748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12749 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012750 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070012751 vos_mem_free(pWdaParams->wdaMsgParam) ;
12752 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12753 vos_mem_free(pWdaParams) ;
12754 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012755 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012756
12757}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012758/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012759 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012760 *
12761 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012762void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012763{
12764 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012765 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012766 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012768 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012769 if(NULL == pWdaParams)
12770 {
12771 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012772 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012773 VOS_ASSERT(0) ;
12774 return ;
12775 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012776 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012777 if (NULL == pWDA)
12778 {
12779 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12780 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053012781
12782 if(pWdaParams->wdaWdiApiMsgParam)
12783 {
12784 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12785 }
12786 vos_mem_free(pWdaParams);
12787
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012788 VOS_ASSERT(0);
12789 return ;
12790 }
12791
Jeff Johnson295189b2012-06-20 16:38:30 -070012792 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
12793
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012794 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
12795
Jeff Johnson295189b2012-06-20 16:38:30 -070012796 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12797 vos_mem_free(pWdaParams) ;
12798
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012799 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070012800 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012801 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012802 return ;
12803}
Jeff Johnson295189b2012-06-20 16:38:30 -070012804/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012805 * FUNCTION: WDA_WowlEnterReqCallback
12806 * Free memory and send WOWL Enter RSP back to PE.
12807 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
12808 */
12809void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
12810{
12811 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012812 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012813 tSirHalWowlEnterParams *pWowlEnterParams;
12814
12815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12816 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12817
12818 if(NULL == pWdaParams)
12819 {
12820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12821 "%s: pWdaParams received NULL", __func__);
12822 VOS_ASSERT(0);
12823 return;
12824 }
12825
12826 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012827 if (NULL == pWDA)
12828 {
12829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12830 "%s:pWDA is NULL", __func__);
12831 VOS_ASSERT(0);
12832 return ;
12833 }
12834
Yue Ma7f44bbe2013-04-12 11:47:39 -070012835 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
12836 pWowlEnterParams->status = wdiStatus;
12837
12838 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12839 {
12840 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12841 vos_mem_free(pWdaParams);
12842 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
12843 }
12844
12845 return;
12846}
12847/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012848 * FUNCTION: WDA_ProcessWowlEnterReq
12849 * Request to WDI to enter WOWL
12850 */
12851VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
12852 tSirHalWowlEnterParams *pWowlEnterParams)
12853{
12854 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012855 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012856 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
12857 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
12858 sizeof(WDI_WowlEnterReqParamsType)) ;
12859 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012861 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012862 if(NULL == wdiWowlEnterInfo)
12863 {
12864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012865 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012866 VOS_ASSERT(0);
12867 return VOS_STATUS_E_NOMEM;
12868 }
12869 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12870 if(NULL == pWdaParams)
12871 {
12872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012873 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012874 VOS_ASSERT(0);
12875 vos_mem_free(wdiWowlEnterInfo);
12876 return VOS_STATUS_E_NOMEM;
12877 }
Kumar Anandaca924e2013-07-22 14:35:34 -070012878
12879 vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
12880
Jeff Johnson295189b2012-06-20 16:38:30 -070012881 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
12882 pWowlEnterParams->magicPtrn,
12883 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012884 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
12885 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070012886 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
12887 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070012888 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
12889 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070012890 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
12891 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070012892 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
12893 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070012894 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
12895 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070012896 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
12897 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -070012898 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
12899 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -070012900#ifdef WLAN_WAKEUP_EVENTS
12901 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
12902 pWowlEnterParams->ucWoWEAPIDRequestEnable;
12903
12904 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
12905 pWowlEnterParams->ucWoWEAPOL4WayEnable;
12906
12907 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
12908 pWowlEnterParams->ucWowNetScanOffloadMatch;
12909
12910 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
12911 pWowlEnterParams->ucWowGTKRekeyError;
12912
12913 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
12914 pWowlEnterParams->ucWoWBSSConnLoss;
12915#endif // WLAN_WAKEUP_EVENTS
12916
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012917 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
12918 pWowlEnterParams->bssIdx;
12919
Yue Ma7f44bbe2013-04-12 11:47:39 -070012920 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
12921 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012922 /* Store param pointer as passed in by caller */
12923 /* store Params pass it to WDI */
12924 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
12925 pWdaParams->pWdaContext = pWDA;
12926 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070012927 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012928 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070012929 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012930 {
12931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12932 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012933 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070012934 vos_mem_free(pWdaParams->wdaMsgParam) ;
12935 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12936 vos_mem_free(pWdaParams) ;
12937 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012938 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012939
12940}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012941/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012942 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012943 *
12944 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012945void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012946{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012947 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012948 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012949 tSirHalWowlExitParams *pWowlExitParams;
12950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012951 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012952 if(NULL == pWdaParams)
12953 {
12954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012955 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012956 VOS_ASSERT(0) ;
12957 return ;
12958 }
12959 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012960 if (NULL == pWDA)
12961 {
12962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12963 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053012964
12965 if(pWdaParams->wdaWdiApiMsgParam)
12966 {
12967 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12968 }
12969 vos_mem_free(pWdaParams);
12970
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012971 VOS_ASSERT(0);
12972 return ;
12973 }
12974
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012975 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
12976
12977 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070012978 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012979
12980 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12981 vos_mem_free(pWdaParams) ;
12982
Jeff Johnson295189b2012-06-20 16:38:30 -070012983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012984 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012985 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012986 return ;
12987}
Jeff Johnson295189b2012-06-20 16:38:30 -070012988/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012989 * FUNCTION: WDA_WowlExitReqCallback
12990 * Free memory and send WOWL Exit RSP back to PE.
12991 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
12992 */
12993void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
12994{
12995 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012996 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012997 tSirHalWowlExitParams *pWowlExitParams;
12998
12999 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13000 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13001
13002 if(NULL == pWdaParams)
13003 {
13004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13005 "%s: pWdaParams received NULL", __func__);
13006 VOS_ASSERT(0);
13007 return;
13008 }
13009
13010 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013011 if (NULL == pWDA)
13012 {
13013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13014 "%s:pWDA is NULL", __func__);
13015 VOS_ASSERT(0);
13016 return ;
13017 }
13018
Yue Ma7f44bbe2013-04-12 11:47:39 -070013019 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
13020 pWowlExitParams->status = wdiStatus;
13021
13022 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13023 {
13024 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13025 vos_mem_free(pWdaParams);
13026 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
13027 }
13028
13029 return;
13030}
13031/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013032 * FUNCTION: WDA_ProcessWowlExitReq
13033 * Request to WDI to add WOWL Bcast pattern
13034 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013035VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
13036 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070013037{
13038 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070013039 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013040 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
13041 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
13042 sizeof(WDI_WowlExitReqParamsType)) ;
13043 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013044 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013045 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013046 if(NULL == wdiWowlExitInfo)
13047 {
13048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013049 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013050 VOS_ASSERT(0);
13051 return VOS_STATUS_E_NOMEM;
13052 }
13053 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13054 if(NULL == pWdaParams)
13055 {
13056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013057 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013058 VOS_ASSERT(0);
13059 vos_mem_free(wdiWowlExitInfo);
13060 return VOS_STATUS_E_NOMEM;
13061 }
13062
13063 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
13064 pWowlExitParams->bssIdx;
13065
Yue Ma7f44bbe2013-04-12 11:47:39 -070013066 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
13067 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013068
13069 /* Store param pointer as passed in by caller */
13070 /* store Params pass it to WDI */
13071 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
13072 pWdaParams->pWdaContext = pWDA;
13073 pWdaParams->wdaMsgParam = pWowlExitParams;
13074
13075 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013076 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013077
Jeff Johnson43971f52012-07-17 12:26:56 -070013078 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070013079 {
13080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13081 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070013082 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013083 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13084 vos_mem_free(pWdaParams->wdaMsgParam);
13085 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013086 }
Jeff Johnson43971f52012-07-17 12:26:56 -070013087 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013088}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070013089/*
13090 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
13091 * Request to WDI to determine whether a given station is capable of
13092 * using HW-based frame translation
13093 */
13094v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
13095 tANI_U8 staIdx)
13096{
13097 return WDI_IsHwFrameTxTranslationCapable(staIdx);
13098}
Katya Nigam6201c3e2014-05-27 17:51:42 +053013099
13100/*
13101 * FUNCTION: WDA_IsSelfSTA
13102 * Request to WDI to determine whether a given STAID is self station
13103 * index.
13104 */
13105v_BOOL_t WDA_IsSelfSTA(v_PVOID_t pVosContext, tANI_U8 ucSTAIdx)
13106{
13107
13108 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
13109
Girish Gowli05cf44e2014-06-12 21:53:37 +053013110 if (NULL != pWDA)
13111 return WDI_IsSelfSTA(pWDA->pWdiContext,ucSTAIdx);
13112 else
13113 return VOS_TRUE;
Katya Nigam6201c3e2014-05-27 17:51:42 +053013114}
Jeff Johnson295189b2012-06-20 16:38:30 -070013115/*
13116 * FUNCTION: WDA_NvDownloadReqCallback
13117 * send NV Download RSP back to PE
13118 */
13119void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
13120 void* pUserData)
13121{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013122
13123 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013124 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013125
Jeff Johnson295189b2012-06-20 16:38:30 -070013126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013127 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013128
13129 if(NULL == pWdaParams)
13130 {
13131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013132 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013133 VOS_ASSERT(0) ;
13134 return ;
13135 }
13136
13137 pWDA = pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013138 if (NULL == pWDA)
13139 {
13140 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13141 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053013142
13143 if(pWdaParams->wdaWdiApiMsgParam)
13144 {
13145 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13146 }
13147 vos_mem_free(pWdaParams);
13148
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013149 VOS_ASSERT(0);
13150 return ;
13151 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013152
Jeff Johnson295189b2012-06-20 16:38:30 -070013153 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013154 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13155 vos_mem_free(pWdaParams);
13156
Jeff Johnson295189b2012-06-20 16:38:30 -070013157 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070013158 return ;
13159}
Jeff Johnson295189b2012-06-20 16:38:30 -070013160/*
13161 * FUNCTION: WDA_ProcessNvDownloadReq
13162 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
13163 */
13164VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
13165{
13166 /* Initialize the local Variables*/
13167 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
13168 v_VOID_t *pNvBuffer=NULL;
13169 v_SIZE_t bufferSize = 0;
13170 WDI_Status status = WDI_STATUS_E_FAILURE;
13171 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013172 tWDA_ReqParams *pWdaParams ;
13173
Jeff Johnson295189b2012-06-20 16:38:30 -070013174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013175 "------> %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013176 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070013177 {
13178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013179 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013180 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070013181 return VOS_STATUS_E_FAILURE;
13182 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013183
Jeff Johnson295189b2012-06-20 16:38:30 -070013184 /* Get the NV structure base address and size from VOS */
Prasanna Kumarf6c94ae2013-04-11 20:05:21 -070013185 vos_nv_getNVEncodedBuffer(&pNvBuffer,&bufferSize);
13186
Jeff Johnson295189b2012-06-20 16:38:30 -070013187 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
13188 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013189 if(NULL == wdiNvDownloadReqParam)
13190 {
13191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013192 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013193 VOS_ASSERT(0);
13194 return VOS_STATUS_E_NOMEM;
13195 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013196 /* Copy Params to wdiNvDownloadReqParam*/
13197 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
13198 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013199
13200 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13201 if(NULL == pWdaParams)
13202 {
13203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013204 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013205 VOS_ASSERT(0);
13206 vos_mem_free(wdiNvDownloadReqParam);
13207 return VOS_STATUS_E_NOMEM;
13208 }
13209
Jeff Johnson295189b2012-06-20 16:38:30 -070013210 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013211 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
13212 pWdaParams->wdaMsgParam = NULL;
13213 pWdaParams->pWdaContext = pWDA;
13214
13215
Jeff Johnson295189b2012-06-20 16:38:30 -070013216 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013217
Jeff Johnson295189b2012-06-20 16:38:30 -070013218 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013219 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
13220
Jeff Johnson295189b2012-06-20 16:38:30 -070013221 if(IS_WDI_STATUS_FAILURE(status))
13222 {
13223 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13224 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013225 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13226 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013227 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013228 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013229}
13230/*
13231 * FUNCTION: WDA_FlushAcReqCallback
13232 * send Flush AC RSP back to TL
13233 */
13234void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
13235{
13236 vos_msg_t wdaMsg = {0} ;
13237 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13238 tFlushACReq *pFlushACReqParams;
13239 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013241 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013242 if(NULL == pWdaParams)
13243 {
13244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013245 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013246 VOS_ASSERT(0) ;
13247 return ;
13248 }
13249
13250 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
13251 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
13252 if(NULL == pFlushACRspParams)
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);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070013257 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013258 return ;
13259 }
13260 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
13261 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
13262 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
13263 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
13264 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070013265 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013266 vos_mem_free(pWdaParams->wdaMsgParam) ;
13267 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13268 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013269 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
13270 wdaMsg.bodyptr = (void *)pFlushACRspParams;
13271 // POST message to TL
13272 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
13273
Jeff Johnson295189b2012-06-20 16:38:30 -070013274 return ;
13275}
Jeff Johnson295189b2012-06-20 16:38:30 -070013276/*
13277 * FUNCTION: WDA_ProcessFlushAcReq
13278 * Request to WDI to Update the DELBA REQ params.
13279 */
13280VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
13281 tFlushACReq *pFlushAcReqParams)
13282{
13283 WDI_Status status = WDI_STATUS_SUCCESS ;
13284 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
13285 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
13286 sizeof(WDI_FlushAcReqParamsType)) ;
13287 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013288 if(NULL == wdiFlushAcReqParam)
13289 {
13290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013291 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013292 VOS_ASSERT(0);
13293 return VOS_STATUS_E_NOMEM;
13294 }
13295 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13296 if(NULL == pWdaParams)
13297 {
13298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013299 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013300 VOS_ASSERT(0);
13301 vos_mem_free(wdiFlushAcReqParam);
13302 return VOS_STATUS_E_NOMEM;
13303 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013305 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013306 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
13307 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
13308 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
13309 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -070013310 /* Store Flush AC pointer, as this will be used for response */
13311 /* store Params pass it to WDI */
13312 pWdaParams->pWdaContext = pWDA;
13313 pWdaParams->wdaMsgParam = pFlushAcReqParams;
13314 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070013315 status = WDI_FlushAcReq(wdiFlushAcReqParam,
13316 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013317 if(IS_WDI_STATUS_FAILURE(status))
13318 {
13319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13320 "Failure in Flush AC REQ Params WDI API, free all the memory " );
13321 vos_mem_free(pWdaParams->wdaMsgParam) ;
13322 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13323 vos_mem_free(pWdaParams) ;
13324 //TODO: respond to TL with failure
13325 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013326 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013327}
Jeff Johnson295189b2012-06-20 16:38:30 -070013328/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013329 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013330 *
13331 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013332void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013333{
13334 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013335 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070013336 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070013337
13338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013339 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013340 if(NULL == pWdaParams)
13341 {
13342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013343 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013344 VOS_ASSERT(0) ;
13345 return ;
13346 }
13347 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013348 if (NULL == pWDA)
13349 {
13350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13351 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +053013352 vos_mem_free(pWdaParams->wdaMsgParam) ;
13353 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13354 vos_mem_free(pWdaParams) ;
13355
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013356 VOS_ASSERT(0);
13357 return ;
13358 }
13359
Jeff Johnson295189b2012-06-20 16:38:30 -070013360 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
13361 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
13362 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
13363 {
13364 pWDA->wdaAmpSessionOn = VOS_FALSE;
13365 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013366 vos_mem_free(pWdaParams->wdaMsgParam) ;
13367 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13368 vos_mem_free(pWdaParams) ;
13369 /*
13370 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
13371 * param here
13372 */
Jeff Johnson295189b2012-06-20 16:38:30 -070013373 return ;
13374}
Yue Ma7f44bbe2013-04-12 11:47:39 -070013375/*
13376 * FUNCTION: WDA_BtAmpEventReqCallback
13377 * Free memory.
13378 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
13379 */
13380void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
13381{
13382 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013383 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013384 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070013385
Yue Ma7f44bbe2013-04-12 11:47:39 -070013386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13387 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13388
13389 if(NULL == pWdaParams)
13390 {
13391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13392 "%s: pWdaParams received NULL", __func__);
13393 VOS_ASSERT(0);
13394 return;
13395 }
13396
13397 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013398 if (NULL == pWDA)
13399 {
13400 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13401 "%s:pWDA is NULL", __func__);
13402 VOS_ASSERT(0);
13403 return ;
13404 }
13405
Yue Ma7f44bbe2013-04-12 11:47:39 -070013406 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
13407
13408 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
13409 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
13410 {
13411 pWDA->wdaAmpSessionOn = VOS_FALSE;
13412 }
13413
13414 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13415 {
13416 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13417 vos_mem_free(pWdaParams->wdaMsgParam);
13418 vos_mem_free(pWdaParams);
13419 }
13420
13421 return;
13422}
Jeff Johnson295189b2012-06-20 16:38:30 -070013423/*
13424 * FUNCTION: WDA_ProcessBtAmpEventReq
13425 * Request to WDI to Update with BT AMP events.
13426 */
13427VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
13428 tSmeBtAmpEvent *pBtAmpEventParams)
13429{
13430 WDI_Status status = WDI_STATUS_SUCCESS ;
13431 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
13432 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
13433 sizeof(WDI_BtAmpEventParamsType)) ;
13434 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013436 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013437 if(NULL == wdiBtAmpEventParam)
13438 {
13439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013440 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013441 VOS_ASSERT(0);
13442 return VOS_STATUS_E_NOMEM;
13443 }
13444 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13445 if(NULL == pWdaParams)
13446 {
13447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013448 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013449 VOS_ASSERT(0);
13450 vos_mem_free(wdiBtAmpEventParam);
13451 return VOS_STATUS_E_NOMEM;
13452 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013453 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
13454 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013455 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
13456 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013457 /* Store BT AMP event pointer, as this will be used for response */
13458 /* store Params pass it to WDI */
13459 pWdaParams->pWdaContext = pWDA;
13460 pWdaParams->wdaMsgParam = pBtAmpEventParams;
13461 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070013462 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013463 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013464 if(IS_WDI_STATUS_FAILURE(status))
13465 {
13466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13467 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
13468 vos_mem_free(pWdaParams->wdaMsgParam) ;
13469 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13470 vos_mem_free(pWdaParams) ;
13471 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013472 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
13473 {
13474 pWDA->wdaAmpSessionOn = VOS_TRUE;
13475 }
13476 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013477}
13478
Jeff Johnson295189b2012-06-20 16:38:30 -070013479/*
13480 * FUNCTION: WDA_FTMCommandReqCallback
13481 * Handle FTM CMD response came from HAL
13482 * Route responce to HDD FTM
13483 */
13484void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
13485 void *usrData)
13486{
13487 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013488 if((NULL == pWDA) || (NULL == ftmCmdRspData))
13489 {
13490 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson2ef57602017-09-19 08:31:46 -070013491 "%s, invalid input %pK, %pK",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070013492 return;
13493 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013494 /* Release Current FTM Command Request */
13495 vos_mem_free(pWDA->wdaFTMCmdReq);
13496 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070013497 /* Post FTM Responce to HDD FTM */
13498 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070013499 return;
13500}
Jeff Johnson295189b2012-06-20 16:38:30 -070013501/*
13502 * FUNCTION: WDA_ProcessFTMCommand
13503 * Send FTM command to WDI
13504 */
13505VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
13506 tPttMsgbuffer *pPTTFtmCmd)
13507{
13508 WDI_Status status = WDI_STATUS_SUCCESS;
13509 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070013510 ftmCMDReq = (WDI_FTMCommandReqType *)
13511 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
13512 if(NULL == ftmCMDReq)
13513 {
13514 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13515 "WDA FTM Command buffer alloc fail");
13516 return VOS_STATUS_E_NOMEM;
13517 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013518 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
13519 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -070013520 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -070013521 /* Send command to WDI */
13522 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070013523 return status;
13524}
Jeff Johnsone7245742012-09-05 17:12:55 -070013525#ifdef FEATURE_OEM_DATA_SUPPORT
13526/*
13527 * FUNCTION: WDA_StartOemDataReqCallback
13528 *
13529 */
13530void WDA_StartOemDataReqCallback(
13531 WDI_oemDataRspParamsType *wdiOemDataRspParams,
13532 void* pUserData)
13533{
13534 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013535 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013536 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070013537 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013538
Jeff Johnsone7245742012-09-05 17:12:55 -070013539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013540 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013541
13542 if(NULL == pWdaParams)
13543 {
13544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013545 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013546 VOS_ASSERT(0) ;
13547 return ;
13548 }
13549 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
13550
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013551 if (NULL == pWDA)
Jeff Johnsone7245742012-09-05 17:12:55 -070013552 {
13553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013554 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070013555 VOS_ASSERT(0);
13556 return ;
13557 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013558
Jeff Johnsone7245742012-09-05 17:12:55 -070013559 /*
13560 * Allocate memory for response params sent to PE
13561 */
13562 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
13563
13564 // Check if memory is allocated for OemdataMeasRsp Params.
13565 if(NULL == pOemDataRspParams)
13566 {
13567 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13568 "OEM DATA WDA callback alloc fail");
13569 VOS_ASSERT(0) ;
13570 return;
13571 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013572
Jeff Johnsone7245742012-09-05 17:12:55 -070013573 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013574 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13575 vos_mem_free(pWdaParams->wdaMsgParam);
13576 vos_mem_free(pWdaParams) ;
13577
Jeff Johnsone7245742012-09-05 17:12:55 -070013578 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080013579 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -070013580 * Also, here success always means that we have atleast one BSSID.
13581 */
13582 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
13583
13584 //enable Tx
13585 status = WDA_ResumeDataTx(pWDA);
13586 if(status != VOS_STATUS_SUCCESS)
13587 {
13588 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
13589 }
13590 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
13591 return ;
13592}
13593/*
13594 * FUNCTION: WDA_ProcessStartOemDataReq
13595 * Send Start Oem Data Req to WDI
13596 */
13597VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
13598 tStartOemDataReq *pOemDataReqParams)
13599{
13600 WDI_Status status = WDI_STATUS_SUCCESS;
13601 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013602 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -070013603
13604 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
13605
13606 if(NULL == wdiOemDataReqParams)
13607 {
13608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013609 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070013610 VOS_ASSERT(0);
13611 return VOS_STATUS_E_NOMEM;
13612 }
13613
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013614 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
13615 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
13616 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
13617 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -070013618
13619 wdiOemDataReqParams->wdiReqStatusCB = NULL;
13620
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013621 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13622 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -070013623 {
13624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013625 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070013626 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013627 vos_mem_free(pOemDataReqParams);
13628 VOS_ASSERT(0);
13629 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -070013630 }
Jeff Johnsone7245742012-09-05 17:12:55 -070013631
Bernald44a1ae2013-01-09 08:30:39 -080013632 pWdaParams->pWdaContext = (void*)pWDA;
13633 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
13634 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013635
13636 status = WDI_StartOemDataReq(wdiOemDataReqParams,
13637 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070013638
13639 if(IS_WDI_STATUS_FAILURE(status))
13640 {
13641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13642 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013643 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13644 vos_mem_free(pWdaParams->wdaMsgParam);
13645 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070013646 }
13647 return CONVERT_WDI2VOS_STATUS(status) ;
13648}
13649#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070013650/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013651 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013652 *
13653 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013654void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013655{
13656 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013658 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013659 if(NULL == pWdaParams)
13660 {
13661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013662 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013663 VOS_ASSERT(0) ;
13664 return ;
13665 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013666
13667 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13668 vos_mem_free(pWdaParams->wdaMsgParam);
13669 vos_mem_free(pWdaParams);
13670
13671 return ;
13672}
13673/*
13674 * FUNCTION: WDA_SetTxPerTrackingReqCallback
13675 * Free memory.
13676 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
13677 */
13678void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
13679{
13680 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13681
13682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13683 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13684
13685 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070013686 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070013687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13688 "%s: pWdaParams received NULL", __func__);
13689 VOS_ASSERT(0);
13690 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070013691 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013692
13693 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070013694 {
13695 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -070013696 vos_mem_free(pWdaParams->wdaMsgParam);
13697 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013698 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013699
13700 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070013701}
Jeff Johnson295189b2012-06-20 16:38:30 -070013702#ifdef WLAN_FEATURE_GTK_OFFLOAD
13703/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013704 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013705 *
13706 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013707void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013708 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013709{
13710 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13711
13712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013713 "<------ %s " ,__func__);
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080013714 if(NULL == pWdaParams)
13715 {
13716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13717 "%s: pWdaParams received NULL", __func__);
13718 VOS_ASSERT(0);
13719 return;
13720 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013721
Jeff Johnson295189b2012-06-20 16:38:30 -070013722 vos_mem_free(pWdaParams->wdaMsgParam) ;
13723 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13724 vos_mem_free(pWdaParams) ;
13725
13726 //print a msg, nothing else to do
13727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013728 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070013729
13730 return ;
13731}
Yue Ma7f44bbe2013-04-12 11:47:39 -070013732/*
13733 * FUNCTION: WDA_GTKOffloadReqCallback
13734 * Free memory.
13735 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
13736 */
13737void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
13738{
13739 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013740
Yue Ma7f44bbe2013-04-12 11:47:39 -070013741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13742 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13743
13744 if(NULL == pWdaParams)
13745 {
13746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13747 "%s: pWdaParams received NULL", __func__);
13748 VOS_ASSERT(0);
13749 return;
13750 }
13751
13752 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13753 {
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053013754 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
13755 sizeof(WDI_GtkOffloadReqMsg));
13756 vos_mem_zero(pWdaParams->wdaMsgParam,
13757 sizeof(tSirGtkOffloadParams));
Yue Ma7f44bbe2013-04-12 11:47:39 -070013758 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13759 vos_mem_free(pWdaParams->wdaMsgParam);
13760 vos_mem_free(pWdaParams);
13761 }
13762
13763 return;
13764}
Jeff Johnson295189b2012-06-20 16:38:30 -070013765/*
13766 * FUNCTION: WDA_ProcessGTKOffloadReq
13767 * Request to WDI to set the filter to minimize unnecessary host wakeup due
13768 * to broadcast traffic (sta mode).
13769 */
13770VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
13771 tpSirGtkOffloadParams pGtkOffloadParams)
13772{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013773 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013774 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
13775 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
13776 sizeof(WDI_GtkOffloadReqMsg)) ;
13777 tWDA_ReqParams *pWdaParams ;
13778
13779 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013780 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013781
13782 if(NULL == wdiGtkOffloadReqMsg)
13783 {
13784 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013785 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013786 VOS_ASSERT(0);
13787 return VOS_STATUS_E_NOMEM;
13788 }
13789
13790 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13791 if(NULL == pWdaParams)
13792 {
13793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013794 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013795 VOS_ASSERT(0);
13796 vos_mem_free(wdiGtkOffloadReqMsg);
13797 return VOS_STATUS_E_NOMEM;
13798 }
13799
13800 //
13801 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
13802 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013803
13804 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013805 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013806
Jeff Johnson295189b2012-06-20 16:38:30 -070013807 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
13808 // Copy KCK
13809 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
13810 // Copy KEK
13811 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
13812 // Copy KeyReplayCounter
13813 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
13814 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
13815
Yue Ma7f44bbe2013-04-12 11:47:39 -070013816 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
13817 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013818
Jeff Johnson295189b2012-06-20 16:38:30 -070013819
13820 /* Store Params pass it to WDI */
13821 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
13822 pWdaParams->pWdaContext = pWDA;
13823 /* Store param pointer as passed in by caller */
13824 pWdaParams->wdaMsgParam = pGtkOffloadParams;
13825
Yue Ma7f44bbe2013-04-12 11:47:39 -070013826 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013827
13828 if(IS_WDI_STATUS_FAILURE(status))
13829 {
13830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13831 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053013832 vos_mem_zero(wdiGtkOffloadReqMsg, sizeof(WDI_GtkOffloadReqMsg));
13833 vos_mem_zero(pGtkOffloadParams, sizeof(tSirGtkOffloadParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070013834 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13835 vos_mem_free(pWdaParams->wdaMsgParam);
13836 vos_mem_free(pWdaParams);
13837 }
13838
13839 return CONVERT_WDI2VOS_STATUS(status) ;
13840}
13841
13842/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013843 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013844 *
13845 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013846void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013847 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013848{
13849 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13850 tWDA_CbContext *pWDA;
13851 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Nirav Shah374de6e2014-02-13 16:40:01 +053013852 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070013853 vos_msg_t vosMsg;
13854
13855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013856 "<------ %s " ,__func__);
Nirav Shah374de6e2014-02-13 16:40:01 +053013857
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080013858 if(NULL == pWdaParams)
13859 {
13860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13861 "%s: pWdaParams received NULL", __func__);
13862 VOS_ASSERT(0);
13863 return;
13864 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013865
Nirav Shah374de6e2014-02-13 16:40:01 +053013866 pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams));
13867 if(NULL == pGtkOffloadGetInfoRsp)
13868 {
13869 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13870 "%s: vos_mem_malloc failed ", __func__);
13871 VOS_ASSERT(0);
13872 return;
13873 }
13874
Jeff Johnson295189b2012-06-20 16:38:30 -070013875 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
13876 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
13877
13878 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
13879 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
13880
13881 /* Message Header */
13882 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
Kiran Kumar Lokerefdf42412013-07-17 17:40:58 -070013883 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013884
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013885 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
13886 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
13887 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
13888 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
13889 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070013890
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013891 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
13892 pwdiGtkOffloadGetInfoRsparams->bssId,
13893 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013894 /* VOS message wrapper */
13895 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
13896 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
13897 vosMsg.bodyval = 0;
13898
13899 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13900 {
13901 /* free the mem and return */
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053013902 vos_mem_zero(pGtkOffloadGetInfoRsp,
13903 sizeof(tSirGtkOffloadGetInfoRspParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070013904 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
13905 }
13906
13907 vos_mem_free(pWdaParams->wdaMsgParam) ;
13908 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13909 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013910
13911 return;
13912}
13913/*
13914 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
13915 * Free memory and send RSP back to SME.
13916 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
13917 */
13918void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
13919{
13920 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13921 vos_msg_t vosMsg;
13922
13923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13924 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13925
13926 if(NULL == pWdaParams)
13927 {
13928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13929 "%s: pWdaParams received NULL", __func__);
13930 VOS_ASSERT(0);
13931 return;
13932 }
13933
13934 /* VOS message wrapper */
13935 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
13936 vosMsg.bodyptr = NULL;
13937 vosMsg.bodyval = 0;
13938
13939 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13940 {
13941 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13942 vos_mem_free(pWdaParams->wdaMsgParam);
13943 vos_mem_free(pWdaParams);
13944 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
13945 }
13946
13947 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070013948}
13949#endif
13950
13951/*
13952 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
13953 * Request to WDI to set Tx Per Tracking configurations
13954 */
13955VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
13956{
13957 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070013958 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070013959 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
13960 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
13961 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
13962 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013964 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013965 if(NULL == pwdiSetTxPerTrackingReqParams)
13966 {
13967 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013968 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013969 vos_mem_free(pTxPerTrackingParams);
13970 VOS_ASSERT(0);
13971 return VOS_STATUS_E_NOMEM;
13972 }
13973 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13974 if(NULL == pWdaParams)
13975 {
13976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013977 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013978 vos_mem_free(pwdiSetTxPerTrackingReqParams);
13979 vos_mem_free(pTxPerTrackingParams);
13980 VOS_ASSERT(0);
13981 return VOS_STATUS_E_NOMEM;
13982 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013983 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
13984 pTxPerTrackingParams->ucTxPerTrackingEnable;
13985 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
13986 pTxPerTrackingParams->ucTxPerTrackingPeriod;
13987 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
13988 pTxPerTrackingParams->ucTxPerTrackingRatio;
13989 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
13990 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013991 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
13992 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013993 /* Store param pointer as passed in by caller */
13994 /* store Params pass it to WDI
13995 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
13996 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
13997 pWdaParams->pWdaContext = pWDA;
13998 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070013999 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014000 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070014001 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070014002 {
14003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14004 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070014005 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070014006 vos_mem_free(pWdaParams->wdaMsgParam) ;
14007 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14008 vos_mem_free(pWdaParams) ;
14009 }
Jeff Johnson43971f52012-07-17 12:26:56 -070014010 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014011
14012}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070014013/*
14014 * FUNCTION: WDA_HALDumpCmdCallback
14015 * Send the VOS complete .
14016 */
14017void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
14018 void* pUserData)
14019{
14020 tANI_U8 *buffer = NULL;
14021 tWDA_CbContext *pWDA = NULL;
Siddharth Bhal68115602015-01-18 20:44:55 +053014022 tWDA_HalDumpReqParams *pWdaParams = (tWDA_HalDumpReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014023 if(NULL == pWdaParams)
14024 {
14025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014026 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014027 VOS_ASSERT(0) ;
14028 return ;
14029 }
Bhargav Shah1a2cceb2016-03-28 11:56:10 +053014030
Sravan Kumar Kairamd400d962017-12-13 12:29:48 +053014031 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14032 "%s: WDA HALDUMP Rsp Received async: %d",
14033 __func__, pWdaParams->wdaHALDumpAsync);
Bhargav Shah1a2cceb2016-03-28 11:56:10 +053014034
Jeff Johnson295189b2012-06-20 16:38:30 -070014035 pWDA = pWdaParams->pWdaContext;
14036 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070014037 if(wdiRspParams->usBufferLen > 0)
14038 {
14039 /*Copy the Resp data to UMAC supplied buffer*/
14040 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
14041 }
Siddharth Bhal68115602015-01-18 20:44:55 +053014042
14043 if (!pWdaParams->wdaHALDumpAsync)
14044 {/* Indicate VOSS about the start complete */
14045 vos_WDAComplete_cback(pWDA->pVosContext);
14046 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014047 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14048 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014049 return ;
14050}
14051
Jeff Johnson295189b2012-06-20 16:38:30 -070014052/*
14053 * FUNCTION: WDA_ProcessHALDumpCmdReq
14054 * Send Dump command to WDI
14055 */
14056VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
14057 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
Siddharth Bhal68115602015-01-18 20:44:55 +053014058 tANI_U32 arg4, tANI_U8 *pBuffer, wpt_boolean async)
Jeff Johnson295189b2012-06-20 16:38:30 -070014059{
14060 WDI_Status status = WDI_STATUS_SUCCESS;
14061 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
14062 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
Siddharth Bhal68115602015-01-18 20:44:55 +053014063 tWDA_HalDumpReqParams *pWdaParams ;
14064
Jeff Johnson295189b2012-06-20 16:38:30 -070014065 pVosContextType pVosContext = NULL;
14066 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070014067 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
14068 (void *)pMac);
Katya Nigame4bafe02014-02-28 15:37:57 +053014069 if(pVosContext)
14070 {
14071 if (pVosContext->isLogpInProgress)
14072 {
14073 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
14074 "%s:LOGP in Progress. Ignore!!!", __func__);
14075 return VOS_STATUS_E_BUSY;
14076 }
14077 }
14078 else
14079 {
14080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14081 "%s: VOS Context Null", __func__);
14082 return VOS_STATUS_E_RESOURCES;
14083 }
14084
Siddharth Bhal68115602015-01-18 20:44:55 +053014085 if (NULL == pVosContext->pWDAContext)
14086 {
14087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14088 "%s: WDA Context Null", __func__);
14089 return VOS_STATUS_E_RESOURCES;
14090 }
Sravan Kumar Kairamd400d962017-12-13 12:29:48 +053014091
14092 vStatus = vos_event_reset(&(pVosContext->wdaCompleteEvent));
14093 if (VOS_STATUS_SUCCESS != vStatus)
14094 {
14095 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14096 "%s: Event reset failed - status %d", __func__, vStatus);
14097 return VOS_STATUS_E_FAILURE;
14098 }
14099
Siddharth Bhal68115602015-01-18 20:44:55 +053014100 pWdaParams = (tWDA_HalDumpReqParams *)vos_mem_malloc(sizeof(tWDA_HalDumpReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014101 if(NULL == pWdaParams)
14102 {
14103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014104 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014105 return VOS_STATUS_E_NOMEM;
14106 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014107 /* Allocate memory WDI request structure*/
14108 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
14109 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
14110 if(NULL == wdiHALDumpCmdReqParam)
14111 {
14112 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14113 "WDA HAL DUMP Command buffer alloc fail");
14114 vos_mem_free(pWdaParams);
14115 return WDI_STATUS_E_FAILURE;
14116 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014117 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070014118 /* Extract the arguments */
14119 wdiHalDumpCmdInfo->command = cmd;
14120 wdiHalDumpCmdInfo->argument1 = arg1;
14121 wdiHalDumpCmdInfo->argument2 = arg2;
14122 wdiHalDumpCmdInfo->argument3 = arg3;
14123 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070014124 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014125 pWdaParams->pWdaContext = pVosContext->pWDAContext;
Siddharth Bhal68115602015-01-18 20:44:55 +053014126 pWdaParams->wdaHALDumpAsync = async;
Jeff Johnson295189b2012-06-20 16:38:30 -070014127
14128 /* Response message will be passed through the buffer */
14129 pWdaParams->wdaMsgParam = (void *)pBuffer;
14130
14131 /* store Params pass it to WDI */
14132 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Bhargav Shah1a2cceb2016-03-28 11:56:10 +053014133
14134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14135 "%s: WDA HAL DUMP Command sent",__func__);
14136
Jeff Johnson295189b2012-06-20 16:38:30 -070014137 /* Send command to WDI */
Siddharth Bhal68115602015-01-18 20:44:55 +053014138 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback,
14139 pWdaParams);
14140 /* For Sync event only wait for rsp until completion of wdaCompleteEvent*/
14141 if (!async)
Jeff Johnson295189b2012-06-20 16:38:30 -070014142 {
Siddharth Bhal68115602015-01-18 20:44:55 +053014143 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent),
14144 WDA_DUMPCMD_WAIT_TIMEOUT );
14145 if ( vStatus != VOS_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -070014146 {
Siddharth Bhal68115602015-01-18 20:44:55 +053014147 if ( vStatus == VOS_STATUS_E_TIMEOUT )
14148 {
14149 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
14150 "%s: Timeout occurred before WDA_HALDUMP complete",__func__);
14151 }
14152 else
14153 {
14154 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
14155 "%s: WDA_HALDUMP reporting other error",__func__);
14156 }
Agrawal Ashish77855ee2016-09-06 13:04:06 +053014157 if (!(vos_isLoadUnloadInProgress() ||
14158 vos_is_logp_in_progress(VOS_MODULE_ID_VOSS, NULL)))
14159 VOS_BUG(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070014160 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014161 }
14162 return status;
14163}
Jeff Johnson295189b2012-06-20 16:38:30 -070014164#ifdef WLAN_FEATURE_GTK_OFFLOAD
14165/*
14166 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
14167 * Request to WDI to get GTK Offload Information
14168 */
14169VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
14170 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
14171{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053014172 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070014173 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
14174 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
14175 tWDA_ReqParams *pWdaParams ;
14176
14177 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
14178 {
14179 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014180 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014181 VOS_ASSERT(0);
14182 return VOS_STATUS_E_NOMEM;
14183 }
14184
14185 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14186 if(NULL == pWdaParams)
14187 {
14188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014189 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014190 VOS_ASSERT(0);
14191 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
14192 return VOS_STATUS_E_NOMEM;
14193 }
14194
Yue Ma7f44bbe2013-04-12 11:47:39 -070014195 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
14196 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014197
Jeff Johnson295189b2012-06-20 16:38:30 -070014198 /* Store Params pass it to WDI */
14199 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
14200 pWdaParams->pWdaContext = pWDA;
14201 /* Store param pointer as passed in by caller */
14202 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
14203
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014204 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053014205 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014206
Yue Ma7f44bbe2013-04-12 11:47:39 -070014207 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014208
14209 if(IS_WDI_STATUS_FAILURE(status))
14210 {
14211 /* failure returned by WDI API */
14212 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14213 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
14214 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14215 vos_mem_free(pWdaParams) ;
14216 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
14217 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
14218 }
14219
14220 return CONVERT_WDI2VOS_STATUS(status) ;
14221}
14222#endif // WLAN_FEATURE_GTK_OFFLOAD
14223
14224/*
Yue Mab9c86f42013-08-14 15:59:08 -070014225 * FUNCTION: WDA_ProcessAddPeriodicTxPtrnInd
14226 *
14227 */
14228VOS_STATUS WDA_ProcessAddPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
14229 tSirAddPeriodicTxPtrn *pAddPeriodicTxPtrnParams)
14230{
14231 WDI_Status wdiStatus;
14232 WDI_AddPeriodicTxPtrnParamsType *addPeriodicTxPtrnParams;
14233
14234 addPeriodicTxPtrnParams =
14235 vos_mem_malloc(sizeof(WDI_AddPeriodicTxPtrnParamsType));
14236
14237 if (NULL == addPeriodicTxPtrnParams)
14238 {
14239 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14240 "%s: Not able to allocate memory for addPeriodicTxPtrnParams!",
14241 __func__);
14242
14243 return VOS_STATUS_E_NOMEM;
14244 }
14245
14246 vos_mem_copy(&(addPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams),
14247 pAddPeriodicTxPtrnParams, sizeof(tSirAddPeriodicTxPtrn));
14248
14249 addPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
14250 addPeriodicTxPtrnParams->pUserData = pWDA;
14251
14252 wdiStatus = WDI_AddPeriodicTxPtrnInd(addPeriodicTxPtrnParams);
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(addPeriodicTxPtrnParams);
14266
14267 return CONVERT_WDI2VOS_STATUS(wdiStatus);
14268}
14269
14270/*
14271 * FUNCTION: WDA_ProcessDelPeriodicTxPtrnInd
14272 *
14273 */
14274VOS_STATUS WDA_ProcessDelPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
14275 tSirDelPeriodicTxPtrn *pDelPeriodicTxPtrnParams)
14276{
14277 WDI_Status wdiStatus;
14278 WDI_DelPeriodicTxPtrnParamsType *delPeriodicTxPtrnParams;
14279
14280 delPeriodicTxPtrnParams =
14281 vos_mem_malloc(sizeof(WDI_DelPeriodicTxPtrnParamsType));
14282
14283 if (NULL == delPeriodicTxPtrnParams)
14284 {
14285 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14286 "%s: Not able to allocate memory for delPeriodicTxPtrnParams!",
14287 __func__);
14288
14289 return VOS_STATUS_E_NOMEM;
14290 }
14291
14292 vos_mem_copy(&(delPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams),
14293 pDelPeriodicTxPtrnParams, sizeof(tSirDelPeriodicTxPtrn));
14294
14295 delPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
14296 delPeriodicTxPtrnParams->pUserData = pWDA;
14297
14298 wdiStatus = WDI_DelPeriodicTxPtrnInd(delPeriodicTxPtrnParams);
14299
14300 if (WDI_STATUS_PENDING == wdiStatus)
14301 {
14302 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14303 "Pending received for %s:%d", __func__, __LINE__ );
14304 }
14305 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
14306 {
14307 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14308 "Failure in %s:%d", __func__, __LINE__ );
14309 }
14310
14311 vos_mem_free(delPeriodicTxPtrnParams);
14312
14313 return CONVERT_WDI2VOS_STATUS(wdiStatus);
14314}
14315
Abhishek Singh00b71972016-01-07 10:51:04 +053014316/*
14317 * FUNCTION: WDA_ProcessRateUpdateInd
14318 *
14319 */
14320VOS_STATUS WDA_ProcessRateUpdateInd(tWDA_CbContext *pWDA,
14321 tSirRateUpdateInd *pRateUpdateParams)
14322{
14323 WDI_Status wdiStatus;
14324 WDI_RateUpdateIndParams rateUpdateParams;
14325
14326 vos_mem_copy(rateUpdateParams.bssid,
14327 pRateUpdateParams->bssid, sizeof(tSirMacAddr));
14328
14329 rateUpdateParams.ucastDataRateTxFlag =
14330 pRateUpdateParams->ucastDataRateTxFlag;
14331 rateUpdateParams.rmcDataRateTxFlag =
14332 pRateUpdateParams->rmcDataRateTxFlag;
14333 rateUpdateParams.mcastDataRate24GHzTxFlag =
14334 pRateUpdateParams->mcastDataRate24GHzTxFlag;
14335 rateUpdateParams.mcastDataRate5GHzTxFlag =
14336 pRateUpdateParams->mcastDataRate5GHzTxFlag;
14337
14338 rateUpdateParams.ucastDataRate = pRateUpdateParams->ucastDataRate;
14339 rateUpdateParams.rmcDataRate =
14340 pRateUpdateParams->rmcDataRate;
14341 rateUpdateParams.mcastDataRate24GHz = pRateUpdateParams->mcastDataRate24GHz;
14342 rateUpdateParams.mcastDataRate5GHz = pRateUpdateParams->mcastDataRate5GHz;
14343
14344 rateUpdateParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
14345 rateUpdateParams.pUserData = pWDA;
14346
14347 wdiStatus = WDI_RateUpdateInd(&rateUpdateParams);
14348
14349 if (WDI_STATUS_PENDING == wdiStatus)
14350 {
14351 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14352 "Pending received for %s:%d", __func__, __LINE__ );
14353 }
14354 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
14355 {
14356 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14357 "Failure in %s:%d", __func__, __LINE__ );
14358 }
14359
14360 vos_mem_free(pRateUpdateParams);
14361
14362 return CONVERT_WDI2VOS_STATUS(wdiStatus);
14363}
14364
14365
Rajeev79dbe4c2013-10-05 11:03:42 +053014366#ifdef FEATURE_WLAN_BATCH_SCAN
14367/*
14368 * FUNCTION: WDA_ProcessStopBatchScanInd
14369 *
14370 * DESCRIPTION: This function sends stop batch scan inidcation message to WDI
14371 *
14372 * PARAM:
14373 * pWDA: pointer to WDA context
14374 * pReq: pointer to stop batch scan request
14375 */
14376VOS_STATUS WDA_ProcessStopBatchScanInd(tWDA_CbContext *pWDA,
14377 tSirStopBatchScanInd *pReq)
14378{
14379 WDI_Status wdiStatus;
14380 WDI_StopBatchScanIndType wdiReq;
14381
14382 wdiReq.param = pReq->param;
14383
14384 wdiStatus = WDI_StopBatchScanInd(&wdiReq);
14385
14386 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
14387 {
14388 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14389 "Stop batch scan ind failed %s:%d", __func__, wdiStatus);
14390 }
14391
14392 vos_mem_free(pReq);
14393
14394 return CONVERT_WDI2VOS_STATUS(wdiStatus);
14395}
14396/*==========================================================================
14397 FUNCTION WDA_ProcessTriggerBatchScanResultInd
14398
14399 DESCRIPTION
14400 API to pull batch scan result from FW
14401
14402 PARAMETERS
14403 pWDA: Pointer to WDA context
14404 pGetBatchScanReq: Pointer to get batch scan result indication
14405
14406 RETURN VALUE
14407 NONE
14408
14409===========================================================================*/
14410VOS_STATUS WDA_ProcessTriggerBatchScanResultInd(tWDA_CbContext *pWDA,
14411 tSirTriggerBatchScanResultInd *pReq)
14412{
14413 WDI_Status wdiStatus;
14414 WDI_TriggerBatchScanResultIndType wdiReq;
14415
14416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
14417 "------> %s " ,__func__);
14418
14419 wdiReq.param = pReq->param;
14420
14421 wdiStatus = WDI_TriggerBatchScanResultInd(&wdiReq);
14422
14423 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
14424 {
14425 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14426 "Trigger batch scan result ind failed %s:%d",
14427 __func__, wdiStatus);
14428 }
14429
14430 vos_mem_free(pReq);
14431
14432 return CONVERT_WDI2VOS_STATUS(wdiStatus);
14433}
14434
14435/*==========================================================================
14436 FUNCTION WDA_SetBatchScanRespCallback
14437
14438 DESCRIPTION
14439 API to process set batch scan response from FW
14440
14441 PARAMETERS
14442 pRsp: Pointer to set batch scan response
14443 pUserData: Pointer to user data
14444
14445 RETURN VALUE
14446 NONE
14447
14448===========================================================================*/
14449void WDA_SetBatchScanRespCallback
14450(
14451 WDI_SetBatchScanRspType *pRsp,
14452 void* pUserData
14453)
14454{
14455 tSirSetBatchScanRsp *pHddSetBatchScanRsp;
14456 tpAniSirGlobal pMac;
14457 void *pCallbackContext;
14458 tWDA_CbContext *pWDA = NULL ;
14459 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14460
14461
14462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
14463 "<------ %s " ,__func__);
14464 if (NULL == pWdaParams)
14465 {
14466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14467 "%s: pWdaParams received NULL", __func__);
14468 VOS_ASSERT(0) ;
14469 return ;
14470 }
14471
14472 /*extract WDA context*/
14473 pWDA = pWdaParams->pWdaContext;
14474 if (NULL == pWDA)
14475 {
14476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14477 "%s:pWDA is NULL can't invole HDD callback",
14478 __func__);
14479 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14480 vos_mem_free(pWdaParams->wdaMsgParam);
14481 vos_mem_free(pWdaParams);
14482 VOS_ASSERT(0);
14483 return;
14484 }
14485
14486 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14487 vos_mem_free(pWdaParams->wdaMsgParam);
14488 vos_mem_free(pWdaParams);
14489
14490 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14491 if (NULL == pMac)
14492 {
14493 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14494 "%s:pMac is NULL", __func__);
14495 VOS_ASSERT(0);
14496 return;
14497 }
14498
14499 pHddSetBatchScanRsp =
14500 (tSirSetBatchScanRsp *)vos_mem_malloc(sizeof(tSirSetBatchScanRsp));
14501 if (NULL == pHddSetBatchScanRsp)
14502 {
14503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14504 "%s: VOS MEM Alloc Failure can't invoke HDD callback", __func__);
14505 VOS_ASSERT(0);
14506 return;
14507 }
14508
14509 pHddSetBatchScanRsp->nScansToBatch = pRsp->nScansToBatch;
14510
14511 pCallbackContext = pMac->pmc.setBatchScanReqCallbackContext;
14512 /*call hdd callback with set batch scan response data*/
14513 if(pMac->pmc.setBatchScanReqCallback)
14514 {
14515 pMac->pmc.setBatchScanReqCallback(pCallbackContext, pHddSetBatchScanRsp);
14516 }
14517 else
14518 {
14519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14520 "%s:HDD callback is null", __func__);
14521 VOS_ASSERT(0);
14522 }
14523
14524 vos_mem_free(pHddSetBatchScanRsp);
14525 return ;
14526}
14527
14528/*==========================================================================
14529 FUNCTION WDA_ProcessSetBatchScanReq
14530
14531 DESCRIPTION
14532 API to send set batch scan request to WDI
14533
14534 PARAMETERS
14535 pWDA: Pointer to WDA context
14536 pSetBatchScanReq: Pointer to set batch scan req
14537
14538 RETURN VALUE
14539 NONE
14540
14541===========================================================================*/
14542VOS_STATUS WDA_ProcessSetBatchScanReq(tWDA_CbContext *pWDA,
14543 tSirSetBatchScanReq *pSetBatchScanReq)
14544{
14545 WDI_Status status;
14546 tWDA_ReqParams *pWdaParams ;
14547 WDI_SetBatchScanReqType *pWdiSetBatchScanReq;
14548
14549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
14550 "------> %s " ,__func__);
14551
14552 pWdiSetBatchScanReq =
14553 (WDI_SetBatchScanReqType *)vos_mem_malloc(sizeof(WDI_SetBatchScanReqType));
14554 if (NULL == pWdiSetBatchScanReq)
14555 {
14556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14557 "%s: VOS MEM Alloc Failure", __func__);
14558 vos_mem_free(pSetBatchScanReq);
14559 VOS_ASSERT(0);
14560 return VOS_STATUS_E_NOMEM;
14561 }
14562
14563 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
14564 if (NULL == pWdaParams)
14565 {
14566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14567 "%s: VOS MEM Alloc Failure", __func__);
14568 VOS_ASSERT(0);
14569 vos_mem_free(pSetBatchScanReq);
14570 vos_mem_free(pWdiSetBatchScanReq);
14571 return VOS_STATUS_E_NOMEM;
14572 }
14573
14574 pWdiSetBatchScanReq->scanFrequency = pSetBatchScanReq->scanFrequency;
14575 pWdiSetBatchScanReq->numberOfScansToBatch =
14576 pSetBatchScanReq->numberOfScansToBatch;
14577 pWdiSetBatchScanReq->bestNetwork = pSetBatchScanReq->bestNetwork;
14578 pWdiSetBatchScanReq->rfBand = pSetBatchScanReq->rfBand;
14579 pWdiSetBatchScanReq->rtt = pSetBatchScanReq->rtt;
14580
14581 pWdaParams->wdaWdiApiMsgParam = pWdiSetBatchScanReq;
14582 pWdaParams->pWdaContext = pWDA;
14583 pWdaParams->wdaMsgParam = pSetBatchScanReq;
14584
14585 status = WDI_SetBatchScanReq(pWdiSetBatchScanReq, pWdaParams,
14586 (WDI_SetBatchScanCb)WDA_SetBatchScanRespCallback);
14587 if (IS_WDI_STATUS_FAILURE(status))
14588 {
14589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14590 "Failure in Set Batch Scan REQ WDI API, free all the memory " );
14591 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14592 vos_mem_free(pWdaParams->wdaMsgParam);
14593 vos_mem_free(pWdaParams);
14594 }
14595 return CONVERT_WDI2VOS_STATUS(status);
14596}
14597
14598#endif
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053014599/*
14600 * FUNCTION: WDA_ProcessHT40OBSSScanInd
14601 *
14602 * DESCRIPTION: This function sends start/update OBSS scan
14603 * inidcation message to WDI
14604 *
14605 * PARAM:
14606 * pWDA: pointer to WDA context
14607 * pReq: pointer to start OBSS scan request
14608 */
14609VOS_STATUS WDA_ProcessHT40OBSSScanInd(tWDA_CbContext *pWDA,
14610 tSirHT40OBSSScanInd *pReq)
14611{
14612 WDI_Status status;
14613 WDI_HT40ObssScanParamsType wdiOBSSScanParams;
14614 WDI_HT40ObssScanIndType *pWdiOBSSScanInd;
Rajeev79dbe4c2013-10-05 11:03:42 +053014615
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053014616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14617 "------> %s " ,__func__);
14618 wdiOBSSScanParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
14619 wdiOBSSScanParams.pUserData = pWDA;
14620
14621 pWdiOBSSScanInd = &(wdiOBSSScanParams.wdiHT40ObssScanParam);
14622 pWdiOBSSScanInd->cmdType = pReq->cmdType;
14623 pWdiOBSSScanInd->scanType = pReq->scanType;
14624 pWdiOBSSScanInd->OBSSScanActiveDwellTime =
14625 pReq->OBSSScanActiveDwellTime;
14626 pWdiOBSSScanInd->OBSSScanPassiveDwellTime =
14627 pReq->OBSSScanPassiveDwellTime;
14628 pWdiOBSSScanInd->BSSChannelWidthTriggerScanInterval =
14629 pReq->BSSChannelWidthTriggerScanInterval;
14630 pWdiOBSSScanInd->BSSWidthChannelTransitionDelayFactor =
14631 pReq->BSSWidthChannelTransitionDelayFactor;
14632 pWdiOBSSScanInd->OBSSScanActiveTotalPerChannel =
14633 pReq->OBSSScanActiveTotalPerChannel;
14634 pWdiOBSSScanInd->OBSSScanPassiveTotalPerChannel =
14635 pReq->OBSSScanPassiveTotalPerChannel;
14636 pWdiOBSSScanInd->OBSSScanActivityThreshold =
14637 pReq->OBSSScanActivityThreshold;
14638 pWdiOBSSScanInd->channelCount = pReq->channelCount;
14639 vos_mem_copy(pWdiOBSSScanInd->channels,
14640 pReq->channels,
14641 pReq->channelCount);
14642 pWdiOBSSScanInd->selfStaIdx = pReq->selfStaIdx;
14643 pWdiOBSSScanInd->fortyMHZIntolerent = pReq->fortyMHZIntolerent;
14644 pWdiOBSSScanInd->bssIdx = pReq->bssIdx;
14645 pWdiOBSSScanInd->currentOperatingClass = pReq->currentOperatingClass;
14646 pWdiOBSSScanInd->ieFieldLen = pReq->ieFieldLen;
14647
14648 vos_mem_copy(pWdiOBSSScanInd->ieField,
14649 pReq->ieField,
14650 pReq->ieFieldLen);
14651
14652 status = WDI_HT40OBSSScanInd(&wdiOBSSScanParams);
14653 if (WDI_STATUS_PENDING == status)
14654 {
14655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14656 "Pending received for %s:%d ",__func__,__LINE__ );
14657 }
14658 else if (WDI_STATUS_SUCCESS_SYNC != status)
14659 {
14660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14661 "Failure in %s:%d ",__func__,__LINE__ );
14662 }
14663 return CONVERT_WDI2VOS_STATUS(status) ;
14664}
14665/*
14666 * FUNCTION: WDA_ProcessHT40OBSSStopScanInd
14667 *
14668 * DESCRIPTION: This function sends stop OBSS scan inidcation message to WDI
14669 *
14670 * PARAM:
14671 * pWDA: pointer to WDA context
14672 * pReq: pointer to stop batch scan request
14673 */
14674VOS_STATUS WDA_ProcessHT40OBSSStopScanInd(tWDA_CbContext *pWDA,
14675 tANI_U8 *bssIdx)
14676{
14677 WDI_Status status;
14678
14679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14680 "------> %s " ,__func__);
14681
14682 status = WDI_HT40OBSSStopScanInd(*bssIdx);
14683 if (WDI_STATUS_PENDING == status)
14684 {
14685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14686 "Pending received for %s:%d ",__func__,__LINE__ );
14687 }
14688 else if (WDI_STATUS_SUCCESS_SYNC != status)
14689 {
14690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14691 "Failure in %s:%d ",__func__,__LINE__ );
14692 }
14693 return CONVERT_WDI2VOS_STATUS(status) ;
14694}
Yue Mab9c86f42013-08-14 15:59:08 -070014695/*
Jeff Johnson295189b2012-06-20 16:38:30 -070014696 * -------------------------------------------------------------------------
14697 * DATA interface with WDI for Mgmt Frames
14698 * -------------------------------------------------------------------------
14699 */
Jeff Johnson295189b2012-06-20 16:38:30 -070014700/*
14701 * FUNCTION: WDA_TxComplete
14702 * Callback function for the WDA_TxPacket
14703 */
14704VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
14705 VOS_STATUS status )
14706{
14707
14708 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
14709 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014710 uintptr_t uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014711
Mihir Shete63341222015-03-24 15:39:18 +053014712 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Enter:%s", __func__);
14713
Jeff Johnson295189b2012-06-20 16:38:30 -070014714 if(NULL == wdaContext)
14715 {
14716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14717 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014718 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014719 VOS_ASSERT(0);
Sushant Kaushik8355d202014-12-17 16:48:10 +053014720 vos_pkt_return_packet(pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070014721 return VOS_STATUS_E_FAILURE;
14722 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070014723
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014724 vos_lock_acquire(&wdaContext->mgmt_pkt_lock);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070014725 /*Check if frame was timed out or not*/
14726 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
14727 (v_PVOID_t)&uUserData);
14728
14729 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
14730 {
14731 /*Discard frame - no further processing is needed*/
Mihir Shete63341222015-03-24 15:39:18 +053014732 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
14733 "%s: MGMT Frame Tx timed out",
14734 __func__);
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014735 vos_pkt_return_packet(pData);
14736 vos_lock_release(&wdaContext->mgmt_pkt_lock);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070014737 return VOS_STATUS_SUCCESS;
14738 }
14739
Jeff Johnson295189b2012-06-20 16:38:30 -070014740 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
14741 if( NULL!=wdaContext->pTxCbFunc)
14742 {
14743 /*check if packet is freed already*/
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053014744 if(vos_atomic_set((uintptr_t*)&wdaContext->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED) == (uintptr_t)pData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014745 {
14746 wdaContext->pTxCbFunc(pMac, pData);
14747 }
14748 else
14749 {
14750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Jeff Johnson2ef57602017-09-19 08:31:46 -070014751 "%s:packet (%pK) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014752 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070014753 //Return from here since we reaching here because the packet already timeout
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014754 vos_lock_release(&wdaContext->mgmt_pkt_lock);
Jeff Johnson295189b2012-06-20 16:38:30 -070014755 return status;
14756 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014757 }
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014758 else {
14759 wdaContext->mgmt_pktfree_fail++;
14760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson2ef57602017-09-19 08:31:46 -070014761 "%s:packet (%pK) userData (%lx) is not freed",
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014762 __func__, pData, uUserData);
14763 }
14764 vos_lock_release(&wdaContext->mgmt_pkt_lock);
Jeff Johnson295189b2012-06-20 16:38:30 -070014765
14766 /*
14767 * Trigger the event to bring the HAL TL Tx complete function to come
14768 * out of wait
14769 * Let the coe above to complete the packet first. When this event is set,
14770 * the thread waiting for the event may run and set Vospacket_freed causing the original
14771 * packet not being freed.
14772 */
14773 status = vos_event_set(&wdaContext->txFrameEvent);
14774 if(!VOS_IS_STATUS_SUCCESS(status))
14775 {
14776 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014777 "NEW VOS Event Set failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014778 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014779 return status;
14780}
Jeff Johnson295189b2012-06-20 16:38:30 -070014781/*
14782 * FUNCTION: WDA_TxPacket
14783 * Forward TX management frame to WDI
14784 */
14785VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
14786 void *pFrmBuf,
14787 tANI_U16 frmLen,
14788 eFrameType frmType,
14789 eFrameTxDir txDir,
14790 tANI_U8 tid,
14791 pWDATxRxCompFunc pCompFunc,
14792 void *pData,
14793 pWDAAckFnTxComp pAckTxComp,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053014794 tANI_U32 txFlag,
14795 tANI_U32 txBdToken
14796 )
Jeff Johnson295189b2012-06-20 16:38:30 -070014797{
14798 VOS_STATUS status = VOS_STATUS_SUCCESS ;
14799 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
14800 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
14801 tANI_U8 eventIdx = 0;
14802 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
14803 tpAniSirGlobal pMac;
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053014804 tpSirTxBdStatus txBdStatus = {0};
Abhishek Singhe721fb42015-11-30 14:22:10 +053014805 v_TIME_t time_snapshot;
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053014806
Jeff Johnson295189b2012-06-20 16:38:30 -070014807 if((NULL == pWDA)||(NULL == pFrmBuf))
14808 {
14809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson2ef57602017-09-19 08:31:46 -070014810 "%s:pWDA %pK or pFrmBuf %pK is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014811 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070014812 VOS_ASSERT(0);
14813 return VOS_STATUS_E_FAILURE;
14814 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014815
Jeff Johnson295189b2012-06-20 16:38:30 -070014816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Jeff Johnson2ef57602017-09-19 08:31:46 -070014817 "Tx Mgmt Frame Subtype: %d alloc(%pK) txBdToken = %u",
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053014818 pFc->subType, pFrmBuf, txBdToken);
Jeff Johnson295189b2012-06-20 16:38:30 -070014819 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14820 if(NULL == pMac)
14821 {
14822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014823 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014824 VOS_ASSERT(0);
14825 return VOS_STATUS_E_FAILURE;
14826 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014827
Jeff Johnson295189b2012-06-20 16:38:30 -070014828 /* store the call back function in WDA context */
14829 pWDA->pTxCbFunc = pCompFunc;
14830 /* store the call back for the function of ackTxComplete */
14831 if( pAckTxComp )
14832 {
Jeff Johnsone7245742012-09-05 17:12:55 -070014833 if( NULL != pWDA->pAckTxCbFunc )
14834 {
14835 /* Already TxComp is active no need to active again */
Agarwal Ashish3b3f3cb2015-07-02 16:43:47 +053014836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014837 "There is already one request pending for tx complete");
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053014838 pWDA->pAckTxCbFunc( pMac, &txBdStatus);
Jeff Johnsone7245742012-09-05 17:12:55 -070014839 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070014840
Jeff Johnsone7245742012-09-05 17:12:55 -070014841 if( VOS_STATUS_SUCCESS !=
14842 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14843 {
14844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14845 "Tx Complete timeout Timer Stop Failed ");
14846 }
14847 else
14848 {
Agarwal Ashish3b3f3cb2015-07-02 16:43:47 +053014849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080014850 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070014851 }
14852 }
14853
14854 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
14855 pWDA->pAckTxCbFunc = pAckTxComp;
14856 if( VOS_STATUS_SUCCESS !=
14857 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
14858 {
14859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14860 "Tx Complete Timer Start Failed ");
14861 pWDA->pAckTxCbFunc = NULL;
14862 return eHAL_STATUS_FAILURE;
14863 }
14864 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014865 /* Reset the event to be not signalled */
14866 status = vos_event_reset(&pWDA->txFrameEvent);
14867 if(!VOS_IS_STATUS_SUCCESS(status))
14868 {
14869 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014870 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014871 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
14872 if( pAckTxComp )
14873 {
14874 pWDA->pAckTxCbFunc = NULL;
14875 if( VOS_STATUS_SUCCESS !=
14876 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14877 {
14878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14879 "Tx Complete timeout Timer Stop Failed ");
14880 }
14881 }
14882 return VOS_STATUS_E_FAILURE;
14883 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014884
14885 /* If Peer Sta mask is set don't overwrite to self sta */
14886 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070014887 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014888 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070014889 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014890 else
14891 {
Ganesh K08bce952012-12-13 15:04:41 -080014892 /* Get system role, use the self station if in unknown role or STA role */
14893 systemRole = wdaGetGlobalSystemRole(pMac);
14894 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
14895 (( eSYSTEM_STA_ROLE == systemRole )
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080014896#if defined FEATURE_WLAN_ESE || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080014897 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014898#endif
Ganesh K08bce952012-12-13 15:04:41 -080014899 ))
14900 {
14901 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
14902 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080014903 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014904
Jeff Johnsone7245742012-09-05 17:12:55 -070014905 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
14906 disassoc frame reaches the HW, HAL has already deleted the peer station */
14907 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070014908 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080014909 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070014910 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070014911 {
Jeff Johnson295189b2012-06-20 16:38:30 -070014912 /*Send Probe request frames on self sta idx*/
14913 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070014914 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014915 /* Since we donot want probe responses to be retried, send probe responses
14916 through the NO_ACK queues */
14917 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
14918 {
14919 //probe response is sent out using self station and no retries options.
14920 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
14921 }
14922 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
14923 {
14924 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
14925 }
14926 }
Pradeep Reddy POTTETI01710062015-06-29 13:35:53 +053014927#ifdef FEATURE_WLAN_TDLS
14928 /* TDLS Management frames are sent using Peer Sta mask */
14929 else if ((pFc->type == SIR_MAC_DATA_FRAME) &&
14930 (txFlag & HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME))
14931 {
14932 txFlag |= HAL_USE_PEER_STA_REQUESTED_MASK;
14933
14934 }
14935#endif
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053014936 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
Jeff Johnson295189b2012-06-20 16:38:30 -070014937
14938 /*Set frame tag to 0
14939 We will use the WDA user data in order to tag a frame as expired*/
14940 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
14941 (v_PVOID_t)0);
14942
14943
14944 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053014945 frmLen, ucTypeSubType, tid, WDA_TxComplete, NULL, txFlag,
14946 txBdToken))!= VOS_STATUS_SUCCESS)
Jeff Johnson295189b2012-06-20 16:38:30 -070014947 {
14948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014949 "Sending Mgmt Frame failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014950 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053014951 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 -070014952 if( pAckTxComp )
14953 {
14954 pWDA->pAckTxCbFunc = NULL;
14955 if( VOS_STATUS_SUCCESS !=
14956 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14957 {
14958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14959 "Tx Complete timeout Timer Stop Failed ");
14960 }
14961 }
14962 return VOS_STATUS_E_FAILURE;
14963 }
Abhishek Singhe721fb42015-11-30 14:22:10 +053014964 time_snapshot = vos_timer_get_system_time();
Jeff Johnson295189b2012-06-20 16:38:30 -070014965 /*
14966 * Wait for the event to be set by the TL, to get the response of TX
14967 * complete, this event should be set by the Callback function called by TL
14968 */
14969 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
14970 &eventIdx);
14971 if(!VOS_IS_STATUS_SUCCESS(status))
14972 {
14973 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14974 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014975 __func__, status);
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014976 vos_lock_acquire(&pWDA->mgmt_pkt_lock);
Sushant Kaushik8355d202014-12-17 16:48:10 +053014977 /*Tag Frame as timed out for later deletion*/
14978 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
14979 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
Jeff Johnson295189b2012-06-20 16:38:30 -070014980 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
14981 after the packet gets completed(packet freed once)*/
14982
Sravan Kumar Kairambe037222016-06-19 12:56:24 +053014983 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED);
14984
14985 /*
14986 * Memory barrier to ensure pFrmBuf is set before TX thread access it in
14987 * TX completion call back
14988 */
14989 VOS_SMP_MB;
14990 vos_lock_release(&pWDA->mgmt_pkt_lock);
14991
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070014992 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
Katya Nigam53677462014-08-04 11:37:28 +053014993 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070014994
Abhishek Singh837adf22015-10-01 17:37:37 +053014995 if (vos_isFatalEventEnabled())
14996 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
14997 WLAN_LOG_INDICATOR_HOST_DRIVER,
14998 WLAN_LOG_REASON_MGMT_FRAME_TIMEOUT,
14999 FALSE, TRUE);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070015000
Jeff Johnson295189b2012-06-20 16:38:30 -070015001 if( pAckTxComp )
15002 {
15003 pWDA->pAckTxCbFunc = NULL;
15004 if( VOS_STATUS_SUCCESS !=
15005 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
15006 {
15007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15008 "Tx Complete timeout Timer Stop Failed ");
15009 }
15010 }
Abhishek Singhe721fb42015-11-30 14:22:10 +053015011 pWDA->mgmtTxfailureCnt++;
15012
Sravan Kumar Kairam1113ee72017-01-06 14:52:09 +053015013 /* Request firmware recovery */
15014 if (WDA_TX_FW_RECOVERY_THRESHOLD ==
15015 pWDA->mgmtTxfailureCnt)
15016 {
15017 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15018 "%s: Request firmware for recovery", __func__);
15019 WLANTL_TLDebugMessage(WLANTL_DEBUG_FW_CLEANUP);
15020 }
15021
Abhishek Singhe721fb42015-11-30 14:22:10 +053015022 /* SSR if timeout continously for
15023 * WDA_TX_FAILURE_RECOVERY_THRESHOLD times.
15024 */
15025 if (WDA_TX_FAILURE_RECOVERY_THRESHOLD ==
15026 pWDA->mgmtTxfailureCnt)
15027 {
Sravan Kumar Kairam1113ee72017-01-06 14:52:09 +053015028 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15029 "%s: Request system recovery", __func__);
Abhishek Singhe721fb42015-11-30 14:22:10 +053015030 vos_wlanRestart();
15031 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015032 status = VOS_STATUS_E_FAILURE;
15033 }
Abhishek Singhe721fb42015-11-30 14:22:10 +053015034
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +053015035#ifdef WLAN_DUMP_MGMTFRAMES
15036 if (VOS_IS_STATUS_SUCCESS(status))
15037 {
15038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15039 "%s() TX packet : SubType %d", __func__,pFc->subType);
15040 VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15041 pData, frmLen);
15042 }
15043#endif
15044
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080015045 if (VOS_IS_STATUS_SUCCESS(status))
15046 {
Abhishek Singhe721fb42015-11-30 14:22:10 +053015047 pWDA->mgmtTxfailureCnt = 0;
15048 if ((vos_timer_get_system_time() - time_snapshot) >=
15049 WDA_TX_TIME_THRESHOLD)
15050 {
15051 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15052 "Tx Complete took %lu ms",
15053 vos_timer_get_system_time() - time_snapshot);
15054 }
15055
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080015056 if (pMac->fEnableDebugLog & 0x1)
15057 {
15058 if ((pFc->type == SIR_MAC_MGMT_FRAME) &&
15059 (pFc->subType != SIR_MAC_MGMT_PROBE_REQ) &&
15060 (pFc->subType != SIR_MAC_MGMT_PROBE_RSP))
15061 {
15062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "TX MGMT - Type %hu, SubType %hu",
15063 pFc->type, pFc->subType);
15064 }
15065 }
15066 }
15067
15068
Jeff Johnson295189b2012-06-20 16:38:30 -070015069 return status;
15070}
Jeff Johnson295189b2012-06-20 16:38:30 -070015071/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015072 * FUNCTION: WDA_ProcessDHCPStartInd
15073 * Forward DHCP Start to WDI
15074 */
15075static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
15076 tAniDHCPInd *dhcpStartInd)
15077{
15078 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053015079 WDI_DHCPInd wdiDHCPInd;
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015080
c_hpothu0b0cab72014-02-13 21:52:40 +053015081 wdiDHCPInd.device_mode = dhcpStartInd->device_mode;
15082 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStartInd->macAddr,
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015083 sizeof(tSirMacAddr));
15084
c_hpothu0b0cab72014-02-13 21:52:40 +053015085 status = WDI_dhcpStartInd(&wdiDHCPInd);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015086
c_hpothu0b0cab72014-02-13 21:52:40 +053015087 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015088 {
c_hpothu0b0cab72014-02-13 21:52:40 +053015089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15090 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015091 }
c_hpothu0b0cab72014-02-13 21:52:40 +053015092 else if (WDI_STATUS_SUCCESS_SYNC != status)
15093 {
15094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15095 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
15096 }
15097
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015098 vos_mem_free(dhcpStartInd);
15099 return CONVERT_WDI2VOS_STATUS(status) ;
15100}
15101
15102 /*
15103 * FUNCTION: WDA_ProcessDHCPStopInd
15104 * Forward DHCP Stop to WDI
15105 */
15106 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
15107 tAniDHCPInd *dhcpStopInd)
15108 {
15109 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053015110 WDI_DHCPInd wdiDHCPInd;
15111
15112 wdiDHCPInd.device_mode = dhcpStopInd->device_mode;
15113 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
15114
15115 status = WDI_dhcpStopInd(&wdiDHCPInd);
15116
15117 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015118 {
c_hpothu0b0cab72014-02-13 21:52:40 +053015119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15120 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015121 }
c_hpothu0b0cab72014-02-13 21:52:40 +053015122 else if (WDI_STATUS_SUCCESS_SYNC != status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015123 {
c_hpothu0b0cab72014-02-13 21:52:40 +053015124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15125 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015126 }
c_hpothu0b0cab72014-02-13 21:52:40 +053015127
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015128 vos_mem_free(dhcpStopInd);
c_hpothu0b0cab72014-02-13 21:52:40 +053015129
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015130 return CONVERT_WDI2VOS_STATUS(status) ;
15131 }
15132
Abhishek Singh00b71972016-01-07 10:51:04 +053015133#ifdef WLAN_FEATURE_RMC
15134
15135void
15136WDA_RMCRulerRspCallback(WDI_RmcRspParamsType *wdiRmcResponse, void *pUserData)
15137{
15138 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15139 tWDA_CbContext *pWDA = pWdaParams->pWdaContext;
15140
15141 switch (wdiRmcResponse->cmd)
15142 {
15143 case eWDI_BECOME_RULER_CMD :
15144 {
15145 tSirRmcBecomeRulerInd *pRmcBecomeRulerInd;
15146
15147 pRmcBecomeRulerInd = (tSirRmcBecomeRulerInd *)
15148 vos_mem_malloc(sizeof(*pRmcBecomeRulerInd));
15149
15150 if (NULL == pRmcBecomeRulerInd)
15151 {
15152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15153 "%s: unable to allocate pRmcBecomeRulerInd", __func__);
15154 break;
15155 }
15156
15157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15158 "Received eWDI_BECOME_RULER_CMD from WDI");
15159
15160 pRmcBecomeRulerInd->status = wdiRmcResponse->status;
15161
15162 vos_mem_copy(pRmcBecomeRulerInd->mcastTransmitter,
15163 wdiRmcResponse->mcastTransmitter,
15164 sizeof(tSirMacAddr));
15165 vos_mem_copy(pRmcBecomeRulerInd->mcastGroup,
15166 wdiRmcResponse->mcastGroup,
15167 sizeof(tSirMacAddr));
15168
15169 WDA_SendMsg(pWDA, WDA_RMC_BECOME_RULER,
15170 (void *)pRmcBecomeRulerInd, 0) ;
15171 break;
15172 }
15173 case eWDI_SUGGEST_RULER_CMD :
15174 {
15175 tSirRmcRulerSelectInd *pRmcRulerSelectInd;
15176
15177 pRmcRulerSelectInd = (tSirRmcRulerSelectInd *)
15178 vos_mem_malloc(sizeof(tSirRmcRulerSelectInd));
15179
15180 if (NULL == pRmcRulerSelectInd)
15181 {
15182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15183 "%s: unable to allocate pRmcRulerSelectInd", __func__);
15184 break;
15185 }
15186
15187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15188 "Received eWDI_SUGGEST_RULER_CMD from WDI");
15189
15190 pRmcRulerSelectInd->status = wdiRmcResponse->status;
15191
15192 vos_mem_copy(pRmcRulerSelectInd->mcastTransmitter,
15193 wdiRmcResponse->mcastTransmitter,
15194 sizeof(tSirMacAddr));
15195 vos_mem_copy(pRmcRulerSelectInd->mcastGroup,
15196 wdiRmcResponse->mcastGroup,
15197 sizeof(tSirMacAddr));
15198 vos_mem_copy(pRmcRulerSelectInd->ruler,
15199 wdiRmcResponse->ruler,
15200 sizeof(pRmcRulerSelectInd->ruler));
15201
15202 WDA_SendMsg(pWDA, WDA_RMC_RULER_SELECT_RESP,
15203 (void *)pRmcRulerSelectInd, 0) ;
15204 break;
15205 }
15206 }
15207
15208 /* free the config structure */
15209 if (pWdaParams->wdaWdiApiMsgParam != NULL)
15210 {
15211 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15212 }
15213 vos_mem_free(pWdaParams->wdaMsgParam);
15214 vos_mem_free(pWdaParams);
15215
15216}
15217
15218void WDA_RMCRulerReqCallback(WDI_Status wdiStatus, void* pUserData)
15219{
15220 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15221
15222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15223 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15224
15225 if (NULL == pWdaParams)
15226 {
15227 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15228 "%s: pWdaParams received NULL", __func__);
15229 VOS_ASSERT(0);
15230 return;
15231 }
15232
15233 if (IS_WDI_STATUS_FAILURE(wdiStatus))
15234 {
15235 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15236 vos_mem_free(pWdaParams->wdaMsgParam);
15237 vos_mem_free(pWdaParams);
15238 }
15239
15240 return;
15241}
15242
15243static VOS_STATUS
15244WDA_ProcessRMCRulerReq(tWDA_CbContext *pWDA,
15245 tSirRmcRulerReq *rmcRulerReq)
15246{
15247 WDI_Status status;
15248 WDI_RmcRulerReqParams *wdiRulerReq;
15249 tWDA_ReqParams *pWdaParams;
15250
15251 wdiRulerReq = (WDI_RmcRulerReqParams *)
15252 vos_mem_malloc(sizeof(*wdiRulerReq));
15253
15254 if (NULL == wdiRulerReq)
15255 {
15256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15257 "%s: VOS MEM Alloc Failure", __func__);
15258 VOS_ASSERT(0);
15259 vos_mem_free(rmcRulerReq);
15260 return VOS_STATUS_E_NOMEM;
15261 }
15262
15263 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
15264 if (NULL == pWdaParams)
15265 {
15266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15267 "%s: VOS MEM Alloc Failure", __func__);
15268 VOS_ASSERT(0);
15269 vos_mem_free(rmcRulerReq);
15270 vos_mem_free(wdiRulerReq);
15271 return VOS_STATUS_E_NOMEM;
15272 }
15273
15274 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiRulerReq;
15275 /* Store param pointer as passed in by caller */
15276 pWdaParams->wdaMsgParam = rmcRulerReq;
15277 pWdaParams->pWdaContext = pWDA;
15278
15279 wdiRulerReq->cmd = rmcRulerReq->cmd;
15280
15281 vos_mem_copy(wdiRulerReq->mcastTransmitter,
15282 rmcRulerReq->mcastTransmitter, sizeof(tSirMacAddr));
15283 vos_mem_copy(wdiRulerReq->mcastGroup,
15284 rmcRulerReq->mcastGroup, sizeof(tSirMacAddr));
15285 vos_mem_copy(wdiRulerReq->blacklist,
15286 rmcRulerReq->blacklist, sizeof(wdiRulerReq->blacklist));
15287
15288 wdiRulerReq->wdiReqStatusCB = WDA_RMCRulerReqCallback;
15289
15290 status = WDI_RmcRulerReq(wdiRulerReq,
15291 (WDI_RmcRulerRspCb)WDA_RMCRulerRspCallback,
15292 (void *)pWdaParams);
15293 if (IS_WDI_STATUS_FAILURE(status))
15294 {
15295 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15296 vos_mem_free(pWdaParams->wdaMsgParam);
15297 vos_mem_free(pWdaParams) ;
15298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15299 "Ruler Request failed");
15300 }
15301 return CONVERT_WDI2VOS_STATUS(status) ;
15302}
15303
15304/*
15305 * FUNCTION: WDA_ProcessRMCUpdateInd
15306 * Forward Update Indication to WDI
15307*/
15308static VOS_STATUS
15309WDA_ProcessRMCUpdateInd(tWDA_CbContext *pWDA,
15310 tSirRmcUpdateInd *rmcUpdateInd)
15311{
15312 WDI_Status status;
15313 WDI_RmcUpdateIndParams wdiUpdateInd;
15314
15315 /* Copy the paramters for Update_Ind */
15316
15317 wdiUpdateInd.indication = rmcUpdateInd->indication;
15318 wdiUpdateInd.role = rmcUpdateInd->role;
15319
15320 vos_mem_copy(wdiUpdateInd.mcastTransmitter,
15321 rmcUpdateInd->mcastTransmitter, sizeof(tSirMacAddr));
15322
15323 vos_mem_copy(wdiUpdateInd.mcastGroup,
15324 rmcUpdateInd->mcastGroup, sizeof(tSirMacAddr));
15325
15326 vos_mem_copy(wdiUpdateInd.mcastRuler,
15327 rmcUpdateInd->mcastRuler, sizeof(tSirMacAddr));
15328
15329 wdiUpdateInd.wdiReqStatusCB = WDA_WdiIndicationCallback;
15330 wdiUpdateInd.pUserData = pWDA;
15331 status = WDI_RmcUpdateInd(&wdiUpdateInd);
15332
15333 if (WDI_STATUS_PENDING == status)
15334 {
15335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15336 "Pending received for %s:%d ",__func__,__LINE__ );
15337 }
15338 else if (WDI_STATUS_SUCCESS_SYNC != status)
15339 {
15340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15341 "Failure in %s:%d ",__func__,__LINE__ );
15342 }
15343
15344 vos_mem_free(rmcUpdateInd);
15345
15346 return CONVERT_WDI2VOS_STATUS(status) ;
15347}
15348
15349void WDA_GetIbssPeerInfoRspCallback(WDI_IbssPeerInfoRspParams *peerInfoRspParams
15350 ,void* pUserData)
15351{
15352
15353 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15354 WDI_IbssPeerInfoParams *pIbssPeerInfoParams;
15355 tWDA_CbContext *pWDA;
15356 tpSirIbssGetPeerInfoRspParams pIbssGetPeerInfoRsp;
15357 vos_msg_t vosMsg;
15358 v_U32_t wdaCnt = 0;
15359
15360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15361 "<------ %s " ,__func__);
15362 if (NULL == pWdaParams)
15363 {
15364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15365 "%s: pWdaParams received NULL", __func__);
15366 VOS_ASSERT(0);
15367 return;
15368 }
15369
15370 if (NULL == peerInfoRspParams)
15371 {
15372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15373 "%s: peerInfoRspParams received NULL", __func__);
15374 if(pWdaParams->wdaMsgParam)
15375 vos_mem_free(pWdaParams->wdaMsgParam);
15376 if(pWdaParams->wdaWdiApiMsgParam)
15377 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15378 vos_mem_free(pWdaParams);
15379
15380 VOS_ASSERT(0);
15381 return;
15382 }
15383
15384 pIbssPeerInfoParams =
15385 (WDI_IbssPeerInfoParams *)peerInfoRspParams->wdiPeerInfoParams;
15386
15387 pIbssGetPeerInfoRsp =
15388 vos_mem_malloc(sizeof(tSirIbssGetPeerInfoRspParams));
15389
15390 if(NULL == pIbssGetPeerInfoRsp)
15391 {
15392 if(pWdaParams->wdaMsgParam)
15393 vos_mem_free(pWdaParams->wdaMsgParam);
15394 if(pWdaParams->wdaWdiApiMsgParam)
15395 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15396 vos_mem_free(pWdaParams);
15397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15398 "%s: Memory allocation failed for pIbssGetPeerInfoRsp",
15399 __func__);
15400 VOS_ASSERT(0);
15401 return;
15402
15403 }
15404
15405 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
15406
15407
15408 if (peerInfoRspParams->wdiNumPeers > 32)
15409 {
15410 pr_info("%s] Number of peers is more than 32, returning\n", __func__);
15411 /* free the mem and return */
15412 vos_mem_free((v_VOID_t *) pIbssGetPeerInfoRsp);
15413 if(pWdaParams->wdaMsgParam)
15414 vos_mem_free(pWdaParams->wdaMsgParam);
15415 if(pWdaParams->wdaWdiApiMsgParam)
15416 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15417 vos_mem_free(pWdaParams);
15418
15419 return;
15420 }
15421
15422 /* Message Header */
15423 pIbssGetPeerInfoRsp->mesgType = eWNI_SME_IBSS_PEER_INFO_RSP;
15424 pIbssGetPeerInfoRsp->mesgLen = sizeof(tSirIbssGetPeerInfoRspParams);
15425 pIbssGetPeerInfoRsp->ibssPeerInfoRspParams.status = peerInfoRspParams->wdiStatus;
15426 pIbssGetPeerInfoRsp->ibssPeerInfoRspParams.numPeers = peerInfoRspParams->wdiNumPeers;
15427
15428 for (wdaCnt = 0; wdaCnt < peerInfoRspParams->wdiNumPeers; wdaCnt++)
15429 {
15430 WDI_IbssPeerInfoParams *pWdiTmp = &pIbssPeerInfoParams[wdaCnt];
15431 tSirIbssPeerInfoParams *pSmeTmp =
15432 &pIbssGetPeerInfoRsp->ibssPeerInfoRspParams.peerInfoParams[wdaCnt];
15433
15434 pSmeTmp->staIdx = pWdiTmp->wdiStaIdx;
15435 pSmeTmp->mcsIndex = pWdiTmp->wdiMcsIndex;
15436 pSmeTmp->rssi = pWdiTmp->wdiRssi;
15437 pSmeTmp->txRate = pWdiTmp->wdiTxRate;
15438 pSmeTmp->txRateFlags = pWdiTmp->wdiTxRateFlags;
15439 }
15440
15441 /* VOS message wrapper */
15442 vosMsg.type = eWNI_SME_IBSS_PEER_INFO_RSP;
15443 vosMsg.bodyptr = (void *)pIbssGetPeerInfoRsp;
15444 vosMsg.bodyval = 0;
15445
15446 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15447 {
15448 /* free the mem and return */
15449 vos_mem_free((v_VOID_t *) pIbssGetPeerInfoRsp);
15450 }
15451
15452 if(NULL != pWdaParams)
15453 {
15454 if(pWdaParams->wdaMsgParam)
15455 vos_mem_free(pWdaParams->wdaMsgParam);
15456 if(pWdaParams->wdaWdiApiMsgParam)
15457 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15458 vos_mem_free(pWdaParams);
15459 }
15460
15461 return;
15462}
15463
15464static VOS_STATUS
15465WDA_ProcessIbssPeerInfoReq(tWDA_CbContext *pWDA,
15466 tSirIbssGetPeerInfoReqParams *ibssPeerInfoReqParams)
15467{
15468 WDI_Status status;
15469 WDI_IbssPeerInfoReqType *wdiPeerInfoReq;
15470 tWDA_ReqParams *pWdaParams;
15471
15472 wdiPeerInfoReq = (WDI_IbssPeerInfoReqType *)
15473 vos_mem_malloc(sizeof(WDI_IbssPeerInfoReqType));
15474 if (NULL == wdiPeerInfoReq)
15475 {
15476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15477 "%s: VOS MEM Alloc Failure", __func__);
15478 VOS_ASSERT(0);
15479 vos_mem_free(ibssPeerInfoReqParams);
15480 return VOS_STATUS_E_NOMEM;
15481 }
15482
15483 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
15484 if (NULL == pWdaParams)
15485 {
15486 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15487 "%s: VOS MEM Alloc Failure", __func__);
15488 VOS_ASSERT(0);
15489 vos_mem_free(wdiPeerInfoReq);
15490 vos_mem_free(ibssPeerInfoReqParams);
15491 return VOS_STATUS_E_NOMEM;
15492 }
15493
15494 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiPeerInfoReq;
15495 /* Store param pointer as passed in by caller */
15496 pWdaParams->wdaMsgParam = ibssPeerInfoReqParams;
15497 pWdaParams->pWdaContext = pWDA;
15498
15499 wdiPeerInfoReq->wdiAllPeerInfoReqd =
15500 ibssPeerInfoReqParams->allPeerInfoReqd;
15501 wdiPeerInfoReq->wdiStaIdx =
15502 ibssPeerInfoReqParams->staIdx;
15503
15504 status = WDI_IbssPeerInfoReq(wdiPeerInfoReq,
15505 (WDI_IbssPeerInfoReqCb)WDA_GetIbssPeerInfoRspCallback,
15506 (void *)pWdaParams);
15507 if (IS_WDI_STATUS_FAILURE(status))
15508 {
15509 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15510 vos_mem_free(pWdaParams->wdaMsgParam);
15511 vos_mem_free(pWdaParams) ;
15512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15513 "IBSS Peer Info Request failed");
15514 }
15515 return CONVERT_WDI2VOS_STATUS(status) ;
15516
15517}
15518
Kapil Gupta3d923fb2016-12-20 18:59:27 +053015519#ifdef WLAN_FEATURE_APFIND
15520/*
15521 * FUNCTION: WDA_Process_apfind_set_cmd
15522 * Forward AP find config request to WDI
15523 */
15524VOS_STATUS WDA_Process_apfind_set_cmd(tWDA_CbContext *pWDA,
15525 struct hal_apfind_request *ap_find_req)
15526{
15527 WDI_Status status;
15528 struct WDI_APFind_cmd *wdi_ap_find_cmd;
15529
15530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15531 "------> %s " ,__func__);
15532 if (NULL == ap_find_req)
15533 {
15534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15535 "%s: apfind_req info received NULL", __func__);
15536 VOS_ASSERT(0) ;
15537 return VOS_STATUS_E_FAULT;
15538 }
15539
15540 wdi_ap_find_cmd = (struct WDI_APFind_cmd *)vos_mem_malloc(
15541 sizeof(struct hal_apfind_request) + ap_find_req->request_data_len);
15542
15543 wdi_ap_find_cmd->data_len = ap_find_req->request_data_len;
15544 vos_mem_copy(wdi_ap_find_cmd->data, ap_find_req->request_data,
15545 ap_find_req->request_data_len);
15546
15547 status = WDI_process_ap_find_cmd(wdi_ap_find_cmd);
15548 if (WDI_STATUS_PENDING == status) {
15549 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15550 FL("pending status received"));
15551 } else if (WDI_STATUS_SUCCESS_SYNC != status &&
15552 (WDI_STATUS_SUCCESS != status)) {
15553
15554 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15555 FL("Failure in process_sap_auth_offload API %d"), status);
15556
15557 }
15558 vos_mem_free(wdi_ap_find_cmd);
15559 return CONVERT_WDI2VOS_STATUS(status) ;
15560}
15561#endif
15562
Abhishek Singh00b71972016-01-07 10:51:04 +053015563/*
15564 * FUNCTION: WDA_ProcessTXFailMonitorInd
15565 * Forward TX Fail Monitor to WDI
15566 */
15567static VOS_STATUS WDA_ProcessTXFailMonitorInd(
15568 tWDA_CbContext *pWDA,
15569 tAniTXFailMonitorInd *txFailMonitorInd)
15570{
15571 WDI_Status status;
15572 WDI_TXFailMonitorInd *wdiTXFailMonitorInd =
15573 (WDI_TXFailMonitorInd *)vos_mem_malloc(sizeof(WDI_TXFailMonitorInd));
15574
15575 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15576 "<------ %s " ,__func__);
15577
15578 if (NULL == wdiTXFailMonitorInd)
15579 {
15580 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15581 "%s: VOS MEM Alloc Failure", __func__);
15582 VOS_ASSERT(0);
15583 vos_mem_free(txFailMonitorInd);
15584 return VOS_STATUS_E_NOMEM;
15585 }
15586
15587 wdiTXFailMonitorInd->tx_fail_count = txFailMonitorInd->tx_fail_count;
15588
15589 wdiTXFailMonitorInd->wdiReqStatusCB = WDA_WdiIndicationCallback;
15590 wdiTXFailMonitorInd->pUserData = pWDA;
15591
15592 status = WDI_TXFailMonitorStartStopInd(wdiTXFailMonitorInd);
15593
15594 if (WDI_STATUS_PENDING == status)
15595 {
15596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15597 "TX Fail Monitor Indication Pending");
15598 }
15599 else if (WDI_STATUS_SUCCESS_SYNC == status)
15600 {
15601 if (0 == txFailMonitorInd->tx_fail_count)
15602 pWDA->txFailIndCallback = NULL;
15603 else
15604 pWDA->txFailIndCallback = txFailMonitorInd->txFailIndCallback;
15605 }
15606 else
15607 {
15608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15609 "TX Fail Monitor Indication Failed");
15610 }
15611
15612 vos_mem_free(wdiTXFailMonitorInd);
15613 vos_mem_free(txFailMonitorInd);
15614
15615 return CONVERT_WDI2VOS_STATUS(status) ;
15616}
15617#endif /* WLAN_FEATURE_RMC */
15618
Kapil Gupta04ab1992016-06-26 13:36:51 +053015619#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
15620VOS_STATUS WDA_ProcessPERRoamScanTriggerReq(tWDA_CbContext *pWDA,
15621 tPERRoamScanStart *pPERRoamTriggerScanReqParams)
15622{
15623 WDI_Status status;
15624 tWDA_ReqParams *pWdaParams ;
15625 WDI_PERRoamTriggerScanInfo *pwdiPERRoamTriggerScanInfo =
15626 (WDI_PERRoamTriggerScanInfo *)vos_mem_malloc(
15627 sizeof(WDI_PERRoamTriggerScanInfo));
15628
15629 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15630 "------> %s " ,__func__);
15631
15632 if (NULL == pwdiPERRoamTriggerScanInfo)
15633 {
15634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15635 "%s: VOS MEM Alloc Failure", __func__);
15636 VOS_ASSERT(0);
15637 return VOS_STATUS_E_NOMEM;
15638 }
15639
15640 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15641 if (NULL == pWdaParams)
15642 {
15643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15644 "%s: VOS MEM Alloc Failure", __func__);
15645 VOS_ASSERT(0);
15646 vos_mem_free(pwdiPERRoamTriggerScanInfo);
15647 return VOS_STATUS_E_NOMEM;
15648 }
15649
15650 pwdiPERRoamTriggerScanInfo->roamScanReq =
15651 pPERRoamTriggerScanReqParams->start;
15652
15653 /* Store Params pass it to WDI */
15654 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPERRoamTriggerScanInfo;
15655 pWdaParams->pWdaContext = pWDA;
15656
15657 /* Store param pointer as passed in by caller */
15658 pWdaParams->wdaMsgParam = pPERRoamTriggerScanReqParams;
15659 status = WDI_PERRoamScanTriggerReq(pwdiPERRoamTriggerScanInfo,
15660 (WDI_PERRoamTriggerScanCb)WDA_PERRoamTriggerScanReqCallback,
15661 pWdaParams);
15662
15663 if(IS_WDI_STATUS_FAILURE(status))
15664 {
15665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15666 "Failure in Start Roam Candidate trigger Req WDI API" );
15667 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15668 vos_mem_free(pWdaParams->wdaMsgParam);
15669 pWdaParams->wdaWdiApiMsgParam = NULL;
15670 pWdaParams->wdaMsgParam = NULL;
15671 }
15672 return CONVERT_WDI2VOS_STATUS(status) ;
15673}
15674#endif
15675
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015676/*
Siddharth Bhal171788a2014-09-29 21:02:40 +053015677 * FUNCTION: WDA_ProcessSetSpoofMacAddrReq
15678 *
15679 * DESCRIPTION: This function sends Spoof Mac Addr Req to WDI
15680 *
15681 * PARAM:
15682 * pWDA: pointer to WDA context
15683 * pReq: pointer to stop batch scan request
15684 */
15685VOS_STATUS WDA_ProcessSetSpoofMacAddrReq(tWDA_CbContext *pWDA,
15686 tpSpoofMacAddrReqParams pReq)
15687{
15688 WDI_Status wdiStatus;
15689 WDI_SpoofMacAddrInfoType *WDI_SpoofMacAddrInfoParams;
15690 tWDA_ReqParams *pWdaParams;
15691
15692 WDI_SpoofMacAddrInfoParams = (WDI_SpoofMacAddrInfoType *)vos_mem_malloc(
15693 sizeof(WDI_SpoofMacAddrInfoType));
15694 if(NULL == WDI_SpoofMacAddrInfoParams) {
15695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15696 "%s: VOS MEM Alloc Failure in Spoof Req", __func__);
15697 VOS_ASSERT(0);
15698 return VOS_STATUS_E_NOMEM;
15699 }
15700 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15701 if(NULL == pWdaParams) {
15702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15703 "%s: VOS MEM Alloc Failure", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +053015704 vos_mem_free(WDI_SpoofMacAddrInfoParams);
Siddharth Bhal171788a2014-09-29 21:02:40 +053015705 VOS_ASSERT(0);
15706 return VOS_STATUS_E_NOMEM;
15707 }
15708
15709 vos_mem_copy(WDI_SpoofMacAddrInfoParams->macAddr,
15710 pReq->macAddr, VOS_MAC_ADDRESS_LEN);
15711
15712 pWdaParams->pWdaContext = pWDA;
15713 /* Store Upper layer req pointer, as this will be used for response */
Siddharth Bhal029d6732014-10-09 21:31:23 +053015714 pWdaParams->wdaMsgParam = (void *)pReq;
15715
15716 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, WDA_MAC_ADDRESS_STR,
15717 WDA_MAC_ADDR_ARRAY(WDI_SpoofMacAddrInfoParams->macAddr));
15718
Siddharth Bhal171788a2014-09-29 21:02:40 +053015719 /* store Params pass it to WDI */
15720 pWdaParams->wdaWdiApiMsgParam = (void *)WDI_SpoofMacAddrInfoParams ;
15721
15722 wdiStatus = WDI_SetSpoofMacAddrReq(WDI_SpoofMacAddrInfoParams,
Siddharth Bhal029d6732014-10-09 21:31:23 +053015723 (WDI_SetSpoofMacAddrRspCb) WDA_SpoofMacAddrRspCallback,
15724 pWdaParams );
Siddharth Bhal171788a2014-09-29 21:02:40 +053015725
15726 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15727 {
15728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15729 "Failure in SetSpoofMacAddrReq Params WDI API, free all the memory " );
15730 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15731 vos_mem_free(pWdaParams->wdaMsgParam);
15732 vos_mem_free(pWdaParams);
15733 }
15734
15735 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
15736}
15737
c_manjeecfd1efb2015-09-25 19:32:34 +053015738
15739/*
15740 * FUNCTION: WDA_FwrMemDumpRespCallback
15741 * recieves Mgmt Logging init response from FW
15742 */
15743 void WDA_FwrMemDumpRespCallback(WDI_FwrMemDumpRsp* wdiRsp,
15744 void* pUserData)
15745{
15746 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15747 tAniFwrDumpReq *pFwrMemDumpReq;
15748 tAniFwrDumpRsp *pFwrMemDumpRsp;
15749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15750 "<------ %s " ,__func__);
15751
15752 if(NULL == pWdaParams)
15753 {
15754 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15755 "%s: pWdaParams received NULL", __func__);
15756 VOS_ASSERT(0);
15757 return ;
15758 }
15759
15760 if(NULL == pWdaParams->wdaMsgParam)
15761 {
15762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15763 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
15764 VOS_ASSERT(0);
15765 vos_mem_free(pWdaParams);
15766 return ;
15767 }
15768
15769 pFwrMemDumpRsp = (tAniFwrDumpRsp *)vos_mem_malloc(sizeof(tAniFwrDumpRsp));
15770 if(pFwrMemDumpRsp == NULL)
15771 {
15772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15773 "%s: pFwrMemDumpRsp is NULL", __func__);
15774 VOS_ASSERT(0);
15775 vos_mem_free(pWdaParams);
15776 return ;
15777 }
15778
15779 pFwrMemDumpRsp->dump_status = wdiRsp->dump_status;
15780 pFwrMemDumpReq = (tAniFwrDumpReq *)pWdaParams->wdaMsgParam;
15781
15782 if(pFwrMemDumpReq->fwMemDumpReqCallback)
15783 {
15784 pFwrMemDumpReq->fwMemDumpReqCallback(
15785 pFwrMemDumpReq->fwMemDumpReqContext,
15786 pFwrMemDumpRsp);
15787 }
15788 else
15789 {
15790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15791 "%s: FwrMemDump callback is NULL", __func__);
15792 }
15793
15794 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15795 vos_mem_free(pWdaParams->wdaMsgParam);
15796 vos_mem_free(pWdaParams);
15797 vos_mem_free(pFwrMemDumpRsp);
15798
15799 return ;
15800}
15801
15802VOS_STATUS WDA_ProcessFwrMemDumpReq(tWDA_CbContext * pWDA,
15803 tAniFwrDumpReq* pFwrMemDumpReq)
15804{
15805 VOS_STATUS status = VOS_STATUS_SUCCESS;
15806 WDI_Status wstatus;
15807 WDI_FwrMemDumpReqType * pWdiFwrMemDumpReq;
15808 tWDA_ReqParams *pWdaParams ;
15809
15810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15811 "------> %s " ,__func__);
15812 /* Sanity Check*/
15813 if(NULL == pFwrMemDumpReq)
15814 {
15815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15816 "%s: pFwrMemDumpReq received NULL", __func__);
15817 VOS_ASSERT(0) ;
15818 return VOS_STATUS_E_FAULT;
15819 }
15820
15821 pWdiFwrMemDumpReq = (WDI_FwrMemDumpReqType *)vos_mem_malloc(sizeof(WDI_FwrMemDumpReqType));
15822 if(NULL == pWdiFwrMemDumpReq)
15823 {
15824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15825 "%s: pWdiFwrMemDumpReq Alloc Failure", __func__);
15826 VOS_ASSERT(0);
15827 return VOS_STATUS_E_NOMEM;
15828 }
15829
15830 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15831 if(NULL == pWdaParams)
15832 {
15833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15834 "%s: pWdaParams Alloc Failure", __func__);
15835 VOS_ASSERT(0);
15836 vos_mem_free(pWdiFwrMemDumpReq);
15837 return VOS_STATUS_E_NOMEM;
15838 }
15839
15840 /* Store Params pass it to WDI */
15841 pWdaParams->wdaWdiApiMsgParam = (void *)pWdiFwrMemDumpReq;
15842 pWdaParams->pWdaContext = pWDA;
15843 /* Store param pointer as passed in by caller */
15844 pWdaParams->wdaMsgParam = pFwrMemDumpReq;
15845
15846 status = WDI_FwrMemDumpReq(pWdiFwrMemDumpReq,
15847 (WDI_FwrMemDumpCb)WDA_FwrMemDumpRespCallback,
15848 pWdaParams);
15849
15850 if(IS_WDI_STATUS_FAILURE(wstatus))
15851 {
15852 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15853 FL("Fwr Mem Dump Req failed, free all the memory"));
15854 status = CONVERT_WDI2VOS_STATUS(wstatus);
15855 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
c_manjeecfd1efb2015-09-25 19:32:34 +053015856 pWdaParams->wdaWdiApiMsgParam = NULL;
Sreelakshmi Konamkifff0f9e2016-07-20 15:02:28 +053015857 vos_mem_free(pWdaParams->wdaMsgParam);
c_manjeecfd1efb2015-09-25 19:32:34 +053015858 pWdaParams->wdaMsgParam = NULL;
Sreelakshmi Konamkifff0f9e2016-07-20 15:02:28 +053015859 vos_mem_free(pWdaParams);
c_manjeecfd1efb2015-09-25 19:32:34 +053015860 }
15861
15862 return status;
15863
15864}
15865
Selvaraj, Sridharc045b8b2016-04-06 12:22:35 +053015866/**
15867 * wda_process_set_allowed_action_frames_ind() - Set allowed action frames to FW
15868 *
15869 * @pWDA: WDA Call back context
15870 * @allowed_action_frames: Pointer to struct sir_allowed_action_frames
15871 * that holds allowed action frames bitmask
15872 *
15873 * This function sets the allowed action frames that the FW needs to
15874 * handover to host.The Action frames other than the requested ones
15875 * can be dropped in FW
15876 *
15877 * Return: VOS_STATUS enumeration
15878 */
15879VOS_STATUS wda_process_set_allowed_action_frames_ind(tWDA_CbContext *pWDA,
15880 struct sir_allowed_action_frames *allowed_action_frames)
15881{
15882 WDI_Status status;
15883 struct WDI_AllowedActionFramesInd *wdi_allowed_action_frames;
15884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15885 FL("---> %s"), __func__);
c_manjeecfd1efb2015-09-25 19:32:34 +053015886
Selvaraj, Sridharc045b8b2016-04-06 12:22:35 +053015887 wdi_allowed_action_frames = (struct WDI_AllowedActionFramesInd*)
15888 vos_mem_malloc(sizeof
15889 (*wdi_allowed_action_frames));
15890 if (!wdi_allowed_action_frames) {
15891 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15892 "%s: VOS MEM Alloc Failure", __func__);
15893 vos_mem_free(allowed_action_frames);
15894 return VOS_STATUS_E_NOMEM;
15895 }
15896
15897 wdi_allowed_action_frames->bitmask = allowed_action_frames->bitmask;
15898 wdi_allowed_action_frames->reserved = allowed_action_frames->reserved;
15899
15900 status = WDI_SetAllowedActionFramesInd(wdi_allowed_action_frames);
15901 if (WDI_STATUS_PENDING == status) {
15902 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15903 FL("pending status received"));
15904 } else if (WDI_STATUS_SUCCESS_SYNC != status &&
15905 (WDI_STATUS_SUCCESS != status)) {
15906 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15907 FL("Failure in allowed_action_frames API %d"), status);
15908 }
15909
15910 vos_mem_free(wdi_allowed_action_frames);
15911 vos_mem_free(allowed_action_frames);
15912 return CONVERT_WDI2VOS_STATUS(status) ;
15913}
c_manjeecfd1efb2015-09-25 19:32:34 +053015914
Agrawal Ashish17ef5082016-10-17 18:33:21 +053015915#ifdef SAP_AUTH_OFFLOAD
15916VOS_STATUS wda_process_sap_auth_offload(tWDA_CbContext *pWDA,
15917 struct tSirSapOffloadInfo *sap_auth_offload_info)
15918{
15919 WDI_Status status = WDI_STATUS_SUCCESS;
15920 struct WDI_sap_ofl_enable_params *sap_ofl_enable_cmd;
15921 v_U16_t psk_len, psk_len_padded;
15922
15923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15924 "------> %s " ,__func__);
15925
15926 if(NULL == sap_auth_offload_info)
15927 {
15928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15929 "%s: sap_auth_offload_info received NULL", __func__);
15930 VOS_ASSERT(0) ;
15931 return VOS_STATUS_E_FAULT;
15932 }
15933 psk_len = sap_auth_offload_info->key_len;
15934 psk_len_padded = roundup(psk_len, sizeof(v_U32_t));
15935
15936 sap_ofl_enable_cmd = (struct WDI_sap_ofl_enable_params*)
15937 vos_mem_malloc(sizeof
15938 (*sap_ofl_enable_cmd));
15939 if (!sap_ofl_enable_cmd) {
15940 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15941 "%s: VOS MEM Alloc Failure", __func__);
15942 vos_mem_free(sap_auth_offload_info);
15943 return VOS_STATUS_E_NOMEM;
15944 }
15945 vos_mem_zero(sap_ofl_enable_cmd, sizeof(*sap_ofl_enable_cmd));
15946 vos_mem_copy(sap_ofl_enable_cmd->macAddr,
15947 sap_auth_offload_info->macAddr, VOS_MAC_ADDRESS_LEN);
15948
15949 sap_ofl_enable_cmd->enable = sap_auth_offload_info->sap_auth_offload_enable;
15950 sap_ofl_enable_cmd->psk_len = psk_len;
15951 switch (sap_auth_offload_info->sap_auth_offload_sec_type) {
15952 case eSIR_OFFLOAD_WPA2PSK_CCMP:
15953 sap_ofl_enable_cmd->rsn_authmode = WDI_AUTH_TYPE_RSN_PSK;
15954 sap_ofl_enable_cmd->rsn_mcastcipherset = WDI_ED_CCMP;
15955 sap_ofl_enable_cmd->rsn_ucastcipherset = WDI_ED_CCMP;
15956 break;
15957 case eSIR_OFFLOAD_NONE:
15958 default:
15959 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15960 "Set SAP AP Auth offload with none support security type\n");
15961 break;
15962 }
15963 vos_mem_copy(sap_ofl_enable_cmd->key, sap_auth_offload_info->key, psk_len);
15964
15965 status = WDI_process_sap_auth_offload(sap_ofl_enable_cmd);
15966
15967 if (WDI_STATUS_PENDING == status) {
15968 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15969 FL("pending status received"));
15970 } else if (WDI_STATUS_SUCCESS_SYNC != status &&
15971 (WDI_STATUS_SUCCESS != status)) {
15972 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15973 FL("Failure in process_sap_auth_offload API %d"), status);
15974 }
15975
15976 vos_mem_free(sap_ofl_enable_cmd);
15977 vos_mem_free(sap_auth_offload_info);
15978 return CONVERT_WDI2VOS_STATUS(status) ;
15979
15980}
15981#endif
15982
Siddharth Bhal171788a2014-09-29 21:02:40 +053015983/*
Bhargav Shahe3a6ff02016-04-11 16:31:49 +053015984 * FUNCTION: WDA_ProcessBcnMissPenaltyCount
15985 * Request to WDI.
15986 */
15987VOS_STATUS WDA_ProcessTLPauseInd(tWDA_CbContext *pWDA, v_U32_t params)
15988{
15989 v_U8_t staId;
Bhargav Shahfbaeca22016-07-13 10:27:35 +053015990 WLANTL_CbType* pTLCb = NULL;
Bhargav Shahe3a6ff02016-04-11 16:31:49 +053015991
15992 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, FL("---> %s"), __func__);
15993
15994 staId = (v_U8_t)params;
15995
Bhargav Shahfbaeca22016-07-13 10:27:35 +053015996 pTLCb = VOS_GET_TL_CB(pWDA->pVosContext);
15997 if ( NULL == pTLCb )
15998 {
15999 VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR,
16000 "WLAN TL:Invalid TL pointer from pvosGCtx on WLANTL_SuspendDataTx");
16001 return VOS_STATUS_E_FAULT;
16002 }
16003
16004
16005 pTLCb->atlSTAClients[staId]->disassoc_progress = VOS_TRUE;
Bhargav Shahe3a6ff02016-04-11 16:31:49 +053016006 /* Pause TL for Sta ID */
16007 return WLANTL_SuspendDataTx(pWDA->pVosContext, &staId, NULL);
16008}
16009
Anurag Chouhan6ee81542017-02-09 18:09:27 +053016010/**
16011 * WDA_SetARPStatsParamsRspCallback() - WDA callback api to set/reset arp stats
16012 * @wdiSetStatsRsp: pointer to set stats response
16013 * @user_data: user data
16014 *
16015 * Return: None
16016 */
16017void WDA_SetARPStatsParamsRspCallback(
16018 WDI_SetARPStatsRspParamsType *wdiSetStatsRsp,
16019 void *user_data)
16020{
16021 tWDA_ReqParams *wda_params = (tWDA_ReqParams *)user_data;
16022 setArpStatsParams *arpStatsParams;
16023
16024 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16025 "ENTER <------ %s " ,__func__);
16026
16027 if(NULL == wda_params)
16028 {
16029 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16030 "%s: wda_params received NULL", __func__);
16031 VOS_ASSERT(0);
16032 return;
16033 }
16034
16035 if(NULL == wda_params->wdaMsgParam)
16036 {
16037 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16038 "%s: wda_params->wdaMsgParam is NULL", __func__);
16039 VOS_ASSERT(0);
16040 vos_mem_free(wda_params->wdaWdiApiMsgParam);
16041 vos_mem_free(wda_params);
16042 return;
16043 }
16044
16045 arpStatsParams = (setArpStatsParams *)wda_params->wdaMsgParam;
16046 if(arpStatsParams->rsp_cb_fn)
16047 {
16048 arpStatsParams->rsp_cb_fn(arpStatsParams->data_ctx,
16049 CONVERT_WDI2VOS_STATUS(wdiSetStatsRsp->status));
16050 }
16051 else
16052 {
16053 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16054 "%s: ARP stats callback is NULL", __func__);
16055 }
16056
16057 vos_mem_free(wda_params->wdaWdiApiMsgParam);
16058 vos_mem_free(wda_params->wdaMsgParam);
16059 vos_mem_free(wda_params);
16060 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16061 "EXIT <------ %s " ,__func__);
16062 return;
16063}
16064
16065/**
16066 * WDA_GetARPStatsParamsRspCallback() - WDA callback api to get arp stats
16067 * @wdiGetStatsRsp: pointer to get stats response
16068 * @user_data: user data
16069 *
16070 * Return: None
16071 */
16072void WDA_GetARPStatsParamsRspCallback(
16073 WDI_GetARPStatsRspParamsType *wdiGetStatsRsp,
16074 void *user_data)
16075{
16076 tWDA_ReqParams *wda_params = (tWDA_ReqParams *)user_data;
16077 getArpStatsParams *arpStatsParams;
16078
16079 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16080 "ENTER <------ %s " ,__func__);
16081
16082 if(NULL == wda_params)
16083 {
16084 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16085 "%s: wda_params received NULL", __func__);
16086 VOS_ASSERT(0);
16087 return;
16088 }
16089
16090 if(NULL == wda_params->wdaMsgParam)
16091 {
16092 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16093 "%s: wda_params->wdaMsgParam is NULL", __func__);
16094 VOS_ASSERT(0);
16095 vos_mem_free(wda_params->wdaWdiApiMsgParam);
16096 vos_mem_free(wda_params);
16097 return;
16098 }
16099
16100 arpStatsParams = (getArpStatsParams *)wda_params->wdaMsgParam;
16101 if(arpStatsParams->get_rsp_cb_fn)
16102 {
16103 arpStatsParams->get_rsp_cb_fn(arpStatsParams->data_ctx,
16104 (rsp_stats *)wdiGetStatsRsp);
16105 }
16106 else
16107 {
16108 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16109 "%s: ARP stats callback is NULL", __func__);
16110 }
16111
16112 vos_mem_free(wda_params->wdaWdiApiMsgParam);
16113 vos_mem_free(wda_params->wdaMsgParam);
16114 vos_mem_free(wda_params);
16115 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16116 "EXIT <------ %s " ,__func__);
16117 return;
16118}
16119
16120/**
16121 * WDA_ProcessSetARPStatsReq() - WDA api to process set arp stats command
16122 * @pWDA: wda handle
16123 * @pSetStatsParams: pointer to set arp stats
16124 *
16125 * Return: VOS_STATUS
16126 * 0 Success else failure
16127 */
16128VOS_STATUS WDA_ProcessSetARPStatsReq(tWDA_CbContext *pWDA,
16129 setArpStatsParams *pSetStatsParams)
16130{
16131 WDI_SetARPStatsParamsInfoType *wdiSetStatsParam;
16132 tWDA_ReqParams *wda_params;
16133 WDI_Status wdi_status = WDI_STATUS_SUCCESS;
16134
16135 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16136 FL("---> %s"), __func__);
16137
16138 if(NULL == pSetStatsParams)
16139 {
16140 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16141 "%s: pSetStatsParams received NULL",
16142 __func__);
16143 VOS_ASSERT(0) ;
16144 return VOS_STATUS_E_FAULT;
16145 }
16146
16147 wdiSetStatsParam = (WDI_SetARPStatsParamsInfoType *)
16148 vos_mem_malloc(sizeof(*wdiSetStatsParam));
16149 if (!wdiSetStatsParam) {
16150 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16151 "Failed to allocate buffer to send "
16152 "set_dhcp_server_offload cmd");
16153 vos_mem_free(pSetStatsParams);
16154 return VOS_STATUS_E_NOMEM;
16155 }
16156
16157 vos_mem_zero(wdiSetStatsParam, sizeof(*wdiSetStatsParam));
16158
16159 wda_params = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16160 if(NULL == wda_params)
16161 {
16162 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16163 "%s: VOS MEM Alloc Failure", __func__);
16164 VOS_ASSERT(0);
16165 vos_mem_free(wdiSetStatsParam);
16166 vos_mem_free(pSetStatsParams);
16167 return VOS_STATUS_E_NOMEM;
16168 }
16169
16170 wdiSetStatsParam->flag = pSetStatsParams->flag;
16171 wdiSetStatsParam->pkt_type = pSetStatsParams->pkt_type;
16172 wdiSetStatsParam->ip_addr = pSetStatsParams->ip_addr;
16173
16174 /* Store Params pass it to WDI */
16175 wda_params->wdaWdiApiMsgParam = (void *)wdiSetStatsParam;
16176 wda_params->pWdaContext = pWDA;
16177 /* Store param pointer as passed in by caller */
16178 wda_params->wdaMsgParam = pSetStatsParams;
16179
16180 wdi_status = WDI_SetARPStatsReq(wdiSetStatsParam,
16181 (WDI_SetARPStatsRspCb)WDA_SetARPStatsParamsRspCallback,
16182 wda_params);
16183
16184 if(IS_WDI_STATUS_FAILURE(wdi_status))
16185 {
16186 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16187 "%s: Failure, free all the memory", __func__);
16188 vos_mem_free(wda_params->wdaWdiApiMsgParam) ;
16189 vos_mem_free(wda_params->wdaMsgParam);
16190 vos_mem_free(wda_params);
16191 }
16192
16193 return wdi_status;
16194}
16195
16196/**
16197 * WDA_ProcessGetARPStatsReq() - WDA api to process get arp stats command
16198 * @pWDA: wda handle
16199 * @pGetStatsParams: pointer to get arp stats
16200 *
16201 * Return: VOS_STATUS
16202 * 0 Success else failure
16203 */
16204VOS_STATUS WDA_ProcessGetARPStatsReq(tWDA_CbContext *pWDA,
16205 getArpStatsParams *pGetStatsParams)
16206{
16207 WDI_GetARPStatsParamsInfoType *wdiGetStatsParam;
16208 tWDA_ReqParams *wda_params;
16209 WDI_Status wdi_status = WDI_STATUS_SUCCESS;
16210
16211 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16212 FL("---> %s"), __func__);
16213
16214 if(NULL == pGetStatsParams)
16215 {
16216 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16217 "%s: pGetStatsParams received NULL",
16218 __func__);
16219 VOS_ASSERT(0) ;
16220 return VOS_STATUS_E_FAULT;
16221 }
16222
16223 wdiGetStatsParam = (WDI_GetARPStatsParamsInfoType *)
16224 vos_mem_malloc(sizeof(*wdiGetStatsParam));
16225 if (!wdiGetStatsParam) {
16226 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16227 "Failed to allocate buffer to send "
16228 "set_dhcp_server_offload cmd");
16229 vos_mem_free(pGetStatsParams);
16230 return VOS_STATUS_E_NOMEM;
16231 }
16232
16233 vos_mem_zero(wdiGetStatsParam, sizeof(*wdiGetStatsParam));
16234
16235 wda_params = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16236 if(NULL == wda_params)
16237 {
16238 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16239 "%s: VOS MEM Alloc Failure", __func__);
16240 VOS_ASSERT(0);
16241 vos_mem_free(wdiGetStatsParam);
16242 vos_mem_free(pGetStatsParams);
16243 return VOS_STATUS_E_NOMEM;
16244 }
16245
16246 wdiGetStatsParam->pkt_type = pGetStatsParams->pkt_type;
16247
16248 /* Store Params pass it to WDI */
16249 wda_params->wdaWdiApiMsgParam = (void *)wdiGetStatsParam;
16250 wda_params->pWdaContext = pWDA;
16251 /* Store param pointer as passed in by caller */
16252 wda_params->wdaMsgParam = pGetStatsParams;
16253
16254 wdi_status = WDI_GetARPStatsReq(wdiGetStatsParam,
16255 (WDI_GetARPStatsRspCb)WDA_GetARPStatsParamsRspCallback,
16256 wda_params);
16257
16258 if(IS_WDI_STATUS_FAILURE(wdi_status))
16259 {
16260 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16261 "%s: Failure, free all the memory", __func__);
16262 vos_mem_free(wda_params->wdaWdiApiMsgParam) ;
16263 vos_mem_free(wda_params->wdaMsgParam);
16264 vos_mem_free(wda_params);
16265 }
16266
16267 return wdi_status;
16268}
16269
16270
Anurag Chouhan83026002016-12-13 22:46:21 +053016271#ifdef DHCP_SERVER_OFFLOAD
16272/**
16273 * wda_process_dhcpserver_offload_req() - wda api to set dhcp server offload
16274 * @wda_handle: pointer to wda handle
16275 * @dhcp_server_offload_info: dhcp server offload info
16276 *
16277 * Return: status
16278 * 0 - success or else failure
16279 */
16280static int wda_process_dhcpserver_offload_req(tWDA_CbContext *wda_handle,
16281 sir_dhcp_srv_offload_info_t
16282 *dhcp_server_offload_info)
16283{
16284 wdi_set_dhcp_server_offload_t *dhcp_info;
16285 tWDA_ReqParams *wda_params;
16286 WDI_Status wstatus;
16287 VOS_STATUS status = VOS_STATUS_SUCCESS;
16288
16289 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16290 FL("---> %s"), __func__);
16291
16292 if(NULL == dhcp_server_offload_info)
16293 {
16294 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16295 "%s: dhcp_server_offload_info received NULL",
16296 __func__);
16297 VOS_ASSERT(0) ;
16298 return VOS_STATUS_E_FAULT;
16299 }
16300
16301 dhcp_info = (wdi_set_dhcp_server_offload_t *)
16302 vos_mem_malloc(sizeof(*dhcp_info));
16303 if (!dhcp_info) {
16304 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16305 "Failed to allocate buffer to send "
16306 "set_dhcp_server_offload cmd");
16307 vos_mem_free(dhcp_server_offload_info);
16308 return VOS_STATUS_E_NOMEM;
16309 }
16310
16311 vos_mem_zero(dhcp_info, sizeof(*dhcp_info));
16312
16313 wda_params = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16314 if(NULL == wda_params)
16315 {
16316 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16317 "%s: VOS MEM Alloc Failure", __func__);
16318 VOS_ASSERT(0);
16319 vos_mem_free(dhcp_info);
16320 vos_mem_free(dhcp_server_offload_info);
16321 return VOS_STATUS_E_NOMEM;
16322 }
16323
16324 dhcp_info->bssidx = dhcp_server_offload_info->bssidx;
16325 dhcp_info->enable = dhcp_server_offload_info->dhcp_srv_offload_enabled;
16326 dhcp_info->num_client = dhcp_server_offload_info->dhcp_client_num;
16327 dhcp_info->srv_ipv4 = dhcp_server_offload_info->dhcp_srv_ip;
16328 dhcp_info->start_lsb = dhcp_server_offload_info->start_lsb;
16329
16330 wda_params->pWdaContext = wda_handle;
16331 wda_params->wdaMsgParam = dhcp_server_offload_info;
16332 wda_params->wdaWdiApiMsgParam = (void *)dhcp_info;
16333
16334 wstatus = wdi_process_dhcpserver_offload_req(dhcp_info,
16335 (wdi_dhcp_srv_offload_rsp_cb)
16336 wda_dhcp_server_offload_rsp_callback,
16337 wda_params);
16338 if(IS_WDI_STATUS_FAILURE(wstatus))
16339 {
16340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16341 "Failed to send set_dhcp_server_offload cmd" );
16342 status = CONVERT_WDI2VOS_STATUS(wstatus);
16343 vos_mem_free(wda_params->wdaWdiApiMsgParam) ;
16344 vos_mem_free(wda_params->wdaMsgParam);
16345 vos_mem_free(wda_params);
16346 }
16347
16348 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16349 "Set dhcp server offload");
16350 return status;
16351}
16352#endif /* DHCP_SERVER_OFFLOAD */
16353
Anurag Chouhan0b29de02016-12-16 13:18:40 +053016354#ifdef MDNS_OFFLOAD
16355/**
16356 * wda_set_mdns_offload_req() - wda api to set mdns offload
16357 * @wda_handle: wda handle
16358 * @mdns_offload_info: mdns offload info
16359 *
16360 * Return - 0 for success or else failure
16361 */
16362static int
16363wda_set_mdns_offload_req(tWDA_CbContext *wda_handle,
16364 sir_mdns_offload_info_t *mdns_offload_info)
16365{
16366 wdi_mdns_enable_offload_cmd_req *mdns_info;
16367 tWDA_ReqParams *wda_params;
16368 WDI_Status wstatus;
16369 VOS_STATUS status = VOS_STATUS_SUCCESS;
16370
16371 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16372 FL("---> %s"), __func__);
16373
16374 if(NULL == mdns_offload_info)
16375 {
16376 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16377 "%s: set_mdns_offload received NULL",
16378 __func__);
16379 VOS_ASSERT(0) ;
16380 return VOS_STATUS_E_FAULT;
16381 }
16382
16383 mdns_info = (wdi_mdns_enable_offload_cmd_req *)
16384 vos_mem_malloc(sizeof(*mdns_info));
16385 if (!mdns_info) {
16386 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16387 "Failed to allocate buffer to send "
16388 "set_mdns_offload cmd");
16389 vos_mem_free(mdns_offload_info);
16390 return VOS_STATUS_E_NOMEM;
16391 }
16392
16393 vos_mem_zero(mdns_info, sizeof(*mdns_info));
16394
16395 wda_params = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16396 if(NULL == wda_params)
16397 {
16398 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16399 "%s: VOS MEM Alloc Failure", __func__);
16400 VOS_ASSERT(0);
16401 vos_mem_free(mdns_info);
16402 vos_mem_free(mdns_offload_info);
16403 return VOS_STATUS_E_NOMEM;
16404 }
16405
16406 mdns_info->bss_idx = mdns_offload_info->bss_idx;
16407 mdns_info->enable = mdns_offload_info->enable;
16408
16409 wda_params->pWdaContext = wda_handle;
16410 wda_params->wdaMsgParam = mdns_offload_info;
16411 wda_params->wdaWdiApiMsgParam = (void *)mdns_info;
16412
16413 wstatus = wdi_set_mdns_offload_req(mdns_info,
16414 (wdi_mdns_enable_rsp_cb)
16415 wda_mdns_enable_rsp_callback,
16416 wda_params);
16417 if(IS_WDI_STATUS_FAILURE(wstatus))
16418 {
16419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16420 "Failed to send wdi_set_mdns_offload_req cmd" );
16421 status = CONVERT_WDI2VOS_STATUS(wstatus);
16422 vos_mem_free(wda_params->wdaWdiApiMsgParam) ;
16423 vos_mem_free(wda_params->wdaMsgParam);
16424 vos_mem_free(wda_params);
16425 }
16426
16427 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16428 "mdns enabled!");
16429 return status;
16430
16431}
16432
16433/**
16434 * wda_set_mdns_fqdn_req() - wda api to set mdns fqdn offload
16435 * @wda_handle: wda handle
16436 * @mdns_fqdn_info: mdns fqdn offload info
16437 *
16438 * Return - 0 for success or else failure
16439 */
16440static int
16441wda_set_mdns_fqdn_req(tWDA_CbContext *wda_handle,
16442 sir_mdns_fqdn_info_t *mdns_fqdn_info)
16443{
16444 wdi_mdns_set_fqdn_cmd_req *fqdn_info;
16445 tWDA_ReqParams *wda_params;
16446 WDI_Status wstatus;
16447 VOS_STATUS status = VOS_STATUS_SUCCESS;
16448
16449 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16450 FL("---> %s"), __func__);
16451
16452 if(NULL == mdns_fqdn_info)
16453 {
16454 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16455 "%s: set_mdns_fqdn received NULL",
16456 __func__);
16457 VOS_ASSERT(0) ;
16458 return VOS_STATUS_E_FAULT;
16459 }
16460
16461 fqdn_info = (wdi_mdns_set_fqdn_cmd_req *)
16462 vos_mem_malloc(sizeof(*fqdn_info));
16463 if (!fqdn_info) {
16464 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16465 "Failed to allocate buffer to send "
16466 "set_mdns_fqdn cmd");
16467 vos_mem_free(mdns_fqdn_info);
16468 return VOS_STATUS_E_NOMEM;
16469 }
16470
16471 vos_mem_zero(fqdn_info, sizeof(*fqdn_info));
16472
16473 wda_params = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
16474 if(NULL == wda_params)
16475 {
16476 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16477 "%s: VOS MEM Alloc Failure", __func__);
16478 VOS_ASSERT(0);
16479 vos_mem_free(fqdn_info);
16480 vos_mem_free(mdns_fqdn_info);
16481 return VOS_STATUS_E_NOMEM;
16482 }
16483
16484 fqdn_info->bss_idx = mdns_fqdn_info->bss_idx;
16485 fqdn_info->type = mdns_fqdn_info->fqdn_type;
16486 fqdn_info->fqdn_len = mdns_fqdn_info->fqdn_len;
16487 vos_mem_copy(fqdn_info->fqdn_data, mdns_fqdn_info->fqdn_data,
16488 mdns_fqdn_info->fqdn_len);
16489 fqdn_info->fqdn_data[mdns_fqdn_info->fqdn_len] = '\0';
16490
16491 wda_params->pWdaContext = wda_handle;
16492 wda_params->wdaMsgParam = mdns_fqdn_info;
16493 wda_params->wdaWdiApiMsgParam = (void *)fqdn_info;
16494
16495 wstatus = wdi_set_mdns_fqdn_req(fqdn_info,
16496 (wdi_mdns_fqdn_rsp_cb)
16497 wda_mdns_fqdn_rsp_callback,
16498 wda_params);
16499 if(IS_WDI_STATUS_FAILURE(wstatus))
16500 {
16501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16502 "Failed to send wdi_set_mdns_fqdn_req cmd" );
16503 status = CONVERT_WDI2VOS_STATUS(wstatus);
16504 vos_mem_free(wda_params->wdaWdiApiMsgParam) ;
16505 vos_mem_free(wda_params->wdaMsgParam);
16506 vos_mem_free(wda_params);
16507 }
16508
16509 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16510 "mDNS FQDN set");
16511 return status;
16512}
16513
16514/**
16515 * wda_set_mdns_response_req() - wda api to set mdns resp offload
16516 * @wda_handle: wda handle
16517 * @mdns_rsp_info: mdns resp offload info
16518 *
16519 * Return - 0 for success or else failure
16520 */
16521static int
16522wda_set_mdns_response_req(tWDA_CbContext *wda_handle,
16523 sir_mdns_resp_info_t *mdns_rsp_info)
16524{
16525 wdi_mdns_set_resp_req *rsp_info;
16526 tWDA_ReqParams *wda_params;
16527 WDI_Status wstatus;
16528 VOS_STATUS status = VOS_STATUS_SUCCESS;
16529
16530 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16531 FL("---> %s"), __func__);
16532
16533 if(NULL == mdns_rsp_info)
16534 {
16535 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16536 "%s: dhcp_server_offload_info received NULL",
16537 __func__);
16538 VOS_ASSERT(0) ;
16539 return VOS_STATUS_E_FAULT;
16540 }
16541
16542 rsp_info = (wdi_mdns_set_resp_req *)
16543 vos_mem_malloc(sizeof(*rsp_info));
16544 if (!rsp_info) {
16545 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16546 "Failed to allocate buffer to send "
16547 "wdi_set_mdns_response_req cmd");
16548 vos_mem_free(mdns_rsp_info);
16549 return VOS_STATUS_E_NOMEM;
16550 }
16551
16552 vos_mem_zero(rsp_info, sizeof(*rsp_info));
16553
16554 wda_params = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16555 if(NULL == wda_params)
16556 {
16557 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16558 "%s: VOS MEM Alloc Failure", __func__);
16559 VOS_ASSERT(0);
16560 vos_mem_free(rsp_info);
16561 vos_mem_free(mdns_rsp_info);
16562 return VOS_STATUS_E_NOMEM;
16563 }
16564
16565 rsp_info->bss_idx = mdns_rsp_info->bss_idx;
16566 rsp_info->ar_count = mdns_rsp_info->resourceRecord_count;
16567 rsp_info->resp_len = mdns_rsp_info->resp_len;
16568 vos_mem_copy(rsp_info->resp_data, mdns_rsp_info->resp_data,
16569 mdns_rsp_info->resp_len);
16570 rsp_info->resp_data[mdns_rsp_info->resp_len] = '\0';
16571
16572 wda_params->pWdaContext = wda_handle;
16573 wda_params->wdaMsgParam = mdns_rsp_info;
16574 wda_params->wdaWdiApiMsgParam = (void *)rsp_info;
16575
16576 wstatus = wdi_set_mdns_response_req(rsp_info,
16577 (wdi_mdns_resp_rsp_cb)
16578 wda_mdns_resp_rsp_callback,
16579 wda_params);
16580 if(IS_WDI_STATUS_FAILURE(wstatus))
16581 {
16582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16583 "Failed to send wdi_set_mdns_response_req cmd" );
16584 status = CONVERT_WDI2VOS_STATUS(wstatus);
16585 vos_mem_free(wda_params->wdaWdiApiMsgParam) ;
16586 vos_mem_free(wda_params->wdaMsgParam);
16587 vos_mem_free(wda_params);
16588 }
16589
16590 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16591 "mDNS Response set!");
16592 return status;
16593}
16594
16595/**
16596 * wda_get_mdns_stats_req() - wda api to get mdns stats
16597 * @wda_handle: wda handle
16598 * @mdns_info: mdns info
16599 *
16600 * Return - 0 for success or else failure
16601 */
16602static int
16603wda_get_mdns_stats_req(tWDA_CbContext *wda_handle,
16604 sir_get_mdns_stats_info_t *mdns_info)
16605{
16606 wdi_mdns_get_stats_req *status_info;
16607 tWDA_ReqParams *wda_params;
16608 WDI_Status wstatus;
16609
16610 VOS_STATUS status = VOS_STATUS_SUCCESS;
16611
16612 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16613 FL("---> %s"), __func__);
16614
16615 if(NULL == mdns_info)
16616 {
16617 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16618 "%s: dhcp_server_offload_info received NULL",
16619 __func__);
16620 VOS_ASSERT(0) ;
16621 return VOS_STATUS_E_FAULT;
16622 }
16623
16624 status_info = (wdi_mdns_get_stats_req *)
16625 vos_mem_malloc(sizeof(*status_info));
16626 if (!status_info) {
16627 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16628 "Failed to allocate buffer to send "
16629 "wdi_set_mdns_response_req cmd");
16630 vos_mem_free(mdns_info);
16631 return VOS_STATUS_E_NOMEM;
16632 }
16633
16634 vos_mem_zero(status_info, sizeof(*status_info));
16635
16636 wda_params = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16637 if(NULL == wda_params)
16638 {
16639 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16640 "%s: VOS MEM Alloc Failure", __func__);
16641 VOS_ASSERT(0);
16642 vos_mem_free(status_info);
16643 vos_mem_free(mdns_info);
16644 return VOS_STATUS_E_NOMEM;
16645 }
16646
16647 status_info->bss_idx = mdns_info->bss_idx;
16648
16649 wda_params->pWdaContext = wda_handle;
16650 wda_params->wdaMsgParam = mdns_info;
16651 wda_params->wdaWdiApiMsgParam = (void *)status_info;
16652
16653 wstatus = wdi_get_mdns_stats_req(status_info,
16654 (wdi_get_stats_rsp_cb)
16655 wda_get_stats_rsp_callback,
16656 wda_params);
16657 if(IS_WDI_STATUS_FAILURE(wstatus))
16658 {
16659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16660 "Failed to send wdi_set_mdns_response_req cmd" );
16661 status = CONVERT_WDI2VOS_STATUS(wstatus);
16662 vos_mem_free(wda_params->wdaWdiApiMsgParam) ;
16663 vos_mem_free(wda_params->wdaMsgParam);
16664 vos_mem_free(wda_params);
16665 }
16666
16667 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16668 "Get mDNS stats");
16669 return status;
16670}
16671#endif /* MDNS_OFFLOAD */
Anurag Chouhan83026002016-12-13 22:46:21 +053016672
Bhargav Shahe3a6ff02016-04-11 16:31:49 +053016673/*
Jeff Johnson295189b2012-06-20 16:38:30 -070016674 * FUNCTION: WDA_McProcessMsg
16675 * Trigger DAL-AL to start CFG download
16676 */
16677VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
16678{
16679 VOS_STATUS status = VOS_STATUS_SUCCESS;
16680 tWDA_CbContext *pWDA = NULL ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053016681 if(NULL == pMsg)
Jeff Johnson295189b2012-06-20 16:38:30 -070016682 {
16683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016684 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016685 VOS_ASSERT(0);
16686 return VOS_STATUS_E_FAILURE;
16687 }
16688
16689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016690 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070016691
16692 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
16693 if(NULL == pWDA )
16694 {
16695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053016696 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016697 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070016698 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070016699 return VOS_STATUS_E_FAILURE;
16700 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016701 /* Process all the WDA messages.. */
16702 switch( pMsg->type )
16703 {
16704 case WNI_CFG_DNLD_REQ:
16705 {
16706 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070016707 /* call WDA complete event if config download success */
16708 if( VOS_IS_STATUS_SUCCESS(status) )
16709 {
16710 vos_WDAComplete_cback(pVosContext);
16711 }
16712 else
16713 {
16714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16715 "WDA Config Download failure" );
16716 }
16717 break ;
16718 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016719 /*
16720 * Init SCAN request from PE, convert it into DAL format
16721 * and send it to DAL
16722 */
16723 case WDA_INIT_SCAN_REQ:
16724 {
16725 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
16726 break ;
16727 }
16728 /* start SCAN request from PE */
16729 case WDA_START_SCAN_REQ:
16730 {
16731 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
16732 break ;
16733 }
16734 /* end SCAN request from PE */
16735 case WDA_END_SCAN_REQ:
16736 {
16737 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
16738 break ;
16739 }
16740 /* end SCAN request from PE */
16741 case WDA_FINISH_SCAN_REQ:
16742 {
16743 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
16744 break ;
16745 }
16746 /* join request from PE */
16747 case WDA_CHNL_SWITCH_REQ:
16748 {
16749 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
16750 {
16751 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
16752 }
16753 else
16754 {
Kalikinkar dhara1e83b772014-02-06 12:59:22 -080016755 if (IS_FEATURE_SUPPORTED_BY_FW(CH_SWITCH_V1) &&
16756 eHAL_CHANNEL_SWITCH_SOURCE_CSA ==
16757 ((tSwitchChannelParams*)pMsg->bodyptr)->channelSwitchSrc )
16758 {
16759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16760 "call ProcessChannelSwitchReq_V1" );
16761 WDA_ProcessChannelSwitchReq_V1(pWDA,
16762 (tSwitchChannelParams*)pMsg->bodyptr) ;
16763 }
16764 else
16765 {
16766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16767 "call ProcessChannelSwitchReq" );
16768 WDA_ProcessChannelSwitchReq(pWDA,
16769 (tSwitchChannelParams*)pMsg->bodyptr) ;
16770 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016771 }
16772 break ;
16773 }
16774 /* ADD BSS request from PE */
16775 case WDA_ADD_BSS_REQ:
16776 {
16777 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
16778 break ;
16779 }
16780 case WDA_ADD_STA_REQ:
16781 {
16782 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
16783 break ;
16784 }
16785 case WDA_DELETE_BSS_REQ:
16786 {
Jeff Johnson295189b2012-06-20 16:38:30 -070016787 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
16788 break ;
16789 }
16790 case WDA_DELETE_STA_REQ:
16791 {
Jeff Johnson295189b2012-06-20 16:38:30 -070016792 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
16793 break ;
16794 }
16795 case WDA_CONFIG_PARAM_UPDATE_REQ:
16796 {
16797 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
16798 break ;
16799 }
16800 case WDA_SET_BSSKEY_REQ:
16801 {
16802 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
16803 break ;
16804 }
16805 case WDA_SET_STAKEY_REQ:
16806 {
16807 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
16808 break ;
16809 }
16810 case WDA_SET_STA_BCASTKEY_REQ:
16811 {
16812 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
16813 break ;
16814 }
16815 case WDA_REMOVE_BSSKEY_REQ:
16816 {
16817 WDA_ProcessRemoveBssKeyReq(pWDA,
16818 (tRemoveBssKeyParams *)pMsg->bodyptr);
16819 break ;
16820 }
16821 case WDA_REMOVE_STAKEY_REQ:
16822 {
16823 WDA_ProcessRemoveStaKeyReq(pWDA,
16824 (tRemoveStaKeyParams *)pMsg->bodyptr);
16825 break ;
16826 }
16827 case WDA_REMOVE_STA_BCASTKEY_REQ:
16828 {
16829 /* TODO: currently UMAC is not sending this request, Add the code for
16830 handling this request when UMAC supports */
16831 break;
16832 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080016833#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -070016834 case WDA_TSM_STATS_REQ:
16835 {
Srinivas Girigowda5cecb202013-10-08 09:13:25 -070016836 WDA_ProcessTsmStatsReq(pWDA, (tpAniGetTsmStatsReq)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070016837 break;
16838 }
16839#endif
16840 case WDA_UPDATE_EDCA_PROFILE_IND:
16841 {
16842 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
16843 break;
16844 }
16845 case WDA_ADD_TS_REQ:
16846 {
16847 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
16848 break;
16849 }
16850 case WDA_DEL_TS_REQ:
16851 {
16852 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
16853 break;
16854 }
16855 case WDA_ADDBA_REQ:
16856 {
16857 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
16858 break;
16859 }
16860 case WDA_DELBA_IND:
16861 {
16862 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
16863 break;
16864 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080016865 case WDA_UPDATE_CHAN_LIST_REQ:
16866 {
16867 WDA_ProcessUpdateChannelList(pWDA,
16868 (tSirUpdateChanList *)pMsg->bodyptr);
16869 break;
16870 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016871 case WDA_SET_LINK_STATE:
16872 {
16873 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
16874 break;
16875 }
16876 case WDA_GET_STATISTICS_REQ:
16877 {
16878 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
16879 break;
16880 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080016881#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080016882 case WDA_GET_ROAM_RSSI_REQ:
16883 {
16884 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
16885 break;
16886 }
16887#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070016888 case WDA_PWR_SAVE_CFG:
16889 {
16890 if(pWDA->wdaState == WDA_READY_STATE)
16891 {
16892 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
16893 }
16894 else
16895 {
16896 if(NULL != pMsg->bodyptr)
16897 {
16898 vos_mem_free(pMsg->bodyptr);
16899 }
16900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16901 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
16902 }
16903 break;
16904 }
mukul sharma6b53e202016-11-23 19:29:18 +053016905 case WDA_UPDATE_CFG_INT_PARAM:
16906 {
16907 if(pWDA->wdaState == WDA_READY_STATE)
16908 {
16909 WDA_UpdateCfgIntParam(pWDA, (tSirUpdateCfgIntParam *)pMsg->bodyptr);
16910 vos_mem_free(pMsg->bodyptr);
16911 }
16912 else
16913 {
16914 if(NULL != pMsg->bodyptr)
16915 {
16916 vos_mem_free(pMsg->bodyptr);
16917 }
16918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16919 " WDA_UPDATE_CFG_INT_PARAM req in wrong state %d",
16920 pWDA->wdaState );
16921 }
16922 break;
16923 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016924 case WDA_ENTER_IMPS_REQ:
16925 {
16926 if(pWDA->wdaState == WDA_READY_STATE)
16927 {
16928 WDA_ProcessEnterImpsReq(pWDA);
16929 }
16930 else
16931 {
16932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16933 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
16934 }
16935 break;
16936 }
16937 case WDA_EXIT_IMPS_REQ:
16938 {
16939 if(pWDA->wdaState == WDA_READY_STATE)
16940 {
16941 WDA_ProcessExitImpsReq(pWDA);
16942 }
16943 else
16944 {
16945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16946 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
16947 }
16948 break;
16949 }
16950 case WDA_ENTER_BMPS_REQ:
16951 {
16952 if(pWDA->wdaState == WDA_READY_STATE)
16953 {
16954 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
16955 }
16956 else
16957 {
16958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16959 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
16960 }
16961 break;
16962 }
16963 case WDA_EXIT_BMPS_REQ:
16964 {
16965 if(pWDA->wdaState == WDA_READY_STATE)
16966 {
16967 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
16968 }
16969 else
16970 {
16971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16972 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
16973 }
16974 break;
16975 }
16976 case WDA_ENTER_UAPSD_REQ:
16977 {
16978 if(pWDA->wdaState == WDA_READY_STATE)
16979 {
16980 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
16981 }
16982 else
16983 {
16984 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16985 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
16986 }
16987 break;
16988 }
16989 case WDA_EXIT_UAPSD_REQ:
16990 {
16991 if(pWDA->wdaState == WDA_READY_STATE)
16992 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016993 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070016994 }
16995 else
16996 {
16997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16998 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
16999 }
17000 break;
17001 }
17002 case WDA_UPDATE_UAPSD_IND:
17003 {
17004 if(pWDA->wdaState == WDA_READY_STATE)
17005 {
17006 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
17007 }
17008 else
17009 {
17010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17011 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
17012 }
17013 break;
17014 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017015 case WDA_REGISTER_PE_CALLBACK :
17016 {
17017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
17018 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
17019 /*TODO: store the PE callback */
17020 /* Do Nothing? MSG Body should be freed at here */
17021 if(NULL != pMsg->bodyptr)
17022 {
17023 vos_mem_free(pMsg->bodyptr);
17024 }
17025 break;
17026 }
17027 case WDA_SYS_READY_IND :
17028 {
17029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
17030 "Handling msg type WDA_SYS_READY_IND " );
17031 pWDA->wdaState = WDA_READY_STATE;
17032 if(NULL != pMsg->bodyptr)
17033 {
17034 vos_mem_free(pMsg->bodyptr);
17035 }
17036 break;
17037 }
17038 case WDA_BEACON_FILTER_IND :
17039 {
17040 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
17041 break;
17042 }
17043 case WDA_BTC_SET_CFG:
17044 {
17045 /*TODO: handle this while dealing with BTC */
17046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
17047 "Handling msg type WDA_BTC_SET_CFG " );
17048 /* Do Nothing? MSG Body should be freed at here */
17049 if(NULL != pMsg->bodyptr)
17050 {
17051 vos_mem_free(pMsg->bodyptr);
17052 }
17053 break;
17054 }
17055 case WDA_SIGNAL_BT_EVENT:
17056 {
17057 /*TODO: handle this while dealing with BTC */
17058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
17059 "Handling msg type WDA_SIGNAL_BT_EVENT " );
17060 /* Do Nothing? MSG Body should be freed at here */
17061 if(NULL != pMsg->bodyptr)
17062 {
17063 vos_mem_free(pMsg->bodyptr);
17064 }
17065 break;
17066 }
17067 case WDA_CFG_RXP_FILTER_REQ:
17068 {
17069 WDA_ProcessConfigureRxpFilterReq(pWDA,
17070 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
17071 break;
17072 }
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053017073 case WDA_MGMT_LOGGING_INIT_REQ:
17074 {
Siddharth Bhald1be97f2015-05-27 22:39:59 +053017075 WDA_ProcessFWLoggingInitReq(pWDA,
17076 (tSirFWLoggingInitParam *)pMsg->bodyptr);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053017077 break;
17078 }
Siddharth Bhal64246172015-02-27 01:04:37 +053017079 case WDA_GET_FRAME_LOG_REQ:
17080 {
17081 WDA_ProcessGetFrameLogReq(pWDA,
17082 (tAniGetFrameLogReq *)pMsg->bodyptr);
17083 break;
17084 }
Gupta, Kapil7c34b322015-09-30 13:12:35 +053017085 case WDA_START_RSSI_MONITOR_REQ:
17086 {
17087 WDA_ProcessStartRssiMonitorReq(pWDA,(tSirRssiMonitorReq *)pMsg->bodyptr);
17088 break;
17089 }
17090 case WDA_STOP_RSSI_MONITOR_REQ:
17091 {
17092 WDA_ProcessStopRssiMonitorReq(pWDA,(tSirRssiMonitorReq *)pMsg->bodyptr);
17093 break;
17094 }
Karthick Sa35b0692015-08-21 15:57:05 +053017095 case WDA_SEND_LOG_DONE_IND:
17096 {
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053017097 WDA_FWLoggingDXEdoneInd(pMsg->bodyval);
Karthick Sa35b0692015-08-21 15:57:05 +053017098 break;
17099 }
Sachin Ahuja715aafc2015-07-21 23:35:10 +053017100 case WDA_FATAL_EVENT_LOGS_REQ:
17101 {
17102 WDA_ProcessFatalEventLogsReq(pWDA,
17103 (tSirFatalEventLogsReqParam *)pMsg->bodyptr);
17104 break;
17105 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017106 case WDA_SET_HOST_OFFLOAD:
17107 {
17108 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
17109 break;
17110 }
17111 case WDA_SET_KEEP_ALIVE:
17112 {
17113 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
17114 break;
17115 }
17116#ifdef WLAN_NS_OFFLOAD
17117 case WDA_SET_NS_OFFLOAD:
17118 {
17119 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
17120 break;
17121 }
17122#endif //WLAN_NS_OFFLOAD
17123 case WDA_ADD_STA_SELF_REQ:
17124 {
17125 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
17126 break;
17127 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017128 case WDA_DEL_STA_SELF_REQ:
17129 {
17130 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
17131 break;
17132 }
17133 case WDA_WOWL_ADD_BCAST_PTRN:
17134 {
17135 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
17136 break;
17137 }
17138 case WDA_WOWL_DEL_BCAST_PTRN:
17139 {
17140 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
17141 break;
17142 }
17143 case WDA_WOWL_ENTER_REQ:
17144 {
17145 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
17146 break;
17147 }
17148 case WDA_WOWL_EXIT_REQ:
17149 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070017150 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070017151 break;
17152 }
17153 case WDA_TL_FLUSH_AC_REQ:
17154 {
17155 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
17156 break;
17157 }
17158 case WDA_SIGNAL_BTAMP_EVENT:
17159 {
17160 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
17161 break;
17162 }
Abhishek Singh85b74712014-10-08 11:38:19 +053017163 case WDA_FW_STATS_GET_REQ:
17164 {
17165 WDA_ProcessFWStatsGetReq(pWDA,
17166 (tSirFWStatsGetReq *)pMsg->bodyptr);
17167 break;
17168 }
Sunil Duttbd736ed2014-05-26 21:19:41 +053017169#ifdef WLAN_FEATURE_LINK_LAYER_STATS
17170 case WDA_LINK_LAYER_STATS_SET_REQ:
17171 {
17172 WDA_ProcessLLStatsSetReq(pWDA, (tSirLLStatsSetReq *)pMsg->bodyptr);
17173 break;
17174 }
17175 case WDA_LINK_LAYER_STATS_GET_REQ:
17176 {
17177 WDA_ProcessLLStatsGetReq(pWDA, (tSirLLStatsGetReq *)pMsg->bodyptr);
17178 break;
17179 }
17180 case WDA_LINK_LAYER_STATS_CLEAR_REQ:
17181 {
17182 WDA_ProcessLLStatsClearReq(pWDA, (tSirLLStatsClearReq *)pMsg->bodyptr);
17183 break;
17184 }
17185#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Dino Mycle41bdc942014-06-10 11:30:24 +053017186#ifdef WLAN_FEATURE_EXTSCAN
17187 case WDA_EXTSCAN_GET_CAPABILITIES_REQ:
17188 {
17189 WDA_ProcessEXTScanGetCapabilitiesReq(pWDA,
17190 (tSirGetEXTScanCapabilitiesReqParams *)pMsg->bodyptr);
17191 break;
17192 }
17193 case WDA_EXTSCAN_START_REQ:
17194 {
17195 WDA_ProcessEXTScanStartReq(pWDA,
17196 (tSirEXTScanStartReqParams *)pMsg->bodyptr);
17197 break;
17198 }
17199 case WDA_EXTSCAN_STOP_REQ:
17200 {
17201 WDA_ProcessEXTScanStopReq(pWDA,
17202 (tSirEXTScanStopReqParams *)pMsg->bodyptr);
17203 break;
17204 }
17205 case WDA_EXTSCAN_GET_CACHED_RESULTS_REQ:
17206 {
17207 WDA_ProcessEXTScanGetCachedResultsReq(pWDA,
17208 (tSirEXTScanGetCachedResultsReqParams *)pMsg->bodyptr);
17209 break;
17210 }
17211 case WDA_EXTSCAN_SET_BSSID_HOTLIST_REQ:
17212 {
17213 WDA_ProcessEXTScanSetBSSIDHotlistReq(pWDA,
17214 (tSirEXTScanSetBssidHotListReqParams *)pMsg->bodyptr);
17215 break;
17216 }
17217 case WDA_EXTSCAN_RESET_BSSID_HOTLIST_REQ:
17218 {
17219 WDA_ProcessEXTScanResetBSSIDHotlistReq(pWDA,
17220 (tSirEXTScanResetBssidHotlistReqParams *)pMsg->bodyptr);
17221 break;
17222 }
Padma, Santhosh Kumarc1f7f052015-08-26 12:29:01 +053017223 case WDA_HIGH_PRIORITY_DATA_INFO_IND:
17224 {
17225 WDA_ProcessHighPriorityDataInfoInd(pWDA,
17226 (tSirHighPriorityDataInfoInd *)pMsg->bodyptr);
17227 break;
17228 }
Dino Mycle41bdc942014-06-10 11:30:24 +053017229#endif /* WLAN_FEATURE_EXTSCAN */
Jeff Johnson295189b2012-06-20 16:38:30 -070017230#ifdef WDA_UT
17231 case WDA_WDI_EVENT_MSG:
17232 {
17233 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
17234 break ;
17235 }
17236#endif
17237 case WDA_UPDATE_BEACON_IND:
17238 {
17239 WDA_ProcessUpdateBeaconParams(pWDA,
17240 (tUpdateBeaconParams *)pMsg->bodyptr);
17241 break;
17242 }
17243 case WDA_SEND_BEACON_REQ:
17244 {
17245 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
17246 break;
17247 }
17248 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
17249 {
17250 WDA_ProcessUpdateProbeRspTemplate(pWDA,
17251 (tSendProbeRespParams *)pMsg->bodyptr);
17252 break;
17253 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080017254#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -070017255 case WDA_SET_MAX_TX_POWER_REQ:
17256 {
17257 WDA_ProcessSetMaxTxPowerReq(pWDA,
17258 (tMaxTxPowerParams *)pMsg->bodyptr);
17259 break;
17260 }
17261#endif
Arif Hussaina5ebce02013-08-09 15:09:58 -070017262 case WDA_SET_MAX_TX_POWER_PER_BAND_REQ:
17263 {
17264 WDA_ProcessSetMaxTxPowerPerBandReq(pWDA, (tMaxTxPowerPerBandParams *)
17265 pMsg->bodyptr);
17266 break;
17267 }
schang86c22c42013-03-13 18:41:24 -070017268 case WDA_SET_TX_POWER_REQ:
17269 {
17270 WDA_ProcessSetTxPowerReq(pWDA,
17271 (tSirSetTxPowerReq *)pMsg->bodyptr);
17272 break;
17273 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017274 case WDA_SET_P2P_GO_NOA_REQ:
17275 {
17276 WDA_ProcessSetP2PGONOAReq(pWDA,
17277 (tP2pPsParams *)pMsg->bodyptr);
17278 break;
17279 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017280 /* timer related messages */
17281 case WDA_TIMER_BA_ACTIVITY_REQ:
17282 {
17283 WDA_BaCheckActivity(pWDA) ;
17284 break ;
17285 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080017286
17287 /* timer related messages */
17288 case WDA_TIMER_TRAFFIC_STATS_IND:
17289 {
17290 WDA_TimerTrafficStatsInd(pWDA);
17291 break;
17292 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017293#ifdef WLAN_FEATURE_VOWIFI_11R
17294 case WDA_AGGR_QOS_REQ:
17295 {
17296 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
17297 break;
17298 }
17299#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070017300 case WDA_FTM_CMD_REQ:
17301 {
17302 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
17303 break ;
17304 }
Jeff Johnsone7245742012-09-05 17:12:55 -070017305#ifdef FEATURE_OEM_DATA_SUPPORT
17306 case WDA_START_OEM_DATA_REQ:
17307 {
17308 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
17309 break;
17310 }
17311#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070017312 /* Tx Complete Time out Indication */
17313 case WDA_TX_COMPLETE_TIMEOUT_IND:
17314 {
17315 WDA_ProcessTxCompleteTimeOutInd(pWDA);
17316 break;
17317 }
17318 case WDA_WLAN_SUSPEND_IND:
17319 {
17320 WDA_ProcessWlanSuspendInd(pWDA,
17321 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
17322 break;
17323 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017324 case WDA_WLAN_RESUME_REQ:
17325 {
17326 WDA_ProcessWlanResumeReq(pWDA,
17327 (tSirWlanResumeParam *)pMsg->bodyptr) ;
17328 break;
17329 }
17330
17331 case WDA_UPDATE_CF_IND:
17332 {
17333 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
17334 pMsg->bodyptr = NULL;
17335 break;
17336 }
17337#ifdef FEATURE_WLAN_SCAN_PNO
17338 case WDA_SET_PNO_REQ:
17339 {
17340 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
17341 break;
17342 }
17343 case WDA_UPDATE_SCAN_PARAMS_REQ:
17344 {
17345 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
17346 break;
17347 }
17348 case WDA_SET_RSSI_FILTER_REQ:
17349 {
17350 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
17351 break;
17352 }
17353#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017354#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017355 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017356 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017357 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017358 break;
17359 }
Kapil Gupta04ab1992016-06-26 13:36:51 +053017360 case WDA_PER_ROAM_SCAN_OFFLOAD_REQ:
17361 {
17362 WDA_ProcessPERRoamScanOffloadReq(pWDA, (tSirPERRoamOffloadScanReq *)pMsg->bodyptr);
17363 break;
17364 }
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017365#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070017366 case WDA_SET_TX_PER_TRACKING_REQ:
17367 {
17368 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
17369 break;
17370 }
17371
17372#ifdef WLAN_FEATURE_PACKET_FILTERING
17373 case WDA_8023_MULTICAST_LIST_REQ:
17374 {
17375 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
17376 break;
17377 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017378 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
17379 {
17380 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
17381 break;
17382 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017383 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
17384 {
17385 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
17386 break;
17387 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017388 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
17389 {
17390 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
17391 break;
17392 }
17393#endif // WLAN_FEATURE_PACKET_FILTERING
17394
17395
17396 case WDA_TRANSMISSION_CONTROL_IND:
17397 {
17398 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
17399 break;
17400 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017401 case WDA_SET_POWER_PARAMS_REQ:
17402 {
17403 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
17404 break;
17405 }
c_manjeecfd1efb2015-09-25 19:32:34 +053017406 case WDA_FW_MEM_DUMP_REQ:
17407 {
17408 WDA_ProcessFwrMemDumpReq(pWDA, (tAniFwrDumpReq*)pMsg->bodyptr);
17409 break;
17410 }
17411
Jeff Johnson295189b2012-06-20 16:38:30 -070017412#ifdef WLAN_FEATURE_GTK_OFFLOAD
17413 case WDA_GTK_OFFLOAD_REQ:
17414 {
17415 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
17416 break;
17417 }
17418
17419 case WDA_GTK_OFFLOAD_GETINFO_REQ:
17420 {
17421 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
17422 break;
17423 }
17424#endif //WLAN_FEATURE_GTK_OFFLOAD
17425
17426 case WDA_SET_TM_LEVEL_REQ:
17427 {
17428 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
17429 break;
17430 }
Sandeep Puligilla60342762014-01-30 21:05:37 +053017431
Mohit Khanna4a70d262012-09-11 16:30:12 -070017432 case WDA_UPDATE_OP_MODE:
17433 {
Sandeep Puligilla60342762014-01-30 21:05:37 +053017434 if(WDA_getHostWlanFeatCaps(HT40_OBSS_SCAN) &&
17435 WDA_getFwWlanFeatCaps(HT40_OBSS_SCAN))
17436 {
17437 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
17438 }
17439 else if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
Mohit Khanna4a70d262012-09-11 16:30:12 -070017440 {
17441 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
17442 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
17443 else
17444 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017445 " VHT OpMode Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070017446 }
17447 else
17448 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017449 " 11AC Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070017450 break;
17451 }
Chet Lanctot186b5732013-03-18 10:26:30 -070017452#ifdef WLAN_FEATURE_11W
17453 case WDA_EXCLUDE_UNENCRYPTED_IND:
17454 {
17455 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
17456 break;
17457 }
17458#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053017459#ifdef FEATURE_WLAN_TDLS
17460 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
17461 {
17462 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
17463 break;
17464 }
17465#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053017466 case WDA_DHCP_START_IND:
17467 {
17468 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
17469 break;
17470 }
17471 case WDA_DHCP_STOP_IND:
17472 {
17473 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
17474 break;
17475 }
Leo Chang9056f462013-08-01 19:21:11 -070017476#ifdef FEATURE_WLAN_LPHB
17477 case WDA_LPHB_CONF_REQ:
17478 {
17479 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
17480 break;
17481 }
17482#endif
Yue Mab9c86f42013-08-14 15:59:08 -070017483 case WDA_ADD_PERIODIC_TX_PTRN_IND:
17484 {
17485 WDA_ProcessAddPeriodicTxPtrnInd(pWDA,
17486 (tSirAddPeriodicTxPtrn *)pMsg->bodyptr);
17487 break;
17488 }
17489 case WDA_DEL_PERIODIC_TX_PTRN_IND:
17490 {
17491 WDA_ProcessDelPeriodicTxPtrnInd(pWDA,
17492 (tSirDelPeriodicTxPtrn *)pMsg->bodyptr);
17493 break;
17494 }
Abhishek Singh00b71972016-01-07 10:51:04 +053017495 case WDA_RATE_UPDATE_IND:
17496 {
17497 WDA_ProcessRateUpdateInd(pWDA, (tSirRateUpdateInd *)pMsg->bodyptr);
17498 break;
17499 }
17500#ifdef WLAN_FEATURE_RMC
17501 case WDA_RMC_RULER_REQ:
17502 {
17503 WDA_ProcessRMCRulerReq(pWDA, (tSirRmcRulerReq *)pMsg->bodyptr);
17504 break;
17505 }
17506 case WDA_RMC_UPDATE_IND:
17507 {
17508 WDA_ProcessRMCUpdateInd(pWDA, (tSirRmcUpdateInd *)pMsg->bodyptr);
17509 break;
17510 }
17511 case WDA_GET_IBSS_PEER_INFO_REQ:
17512 {
17513 WDA_ProcessIbssPeerInfoReq(pWDA,
17514 (tSirIbssGetPeerInfoReqParams *)pMsg->bodyptr);
17515 break;
17516 }
17517 case WDA_TX_FAIL_MONITOR_IND:
17518 {
17519 WDA_ProcessTXFailMonitorInd(pWDA, (tAniTXFailMonitorInd *)pMsg->bodyptr);
17520 break;
17521 }
17522#endif /* WLAN_FEATURE_RMC */
Kapil Gupta04ab1992016-06-26 13:36:51 +053017523#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
17524 case WDA_PER_ROAM_SCAN_TRIGGER_REQ:
17525 {
17526 WDA_ProcessPERRoamScanTriggerReq(pWDA,
17527 (tPERRoamScanStart *)pMsg->bodyptr);
17528 break;
17529 }
17530#endif
Rajeev79dbe4c2013-10-05 11:03:42 +053017531#ifdef FEATURE_WLAN_BATCH_SCAN
17532 case WDA_SET_BATCH_SCAN_REQ:
17533 {
17534 WDA_ProcessSetBatchScanReq(pWDA,
17535 (tSirSetBatchScanReq *)pMsg->bodyptr);
17536 break;
17537 }
17538 case WDA_TRIGGER_BATCH_SCAN_RESULT_IND:
17539 {
17540 WDA_ProcessTriggerBatchScanResultInd(pWDA,
17541 (tSirTriggerBatchScanResultInd *)pMsg->bodyptr);
17542 break;
17543 }
17544 case WDA_STOP_BATCH_SCAN_IND:
17545 {
17546 WDA_ProcessStopBatchScanInd(pWDA,
17547 (tSirStopBatchScanInd *)pMsg->bodyptr);
17548 break;
17549 }
c_hpothu92367912014-05-01 15:18:17 +053017550 case WDA_GET_BCN_MISS_RATE_REQ:
17551 WDA_ProcessGetBcnMissRateReq(pWDA,
17552 (tSirBcnMissRateReq *)pMsg->bodyptr);
17553 break;
Rajeev79dbe4c2013-10-05 11:03:42 +053017554#endif
17555
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053017556 case WDA_HT40_OBSS_SCAN_IND:
17557 {
17558 WDA_ProcessHT40OBSSScanInd(pWDA,
17559 (tSirHT40OBSSScanInd *)pMsg->bodyptr);
17560 break;
17561 }
17562 case WDA_HT40_OBSS_STOP_SCAN_IND:
17563 {
17564 WDA_ProcessHT40OBSSStopScanInd(pWDA,
17565 (tANI_U8*)pMsg->bodyptr);
17566 break;
17567 }
Atul Mittalc0f739f2014-07-31 13:47:47 +053017568// tdlsoffchan
17569#ifdef FEATURE_WLAN_TDLS
17570 case WDA_SET_TDLS_CHAN_SWITCH_REQ:
17571 {
17572 WDA_ProcessSetTdlsChanSwitchReq(pWDA, (tTdlsChanSwitchParams *)pMsg->bodyptr);
17573 break;
17574 }
17575#endif
Siddharth Bhal171788a2014-09-29 21:02:40 +053017576 case WDA_SPOOF_MAC_ADDR_REQ:
17577 {
17578 WDA_ProcessSetSpoofMacAddrReq(pWDA, (tpSpoofMacAddrReqParams)pMsg->bodyptr);
17579 break;
17580 }
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053017581 case WDA_ENCRYPT_MSG_REQ:
17582 {
17583 WDA_ProcessEncryptMsgReq(pWDA, (u8 *)pMsg->bodyptr);
17584 break;
17585 }
Anurag Chouhan83026002016-12-13 22:46:21 +053017586#ifdef DHCP_SERVER_OFFLOAD
17587 case WDA_SET_DHCP_SERVER_OFFLOAD_REQ:
17588 {
17589 wda_process_dhcpserver_offload_req(pWDA,
17590 (sir_dhcp_srv_offload_info_t *)pMsg->bodyptr);
17591 break;
17592 }
17593#endif /* DHCP_SERVER_OFFLOAD */
Anurag Chouhan0b29de02016-12-16 13:18:40 +053017594#ifdef MDNS_OFFLOAD
17595 case WDA_SET_MDNS_OFFLOAD_CMD:
17596 wda_set_mdns_offload_req(pWDA,
17597 (sir_mdns_offload_info_t *)pMsg->bodyptr);
17598 break;
17599 case WDA_SET_MDNS_FQDN_CMD:
17600 wda_set_mdns_fqdn_req(pWDA,
17601 (sir_mdns_fqdn_info_t *)pMsg->bodyptr);
17602 break;
17603 case WDA_SET_MDNS_RESPONSE_CMD:
17604 wda_set_mdns_response_req(pWDA,
17605 (sir_mdns_resp_info_t *)pMsg->bodyptr);
17606 break;
17607 case WDA_GET_MDNS_STATUS_CMD:
17608 wda_get_mdns_stats_req(pWDA,
17609 (sir_get_mdns_stats_info_t *) pMsg->bodyptr);
17610 break;
17611#endif /* MDNS_OFFLOAD */
Srinivas Dasari32a79262015-02-19 13:04:49 +053017612 case WDA_NAN_REQUEST:
17613 {
17614 WDA_ProcessNanRequest( pWDA, (tNanRequest *)pMsg->bodyptr);
17615 break;
17616 }
Abhishek Singh41988ba2015-05-25 19:42:29 +053017617 case WDA_SET_RTS_CTS_HTVHT:
17618 {
17619 WDA_ProcessSetRtsCtsHTVhtInd( pWDA, pMsg->bodyval);
17620 break;
17621 }
Katya Nigamf0511f62015-05-05 16:40:57 +053017622
17623 case WDA_MON_START_REQ:
17624 {
17625 WDA_ProcessMonStartReq(pWDA,(v_PVOID_t)pMsg->bodyptr);
17626 break;
17627 }
17628 case WDA_MON_STOP_REQ:
17629 {
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053017630 WDA_ProcessMonStopReq(pWDA, (v_PVOID_t)pMsg->bodyptr);
Katya Nigamf0511f62015-05-05 16:40:57 +053017631 break;
17632 }
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +053017633 case WDA_SEND_FREQ_RANGE_CONTROL_IND:
17634 {
17635 WDA_ProcessEnableDisableCAEventInd(pWDA, pMsg->bodyval);
17636 break;
17637 }
Arun Khandavalli7eeb1592015-10-19 21:36:57 +053017638 case WDA_WIFI_CONFIG_REQ:
17639 {
17640 WDA_ProcessWifiConfigReq(pWDA,(tSetWifiConfigParams *)pMsg->bodyptr);
17641 break;
17642 }
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053017643#ifdef FEATURE_OEM_DATA_SUPPORT
17644 case WDA_START_OEM_DATA_REQ_IND_NEW:
17645 {
17646 WDA_ProcessStartOemDataReqIndNew(pWDA,
17647 (tOemDataReqNewConfig *)pMsg->bodyptr);
17648 break;
17649 }
17650#endif
Mahesh A Saptasagarcfc65ae2015-12-22 15:06:10 +053017651 case WDA_ANTENNA_DIVERSITY_SELECTION_REQ:
17652 {
17653 WDA_ProcessAntennaDiversitySelectionReq(pWDA,
17654 (tSirAntennaDiversitySelectionReq *)pMsg->bodyptr);
17655 break;
17656 }
Mahesh A Saptasagar7d432952016-02-09 14:01:03 +053017657 case WDA_MODIFY_ROAM_PARAMS_IND:
17658 {
17659 WDA_ProcessBcnMissPenaltyCount(pWDA,
17660 (tModifyRoamParamsReqParams *)pMsg->bodyptr);
17661 break;
17662 }
Selvaraj, Sridharc045b8b2016-04-06 12:22:35 +053017663
17664 case WDA_SET_ALLOWED_ACTION_FRAMES_IND:
17665 wda_process_set_allowed_action_frames_ind(pWDA,
17666 (struct sir_allowed_action_frames*)pMsg->bodyptr);
17667 break;
17668
Bhargav Shahe3a6ff02016-04-11 16:31:49 +053017669 case WDA_PAUSE_TL_IND:
17670 {
17671 WDA_ProcessTLPauseInd(pWDA, pMsg->bodyval);
17672 break;
17673 }
Kapil Gupta3d923fb2016-12-20 18:59:27 +053017674#ifdef WLAN_FEATURE_APFIND
17675 case WDA_APFIND_SET_CMD:
17676 {
17677 WDA_Process_apfind_set_cmd(pWDA,
17678 (struct hal_apfind_request *)pMsg->bodyptr);
17679 }
17680#endif
Agrawal Ashish17ef5082016-10-17 18:33:21 +053017681#ifdef SAP_AUTH_OFFLOAD
17682 case WDA_SET_SAP_AUTH_OFL:
17683 {
17684 wda_process_sap_auth_offload(pWDA,
17685 (struct tSirSapOffloadInfo*)pMsg->bodyptr);
17686 break;
17687 }
Agrawal Ashisha8e8a722016-10-18 19:07:45 +053017688 case WDA_SAP_OFL_ADD_STA:
17689 {
17690 WDA_ProcessSapAuthOffloadAddStaReq(pWDA,
17691 (tAddStaParams *)pMsg->bodyptr);
17692 break;
17693 }
17694 case WDA_SAP_OFL_DEL_STA:
17695 {
17696 WDA_ProcessSapAuthOffloadDelStaReq(pWDA,
17697 (tDeleteStaParams *)pMsg->bodyptr);
17698 break;
17699 }
Agrawal Ashish17ef5082016-10-17 18:33:21 +053017700#endif
Manjeet Singh3ed79242017-01-11 19:04:32 +053017701 case WDA_CAP_TSF_REQ:
17702 {
17703 WDA_ProcessCapTsfReq(pWDA, (tSirCapTsfParams *)
17704 pMsg->bodyptr);
17705 break;
17706 }
17707 case WDA_GET_TSF_REQ:
17708 {
17709 WDA_ProcessGetTsfReq(pWDA, (tSirCapTsfParams *)pMsg->bodyptr);
17710 break;
17711 }
Anurag Chouhan6ee81542017-02-09 18:09:27 +053017712 case WDA_SET_ARP_STATS_REQ:
17713 {
17714 WDA_ProcessSetARPStatsReq(pWDA, (setArpStatsParams *)pMsg->bodyptr);
17715 break;
17716 }
17717 case WDA_GET_ARP_STATS_REQ:
17718 {
17719 WDA_ProcessGetARPStatsReq(pWDA, (getArpStatsParams *)pMsg->bodyptr);
17720 break;
17721 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017722 default:
17723 {
Agarwal Ashishbf98caf2014-03-25 13:29:11 +053017724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070017725 "No Handling for msg type %x in WDA "
17726 ,pMsg->type);
17727 /* Do Nothing? MSG Body should be freed at here */
17728 if(NULL != pMsg->bodyptr)
17729 {
17730 vos_mem_free(pMsg->bodyptr);
17731 }
17732 //WDA_VOS_ASSERT(0) ;
17733 }
17734 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017735 return status ;
17736}
17737
Jeff Johnson295189b2012-06-20 16:38:30 -070017738/*
17739 * FUNCTION: WDA_LowLevelIndCallback
17740 * IND API callback from WDI, send Ind to PE
17741 */
17742void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
17743 void* pUserData )
17744{
17745 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
17746#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
17747 tSirRSSINotification rssiNotification;
17748#endif
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053017749 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070017750 {
17751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053017752 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017753 VOS_ASSERT(0);
17754 return ;
17755 }
17756
17757 switch(wdiLowLevelInd->wdiIndicationType)
17758 {
17759 case WDI_RSSI_NOTIFICATION_IND:
17760 {
17761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17762 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070017763#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
17764 rssiNotification.bReserved =
17765 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
17766 rssiNotification.bRssiThres1NegCross =
17767 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
17768 rssiNotification.bRssiThres1PosCross =
17769 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
17770 rssiNotification.bRssiThres2NegCross =
17771 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
17772 rssiNotification.bRssiThres2PosCross =
17773 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
17774 rssiNotification.bRssiThres3NegCross =
17775 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
17776 rssiNotification.bRssiThres3PosCross =
17777 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080017778 rssiNotification.avgRssi = (v_S7_t)
17779 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070017780 WLANTL_BMPSRSSIRegionChangedNotification(
17781 pWDA->pVosContext,
17782 &rssiNotification);
17783#endif
17784 break ;
17785 }
17786 case WDI_MISSED_BEACON_IND:
17787 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080017788 tpSirSmeMissedBeaconInd pMissBeacInd =
17789 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070017790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17791 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070017792 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080017793 if(NULL == pMissBeacInd)
17794 {
17795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17796 "%s: VOS MEM Alloc Failure", __func__);
17797 break;
17798 }
17799 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
17800 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
17801 pMissBeacInd->bssIdx =
17802 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
17803 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017804 break ;
17805 }
Kapil Gupta7a3d9b12016-12-20 20:36:38 +053017806#ifdef WLAN_FEATURE_APFIND
17807 case WDI_AP_FOUND_IND:
17808 {
17809 WDA_SendMsg(pWDA, WDA_AP_FIND_IND, NULL, 0) ;
17810 break ;
17811 }
17812#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070017813 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
17814 {
17815 /* TODO: Decode Ind and send Ind to PE */
17816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17817 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
17818 break ;
17819 }
17820
17821 case WDI_MIC_FAILURE_IND:
17822 {
17823 tpSirSmeMicFailureInd pMicInd =
17824 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
17825
17826 if(NULL == pMicInd)
17827 {
17828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017829 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017830 break;
17831 }
17832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17833 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070017834 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
17835 pMicInd->length = sizeof(tSirSmeMicFailureInd);
17836 vos_mem_copy(pMicInd->bssId,
17837 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
17838 sizeof(tSirMacAddr));
17839 vos_mem_copy(pMicInd->info.srcMacAddr,
17840 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
17841 sizeof(tSirMacAddr));
17842 vos_mem_copy(pMicInd->info.taMacAddr,
17843 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
17844 sizeof(tSirMacAddr));
17845 vos_mem_copy(pMicInd->info.dstMacAddr,
17846 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
17847 sizeof(tSirMacAddr));
17848 vos_mem_copy(pMicInd->info.rxMacAddr,
17849 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
17850 sizeof(tSirMacAddr));
17851 pMicInd->info.multicast =
17852 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
17853 pMicInd->info.keyId=
17854 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
17855 pMicInd->info.IV1=
17856 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
17857 vos_mem_copy(pMicInd->info.TSC,
17858 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070017859 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
17860 (void *)pMicInd , 0) ;
17861 break ;
17862 }
17863 case WDI_FATAL_ERROR_IND:
17864 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070017865 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070017866 /* TODO: Decode Ind and send Ind to PE */
17867 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17868 "Received WDI_FATAL_ERROR_IND from WDI ");
17869 break ;
17870 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017871 case WDI_DEL_STA_IND:
17872 {
Jeff Johnson295189b2012-06-20 16:38:30 -070017873 tpDeleteStaContext pDelSTACtx =
17874 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
17875
17876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17877 "Received WDI_DEL_STA_IND from WDI ");
17878 if(NULL == pDelSTACtx)
17879 {
17880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017881 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017882 break;
17883 }
17884 vos_mem_copy(pDelSTACtx->addr2,
17885 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
17886 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070017887 vos_mem_copy(pDelSTACtx->bssId,
17888 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
17889 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070017890 pDelSTACtx->assocId =
17891 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
17892 pDelSTACtx->reasonCode =
17893 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
17894 pDelSTACtx->staId =
17895 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070017896 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
17897 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017898 break ;
17899 }
17900 case WDI_COEX_IND:
17901 {
17902 tANI_U32 index;
17903 vos_msg_t vosMsg;
c_hpothub3458992014-09-19 19:58:57 +053017904 tSirSmeCoexInd *pSmeCoexInd;
17905
17906 if (SIR_COEX_IND_TYPE_CXM_FEATURES_NOTIFICATION ==
17907 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType)
17908 {
17909 if(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData)
17910 {
17911 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17912 FL("Coex state: 0x%x coex feature: 0x%x"),
17913 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[0],
17914 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[1]);
17915
17916 if (wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2] << 16)
17917 {
17918 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, FL("power limit: 0x%x"),
17919 (tANI_U16)(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2]));
17920 }
17921 }
17922 break;
17923 }
17924
17925 pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070017926 if(NULL == pSmeCoexInd)
17927 {
17928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017929 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017930 break;
17931 }
17932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17933 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070017934 /* Message Header */
17935 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
17936 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070017937 /* Info from WDI Indication */
17938 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
17939 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
17940 {
17941 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
17942 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017943 /* VOS message wrapper */
17944 vosMsg.type = eWNI_SME_COEX_IND;
17945 vosMsg.bodyptr = (void *)pSmeCoexInd;
17946 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070017947 /* Send message to SME */
17948 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
17949 {
17950 /* free the mem and return */
17951 vos_mem_free((v_VOID_t *)pSmeCoexInd);
17952 }
17953 else
17954 {
17955 /* DEBUG */
17956 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17957 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
17958 pSmeCoexInd->coexIndType,
17959 pSmeCoexInd->coexIndData[0],
17960 pSmeCoexInd->coexIndData[1],
17961 pSmeCoexInd->coexIndData[2],
17962 pSmeCoexInd->coexIndData[3]);
17963 }
17964 break;
17965 }
17966 case WDI_TX_COMPLETE_IND:
17967 {
17968 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
17969 /* Calling TxCompleteAck Indication from wda context*/
17970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17971 "Complete Indication received from HAL");
17972 if( pWDA->pAckTxCbFunc )
17973 {
17974 if( VOS_STATUS_SUCCESS !=
17975 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
17976 {
17977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17978 "Tx Complete timeout Timer Stop Failed ");
Ganesh Kondabattinib18b3292015-03-16 16:59:26 +053017979 }
Ganesh Kondabattinie1accae2015-06-11 17:18:00 +053017980 if (!IS_FEATURE_SUPPORTED_BY_FW(ENHANCED_TXBD_COMPLETION))
Ganesh Kondabattinib18b3292015-03-16 16:59:26 +053017981 pWDA->pAckTxCbFunc( pMac, &wdiLowLevelInd->wdiIndicationData.tx_complete_status);
17982 else
17983 pWDA->pAckTxCbFunc( pMac, &wdiLowLevelInd->wdiIndicationData.wdiTxBdInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070017984 pWDA->pAckTxCbFunc = NULL;
17985 }
17986 else
17987 {
Ratheesh S P36dbc932015-08-07 14:28:57 +053017988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070017989 "Tx Complete Indication is received after timeout ");
17990 }
17991 break;
17992 }
Viral Modid86bde22012-12-10 13:09:21 -080017993 case WDI_P2P_NOA_START_IND :
17994 {
17995 tSirP2PNoaStart *pP2pNoaStart =
17996 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
17997
17998 if (NULL == pP2pNoaStart)
17999 {
18000 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18001 "Memory allocation failure, "
18002 "WDI_P2P_NOA_START_IND not forwarded");
18003 break;
18004 }
18005 pP2pNoaStart->status =
18006 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
18007 pP2pNoaStart->bssIdx =
18008 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
18009 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
18010 (void *)pP2pNoaStart , 0) ;
18011 break;
18012 }
18013
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053018014#ifdef FEATURE_WLAN_TDLS
18015 case WDI_TDLS_IND :
18016 {
18017 tSirTdlsInd *pTdlsInd =
18018 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
18019
18020 if (NULL == pTdlsInd)
18021 {
18022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18023 "Memory allocation failure, "
18024 "WDI_TDLS_IND not forwarded");
18025 break;
18026 }
18027 pTdlsInd->status =
18028 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
18029 pTdlsInd->assocId =
18030 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
18031 pTdlsInd->staIdx =
18032 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
18033 pTdlsInd->reasonCode =
18034 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
18035 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
18036 (void *)pTdlsInd , 0) ;
18037 break;
18038 }
18039#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070018040 case WDI_P2P_NOA_ATTR_IND :
18041 {
18042 tSirP2PNoaAttr *pP2pNoaAttr =
18043 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070018044 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18045 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070018046 if (NULL == pP2pNoaAttr)
18047 {
18048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18049 "Memory allocation failure, "
18050 "WDI_P2P_NOA_ATTR_IND not forwarded");
18051 break;
18052 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018053 pP2pNoaAttr->index =
18054 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
18055 pP2pNoaAttr->oppPsFlag =
18056 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
18057 pP2pNoaAttr->ctWin =
18058 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
18059
18060 pP2pNoaAttr->uNoa1IntervalCnt =
18061 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
18062 pP2pNoaAttr->uNoa1Duration =
18063 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
18064 pP2pNoaAttr->uNoa1Interval =
18065 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
18066 pP2pNoaAttr->uNoa1StartTime =
18067 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070018068 pP2pNoaAttr->uNoa2IntervalCnt =
18069 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
18070 pP2pNoaAttr->uNoa2Duration =
18071 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
18072 pP2pNoaAttr->uNoa2Interval =
18073 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
18074 pP2pNoaAttr->uNoa2StartTime =
18075 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070018076 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
18077 (void *)pP2pNoaAttr , 0) ;
18078 break;
18079 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018080#ifdef FEATURE_WLAN_SCAN_PNO
18081 case WDI_PREF_NETWORK_FOUND_IND:
18082 {
18083 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070018084 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
18085 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
18086 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
18087 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
18088
Jeff Johnson295189b2012-06-20 16:38:30 -070018089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18090 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070018091 if (NULL == pPrefNetworkFoundInd)
18092 {
18093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18094 "Memory allocation failure, "
18095 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
Kiet Lamb537cfb2013-11-07 12:56:49 +053018096 if (NULL !=
18097 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
18098 {
18099 wpalMemoryFree(
18100 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData
18101 );
18102 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
18103 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018104 break;
18105 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018106 /* Message Header */
18107 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070018108 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070018109
18110 /* Info from WDI Indication */
18111 pPrefNetworkFoundInd->ssId.length =
18112 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070018113 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070018114 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
18115 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
18116 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070018117 if (NULL !=
18118 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
18119 {
18120 pPrefNetworkFoundInd->frameLength =
18121 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
18122 vos_mem_copy( pPrefNetworkFoundInd->data,
18123 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
18124 pPrefNetworkFoundInd->frameLength);
18125 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
18126 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
18127 }
18128 else
18129 {
18130 pPrefNetworkFoundInd->frameLength = 0;
18131 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018132 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070018133 /* VOS message wrapper */
18134 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
18135 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
18136 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070018137 /* Send message to SME */
18138 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
18139 {
18140 /* free the mem and return */
18141 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
18142 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018143 break;
18144 }
18145#endif // FEATURE_WLAN_SCAN_PNO
18146
18147#ifdef WLAN_WAKEUP_EVENTS
18148 case WDI_WAKE_REASON_IND:
18149 {
18150 vos_msg_t vosMsg;
18151 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
18152 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
18153 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
18154
18155 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Sushant Kaushik1b645382014-10-13 16:39:36 +053018156 "[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 -070018157 wdiLowLevelInd->wdiIndicationType,
18158 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
18159 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
18160 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
18161
18162 if (NULL == pWakeReasonInd)
18163 {
18164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18165 "Memory allocation failure, "
18166 "WDI_WAKE_REASON_IND not forwarded");
18167 break;
18168 }
18169
18170 vos_mem_zero(pWakeReasonInd, allocSize);
18171
18172 /* Message Header */
18173 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
18174 pWakeReasonInd->mesgLen = allocSize;
18175
18176 /* Info from WDI Indication */
18177 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
18178 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
18179 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
18180 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
18181 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
18182 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
18183 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
18184 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
18185
18186 /* VOS message wrapper */
18187 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
18188 vosMsg.bodyptr = (void *) pWakeReasonInd;
18189 vosMsg.bodyval = 0;
18190
18191 /* Send message to SME */
18192 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
18193 {
18194 /* free the mem and return */
18195 vos_mem_free((v_VOID_t *) pWakeReasonInd);
18196 }
18197
18198 break;
18199 }
18200#endif // WLAN_WAKEUP_EVENTS
18201
18202 case WDI_TX_PER_HIT_IND:
18203 {
18204 vos_msg_t vosMsg;
18205 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
18206 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
18207 /* VOS message wrapper */
18208 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
18209 vosMsg.bodyptr = NULL;
18210 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070018211 /* Send message to SME */
18212 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
18213 {
18214 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
18215 }
18216 break;
18217 }
Abhishek Singh00b71972016-01-07 10:51:04 +053018218#ifdef WLAN_FEATURE_RMC
18219 case WDI_TX_FAIL_IND:
18220 {
18221 if (pWDA->txFailIndCallback)
18222 {
18223 pWDA->txFailIndCallback(
18224 wdiLowLevelInd->wdiIndicationData.wdiTXFailInd.macAddr,
18225 wdiLowLevelInd->wdiIndicationData.wdiTXFailInd.seqNo);
18226 }
18227 break;
18228 }
18229#endif /* WLAN_FEATURE_RMC */
Jeff Johnson295189b2012-06-20 16:38:30 -070018230
Leo Chang9056f462013-08-01 19:21:11 -070018231#ifdef FEATURE_WLAN_LPHB
Leo Changd9df8aa2013-09-26 13:32:26 -070018232 case WDI_LPHB_IND:
Leo Chang9056f462013-08-01 19:21:11 -070018233 {
Leo Changd9df8aa2013-09-26 13:32:26 -070018234 vos_msg_t vosMsg;
18235 tSirLPHBInd *lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070018236
Leo Changd9df8aa2013-09-26 13:32:26 -070018237 lphbInd =
18238 (tSirLPHBInd *)vos_mem_malloc(sizeof(tSirLPHBInd));
18239 if (NULL == lphbInd)
Leo Chang9056f462013-08-01 19:21:11 -070018240 {
18241 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18242 "%s: LPHB IND buffer alloc Fail", __func__);
18243 return ;
18244 }
18245
Leo Changd9df8aa2013-09-26 13:32:26 -070018246 lphbInd->sessionIdx =
Leo Chang9056f462013-08-01 19:21:11 -070018247 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
Leo Changd9df8aa2013-09-26 13:32:26 -070018248 lphbInd->protocolType =
Leo Chang9056f462013-08-01 19:21:11 -070018249 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
Leo Changd9df8aa2013-09-26 13:32:26 -070018250 lphbInd->eventReason =
Leo Chang9056f462013-08-01 19:21:11 -070018251 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
18252
18253 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Leo Changd9df8aa2013-09-26 13:32:26 -070018254 "Get WDI_LPHB_IND bssIdx %d",
Leo Chang9056f462013-08-01 19:21:11 -070018255 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
18256
Leo Changd9df8aa2013-09-26 13:32:26 -070018257 vosMsg.type = eWNI_SME_LPHB_IND;
18258 vosMsg.bodyptr = lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070018259 vosMsg.bodyval = 0;
18260 /* Send message to SME */
18261 if (VOS_STATUS_SUCCESS !=
18262 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
18263 {
18264 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
18265 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
Leo Changd9df8aa2013-09-26 13:32:26 -070018266 vos_mem_free(lphbInd);
Leo Chang9056f462013-08-01 19:21:11 -070018267 }
18268 break;
18269 }
18270#endif /* FEATURE_WLAN_LPHB */
Yue Mab9c86f42013-08-14 15:59:08 -070018271 case WDI_PERIODIC_TX_PTRN_FW_IND:
18272 {
18273 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18274 "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, "
18275 "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__,
18276 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx,
18277 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx,
18278 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status,
18279 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap);
18280
18281 break;
18282 }
Leo Chang9056f462013-08-01 19:21:11 -070018283
Ravi Joshid2ca7c42013-07-23 08:37:49 -070018284 case WDI_IBSS_PEER_INACTIVITY_IND:
18285 {
18286 tSirIbssPeerInactivityInd *pIbssInd =
18287 (tSirIbssPeerInactivityInd *)
18288 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
18289
18290 if (NULL == pIbssInd)
18291 {
18292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18293 "Memory allocation failure, "
18294 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
18295 break;
18296 }
18297
18298 pIbssInd->bssIdx =
18299 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
18300 pIbssInd->staIdx =
18301 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
18302 vos_mem_copy(pIbssInd->peerAddr,
18303 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
18304 sizeof(tSirMacAddr));
18305 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
18306 break;
18307 }
18308
Abhishek Singh00b71972016-01-07 10:51:04 +053018309#ifdef WLAN_FEATURE_RMC
18310 case WDI_RMC_RULER_PICK_NEW :
18311 {
18312 tSirRmcUpdateInd *pRmcUpdateInd =
18313 (tSirRmcUpdateInd *)vos_mem_malloc(sizeof(tSirRmcUpdateInd));
18314
18315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18316 "Received WDI_RMC_UPDATE_IND from WDI");
18317 if (NULL == pRmcUpdateInd)
18318 {
18319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18320 "Memory allocation failure, "
18321 "WDI_RMC_UPDATE_IND not forwarded");
18322 break;
18323 }
18324
18325 pRmcUpdateInd->indication =
18326 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.indication;
18327 pRmcUpdateInd->role =
18328 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.role;
18329
18330 /* Copy the mcast transmitter which should be us */
18331 vos_mem_copy(pRmcUpdateInd->mcastTransmitter,
18332 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd. \
18333 mcastTransmitter,
18334 sizeof(tSirMacAddr));
18335 /* Copy the mcast group address */
18336 vos_mem_copy(pRmcUpdateInd->mcastGroup,
18337 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.mcastGroup,
18338 sizeof(tSirMacAddr));
18339 vos_mem_copy(pRmcUpdateInd->mcastRuler,
18340 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.mcastRuler,
18341 sizeof(tSirMacAddr));
18342 vos_mem_copy(pRmcUpdateInd->ruler,
18343 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.ruler,
18344 sizeof(pRmcUpdateInd->ruler));
18345
18346 WDA_SendMsg(pWDA, WDA_RMC_UPDATE_IND, (void *)pRmcUpdateInd, 0) ;
18347 break;
18348 }
18349#endif /* WLAN_FEATURE_RMC */
18350
Rajeev79dbe4c2013-10-05 11:03:42 +053018351#ifdef FEATURE_WLAN_BATCH_SCAN
18352 case WDI_BATCH_SCAN_RESULT_IND:
18353 {
18354 void *pBatchScanResult;
18355 void *pCallbackContext;
18356 tpAniSirGlobal pMac;
18357
18358 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
18359 "Received WDI_BATCHSCAN_RESULT_IND from FW");
18360
18361 /*sanity check*/
Sunil Duttbd736ed2014-05-26 21:19:41 +053018362 if (NULL == pWDA)
Rajeev79dbe4c2013-10-05 11:03:42 +053018363 {
18364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18365 "%s:pWDA is NULL", __func__);
18366 VOS_ASSERT(0);
18367 return;
18368 }
18369
18370 pBatchScanResult =
18371 (void *)wdiLowLevelInd->wdiIndicationData.pBatchScanResult;
18372 if (NULL == pBatchScanResult)
18373 {
18374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18375 "%s:Batch scan result from FW is null can't invoke HDD callback",
18376 __func__);
18377 VOS_ASSERT(0);
18378 return;
18379 }
18380
18381 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18382 if (NULL == pMac)
18383 {
18384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18385 "%s:pMac is NULL", __func__);
18386 VOS_ASSERT(0);
18387 return;
18388 }
18389
18390 pCallbackContext = pMac->pmc.batchScanResultCallbackContext;
18391 /*call hdd callback with set batch scan response data*/
18392 if(pMac->pmc.batchScanResultCallback)
18393 {
18394 pMac->pmc.batchScanResultCallback(pCallbackContext,
18395 pBatchScanResult);
18396 }
18397 else
18398 {
18399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18400 "%s:HDD callback is null", __func__);
18401 VOS_ASSERT(0);
18402 }
18403 break;
18404 }
18405#endif
18406
Leo Chang0b0e45a2013-12-15 15:18:55 -080018407#ifdef FEATURE_WLAN_CH_AVOID
18408 case WDI_CH_AVOID_IND:
18409 {
18410 vos_msg_t vosMsg;
18411 tSirChAvoidIndType *chAvoidInd;
18412
18413 chAvoidInd =
18414 (tSirChAvoidIndType *)vos_mem_malloc(sizeof(tSirChAvoidIndType));
18415 if (NULL == chAvoidInd)
18416 {
18417 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18418 "%s: CH_AVOID IND buffer alloc Fail", __func__);
18419 return ;
18420 }
18421
18422 chAvoidInd->avoidRangeCount =
18423 wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidRangeCount;
18424 wpalMemoryCopy((void *)chAvoidInd->avoidFreqRange,
18425 (void *)wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidFreqRange,
18426 chAvoidInd->avoidRangeCount * sizeof(tSirChAvoidFreqType));
18427
18428 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18429 "%s : WDA CH avoid notification", __func__);
18430
18431 vosMsg.type = eWNI_SME_CH_AVOID_IND;
18432 vosMsg.bodyptr = chAvoidInd;
18433 vosMsg.bodyval = 0;
18434 /* Send message to SME */
18435 if (VOS_STATUS_SUCCESS !=
18436 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
18437 {
18438 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18439 "post eWNI_SME_CH_AVOID_IND to SME Failed");
18440 vos_mem_free(chAvoidInd);
18441 }
18442 break;
18443 }
18444#endif /* FEATURE_WLAN_CH_AVOID */
18445
Sunil Duttbd736ed2014-05-26 21:19:41 +053018446#ifdef WLAN_FEATURE_LINK_LAYER_STATS
18447 case WDI_LL_STATS_RESULTS_IND:
18448 {
18449 void *pLinkLayerStatsInd;
Sunil Duttbd736ed2014-05-26 21:19:41 +053018450 tpAniSirGlobal pMac;
18451
18452 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18453 "Received WDI_LL_STATS_RESULTS_IND from FW");
18454
18455 /*sanity check*/
18456 if (NULL == pWDA)
18457 {
18458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18459 "%s:pWDA is NULL", __func__);
18460 VOS_ASSERT(0);
18461 return;
18462 }
18463
18464 pLinkLayerStatsInd =
Dino Mycled3d50022014-07-07 12:58:25 +053018465 (void *)wdiLowLevelInd->
18466 wdiIndicationData.wdiLinkLayerStatsResults.pLinkLayerStatsResults;
Sunil Duttbd736ed2014-05-26 21:19:41 +053018467 if (NULL == pLinkLayerStatsInd)
18468 {
18469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18470 "%s:Link Layer Statistics from FW is null can't invoke HDD callback",
18471 __func__);
18472 VOS_ASSERT(0);
18473 return;
18474 }
18475
18476 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18477 if (NULL == pMac)
18478 {
18479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18480 "%s:pMac is NULL", __func__);
18481 VOS_ASSERT(0);
18482 return;
18483 }
18484
Dino Mycled3d50022014-07-07 12:58:25 +053018485 /* call hdd callback with Link Layer Statistics.
18486 * vdev_id/ifacId in link_stats_results will be
18487 * used to retrieve the correct HDD context
18488 */
Sunil Duttbd736ed2014-05-26 21:19:41 +053018489 if (pMac->sme.pLinkLayerStatsIndCallback)
18490 {
Dino Mycled3d50022014-07-07 12:58:25 +053018491 pMac->sme.pLinkLayerStatsIndCallback(pMac->pAdapter,
Sunil Duttbd736ed2014-05-26 21:19:41 +053018492 WDA_LINK_LAYER_STATS_RESULTS_RSP,
Dino Mycled3d50022014-07-07 12:58:25 +053018493 pLinkLayerStatsInd,
18494 wdiLowLevelInd->
18495 wdiIndicationData.wdiLinkLayerStatsResults.macAddr);
Sunil Duttbd736ed2014-05-26 21:19:41 +053018496 }
18497 else
18498 {
18499 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18500 "%s:HDD callback is null", __func__);
18501 }
18502 break;
18503 }
18504#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
18505
Dino Mycle41bdc942014-06-10 11:30:24 +053018506#ifdef WLAN_FEATURE_EXTSCAN
18507 case WDI_EXTSCAN_PROGRESS_IND:
18508 case WDI_EXTSCAN_SCAN_AVAILABLE_IND:
18509 case WDI_EXTSCAN_SCAN_RESULT_IND:
18510 case WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND:
Dino Mycle41bdc942014-06-10 11:30:24 +053018511 {
18512 void *pEXTScanData;
18513 void *pCallbackContext;
18514 tpAniSirGlobal pMac;
18515 tANI_U16 indType;
18516
18517 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18518 "Received WDI_EXTSCAN Indications from FW");
18519 /*sanity check*/
18520 if (NULL == pWDA)
18521 {
18522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18523 "%s:pWDA is NULL", __func__);
18524 VOS_ASSERT(0);
18525 return;
18526 }
18527 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_PROGRESS_IND)
18528 {
18529 indType = WDA_EXTSCAN_PROGRESS_IND;
18530
18531 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18532 "WDI_EXTSCAN Indication is WDI_EXTSCAN_PROGRESS_IND");
18533 }
18534 if (wdiLowLevelInd->wdiIndicationType ==
18535 WDI_EXTSCAN_SCAN_AVAILABLE_IND)
18536 {
18537 indType = WDA_EXTSCAN_SCAN_AVAILABLE_IND;
18538
18539 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18540 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_AVAILABLE_IND");
18541 }
18542 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_SCAN_RESULT_IND)
18543 {
18544 indType = WDA_EXTSCAN_SCAN_RESULT_IND;
18545
18546 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18547 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_RESULT_IND");
18548 }
18549 if (wdiLowLevelInd->wdiIndicationType ==
18550 WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND)
18551 {
18552 indType = WDA_EXTSCAN_BSSID_HOTLIST_RESULT_IND;
18553
18554 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18555 "WDI_EXTSCAN Indication is WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND");
18556 }
Dino Mycle41bdc942014-06-10 11:30:24 +053018557
18558 pEXTScanData =
18559 (void *)wdiLowLevelInd->wdiIndicationData.pEXTScanIndData;
18560 if (NULL == pEXTScanData)
18561 {
18562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18563 "%s: EXTSCAN Indication Data is null, can't invoke HDD callback",
18564 __func__);
18565 VOS_ASSERT(0);
18566 return;
18567 }
18568
18569 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18570 if (NULL == pMac)
18571 {
18572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18573 "%s:pMac is NULL", __func__);
18574 VOS_ASSERT(0);
18575 return;
18576 }
18577
18578 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
18579
18580 if(pMac->sme.pEXTScanIndCb)
18581 {
18582 pMac->sme.pEXTScanIndCb(pCallbackContext,
18583 indType,
18584 pEXTScanData);
18585 }
18586 else
18587 {
18588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18589 "%s:HDD callback is null", __func__);
18590 }
18591 break;
18592 }
18593#endif /* WLAN_FEATURE_EXTSCAN */
Abhishek Singh66c16762014-08-14 19:13:19 +053018594 case WDI_DEL_BA_IND:
18595 {
18596 tpBADeleteParams pDelBAInd =
Sunkad, Anand Ningappa5c529e42016-02-05 15:32:22 +053018597 (tpBADeleteParams)vos_mem_malloc(sizeof(*pDelBAInd));
Abhishek Singh66c16762014-08-14 19:13:19 +053018598
18599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18600 "Received WDI_DEL_BA_IND from WDI ");
18601 if(NULL == pDelBAInd)
18602 {
18603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18604 "%s: VOS MEM Alloc Failure", __func__);
18605 break;
18606 }
18607 vos_mem_copy(pDelBAInd->peerMacAddr,
18608 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.peerMacAddr,
18609 sizeof(tSirMacAddr));
18610 vos_mem_copy(pDelBAInd->bssId,
18611 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.bssId,
18612 sizeof(tSirMacAddr));
18613 pDelBAInd->staIdx =
18614 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.staIdx;
18615 pDelBAInd->baTID =
18616 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baTID;
18617 pDelBAInd->baDirection =
18618 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baDirection;
18619 pDelBAInd->reasonCode =
18620 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.reasonCode;
18621
18622 WDA_SendMsg(pWDA, SIR_LIM_DEL_BA_IND,
18623 (void *)pDelBAInd , 0) ;
18624 break;
18625 }
Srinivas Dasari32a79262015-02-19 13:04:49 +053018626 case WDI_NAN_EVENT_IND:
18627 {
18628 vos_msg_t vosMsg;
18629 tpSirNanEvent pSirNanEvent = NULL;
18630
18631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18632 "Received WDI_NAN_EVENT");
18633
18634 pSirNanEvent = (tpSirNanEvent)vos_mem_malloc( sizeof( tSirNanEvent )
18635 - sizeof( pSirNanEvent->event_data)
18636 + wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len);
18637
18638 if (NULL == pSirNanEvent)
18639 {
18640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18641 "%s: VOS MEM Alloc Failure", __func__);
18642 VOS_ASSERT(0) ;
18643 break;
18644 }
18645
18646 pSirNanEvent->event_data_len =
18647 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len;
18648
18649 if (wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len)
18650 {
18651 vos_mem_copy( pSirNanEvent->event_data,
18652 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data,
18653 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len);
18654 }
18655
18656 /* VOS message wrapper */
18657 vosMsg.type = eWNI_SME_NAN_EVENT;
18658 vosMsg.bodyptr = pSirNanEvent;
18659 vosMsg.bodyval = 0;
18660
18661 /* Send message to SME */
18662 if (VOS_STATUS_SUCCESS
18663 != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
18664 {
18665 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
18666 "post eWNI_SME_NAN_EVENT to SME Failed");
18667 vos_mem_free(pSirNanEvent);
18668 }
18669 break;
18670 }
Sachin Ahuja3d47fcd2015-08-28 16:02:06 +053018671 case WDI_LOST_LINK_PARAMS_IND:
18672 {
18673 tpSirSmeLostLinkParamsInd pLostLinkParamInd =
18674 (tpSirSmeLostLinkParamsInd)vos_mem_malloc(sizeof(tSirSmeLostLinkParamsInd));
Dino Mycle41bdc942014-06-10 11:30:24 +053018675
Sachin Ahuja3d47fcd2015-08-28 16:02:06 +053018676 if (NULL == pLostLinkParamInd)
18677 {
18678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18679 "%s: VOS MEM Alloc Failure", __func__);
18680 break;
18681 }
18682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18683 "Received WDI_LOST_LINK_PARAMS_IND from WDI ");
18684
18685 pLostLinkParamInd->messageType = eWNI_SME_LOST_LINK_PARAMS_IND;
18686 pLostLinkParamInd->length = sizeof(tSirSmeMicFailureInd);
18687 pLostLinkParamInd->info.bssIdx =
18688 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.bssIdx;
18689 pLostLinkParamInd->info.rssi =
18690 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.rssi;
18691 vos_mem_copy(pLostLinkParamInd->info.selfMacAddr,
18692 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.selfMacAddr,
18693 sizeof(tSirMacAddr));
18694 pLostLinkParamInd->info.linkFlCnt =
18695 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.linkFlCnt;
18696 pLostLinkParamInd->info.linkFlTx =
18697 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.linkFlTx;
18698 pLostLinkParamInd->info.lastDataRate =
18699 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.lastDataRate;
18700 pLostLinkParamInd->info.rsvd1 =
18701 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.rsvd1;
18702 pLostLinkParamInd->info.rsvd2 =
18703 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.rsvd2;
18704 WDA_SendMsg(pWDA, SIR_HAL_LOST_LINK_PARAMS_IND,
18705 (void *)pLostLinkParamInd , 0) ;
18706 break;
18707 }
Gupta, Kapil7c34b322015-09-30 13:12:35 +053018708 case WDI_RSSI_BREACHED_IND:
18709 {
18710 WDI_RssiBreachedIndType *pRssiBreachedInd;
18711 tpAniSirGlobal pMac;
18712
18713 pRssiBreachedInd =
18714 (WDI_RssiBreachedIndType *)vos_mem_malloc(sizeof(WDI_RssiBreachedIndType));
18715 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18716 "Received WDI_RSSI_BREACHED_IND from FW");
18717
18718 vos_mem_copy(pRssiBreachedInd,
18719 &wdiLowLevelInd->wdiIndicationData.wdiRssiBreachedInd,
18720 sizeof(WDI_RssiBreachedIndType));
18721
18722 /*sanity check*/
18723 if (NULL == pWDA)
18724 {
18725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18726 "%s:pWDA is NULL", __func__);
18727 vos_mem_free(pRssiBreachedInd);
18728 VOS_ASSERT(0);
18729 return;
18730 }
18731
18732 if (NULL == pRssiBreachedInd)
18733 {
18734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18735 "%s:Breach indication from FW is null can't invoke HDD callback",
18736 __func__);
18737 VOS_ASSERT(0);
18738 return;
18739 }
18740
18741 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18742 if (NULL == pMac)
18743 {
18744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18745 "%s:pMac is NULL", __func__);
18746 VOS_ASSERT(0);
18747 vos_mem_free(pRssiBreachedInd);
18748 return;
18749 }
18750
18751 if (pMac->sme.rssiThresholdBreachedCb)
18752 {
18753 pMac->sme.rssiThresholdBreachedCb(pMac->pAdapter, (void *)pRssiBreachedInd);
18754 }
18755 else
18756 {
18757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18758 "%s:HDD callback is null", __func__);
18759 }
18760 vos_mem_free(pRssiBreachedInd);
18761 break;
18762 }
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053018763#ifdef FEATURE_OEM_DATA_SUPPORT
18764 case WDI_START_OEM_DATA_RSP_IND_NEW:
18765 {
18766 void *pCallbackContext;
18767 tpAniSirGlobal pMac;
18768 tANI_U16 indType;
18769 void *pOemRspNewIndData;
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053018770 tANI_U32 OemRspNewLen;
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053018771
18772 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18773 "Received WDI_START_OEM_DATA_RSP_IND_NEW Indications from FW");
18774
18775 /*sanity check*/
18776 if (NULL == pWDA)
18777 {
18778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18779 "%s:pWDA is NULL", __func__);
18780 VOS_ASSERT(0);
18781 return;
18782 }
18783
18784 indType = WDA_START_OEM_DATA_RSP_IND_NEW;
18785 pOemRspNewIndData =
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053018786 (void *)wdiLowLevelInd->wdiIndicationData.wdiOemDataRspNew.
18787 pOemRspNewIndData;
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053018788 if (NULL == pOemRspNewIndData)
18789 {
18790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18791 "%s: OEM_DATA_RSP_IND_NEW Indication Data is null, can't invoke HDD callback",
18792 __func__);
18793 VOS_ASSERT(0);
18794 return;
18795 }
18796
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053018797 OemRspNewLen = wdiLowLevelInd->wdiIndicationData.wdiOemDataRspNew.
18798 OemRspNewLen;
18799
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053018800 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18801 if (NULL == pMac)
18802 {
18803 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18804 "%s:pMac is NULL", __func__);
18805 VOS_ASSERT(0);
18806 return;
18807 }
18808
18809 pCallbackContext = pMac->sme.pOemDataCallbackContext;
18810
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053018811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18812 "%s: OemRspNewLen: %d", __func__, OemRspNewLen);
18813
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053018814 if(pMac->sme.pOemDataIndCb)
18815 {
18816 pMac->sme.pOemDataIndCb(pCallbackContext,
18817 indType,
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053018818 pOemRspNewIndData,
18819 OemRspNewLen);
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053018820 }
18821 else
18822 {
18823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18824 "%s:HDD callback is null", __func__);
18825 }
18826 break;
18827 }
18828#endif /* FEATURE_OEM_DATA_SUPPORT */
18829
Jeff Johnson295189b2012-06-20 16:38:30 -070018830 default:
18831 {
18832 /* TODO error */
18833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18834 "Received UNKNOWN Indication from WDI ");
18835 }
18836 }
18837 return ;
18838}
18839
Jeff Johnson295189b2012-06-20 16:38:30 -070018840/*
18841 * BA related processing in WDA.
18842 */
Jeff Johnson295189b2012-06-20 16:38:30 -070018843void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
18844 void* pUserData)
18845{
18846 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18847 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070018848 if(NULL == pWdaParams)
18849 {
18850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018851 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018852 VOS_ASSERT(0) ;
18853 return ;
18854 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018855 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070018856 vos_mem_free(pWdaParams->wdaMsgParam) ;
18857 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18858 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018860 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018861 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
18862 {
18863 tANI_U8 i = 0 ;
18864 tBaActivityInd *baActivityInd = NULL ;
18865 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
18866 tANI_U8 allocSize = sizeof(tBaActivityInd)
18867 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
18868 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
18869 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018870 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018871 if(NULL == baActivityInd)
18872 {
18873 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018874 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018875 VOS_ASSERT(0) ;
18876 return;
18877 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018878 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
18879 sizeof(tSirMacAddr)) ;
18880 baActivityInd->baCandidateCnt = baCandidateCount ;
18881
18882 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
18883 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
18884
18885 for(i = 0 ; i < baCandidateCount ; i++)
18886 {
18887 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018888 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
18889 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018890 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
18891 {
18892 baCandidate->baInfo[tid].fBaEnable =
18893 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
18894 baCandidate->baInfo[tid].startingSeqNum =
18895 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
18896 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070018897 wdiBaCandidate++ ;
18898 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018899 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018900 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
18901 }
18902 else
18903 {
18904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18905 "BA Trigger RSP with Failure received ");
18906 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018907 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018908}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080018909
18910
18911/*
18912 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
18913 * during MCC
18914 */
18915void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
18916{
18917 wpt_uint32 enabled;
18918 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
18919 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
18920 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
18921
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053018922 if (NULL == pMac )
18923 {
18924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18925 "%s: Invoked with invalid MAC context ", __func__ );
18926 VOS_ASSERT(0);
18927 return;
18928 }
18929
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080018930 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
18931 != eSIR_SUCCESS)
18932 {
18933 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18934 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
18935 return;
18936 }
18937
18938 if(!enabled)
18939 {
18940 return;
18941 }
18942
18943 if(NULL == pWDA)
18944 {
18945 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18946 "%s:WDA context is NULL", __func__);
18947 VOS_ASSERT(0);
18948 return;
18949 }
18950
18951 if(activate)
18952 {
18953 if( VOS_STATUS_SUCCESS !=
18954 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
18955 {
18956 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18957 "Traffic Stats Timer Start Failed ");
18958 return;
18959 }
18960 WDI_DS_ActivateTrafficStats();
18961 }
18962 else
18963 {
18964 WDI_DS_DeactivateTrafficStats();
18965 WDI_DS_ClearTrafficStats();
18966
18967 if( VOS_STATUS_SUCCESS !=
18968 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
18969 {
18970 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18971 "Traffic Stats Timer Stop Failed ");
18972 return;
18973 }
18974 }
18975}
18976
18977/*
18978 * Traffic Stats Timer handler
18979 */
18980void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
18981{
18982 WDI_Status wdiStatus;
18983 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
18984 WDI_TrafficStatsIndType trafficStatsIndParams;
18985 wpt_uint32 length, enabled;
18986 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18987
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053018988 if (NULL == pMac )
18989 {
18990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18991 "%s: Invoked with invalid MAC context ", __func__ );
18992 VOS_ASSERT(0);
18993 return;
18994 }
18995
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080018996 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
18997 != eSIR_SUCCESS)
18998 {
18999 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19000 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
19001 return;
19002 }
19003
19004 if(!enabled)
19005 {
19006 WDI_DS_DeactivateTrafficStats();
19007 return;
19008 }
19009
19010 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
19011
19012 if(pWdiTrafficStats != NULL)
19013 {
19014 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
19015 trafficStatsIndParams.length = length;
19016 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080019017 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080019018 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
19019 trafficStatsIndParams.pUserData = pWDA;
19020
19021 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
19022
19023 if(WDI_STATUS_PENDING == wdiStatus)
19024 {
19025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19026 "Pending received for %s:%d ",__func__,__LINE__ );
19027 }
19028 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
19029 {
19030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19031 "Failure in %s:%d ",__func__,__LINE__ );
19032 }
19033
19034 WDI_DS_ClearTrafficStats();
19035 }
19036 else
19037 {
19038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
19039 "pWdiTrafficStats is Null");
19040 }
19041
19042 if( VOS_STATUS_SUCCESS !=
19043 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
19044 {
19045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
19046 "Traffic Stats Timer Start Failed ");
19047 return;
19048 }
19049}
19050
Sreelakshmi Konamki60ccfb32016-07-08 12:53:12 +053019051bool WDA_AllowAddBA(tpAniSirGlobal pMac, tANI_U8 staId, tANI_U8 tid)
19052{
19053 if (!pMac->lim.staBaInfo[staId].failed_count[tid])
19054 return true;
19055 if ((WDA_BA_MAX_RETRY_THRESHOLD <=
19056 pMac->lim.staBaInfo[staId].failed_count[tid]) ||
19057 ((pMac->lim.staBaInfo[staId].failed_timestamp[tid] +
19058 (pMac->lim.staBaInfo[staId].failed_count[tid] * WDA_BA_RETRY_TIME)) >=
19059 jiffies_to_msecs(jiffies)))
19060 {
19061 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19062 "%s: AP/STA has declined ADDBA req for tid %d, declined %d times",
19063 __func__, tid, pMac->lim.staBaInfo[staId].failed_count[tid]);
19064 return false;
19065 }
19066 return true;
19067}
19068
Jeff Johnson295189b2012-06-20 16:38:30 -070019069/*
19070 * BA Activity check timer handler
19071 */
19072void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
19073{
19074 tANI_U8 curSta = 0 ;
19075 tANI_U8 tid = 0 ;
19076 tANI_U8 size = 0 ;
19077 tANI_U8 baCandidateCount = 0 ;
19078 tANI_U8 newBaCandidate = 0 ;
SaidiReddy Yenugac341fbf2017-02-01 20:22:45 +053019079 tANI_U32 val, val1;
Jeff Johnson295189b2012-06-20 16:38:30 -070019080 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
Abhishek Singh0644e482014-10-06 18:38:23 +053019081 tpAniSirGlobal pMac;
19082
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053019083 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070019084 {
19085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053019086 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019087 VOS_ASSERT(0);
19088 return ;
19089 }
19090 if(WDA_MAX_STA < pWDA->wdaMaxSta)
19091 {
19092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19093 "Inconsistent STA entries in WDA");
19094 VOS_ASSERT(0) ;
Abhishek Singh0644e482014-10-06 18:38:23 +053019095 }
19096 if(NULL == pWDA->pVosContext)
19097 {
19098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19099 "%s: pVosContext is NULL",__func__);
19100 VOS_ASSERT(0);
19101 return ;
19102 }
19103 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Abhishek Singh68883952014-10-14 11:59:05 +053019104 if(NULL == pMac)
19105 {
19106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19107 "%s: pMac is NULL",__func__);
19108 VOS_ASSERT(0);
19109 return ;
19110 }
19111
Abhishek Singh0644e482014-10-06 18:38:23 +053019112 if (wlan_cfgGetInt(pMac,
19113 WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC, &val) !=
19114 eSIR_SUCCESS)
19115 {
19116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19117 "Unable to get WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC");
19118 val = 0;
19119 }
19120
SaidiReddy Yenugac341fbf2017-02-01 20:22:45 +053019121 if (wlan_cfgGetInt(pMac,
19122 WNI_CFG_ENABLE_TX_RX_AGGREGATION, &val1) !=
19123 eSIR_SUCCESS)
19124 {
19125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19126 "Unable to get WNI_CFG_ENABLE_TX_RX_AGGREGATION");
19127 val1 = 1;
19128 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019129 /* walk through all STA entries and find out TX packet count */
19130 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
19131 {
Abhishek Singh0644e482014-10-06 18:38:23 +053019132 tANI_U32 currentOperChan = pWDA->wdaStaInfo[curSta].currentOperChan;
Gopichand Nakkala976e3252013-01-03 15:45:56 -080019133#ifdef WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053019134 // We can only do BA on "hard" STAs.
19135 if (!(IS_HWSTA_IDX(curSta)))
19136 {
19137 continue;
19138 }
Gopichand Nakkala976e3252013-01-03 15:45:56 -080019139#endif //WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053019140 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
19141 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070019142 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019143 tANI_U32 txPktCount = 0 ;
19144 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019145 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070019146 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
19147 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070019148 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
19149 curSta, tid, &txPktCount)))
19150 {
19151#if 0
19152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
19153 "************* %d:%d, %d ",curSta, txPktCount,
19154 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
19155#endif
Abhishek Singh0644e482014-10-06 18:38:23 +053019156 if(val && ( (currentOperChan >= SIR_11B_CHANNEL_BEGIN) &&
19157 (currentOperChan <= SIR_11B_CHANNEL_END)))
19158 {
19159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19160 "%s: BTC disabled aggregation - dont start "
19161 "TX ADDBA req",__func__);
19162 }
SaidiReddy Yenugac341fbf2017-02-01 20:22:45 +053019163 else if (!val1)
19164 {
19165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19166 "%s: aggregation disabled- dont start "
19167 "TX ADDBA req",__func__);
19168 }
Abhishek Singh0644e482014-10-06 18:38:23 +053019169 else if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070019170 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Sreelakshmi Konamki60ccfb32016-07-08 12:53:12 +053019171 && WDA_AllowAddBA(pMac, curSta, tid)
Abhishek Singh424ae432014-12-05 11:54:54 +053019172 && (((eSYSTEM_STA_IN_IBSS_ROLE ==
19173 pWDA->wdaGlobalSystemRole) && txPktCount )
19174 || (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
19175 curSta, tid))))
Jeff Johnson295189b2012-06-20 16:38:30 -070019176 {
19177 /* get prepare for sending message to HAL */
19178 //baCandidate[baCandidateCount].staIdx = curSta ;
19179 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
19180 newBaCandidate = WDA_ENABLE_BA ;
19181 }
19182 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
19183 }
19184 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019185 /* fill the entry for all the sta with given TID's */
19186 if(WDA_ENABLE_BA == newBaCandidate)
19187 {
19188 /* move to next BA candidate */
19189 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
19190 size += sizeof(WDI_TriggerBAReqCandidateType) ;
19191 baCandidateCount++ ;
19192 newBaCandidate = WDA_DISABLE_BA ;
19193 }
19194 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019195 /* prepare and send message to hal */
19196 if( 0 < baCandidateCount)
19197 {
19198 WDI_Status status = WDI_STATUS_SUCCESS ;
19199 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
19200 tWDA_ReqParams *pWdaParams =
19201 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019202 if(NULL == pWdaParams)
19203 {
19204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019205 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019206 VOS_ASSERT(0) ;
19207 return;
19208 }
19209 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
19210 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
19211 if(NULL == wdiTriggerBaReq)
19212 {
19213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019214 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019215 VOS_ASSERT(0) ;
19216 vos_mem_free(pWdaParams);
19217 return;
19218 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019219 do
19220 {
19221 WDI_TriggerBAReqinfoType *triggerBaInfo =
19222 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
19223 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
19224 /* TEMP_FIX: Need to see if WDI need check for assoc session for
19225 * for each request */
19226 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
19227 triggerBaInfo->ucBASessionID = 0;
19228 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
19229 } while(0) ;
19230 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
19231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019232 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019233 pWdaParams->pWdaContext = pWDA;
19234 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
19235 pWdaParams->wdaMsgParam = NULL;
Abhishek Singhac9abe62016-02-05 18:07:41 +053019236 status = WDI_TriggerBAReq(wdiTriggerBaReq, size,
Jeff Johnson295189b2012-06-20 16:38:30 -070019237 WDA_TriggerBaReqCallback, pWdaParams) ;
19238 if(IS_WDI_STATUS_FAILURE(status))
19239 {
19240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19241 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
19242 vos_mem_free(pWdaParams->wdaMsgParam) ;
19243 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19244 vos_mem_free(pWdaParams) ;
19245 }
19246 }
19247 else
19248 {
19249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
19250 "There is no TID for initiating BA");
19251 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019252 if( VOS_STATUS_SUCCESS !=
19253 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
19254 {
19255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19256 "BA Activity Timer Stop Failed ");
19257 return ;
19258 }
19259 if( VOS_STATUS_SUCCESS !=
19260 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
19261 {
19262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19263 "BA Activity Timer Start Failed ");
19264 return;
19265 }
19266 return ;
19267}
Jeff Johnson295189b2012-06-20 16:38:30 -070019268/*
19269 * WDA common routine to create timer used by WDA.
19270 */
19271static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
19272{
Jeff Johnson295189b2012-06-20 16:38:30 -070019273 VOS_STATUS status = VOS_STATUS_SUCCESS ;
19274 tANI_U32 val = 0 ;
19275 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
19276
19277 if(NULL == pMac)
19278 {
19279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019280 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019281 VOS_ASSERT(0);
19282 return VOS_STATUS_E_FAILURE;
19283 }
19284 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
19285 != eSIR_SUCCESS)
19286 {
19287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19288 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
19289 return VOS_STATUS_E_FAILURE;
19290 }
19291 val = SYS_MS_TO_TICKS(val) ;
19292
19293 /* BA activity check timer */
19294 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
19295 "BA Activity Check timer", WDA_TimerHandler,
19296 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
19297 if(status != TX_SUCCESS)
19298 {
19299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19300 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080019301 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019302 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019303 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019304 /* Tx Complete Timeout timer */
19305 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
19306 "Tx Complete Check timer", WDA_TimerHandler,
19307 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019308 if(status != TX_SUCCESS)
19309 {
19310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19311 "Unable to create Tx Complete Timeout timer");
19312 /* Destroy timer of BA activity check timer */
19313 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
19314 if(status != TX_SUCCESS)
19315 {
19316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19317 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080019318 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019319 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080019320 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019321 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080019322
19323 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
19324
19325 /* Traffic Stats timer */
19326 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
19327 "Traffic Stats timer", WDA_TimerHandler,
19328 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
19329 if(status != TX_SUCCESS)
19330 {
19331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19332 "Unable to create traffic stats timer");
19333 /* Destroy timer of BA activity check timer */
19334 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
19335 if(status != TX_SUCCESS)
19336 {
19337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19338 "Unable to Destroy BA activity timer");
19339 }
19340 /* Destroy timer of tx complete timer */
19341 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
19342 if(status != TX_SUCCESS)
19343 {
19344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19345 "Unable to Tx complete timer");
19346 }
19347 return VOS_STATUS_E_FAILURE ;
19348 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080019349 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019350}
Jeff Johnson295189b2012-06-20 16:38:30 -070019351/*
19352 * WDA common routine to destroy timer used by WDA.
19353 */
19354static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
19355{
19356 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019357 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
19358 if(status != TX_SUCCESS)
19359 {
19360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19361 "Unable to Destroy Tx Complete Timeout timer");
19362 return eSIR_FAILURE ;
19363 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019364 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
19365 if(status != TX_SUCCESS)
19366 {
19367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19368 "Unable to Destroy BA activity timer");
19369 return eSIR_FAILURE ;
19370 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080019371 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
19372 if(status != TX_SUCCESS)
19373 {
19374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19375 "Unable to Destroy traffic stats timer");
19376 return eSIR_FAILURE ;
19377 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019378 return eSIR_SUCCESS ;
19379}
Jeff Johnson295189b2012-06-20 16:38:30 -070019380/*
19381 * WDA timer handler.
19382 */
19383void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
19384{
19385 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
19386 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019387 /*
19388 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
19389 */
19390 wdaMsg.type = timerInfo ;
19391 wdaMsg.bodyptr = NULL;
19392 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070019393 /* post the message.. */
19394 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
19395 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
19396 {
19397 vosStatus = VOS_STATUS_E_BADMSG;
19398 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019399}
Jeff Johnson295189b2012-06-20 16:38:30 -070019400/*
19401 * WDA Tx Complete timeout Indication.
19402 */
19403void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
19404{
19405 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053019406 tpSirTxBdStatus txBdStatus = {0};
19407
Jeff Johnson295189b2012-06-20 16:38:30 -070019408 if( pWDA->pAckTxCbFunc )
19409 {
19410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080019411 "TxComplete timer expired");
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053019412 /*Indicate failure*/
19413 pWDA->pAckTxCbFunc( pMac, &txBdStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070019414 pWDA->pAckTxCbFunc = NULL;
19415 }
19416 else
19417 {
19418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080019419 "There is no request pending for TxComplete and wait timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070019420 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019421}
Jeff Johnson295189b2012-06-20 16:38:30 -070019422/*
19423 * WDA Set REG Domain to VOS NV
19424 */
Abhishek Singha306a442013-11-07 18:39:01 +053019425eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId,
19426 tAniBool sendRegHint)
Jeff Johnson295189b2012-06-20 16:38:30 -070019427{
Abhishek Singha306a442013-11-07 18:39:01 +053019428 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId, sendRegHint))
Jeff Johnson295189b2012-06-20 16:38:30 -070019429 {
19430 return eHAL_STATUS_INVALID_PARAMETER;
19431 }
19432 return eHAL_STATUS_SUCCESS;
19433}
Jeff Johnson295189b2012-06-20 16:38:30 -070019434
Jeff Johnson295189b2012-06-20 16:38:30 -070019435#ifdef FEATURE_WLAN_SCAN_PNO
19436/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070019437 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070019438 *
19439 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070019440void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070019441{
19442 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053019443 tSirPNOScanReq *pPNOScanReqParams;
19444
Jeff Johnson295189b2012-06-20 16:38:30 -070019445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053019446 "<------ %s, wdiStatus: %d",__func__, status);
Yue Ma7f44bbe2013-04-12 11:47:39 -070019447 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070019448 {
19449 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019450 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019451 VOS_ASSERT(0) ;
19452 return ;
19453 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019454
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053019455 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
19456 if(pPNOScanReqParams->statusCallback)
19457 {
19458 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
19459 (status == WDI_STATUS_SUCCESS) ?
19460 VOS_STATUS_SUCCESS : VOS_STATUS_E_FAILURE);
19461 }
19462
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053019463 if (pPNOScanReqParams->enable == 1)
19464 {
19465 if (pPNOScanReqParams->aNetworks)
19466 vos_mem_free(pPNOScanReqParams->aNetworks);
19467 if (pPNOScanReqParams->p24GProbeTemplate)
19468 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
19469 if (pPNOScanReqParams->p5GProbeTemplate)
19470 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
19471 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070019472 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19473 vos_mem_free(pWdaParams->wdaMsgParam);
19474 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070019475
19476 return ;
19477}
Jeff Johnson295189b2012-06-20 16:38:30 -070019478/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070019479 * FUNCTION: WDA_PNOScanReqCallback
19480 * Free memory.
19481 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
19482 */
19483void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070019484{
Yue Ma7f44bbe2013-04-12 11:47:39 -070019485 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053019486 tSirPNOScanReq *pPNOScanReqParams;
Yue Ma7f44bbe2013-04-12 11:47:39 -070019487
19488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19489 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
19490
19491 if(NULL == pWdaParams)
19492 {
19493 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19494 "%s: pWdaParams received NULL", __func__);
19495 VOS_ASSERT(0);
19496 return;
19497 }
19498
19499 if(IS_WDI_STATUS_FAILURE(wdiStatus))
19500 {
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053019501 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
19502 if(pPNOScanReqParams->statusCallback)
19503 {
19504 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
19505 VOS_STATUS_E_FAILURE);
19506 }
19507
Hanumantha Reddy Pothula06e87b22015-03-02 18:02:23 +053019508 if (pPNOScanReqParams->enable == 1)
19509 {
19510 if (pPNOScanReqParams->aNetworks)
19511 vos_mem_free(pPNOScanReqParams->aNetworks);
19512 if (pPNOScanReqParams->p24GProbeTemplate)
19513 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
19514 if (pPNOScanReqParams->p5GProbeTemplate)
19515 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
19516 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070019517 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19518 vos_mem_free(pWdaParams->wdaMsgParam);
19519 vos_mem_free(pWdaParams);
19520 }
19521
19522 return;
19523}
19524/*
19525 * FUNCTION: WDA_UpdateScanParamsRespCallback
19526 *
19527 */
19528void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
19529{
19530 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070019531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019532 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070019533 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070019534 {
19535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019536 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019537 VOS_ASSERT(0) ;
19538 return ;
19539 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070019540
19541 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19542 vos_mem_free(pWdaParams->wdaMsgParam);
19543 vos_mem_free(pWdaParams);
19544
Jeff Johnson295189b2012-06-20 16:38:30 -070019545 return ;
19546}
Jeff Johnson295189b2012-06-20 16:38:30 -070019547/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070019548 * FUNCTION: WDA_UpdateScanParamsReqCallback
19549 * Free memory.
19550 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
19551 */
19552void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
19553{
19554 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19555
19556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19557 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
19558
19559 if(NULL == pWdaParams)
19560 {
19561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19562 "%s: pWdaParams received NULL", __func__);
19563 VOS_ASSERT(0);
19564 return;
19565 }
19566
19567 if(IS_WDI_STATUS_FAILURE(wdiStatus))
19568 {
19569 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19570 vos_mem_free(pWdaParams->wdaMsgParam);
19571 vos_mem_free(pWdaParams);
19572 }
19573
19574 return;
19575}
19576/*
Jeff Johnson295189b2012-06-20 16:38:30 -070019577 * FUNCTION: WDA_ProcessSetPreferredNetworkList
19578 * Request to WDI to set Preferred Network List.Offload
19579 */
19580VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
19581 tSirPNOScanReq *pPNOScanReqParams)
19582{
Jeff Johnson43971f52012-07-17 12:26:56 -070019583 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070019584 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
19585 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
19586 tWDA_ReqParams *pWdaParams ;
19587 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070019588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019589 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019590 if(NULL == pwdiPNOScanReqInfo)
19591 {
19592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019593 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019594 VOS_ASSERT(0);
19595 return VOS_STATUS_E_NOMEM;
19596 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019597 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19598 if(NULL == pWdaParams)
19599 {
19600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019601 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019602 VOS_ASSERT(0);
19603 vos_mem_free(pwdiPNOScanReqInfo);
19604 return VOS_STATUS_E_NOMEM;
19605 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019606 //
19607 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
19608 //
19609 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
19610 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070019611 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
19612 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
19613 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019614 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
19615 {
19616 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
19617 &pPNOScanReqParams->aNetworks[i],
19618 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
19619 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019620 /*Scan timer intervals*/
19621 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
19622 &pPNOScanReqParams->scanTimers,
19623 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070019624 /*Probe template for 2.4GHz band*/
19625 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
19626 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
19627 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070019628 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
19629 pPNOScanReqParams->p24GProbeTemplate,
19630 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070019631 /*Probe template for 5GHz band*/
19632 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
19633 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
19634 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070019635 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
19636 pPNOScanReqParams->p5GProbeTemplate,
19637 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070019638 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
19639 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070019640
Jeff Johnson295189b2012-06-20 16:38:30 -070019641 /* Store Params pass it to WDI */
19642 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
19643 pWdaParams->pWdaContext = pWDA;
19644 /* Store param pointer as passed in by caller */
19645 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070019646 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070019647 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070019648 if(IS_WDI_STATUS_FAILURE(status))
19649 {
19650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19651 "Failure in Set PNO REQ WDI API, free all the memory " );
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053019652 if(pPNOScanReqParams->statusCallback)
19653 {
19654 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
19655 VOS_STATUS_E_FAILURE);
19656 }
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053019657 if (pPNOScanReqParams->enable == 1)
19658 {
19659 if (pPNOScanReqParams->aNetworks)
19660 vos_mem_free(pPNOScanReqParams->aNetworks);
19661 if (pPNOScanReqParams->p24GProbeTemplate)
19662 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
19663 if (pPNOScanReqParams->p5GProbeTemplate)
19664 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
19665 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019666 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
19667 vos_mem_free(pWdaParams->wdaMsgParam);
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053019668
Jeff Johnson295189b2012-06-20 16:38:30 -070019669 pWdaParams->wdaWdiApiMsgParam = NULL;
19670 pWdaParams->wdaMsgParam = NULL;
19671 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019672 return CONVERT_WDI2VOS_STATUS(status) ;
19673}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019674
19675#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
19676
19677void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
19678{
19679 /*Convert the CSR Auth types to WDI Auth types */
19680 switch (csrAuthType)
19681 {
19682 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
19683 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
19684 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080019685#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019686 case eCSR_AUTH_TYPE_CCKM_WPA:
19687 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
19688 break;
19689#endif
19690 case eCSR_AUTH_TYPE_WPA:
19691 *AuthType = eWDA_AUTH_TYPE_WPA;
19692 break;
19693 case eCSR_AUTH_TYPE_WPA_PSK:
19694 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
19695 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080019696#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019697 case eCSR_AUTH_TYPE_CCKM_RSN:
19698 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
19699 break;
19700#endif
19701 case eCSR_AUTH_TYPE_RSN:
19702 *AuthType = eWDA_AUTH_TYPE_RSN;
19703 break;
19704 case eCSR_AUTH_TYPE_RSN_PSK:
19705 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
19706 break;
19707#if defined WLAN_FEATURE_VOWIFI_11R
19708 case eCSR_AUTH_TYPE_FT_RSN:
19709 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
19710 break;
19711 case eCSR_AUTH_TYPE_FT_RSN_PSK:
19712 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
19713 break;
19714#endif
19715#ifdef FEATURE_WLAN_WAPI
19716 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
19717 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
19718 break;
19719 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
19720 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
19721 break;
19722#endif /* FEATURE_WLAN_WAPI */
19723 case eCSR_AUTH_TYPE_SHARED_KEY:
19724 case eCSR_AUTH_TYPE_AUTOSWITCH:
19725 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
19726 break;
Kanchanapally, Vidyullatha3355dd32015-06-09 14:56:56 +053019727#ifdef WLAN_FEATURE_11W
19728 case eCSR_AUTH_TYPE_RSN_PSK_SHA256:
19729 *AuthType = eWDA_AUTH_TYPE_RSN_PSK_SHA256;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019730 break;
Kanchanapally, Vidyullatha3355dd32015-06-09 14:56:56 +053019731 case eCSR_AUTH_TYPE_RSN_8021X_SHA256:
19732 *AuthType = eWDA_AUTH_TYPE_RSN_8021X_SHA256;
19733 break;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019734#endif
19735 default:
Deepthi Gowribfd17132014-11-14 17:59:04 +053019736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019737 "%s: Unknown Auth Type", __func__);
19738 break;
19739 }
19740}
19741void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
19742{
19743 switch (csrEncrType)
19744 {
19745 case eCSR_ENCRYPT_TYPE_NONE:
19746 *EncrType = WDI_ED_NONE;
19747 break;
19748 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
19749 case eCSR_ENCRYPT_TYPE_WEP40:
19750 *EncrType = WDI_ED_WEP40;
19751 break;
19752 case eCSR_ENCRYPT_TYPE_WEP104:
19753 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
19754 *EncrType = WDI_ED_WEP104;
19755 break;
19756 case eCSR_ENCRYPT_TYPE_TKIP:
19757 *EncrType = WDI_ED_TKIP;
19758 break;
19759 case eCSR_ENCRYPT_TYPE_AES:
19760 *EncrType = WDI_ED_CCMP;
19761 break;
19762#ifdef WLAN_FEATURE_11W
19763 case eCSR_ENCRYPT_TYPE_AES_CMAC:
19764 *EncrType = WDI_ED_AES_128_CMAC;
19765 break;
19766#endif
19767#ifdef FEATURE_WLAN_WAPI
19768 case eCSR_ENCRYPT_TYPE_WPI:
19769 *EncrType = WDI_ED_WPI;
19770 break;
19771#endif
19772 case eCSR_ENCRYPT_TYPE_ANY:
19773 *EncrType = WDI_ED_ANY;
19774 break;
19775
19776 default:
19777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19778 "%s: Unknown Encryption Type", __func__);
19779 break;
19780 }
19781}
19782
Kapil Gupta04ab1992016-06-26 13:36:51 +053019783#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
19784VOS_STATUS WDA_ProcessPERRoamScanOffloadReq(tWDA_CbContext *pWDA,
19785 tSirPERRoamOffloadScanReq *pPERRoamOffloadScanReqParams)
19786{
19787 WDI_Status status;
19788 tWDA_ReqParams *pWdaParams ;
19789 WDI_PERRoamOffloadScanInfo *pwdiPERRoamOffloadScanInfo;
19790
19791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19792 "------> %s " ,__func__);
19793
19794 pwdiPERRoamOffloadScanInfo = (WDI_PERRoamOffloadScanInfo *)
19795 vos_mem_malloc(sizeof(WDI_PERRoamOffloadScanInfo));
19796 if (NULL == pwdiPERRoamOffloadScanInfo) {
19797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19798 "%s: VOS MEM Alloc Failure", __func__);
19799 VOS_ASSERT(0);
19800 return VOS_STATUS_E_NOMEM;
19801 }
19802
19803 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19804 if (NULL == pWdaParams) {
19805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19806 "%s: VOS MEM Alloc Failure", __func__);
19807 VOS_ASSERT(0);
19808 vos_mem_free(pwdiPERRoamOffloadScanInfo);
19809 return VOS_STATUS_E_NOMEM;
19810 }
19811
19812 pwdiPERRoamOffloadScanInfo->rateUpThreshold =
19813 pPERRoamOffloadScanReqParams->rateUpThreshold;
19814 pwdiPERRoamOffloadScanInfo->rateDownThreshold =
19815 pPERRoamOffloadScanReqParams->rateDownThreshold;
19816 pwdiPERRoamOffloadScanInfo->waitPeriodForNextPERScan =
19817 pPERRoamOffloadScanReqParams->waitPeriodForNextPERScan;
19818 pwdiPERRoamOffloadScanInfo->PERtimerThreshold =
19819 pPERRoamOffloadScanReqParams->PERtimerThreshold;
19820 pwdiPERRoamOffloadScanInfo->isPERRoamCCAEnabled =
19821 pPERRoamOffloadScanReqParams->isPERRoamCCAEnabled;
Kapil Guptac69c28a2016-08-25 14:11:17 +053019822 pwdiPERRoamOffloadScanInfo->PERRoamFullScanThreshold =
19823 pPERRoamOffloadScanReqParams->PERRoamFullScanThreshold;
Kapil Gupta04ab1992016-06-26 13:36:51 +053019824 pwdiPERRoamOffloadScanInfo->PERroamTriggerPercent =
19825 pPERRoamOffloadScanReqParams->PERroamTriggerPercent;
19826
19827 /* Store Params pass it to WDI */
19828 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPERRoamOffloadScanInfo;
19829 pWdaParams->pWdaContext = pWDA;
19830
19831 /* Store param pointer as passed in by caller */
19832 pWdaParams->wdaMsgParam = pPERRoamOffloadScanReqParams;
19833 status = WDI_PERRoamScanOffloadReq(pwdiPERRoamOffloadScanInfo,
19834 (WDI_PERRoamOffloadScanCb)WDA_PERRoamOffloadScanReqCallback,
19835 pWdaParams);
19836
19837 if(IS_WDI_STATUS_FAILURE(status)) {
19838 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19839 "Failure in Send config PER roam params");
19840 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
19841 vos_mem_free(pWdaParams->wdaMsgParam);
19842 vos_mem_free(pWdaParams);
19843 }
19844 return CONVERT_WDI2VOS_STATUS(status) ;
19845}
19846#endif
19847
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019848/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070019849 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019850 * Request to WDI to set Roam Offload Scan
19851 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070019852VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019853 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
19854{
19855 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070019856 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
19857 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019858 tWDA_ReqParams *pWdaParams ;
19859 v_U8_t csrAuthType;
19860 WDI_RoamNetworkType *pwdiRoamNetworkType;
19861 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
19862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19863 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070019864 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019865 {
19866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19867 "%s: VOS MEM Alloc Failure", __func__);
19868 VOS_ASSERT(0);
19869 return VOS_STATUS_E_NOMEM;
19870 }
19871 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19872 if (NULL == pWdaParams)
19873 {
19874 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19875 "%s: VOS MEM Alloc Failure", __func__);
19876 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070019877 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019878 return VOS_STATUS_E_NOMEM;
19879 }
19880
19881 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070019882 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019883 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070019884 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
19885 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019886 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
19887 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
19888 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
19889 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
19890 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
19891 sizeof(pwdiRoamNetworkType->currAPbssid));
19892 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
19893 csrAuthType);
19894 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
19895 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
19896 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
19897 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
19898 pwdiRoamOffloadScanInfo->LookupThreshold =
19899 pRoamOffloadScanReqParams->LookupThreshold ;
Varun Reddy Yeturu6c5e25c2014-01-09 21:55:37 -080019900 pwdiRoamOffloadScanInfo->RxSensitivityThreshold =
19901 pRoamOffloadScanReqParams->RxSensitivityThreshold;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019902 pwdiRoamOffloadScanInfo->RoamRssiDiff =
19903 pRoamOffloadScanReqParams->RoamRssiDiff ;
Sameer Thalappil4ae66ec2013-11-05 14:17:35 -080019904 pwdiRoamOffloadScanInfo->MAWCEnabled =
19905 pRoamOffloadScanReqParams->MAWCEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019906 pwdiRoamOffloadScanInfo->Command =
19907 pRoamOffloadScanReqParams->Command ;
19908 pwdiRoamOffloadScanInfo->StartScanReason =
19909 pRoamOffloadScanReqParams->StartScanReason ;
19910 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
19911 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
19912 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
19913 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
19914 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
19915 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
19916 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
19917 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
19918 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
19919 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080019920 pwdiRoamOffloadScanInfo->IsESEEnabled =
19921 pRoamOffloadScanReqParams->IsESEEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019922 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
19923 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
19924 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
19925 pwdiRoamNetworkType->ssId.ucLength =
19926 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
19927 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
19928 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
19929 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
19930 pwdiRoamNetworkType->ChannelCount =
19931 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
19932 pwdiRoamOffloadScanInfo->ChannelCacheType =
19933 pRoamOffloadScanReqParams->ChannelCacheType;
19934 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
19935 pRoamOffloadScanReqParams->ValidChannelList,
19936 pRoamOffloadScanReqParams->ValidChannelCount);
19937 pwdiRoamOffloadScanInfo->ValidChannelCount =
19938 pRoamOffloadScanReqParams->ValidChannelCount;
19939 pwdiRoamOffloadScanInfo->us24GProbeSize =
19940 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
19941 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
19942 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
19943 pRoamOffloadScanReqParams->p24GProbeTemplate,
19944 pwdiRoamOffloadScanInfo->us24GProbeSize);
19945 pwdiRoamOffloadScanInfo->us5GProbeSize =
19946 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
19947 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
19948 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
19949 pRoamOffloadScanReqParams->p5GProbeTemplate,
19950 pwdiRoamOffloadScanInfo->us5GProbeSize);
19951 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
19952 pRoamOffloadScanReqParams->MDID.mdiePresent;
19953 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
19954 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070019955 pwdiRoamOffloadScanInfo->nProbes =
19956 pRoamOffloadScanReqParams->nProbes;
19957 pwdiRoamOffloadScanInfo->HomeAwayTime =
19958 pRoamOffloadScanReqParams->HomeAwayTime;
Sreelakshmi Konamki70bfdaf2017-05-29 18:47:29 +053019959 pwdiRoamOffloadScanInfo->WeakZoneRssiThresholdForRoam =
19960 pRoamOffloadScanReqParams->WeakZoneRssiThresholdForRoam;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070019961 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019962 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070019963 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019964 pWdaParams->pWdaContext = pWDA;
19965 /* Store param pointer as passed in by caller */
19966 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070019967 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070019968 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
19969 if(IS_WDI_STATUS_FAILURE(status))
19970 {
19971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19972 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
19973 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
19974 vos_mem_free(pWdaParams->wdaMsgParam);
19975 pWdaParams->wdaWdiApiMsgParam = NULL;
19976 pWdaParams->wdaMsgParam = NULL;
19977 }
19978 return CONVERT_WDI2VOS_STATUS(status) ;
19979}
19980#endif
19981
Jeff Johnson295189b2012-06-20 16:38:30 -070019982/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070019983 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070019984 *
19985 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070019986void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070019987{
19988 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19989
19990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019991 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019992
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053019993 if(NULL == pWdaParams)
19994 {
19995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070019996 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053019997 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070019998 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053019999 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070020000
Jeff Johnson295189b2012-06-20 16:38:30 -070020001 vos_mem_free(pWdaParams->wdaMsgParam) ;
20002 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20003 vos_mem_free(pWdaParams) ;
20004
20005 return ;
20006}
20007/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070020008 * FUNCTION: WDA_RssiFilterReqCallback
20009 * Free memory.
20010 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
20011 */
20012void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
20013{
20014 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20015
20016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20017 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
20018
20019 if(NULL == pWdaParams)
20020 {
20021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20022 "%s: pWdaParams received NULL", __func__);
20023 VOS_ASSERT(0);
20024 return;
20025 }
20026
20027 if(IS_WDI_STATUS_FAILURE(wdiStatus))
20028 {
20029 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20030 vos_mem_free(pWdaParams->wdaMsgParam);
20031 vos_mem_free(pWdaParams);
20032 }
20033
20034 return;
20035}
20036/*
Hanumantha Reddy Pothula1e687da2015-03-31 13:44:31 +053020037 * FUNCTION: WDA_ProcessSetRssiFilterReq
Jeff Johnson295189b2012-06-20 16:38:30 -070020038 * Request to WDI to set Preferred Network List.Offload
20039 */
20040VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
20041 tSirSetRSSIFilterReq* pRssiFilterParams)
20042{
Jeff Johnson43971f52012-07-17 12:26:56 -070020043 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070020044 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
20045 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
20046 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020048 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020049 if(NULL == pwdiSetRssiFilterReqInfo)
20050 {
20051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020052 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020053 VOS_ASSERT(0);
20054 return VOS_STATUS_E_NOMEM;
20055 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020056 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
20057 if(NULL == pWdaParams)
20058 {
20059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020060 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020061 VOS_ASSERT(0);
20062 vos_mem_free(pwdiSetRssiFilterReqInfo);
20063 return VOS_STATUS_E_NOMEM;
20064 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020065 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070020066 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
20067 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070020068
Jeff Johnson295189b2012-06-20 16:38:30 -070020069 /* Store Params pass it to WDI */
20070 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
20071 pWdaParams->pWdaContext = pWDA;
20072 /* Store param pointer as passed in by caller */
20073 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070020074 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070020075 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070020076 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070020077 if(IS_WDI_STATUS_FAILURE(status))
20078 {
20079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20080 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
20081 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
20082 vos_mem_free(pWdaParams->wdaMsgParam);
20083 pWdaParams->wdaWdiApiMsgParam = NULL;
20084 pWdaParams->wdaMsgParam = NULL;
20085 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020086 return CONVERT_WDI2VOS_STATUS(status) ;
20087}
20088
Jeff Johnson295189b2012-06-20 16:38:30 -070020089/*
20090 * FUNCTION: WDA_ProcessUpdateScanParams
20091 * Request to WDI to update Scan Parameters
20092 */
20093VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
20094 tSirUpdateScanParams *pUpdateScanParams)
20095{
Jeff Johnson43971f52012-07-17 12:26:56 -070020096 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070020097 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
20098 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
20099 sizeof(WDI_UpdateScanParamsInfoType)) ;
20100 tWDA_ReqParams *pWdaParams ;
20101 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070020102 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020103 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020104 if(NULL == wdiUpdateScanParamsInfoType)
20105 {
20106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020107 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020108 VOS_ASSERT(0);
20109 return VOS_STATUS_E_NOMEM;
20110 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020111 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
20112 if ( NULL == pWdaParams )
20113 {
20114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020115 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020116 VOS_ASSERT(0);
20117 vos_mem_free(wdiUpdateScanParamsInfoType);
20118 return VOS_STATUS_E_NOMEM;
20119 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020120 //
20121 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
20122 //
Jeff Johnson295189b2012-06-20 16:38:30 -070020123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20124 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
20125 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
20126 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
Jeff Johnson9a9ed0d2013-11-26 13:36:52 -080020127 "sir struct %zu wdi struct %zu",
Jeff Johnson295189b2012-06-20 16:38:30 -070020128 pUpdateScanParams->b11dEnabled,
20129 pUpdateScanParams->b11dResolved,
20130 pUpdateScanParams->ucChannelCount,
20131 pUpdateScanParams->usPassiveMinChTime,
20132 pUpdateScanParams->usPassiveMaxChTime,
20133 pUpdateScanParams->usActiveMinChTime,
20134 pUpdateScanParams->usActiveMaxChTime,
20135 sizeof(tSirUpdateScanParams),
20136 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
20137
Jeff Johnson295189b2012-06-20 16:38:30 -070020138 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
20139 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070020140 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
20141 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070020142 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
20143 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070020144 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
20145 pUpdateScanParams->usActiveMaxChTime;
20146 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
20147 pUpdateScanParams->usActiveMinChTime;
20148 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
20149 pUpdateScanParams->usPassiveMaxChTime;
20150 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
20151 pUpdateScanParams->usPassiveMinChTime;
20152
Jeff Johnson295189b2012-06-20 16:38:30 -070020153 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053020154 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
20155 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070020156
Jeff Johnson295189b2012-06-20 16:38:30 -070020157 for ( i = 0; i <
20158 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
20159 i++)
20160 {
20161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20162 "Update Scan Parameters channel: %d",
20163 pUpdateScanParams->aChannels[i]);
20164
20165 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
20166 pUpdateScanParams->aChannels[i];
20167 }
20168
Yue Ma7f44bbe2013-04-12 11:47:39 -070020169 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
20170 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070020171
Jeff Johnson295189b2012-06-20 16:38:30 -070020172 /* Store Params pass it to WDI */
20173 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
20174 pWdaParams->pWdaContext = pWDA;
20175 /* Store param pointer as passed in by caller */
20176 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070020177
Jeff Johnson295189b2012-06-20 16:38:30 -070020178
20179
20180 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070020181 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070020182 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070020183 if(IS_WDI_STATUS_FAILURE(status))
20184 {
20185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20186 "Failure in Update Scan Params EQ WDI API, free all the memory " );
20187 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
20188 vos_mem_free(pWdaParams->wdaMsgParam);
20189 vos_mem_free(pWdaParams);
20190 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020191 return CONVERT_WDI2VOS_STATUS(status) ;
20192}
20193#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070020194
20195#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
20196/*
20197 * FUNCTION: WDA_RoamOffloadScanReqCallback
20198 *
20199 */
20200void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
20201{
20202 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070020203 vos_msg_t vosMsg;
20204 wpt_uint8 reason = 0;
20205
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070020206 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070020207 "<------ %s " ,__func__);
20208 if (NULL == pWdaParams)
20209 {
20210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20211 "%s: pWdaParams received NULL", __func__);
20212 VOS_ASSERT(0) ;
20213 return ;
20214 }
20215 if ( pWdaParams != NULL )
20216 {
20217 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
20218 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070020219 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070020220 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20221 }
20222 if ( pWdaParams->wdaMsgParam != NULL)
20223 {
20224 vos_mem_free(pWdaParams->wdaMsgParam);
20225 }
20226
20227 vos_mem_free(pWdaParams) ;
20228 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070020229 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
20230 vosMsg.bodyptr = NULL;
20231 if (WDI_STATUS_SUCCESS != status)
20232 {
20233 reason = 0;
20234 }
20235 vosMsg.bodyval = reason;
20236 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
20237 {
20238 /* free the mem and return */
20239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsone384c822013-10-30 12:21:17 -070020240 "%s: Failed to post the rsp to UMAC", __func__);
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070020241 }
20242
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070020243 return ;
20244}
Kapil Gupta04ab1992016-06-26 13:36:51 +053020245
20246void WDA_PERRoamTriggerScanReqCallback(WDI_Status status, void* pUserData)
20247{
20248 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20249 vos_msg_t vosMsg;
20250 wpt_uint8 reason = 0;
20251
20252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20253 "<------ %s " ,__func__);
20254 if (NULL == pWdaParams) {
20255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20256 "%s: pWdaParams received NULL", __func__);
20257 VOS_ASSERT(0) ;
20258 return ;
20259 }
20260 if ( pWdaParams->wdaMsgParam != NULL)
20261 vos_mem_free(pWdaParams->wdaMsgParam);
20262
20263 vos_mem_free(pWdaParams) ;
20264 vosMsg.type = eWNI_SME_ROAM_SCAN_TRIGGER_RSP;
20265 vosMsg.bodyptr = NULL;
20266 if (WDI_STATUS_SUCCESS != status)
20267 reason = 0;
20268
20269 vosMsg.bodyval = reason;
20270 if (VOS_STATUS_SUCCESS !=
20271 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg)) {
20272 /* free the mem and return */
20273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20274 "%s: Failed to post the rsp to UMAC", __func__);
20275 }
20276
20277 return ;
20278}
20279
20280
20281void WDA_PERRoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
20282{
20283 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20284 vos_msg_t vosMsg;
20285 wpt_uint8 reason = 0;
20286
20287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20288 "<------ %s " ,__func__);
20289 if (NULL == pWdaParams) {
20290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20291 "%s: pWdaParams received NULL", __func__);
20292 VOS_ASSERT(0) ;
20293 return ;
20294 }
20295 if ( pWdaParams->wdaMsgParam != NULL)
20296 vos_mem_free(pWdaParams->wdaMsgParam);
20297
20298 vos_mem_free(pWdaParams) ;
20299 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
20300 vosMsg.bodyptr = NULL;
20301 if (WDI_STATUS_SUCCESS != status)
20302 reason = 0;
20303
20304 vosMsg.bodyval = reason;
20305 if (VOS_STATUS_SUCCESS !=
20306 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg)) {
20307 /* free the mem and return */
20308 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20309 "%s: Failed to post the rsp to UMAC", __func__);
20310 }
20311
20312 return ;
20313}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070020314#endif
20315
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080020316/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070020317 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080020318 *
20319 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070020320void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080020321{
20322 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20323
20324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20325 "<------ %s " ,__func__);
20326
20327 if(NULL == pWdaParams)
20328 {
20329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20330 "%s: pWdaParams received NULL", __func__);
20331 VOS_ASSERT(0);
20332 return;
20333 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070020334
20335 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20336 vos_mem_free(pWdaParams->wdaMsgParam);
20337 vos_mem_free(pWdaParams);
20338
20339 return;
20340}
20341/*
20342 * FUNCTION: WDA_SetPowerParamsReqCallback
20343 * Free memory.
20344 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
20345 */
20346void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
20347{
20348 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20349
20350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20351 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
20352
20353 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080020354 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070020355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20356 "%s: pWdaParams received NULL", __func__);
20357 VOS_ASSERT(0);
20358 return;
20359 }
20360
20361 if(IS_WDI_STATUS_FAILURE(wdiStatus))
20362 {
20363 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20364 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080020365 vos_mem_free(pWdaParams);
20366 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070020367
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080020368 return;
20369}
20370
Jeff Johnson295189b2012-06-20 16:38:30 -070020371#ifdef WLAN_FEATURE_PACKET_FILTERING
20372/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070020373 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070020374 *
20375 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070020376void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070020377 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
20378 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070020379{
20380 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070020381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020382 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020383 if(NULL == pWdaParams)
20384 {
20385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020386 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020387 VOS_ASSERT(0) ;
20388 return ;
20389 }
20390
20391 vos_mem_free(pWdaParams->wdaMsgParam) ;
20392 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20393 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020394 //print a msg, nothing else to do
20395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070020396 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070020397 return ;
20398}
Jeff Johnson295189b2012-06-20 16:38:30 -070020399/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070020400 * FUNCTION: WDA_8023MulticastListReqCallback
20401 * Free memory.
20402 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
20403 */
20404void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
20405{
20406 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20407
20408 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20409 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
20410
20411 if(NULL == pWdaParams)
20412 {
20413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20414 "%s: pWdaParams received NULL", __func__);
20415 VOS_ASSERT(0);
20416 return;
20417 }
20418
20419 if(IS_WDI_STATUS_FAILURE(wdiStatus))
20420 {
20421 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20422 vos_mem_free(pWdaParams->wdaMsgParam);
20423 vos_mem_free(pWdaParams);
20424 }
20425
20426 return;
20427}
20428/*
Jeff Johnson295189b2012-06-20 16:38:30 -070020429 * FUNCTION: WDA_Process8023MulticastListReq
20430 * Request to WDI to add 8023 Multicast List
20431 */
20432VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
20433 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
20434{
Jeff Johnson43971f52012-07-17 12:26:56 -070020435 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070020436 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
20437 tWDA_ReqParams *pWdaParams ;
20438 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070020439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020440 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020441 pwdiFltPktSetMcListReqParamsType =
20442 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
20443 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
20444 ) ;
20445 if(NULL == pwdiFltPktSetMcListReqParamsType)
20446 {
20447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020448 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020449 return VOS_STATUS_E_NOMEM;
20450 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020451 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
20452 if(NULL == pWdaParams)
20453 {
20454 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020455 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020456 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
20457 return VOS_STATUS_E_NOMEM;
20458 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070020459
Jeff Johnson295189b2012-06-20 16:38:30 -070020460 //
20461 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
20462 //
20463 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070020464 pRcvFltMcAddrList->ulMulticastAddrCnt;
20465
20466 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
20467 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
20468 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
20469 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
20470
Jeff Johnson295189b2012-06-20 16:38:30 -070020471 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
20472 {
20473 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
20474 &(pRcvFltMcAddrList->multicastAddr[i]),
20475 sizeof(tSirMacAddr));
20476 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070020477 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
20478 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070020479
Jeff Johnson295189b2012-06-20 16:38:30 -070020480 /* Store Params pass it to WDI */
20481 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
20482 pWdaParams->pWdaContext = pWDA;
20483 /* Store param pointer as passed in by caller */
20484 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070020485 status = WDI_8023MulticastListReq(
20486 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070020487 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070020488 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070020489 if(IS_WDI_STATUS_FAILURE(status))
20490 {
20491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20492 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
20493 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
20494 vos_mem_free(pWdaParams->wdaMsgParam);
20495 vos_mem_free(pWdaParams);
20496 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020497 return CONVERT_WDI2VOS_STATUS(status) ;
20498}
Jeff Johnson295189b2012-06-20 16:38:30 -070020499/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020500 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070020501 *
20502 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020503void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070020504 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
20505 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070020506{
20507 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070020508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020509 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020510 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070020511 if(NULL == pWdaParams)
20512 {
20513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020514 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020515 VOS_ASSERT(0) ;
20516 return ;
20517 }
20518
20519 vos_mem_free(pWdaParams->wdaMsgParam) ;
20520 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20521 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020522 //print a msg, nothing else to do
20523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020524 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070020525 return ;
20526}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020527
20528/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070020529 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
20530 * Free memory.
20531 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020532 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070020533void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020534 void* pUserData)
20535{
20536 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20537
20538 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20539 "<------ %s, wdiStatus: %d",
20540 __func__, wdiStatus);
20541
20542 if (NULL == pWdaParams)
20543 {
20544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20545 "%s: Invalid pWdaParams pointer", __func__);
20546 VOS_ASSERT(0);
20547 return;
20548 }
20549
20550 if (IS_WDI_STATUS_FAILURE(wdiStatus))
20551 {
20552 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20553 vos_mem_free(pWdaParams->wdaMsgParam);
20554 vos_mem_free(pWdaParams);
20555 }
20556
20557 return;
20558}
20559
Jeff Johnson295189b2012-06-20 16:38:30 -070020560/*
20561 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
20562 * Request to WDI to set Receive Filters
20563 */
20564VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
20565 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
20566{
Jeff Johnson43971f52012-07-17 12:26:56 -070020567 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070020568 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
20569 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
20570 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
20571 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
20572 tWDA_ReqParams *pWdaParams ;
20573 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070020574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020575 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020576 if(NULL == pwdiSetRcvPktFilterReqParamsType)
20577 {
20578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020579 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020580 VOS_ASSERT(0);
20581 return VOS_STATUS_E_NOMEM;
20582 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020583 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
20584 if(NULL == pWdaParams)
20585 {
20586 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020587 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020588 VOS_ASSERT(0);
20589 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
20590 return VOS_STATUS_E_NOMEM;
20591 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020592 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
20593 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
20594 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
20595 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070020596 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
20597 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
20598
20599 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
20600 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070020601
20602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20603 "FID %d FT %d NParams %d CT %d",
20604 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
20605 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
20606 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
20607 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070020608 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
20609 {
20610 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
20611 &pRcvPktFilterCfg->paramsData[i],
20612 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070020613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080020614 "Proto %d Comp Flag %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070020615 pwdiSetRcvPktFilterReqParamsType->
20616 wdiPktFilterCfg.paramsData[i].protocolLayer,
20617 pwdiSetRcvPktFilterReqParamsType->
20618 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070020619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080020620 "Data Offset %d Data Len %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070020621 pwdiSetRcvPktFilterReqParamsType->
20622 wdiPktFilterCfg.paramsData[i].dataOffset,
20623 pwdiSetRcvPktFilterReqParamsType->
20624 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070020625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080020626 "CData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070020627 pwdiSetRcvPktFilterReqParamsType->
20628 wdiPktFilterCfg.paramsData[i].compareData[0],
20629 pwdiSetRcvPktFilterReqParamsType->
20630 wdiPktFilterCfg.paramsData[i].compareData[1],
20631 pwdiSetRcvPktFilterReqParamsType->
20632 wdiPktFilterCfg.paramsData[i].compareData[2],
20633 pwdiSetRcvPktFilterReqParamsType->
20634 wdiPktFilterCfg.paramsData[i].compareData[3],
20635 pwdiSetRcvPktFilterReqParamsType->
20636 wdiPktFilterCfg.paramsData[i].compareData[4],
20637 pwdiSetRcvPktFilterReqParamsType->
20638 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070020639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080020640 "MData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070020641 pwdiSetRcvPktFilterReqParamsType->
20642 wdiPktFilterCfg.paramsData[i].dataMask[0],
20643 pwdiSetRcvPktFilterReqParamsType->
20644 wdiPktFilterCfg.paramsData[i].dataMask[1],
20645 pwdiSetRcvPktFilterReqParamsType->
20646 wdiPktFilterCfg.paramsData[i].dataMask[2],
20647 pwdiSetRcvPktFilterReqParamsType->
20648 wdiPktFilterCfg.paramsData[i].dataMask[3],
20649 pwdiSetRcvPktFilterReqParamsType->
20650 wdiPktFilterCfg.paramsData[i].dataMask[4],
20651 pwdiSetRcvPktFilterReqParamsType->
20652 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070020653 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070020654 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020655 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070020656 /* Store Params pass it to WDI */
20657 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
20658 pWdaParams->pWdaContext = pWDA;
20659 /* Store param pointer as passed in by caller */
20660 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070020661 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020662 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070020663 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070020664 if(IS_WDI_STATUS_FAILURE(status))
20665 {
20666 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20667 "Failure in SetFilter(),free all the memory,status %d ",status);
20668 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
20669 vos_mem_free(pWdaParams->wdaMsgParam);
20670 vos_mem_free(pWdaParams);
20671 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020672 return CONVERT_WDI2VOS_STATUS(status) ;
20673}
Jeff Johnson295189b2012-06-20 16:38:30 -070020674/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070020675 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070020676 *
20677 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070020678void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070020679 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
20680 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070020681{
20682 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20683 tWDA_CbContext *pWDA;
20684 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
20685 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
20686 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
20687 tANI_U8 i;
20688 vos_msg_t vosMsg;
20689
20690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020691 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020692 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
20693
Jeff Johnsone7245742012-09-05 17:12:55 -070020694 if(NULL == pRcvFltPktMatchCntRsp)
20695 {
20696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020697 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070020698 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070020699 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070020700 return ;
20701 }
20702
Jeff Johnson295189b2012-06-20 16:38:30 -070020703 if(NULL == pWdaParams)
20704 {
20705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020706 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020707 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070020708 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070020709 return ;
20710 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020711 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
20712 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070020713 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
20714 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
20715
20716 /* Message Header */
20717 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
20718 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
20719
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070020720 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070020721
20722 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
20723 {
20724 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
20725 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
20726 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020727 /* VOS message wrapper */
20728 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
20729 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
20730 vosMsg.bodyval = 0;
20731 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
20732 {
20733 /* free the mem and return */
20734 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
20735 }
20736
20737 vos_mem_free(pWdaParams->wdaMsgParam) ;
20738 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20739 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070020740
20741 return;
20742}
20743/*
20744 * FUNCTION: WDA_FilterMatchCountReqCallback
20745 * Free memory and send RSP back to SME.
20746 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
20747 */
20748void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
20749{
20750 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20751 vos_msg_t vosMsg;
20752
20753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20754 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
20755
20756 if(NULL == pWdaParams)
20757 {
20758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20759 "%s: pWdaParams received NULL", __func__);
20760 VOS_ASSERT(0);
20761 return;
20762 }
20763
20764 /* VOS message wrapper */
20765 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
20766 vosMsg.bodyptr = NULL;
20767 vosMsg.bodyval = 0;
20768
20769 if(IS_WDI_STATUS_FAILURE(wdiStatus))
20770 {
20771 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20772 vos_mem_free(pWdaParams->wdaMsgParam);
20773 vos_mem_free(pWdaParams);
20774 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
20775 }
20776
20777 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070020778}
Jeff Johnson295189b2012-06-20 16:38:30 -070020779/*
20780 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
20781 * Request to WDI to get PC Filter Match Count
20782 */
20783VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
20784{
Jeff Johnson43971f52012-07-17 12:26:56 -070020785 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070020786 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
20787 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
20788 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020790 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020791 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
20792 {
20793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020794 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020795 VOS_ASSERT(0);
20796 return VOS_STATUS_E_NOMEM;
20797 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020798 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
20799 if(NULL == pWdaParams)
20800 {
20801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020802 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020803 VOS_ASSERT(0);
20804 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
20805 return VOS_STATUS_E_NOMEM;
20806 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070020807
Yue Ma7f44bbe2013-04-12 11:47:39 -070020808 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
20809 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070020810
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070020811 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
20812 pRcvFltPktMatchRsp->bssId,
20813 sizeof(wpt_macAddr));
20814
Jeff Johnson295189b2012-06-20 16:38:30 -070020815 /* Store Params pass it to WDI */
20816 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
20817 pWdaParams->pWdaContext = pWDA;
20818 /* Store param pointer as passed in by caller */
20819 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070020820 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070020821 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070020822 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070020823 if(IS_WDI_STATUS_FAILURE(status))
20824 {
20825 /* failure returned by WDI API */
20826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20827 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
20828 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20829 vos_mem_free(pWdaParams) ;
20830 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
20831 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
20832 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020833 return CONVERT_WDI2VOS_STATUS(status) ;
20834}
Jeff Johnson295189b2012-06-20 16:38:30 -070020835/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020836 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070020837 *
20838 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020839void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070020840 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
20841 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070020842{
20843 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Hanumanth Reddy Pothula73010b92016-11-01 16:16:58 +053020844 tSirRcvFltPktClearParam *pktClearParam;
20845
Jeff Johnson295189b2012-06-20 16:38:30 -070020846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020847 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020848/* WDA_VOS_ASSERT(NULL != pWdaParams); */
20849 if(NULL == pWdaParams)
20850 {
20851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020852 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020853 VOS_ASSERT(0) ;
20854 return ;
20855 }
Hanumanth Reddy Pothula73010b92016-11-01 16:16:58 +053020856
20857 pktClearParam = (tSirRcvFltPktClearParam *)pWdaParams->wdaMsgParam;
20858 if(pktClearParam->pktFilterCallback)
20859 {
20860 pktClearParam->pktFilterCallback(
20861 pktClearParam->cbCtx,
20862 CONVERT_WDI2SIR_STATUS(pwdiRcvFltPktClearRspParamsType->wdiStatus));
20863 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020864 vos_mem_free(pWdaParams->wdaMsgParam) ;
20865 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20866 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020867 //print a msg, nothing else to do
20868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020869 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070020870 return ;
20871}
Jeff Johnson295189b2012-06-20 16:38:30 -070020872/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070020873 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
20874 * Free memory.
20875 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
20876 */
20877void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
20878{
20879 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Hanumanth Reddy Pothula73010b92016-11-01 16:16:58 +053020880 tSirRcvFltPktClearParam *pktClearParam;
Yue Ma7f44bbe2013-04-12 11:47:39 -070020881
20882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20883 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
20884
20885 if(NULL == pWdaParams)
20886 {
20887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20888 "%s: Invalid pWdaParams pointer", __func__);
20889 VOS_ASSERT(0);
20890 return;
20891 }
20892
20893 if(IS_WDI_STATUS_FAILURE(wdiStatus))
20894 {
Hanumanth Reddy Pothula73010b92016-11-01 16:16:58 +053020895 pktClearParam = (tSirRcvFltPktClearParam *)pWdaParams->wdaMsgParam;
20896 if(pktClearParam->pktFilterCallback)
20897 {
20898 pktClearParam->pktFilterCallback(
20899 pktClearParam->cbCtx,
20900 CONVERT_WDI2SIR_STATUS(wdiStatus));
20901 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070020902 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20903 vos_mem_free(pWdaParams->wdaMsgParam);
20904 vos_mem_free(pWdaParams);
20905 }
20906
20907 return;
20908}
20909/*
Jeff Johnson295189b2012-06-20 16:38:30 -070020910 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
20911 * Request to WDI to clear Receive Filters
20912 */
20913VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
20914 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
20915{
Jeff Johnson43971f52012-07-17 12:26:56 -070020916 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070020917 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
20918 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
20919 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020921 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020922 if(NULL == pwdiRcvFltPktClearReqParamsType)
20923 {
20924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020925 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020926 VOS_ASSERT(0);
20927 return VOS_STATUS_E_NOMEM;
20928 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020929 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
20930 if(NULL == pWdaParams)
20931 {
20932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020933 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020934 VOS_ASSERT(0);
20935 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
20936 return VOS_STATUS_E_NOMEM;
20937 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020938 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
20939 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070020940 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
20941 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
20942 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
20943 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070020944
Yue Ma7f44bbe2013-04-12 11:47:39 -070020945 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020946 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070020947 /* Store Params pass it to WDI */
20948 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
20949 pWdaParams->pWdaContext = pWDA;
20950 /* Store param pointer as passed in by caller */
20951 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070020952 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080020953 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070020954 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070020955 if(IS_WDI_STATUS_FAILURE(status))
20956 {
20957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20958 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
Hanumanth Reddy Pothula73010b92016-11-01 16:16:58 +053020959 if(pRcvFltPktClearParam->pktFilterCallback)
20960 {
20961 pRcvFltPktClearParam->pktFilterCallback(
20962 pRcvFltPktClearParam->cbCtx,
20963 CONVERT_WDI2SIR_STATUS(status));
20964 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020965 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080020966 vos_mem_free(pWdaParams->wdaMsgParam);
20967 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070020968 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020969 return CONVERT_WDI2VOS_STATUS(status) ;
20970}
20971#endif // WLAN_FEATURE_PACKET_FILTERING
20972
Jeff Johnson295189b2012-06-20 16:38:30 -070020973/*
20974 * FUNCTION: WDA_ProcessSetPowerParamsReq
20975 * Request to WDI to set power params
20976 */
20977VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
20978 tSirSetPowerParamsReq *pPowerParams)
20979{
Jeff Johnson43971f52012-07-17 12:26:56 -070020980 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070020981 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
20982 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020983 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070020984 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020985 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020986 if(NULL == pwdiSetPowerParamsReqInfo)
20987 {
20988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020989 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020990 VOS_ASSERT(0);
20991 return VOS_STATUS_E_NOMEM;
20992 }
Jeff Johnson295189b2012-06-20 16:38:30 -070020993 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
20994 if(NULL == pWdaParams)
20995 {
20996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070020997 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070020998 VOS_ASSERT(0);
20999 vos_mem_free(pwdiSetPowerParamsReqInfo);
21000 return VOS_STATUS_E_NOMEM;
21001 }
Jeff Johnsone7245742012-09-05 17:12:55 -070021002
Jeff Johnson295189b2012-06-20 16:38:30 -070021003
21004 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
21005 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070021006 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
21007 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070021008 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
21009 pPowerParams->uListenInterval;
21010 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
21011 pPowerParams->uBcastMcastFilter;
21012 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
21013 pPowerParams->uEnableBET;
21014 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
21015 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070021016 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
21017 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070021018 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
21019 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070021020
Jeff Johnson295189b2012-06-20 16:38:30 -070021021 /* Store Params pass it to WDI */
21022 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
21023 pWdaParams->pWdaContext = pWDA;
21024 /* Store param pointer as passed in by caller */
21025 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070021026 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070021027 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070021028 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070021029 if(IS_WDI_STATUS_FAILURE(status))
21030 {
21031 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21032 "Failure in Set power params REQ WDI API, free all the memory " );
21033 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
21034 vos_mem_free(pWdaParams->wdaMsgParam);
21035 pWdaParams->wdaWdiApiMsgParam = NULL;
21036 pWdaParams->wdaMsgParam = NULL;
21037 }
Jeff Johnson295189b2012-06-20 16:38:30 -070021038 return CONVERT_WDI2VOS_STATUS(status) ;
21039}
21040
21041/*
21042 * FUNCTION: WDA_SetTmLevelRspCallback
21043 * Set TM Level response
21044 */
21045void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
21046{
21047 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21048
21049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070021050 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070021051
21052 if(NULL == pWdaParams)
21053 {
21054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070021055 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070021056 VOS_ASSERT(0) ;
21057 return ;
21058 }
21059
21060 /* Dose not need to send notification to upper layer
21061 * Just free allocated resources */
21062 if( pWdaParams != NULL )
21063 {
21064 if( pWdaParams->wdaWdiApiMsgParam != NULL )
21065 {
21066 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21067 }
21068 vos_mem_free(pWdaParams->wdaMsgParam) ;
21069 vos_mem_free(pWdaParams) ;
21070 }
21071}
21072
21073/*
21074 * FUNCTION: WDA_ProcessSetTmLevelReq
21075 * Set TM Level request
21076 */
21077VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
21078 tAniSetTmLevelReq *setTmLevelReq)
21079{
21080 WDI_Status status = WDI_STATUS_SUCCESS ;
21081 tWDA_ReqParams *pWdaParams ;
21082 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
21083 (WDI_SetTmLevelReqType *)vos_mem_malloc(
21084 sizeof(WDI_SetTmLevelReqType)) ;
21085 if(NULL == wdiSetTmLevelReq)
21086 {
21087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070021088 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070021089 VOS_ASSERT(0);
21090 return VOS_STATUS_E_NOMEM;
21091 }
21092
21093 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
21094 if(NULL == pWdaParams)
21095 {
21096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070021097 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070021098 VOS_ASSERT(0);
21099 vos_mem_free(wdiSetTmLevelReq);
21100 return VOS_STATUS_E_NOMEM;
21101 }
21102
21103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070021104 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070021105
21106 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
21107 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
21108
21109 pWdaParams->pWdaContext = pWDA;
21110 pWdaParams->wdaMsgParam = setTmLevelReq;
21111 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
21112
21113 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
21114 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
21115
21116 if(IS_WDI_STATUS_FAILURE(status))
21117 {
21118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080021119 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070021120 vos_mem_free(pWdaParams->wdaMsgParam) ;
21121 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21122 vos_mem_free(pWdaParams) ;
21123 }
21124
21125 return CONVERT_WDI2VOS_STATUS(status) ;
21126}
21127
21128VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
21129 tpTxControlParams pTxCtrlParam)
21130{
21131 VOS_STATUS wdaStatus;
21132
21133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070021134 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070021135 if( pTxCtrlParam == NULL )
21136 {
21137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070021138 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070021139 return VOS_STATUS_E_FAILURE;
21140 }
Jeff Johnson295189b2012-06-20 16:38:30 -070021141 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
21142 {
21143 wdaStatus = WDA_SuspendDataTx(pWDA);
21144 }
21145 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
21146 {
21147 wdaStatus = WDA_ResumeDataTx(pWDA);
21148 }
Jeff Johnson295189b2012-06-20 16:38:30 -070021149 return wdaStatus;
21150}
21151
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053021152void WDA_FWLoggingDXEdoneInd(v_U32_t logType)
Mihir Shete5affadc2015-05-29 20:54:57 +053021153{
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053021154 WDI_Status status;
21155 status = WDI_FWLoggingDXEdoneInd(logType);
21156
Hanumantha Reddy Pothula5e509402015-09-23 09:45:57 +053021157 if (!(WDI_STATUS_SUCCESS_SYNC == status || WDI_STATUS_PENDING == status))
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053021158 {
21159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21160 FL("Failure status %d"), status);
21161 }
Mihir Shete5affadc2015-05-29 20:54:57 +053021162}
21163
Jeff Johnson295189b2012-06-20 16:38:30 -070021164 /* FUNCTION WDA_featureCapsExchange
21165 * WDA API to invoke capability exchange between host and FW.
21166 */
21167void WDA_featureCapsExchange(v_PVOID_t pVosContext)
21168{
21169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070021170 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070021171 WDI_featureCapsExchangeReq( NULL, pVosContext);
21172}
21173
Yathish9f22e662012-12-10 14:21:35 -080021174/* FUNCTION WDA_disableCapablityFeature
21175 * WDA API to diable Active mode offload in host.
21176 */
21177void WDA_disableCapablityFeature(tANI_U8 feature_index)
21178{
21179 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21180 "%s:enter", __func__ );
21181 WDI_disableCapablityFeature(feature_index);
21182}
21183
Jeff Johnson295189b2012-06-20 16:38:30 -070021184 /* FUNCTION WDA_getHostWlanFeatCaps
21185 * Wrapper for WDI API, that will return if the feature (enum value).passed
21186 * to this API is supported or not in Host
21187 * return value
21188 * 0 - implies feature is NOT Supported
21189 * any non zero value - implies feature is SUPPORTED
21190 */
21191tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
21192{
21193 return WDI_getHostWlanFeatCaps(featEnumValue);
21194}
21195
21196 /* FUNCTION WDA_getFwWlanFeatCaps
21197 * Wrapper for WDI API, that will return if the feature (enum value).passed
21198 * to this API is supported or not in FW
21199 * return value
21200 * 0 - implies feature is NOT Supported
21201 * any non zero value - implies feature is SUPPORTED
21202 */
21203tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
21204{
21205 return WDI_getFwWlanFeatCaps(featEnumValue);
21206}
21207
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053021208
Jeff Johnson295189b2012-06-20 16:38:30 -070021209/*
21210 * FUNCTION: WDA_shutdown
21211 * Shutdown WDA/WDI without handshaking with Riva.
21212 * Synchronous function.
21213 */
21214VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
21215{
21216 WDI_Status wdiStatus;
21217 //tANI_U8 eventIdx = 0;
21218 VOS_STATUS status = VOS_STATUS_SUCCESS;
21219 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070021220 if (NULL == pWDA)
21221 {
21222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070021223 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070021224 VOS_ASSERT(0);
21225 return VOS_STATUS_E_FAILURE;
21226 }
Jeff Johnson295189b2012-06-20 16:38:30 -070021227 /* FTM mode stay START_STATE */
21228 if( (WDA_READY_STATE != pWDA->wdaState) &&
21229 (WDA_INIT_STATE != pWDA->wdaState) &&
21230 (WDA_START_STATE != pWDA->wdaState) )
21231 {
21232 VOS_ASSERT(0);
21233 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070021234
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053021235 if (eDRIVER_TYPE_MFG != pWDA->driverMode)
Jeff Johnson295189b2012-06-20 16:38:30 -070021236 {
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053021237 if(VOS_TRUE == pWDA->wdaTimersCreated)
21238 {
21239 wdaDestroyTimers(pWDA);
21240 pWDA->wdaTimersCreated = VOS_FALSE;
21241 }
Jeff Johnson295189b2012-06-20 16:38:30 -070021242 }
Leo Chang9d76f622013-08-23 16:34:52 -070021243 else
21244 {
21245 vos_event_destroy(&pWDA->ftmStopDoneEvent);
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053021246 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070021247
Jeff Johnson295189b2012-06-20 16:38:30 -070021248 /* call WDI shutdown */
21249 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070021250 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
21251 {
21252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21253 "error in WDA Stop" );
21254 status = VOS_STATUS_E_FAILURE;
21255 }
21256 /* WDI stop is synchrnous, shutdown is complete when it returns */
21257 pWDA->wdaState = WDA_STOP_STATE;
21258
Jeff Johnson295189b2012-06-20 16:38:30 -070021259 /* shutdown should perform the stop & close actions. */
21260 /* Destroy the event */
21261 status = vos_event_destroy(&pWDA->txFrameEvent);
21262 if(!VOS_IS_STATUS_SUCCESS(status))
21263 {
21264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080021265 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070021266 status = VOS_STATUS_E_FAILURE;
21267 }
21268 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
21269 if(!VOS_IS_STATUS_SUCCESS(status))
21270 {
21271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080021272 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070021273 status = VOS_STATUS_E_FAILURE;
21274 }
21275 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
21276 if(!VOS_IS_STATUS_SUCCESS(status))
21277 {
21278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080021279 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070021280 status = VOS_STATUS_E_FAILURE;
21281 }
Jeff Johnson295189b2012-06-20 16:38:30 -070021282 /* free WDA context */
21283 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
21284 if ( !VOS_IS_STATUS_SUCCESS(status) )
21285 {
21286 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21287 "error in WDA close " );
21288 status = VOS_STATUS_E_FAILURE;
21289 }
Jeff Johnson295189b2012-06-20 16:38:30 -070021290 return status;
21291}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080021292
Jeff Johnsone7245742012-09-05 17:12:55 -070021293/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080021294 * FUNCTION: WDA_setNeedShutdown
21295 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070021296 */
21297
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080021298void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070021299{
21300 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070021301 if(pWDA == NULL)
21302 {
21303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21304 "Could not get the WDA Context pointer" );
21305 return;
21306 }
Jeff Johnsone7245742012-09-05 17:12:55 -070021307 pWDA->needShutdown = TRUE;
21308}
21309/*
21310 * FUNCTION: WDA_needShutdown
21311 * WDA needs a shutdown
21312 */
21313
21314v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
21315{
21316 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070021317 if(pWDA == NULL)
21318 {
21319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21320 "Could not get the WDA Context pointer" );
21321 return 0;
21322 }
21323 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070021324}
21325
Mohit Khanna4a70d262012-09-11 16:30:12 -070021326#ifdef WLAN_FEATURE_11AC
21327/*
21328 * FUNCTION: WDA_SetBeaconFilterReqCallback
21329 *
21330 */
21331void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
21332{
21333 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070021335 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070021336 if(NULL == pWdaParams)
21337 {
21338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070021339 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070021340 VOS_ASSERT(0) ;
21341 return ;
21342 }
Jeff Johnsone7245742012-09-05 17:12:55 -070021343
Mohit Khanna4a70d262012-09-11 16:30:12 -070021344 vos_mem_free(pWdaParams->wdaMsgParam) ;
21345 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21346 vos_mem_free(pWdaParams) ;
21347 /*
21348 * No respone required for SetBeaconFilter req so just free the request
21349 * param here
21350 */
21351
21352 return ;
21353}
21354
21355VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
21356 tUpdateVHTOpMode *pData)
21357{
21358 WDI_Status status = WDI_STATUS_SUCCESS ;
21359 tWDA_ReqParams *pWdaParams ;
21360 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
21361 sizeof(WDI_UpdateVHTOpMode)) ;
21362 if(NULL == wdiTemp)
21363 {
21364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070021365 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070021366 VOS_ASSERT(0);
21367 return VOS_STATUS_E_NOMEM;
21368 }
21369 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
21370 if(NULL == pWdaParams)
21371 {
21372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070021373 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070021374 VOS_ASSERT(0);
21375 vos_mem_free(wdiTemp);
21376 return VOS_STATUS_E_NOMEM;
21377 }
Abhishek Singhdf8eb312014-11-15 00:49:28 +053021378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21379 "------> %s Opmode = %d and staid = %d" ,
21380 __func__, pData->opMode, pData->staId);
Mohit Khanna4a70d262012-09-11 16:30:12 -070021381 wdiTemp->opMode = pData->opMode;
21382 wdiTemp->staId = pData->staId;
21383
21384 pWdaParams->pWdaContext = pWDA;
21385 /* Store Req pointer, as this will be used for response */
21386 pWdaParams->wdaMsgParam = (void *)pData;
21387 /* store Params pass it to WDI */
21388 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
21389
21390 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
21391
21392 if(IS_WDI_STATUS_FAILURE(status))
21393 {
21394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21395 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
21396 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
21397 vos_mem_free(pWdaParams->wdaMsgParam);
21398 vos_mem_free(pWdaParams);
21399 }
21400 return CONVERT_WDI2VOS_STATUS(status) ;
21401}
21402#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070021403
21404/*==========================================================================
21405 FUNCTION WDA_TransportChannelDebug
21406
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070021407 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070021408 Display Transport Channel debugging information
21409 User may request to display DXE channel snapshot
21410 Or if host driver detects any abnormal stcuk may display
21411
21412 PARAMETERS
schang6295e542013-03-12 15:31:23 -070021413 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080021414 displaySnapshot : Display DXE snapshot option
Mihir Shete40a55652014-03-02 14:14:47 +053021415 debugFlags : Enable stall detect features
21416 defined by WPAL_DeviceDebugFlags
21417 These features may effect
21418 data performance.
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070021419
21420 RETURN VALUE
21421 NONE
21422
21423===========================================================================*/
21424void WDA_TransportChannelDebug
21425(
schang6295e542013-03-12 15:31:23 -070021426 tpAniSirGlobal pMac,
21427 v_BOOL_t displaySnapshot,
Mihir Shete40a55652014-03-02 14:14:47 +053021428 v_U8_t debugFlags
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070021429)
21430{
Mihir Shete40a55652014-03-02 14:14:47 +053021431 WDI_TransportChannelDebug(displaySnapshot, debugFlags);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070021432 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070021433}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070021434
21435/*==========================================================================
Sravan Kumar Kairame9d186c2015-11-27 23:37:02 +053021436 FUNCTION WDA_TransportKickDxe
21437
21438 DESCRIPTION
21439 Request Kick Dxe when first hdd TX time out
21440 happens
21441
21442 PARAMETERS
21443 NONE
21444
21445 RETURN VALUE
21446 NONE
21447
21448===========================================================================*/
21449void WDA_TransportKickDxe()
21450{
21451 WDI_TransportKickDxe();
21452 return;
21453}
21454
21455
21456/*==========================================================================
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070021457 FUNCTION WDA_SetEnableSSR
21458
21459 DESCRIPTION
21460 API to enable/disable SSR on WDI timeout
21461
21462 PARAMETERS
21463 enableSSR : enable/disable SSR
21464
21465 RETURN VALUE
21466 NONE
21467
21468===========================================================================*/
21469void WDA_SetEnableSSR(v_BOOL_t enableSSR)
21470{
21471 WDI_SetEnableSSR(enableSSR);
21472}
Leo Chang9056f462013-08-01 19:21:11 -070021473
Agrawal Ashish0552be02016-03-02 18:03:43 +053021474/**
21475 * WDA_SetMgmtPktViaWQ5() - Set INI params sendMgmtPktViaWQ5 to WDI.
21476 * @sendMgmtPktViaWQ5: INI params to enable/disable sending mgmt pkt via WQ5.
21477 *
21478 * Return: void
21479 */
21480void WDA_SetMgmtPktViaWQ5(v_BOOL_t sendMgmtPktViaWQ5)
21481{
21482 WDI_SetMgmtPktViaWQ5(sendMgmtPktViaWQ5);
21483}
21484
Leo Chang9056f462013-08-01 19:21:11 -070021485#ifdef FEATURE_WLAN_LPHB
21486/*
21487 * FUNCTION: WDA_LPHBconfRspCallback
21488 *
21489 */
21490void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
21491{
21492 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21493
21494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21495 "<------ %s " ,__func__);
21496 if (NULL == pWdaParams)
21497 {
21498 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21499 "%s: pWdaParams received NULL", __func__);
21500 VOS_ASSERT(0) ;
21501 return ;
21502 }
21503
21504 /* Do not need to send notification to upper layer
21505 * Just free allocated resources */
21506 if (pWdaParams != NULL)
21507 {
21508 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21509 {
21510 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21511 }
21512 vos_mem_free(pWdaParams->wdaMsgParam) ;
21513 vos_mem_free(pWdaParams) ;
21514 }
21515
21516 return;
21517}
21518
21519/*
21520 * FUNCTION: WDA_ProcessLPHBConfReq
21521 *
21522 */
21523VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
21524 tSirLPHBReq *pData)
21525{
21526 WDI_Status wdiStatus;
21527 tWDA_ReqParams *pWdaParams ;
21528
21529 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21530 "------> %s " , __func__);
21531
21532 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
21533 if (NULL == pWdaParams)
21534 {
21535 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21536 "%s: VOS MEM Alloc Failure", __func__);
21537 VOS_ASSERT(0);
21538 vos_mem_free(pData);
21539 return VOS_STATUS_E_NOMEM;
21540 }
21541
21542 pWdaParams->pWdaContext = pWDA;
21543 pWdaParams->wdaMsgParam = (void *)pData;
21544 pWdaParams->wdaWdiApiMsgParam = NULL;
21545
21546 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
21547 if (WDI_STATUS_PENDING == wdiStatus)
21548 {
21549 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21550 "Pending received for %s:%d ", __func__, __LINE__);
21551 }
21552 else if (WDI_STATUS_SUCCESS != wdiStatus)
21553 {
21554 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21555 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
21556 vos_mem_free(pWdaParams->wdaMsgParam);
21557 vos_mem_free(pWdaParams);
21558 }
21559
21560 return CONVERT_WDI2VOS_STATUS(wdiStatus);
21561}
21562#endif /* FEATURE_WLAN_LPHB */
21563
c_hpothu92367912014-05-01 15:18:17 +053021564void WDA_GetBcnMissRateCallback(tANI_U8 status, tANI_U32 bcnMissRate,
21565 void* pUserData)
21566{
21567 tSirBcnMissRateInfo *pBcnMissRateInfo = (tSirBcnMissRateInfo *)pUserData;
21568
21569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21570 "<------ %s " ,__func__);
21571 if (NULL == pBcnMissRateInfo)
21572 {
21573 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21574 "%s: pWdaParams received NULL", __func__);
21575 VOS_ASSERT(0) ;
21576 return ;
21577 }
21578 if (pBcnMissRateInfo->callback)
21579 {
21580 pBcnMissRateInfo->callback(status, bcnMissRate,
21581 pBcnMissRateInfo->data);
21582 }
21583 vos_mem_free(pUserData);
21584
21585 return;
21586}
21587
21588v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
21589 tSirBcnMissRateReq *pData)
21590{
21591 WDI_Status wdiStatus;
21592 tSirBcnMissRateInfo *pBcnMissRateInfo;
21593
21594 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21595 "------> %s " , __func__);
21596
21597 pBcnMissRateInfo =
21598 (tSirBcnMissRateInfo *)vos_mem_malloc(sizeof(tSirBcnMissRateInfo));
21599 if (NULL == pBcnMissRateInfo)
21600 {
21601 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21602 "%s: VOS MEM Alloc Failure", __func__);
21603 VOS_ASSERT(0);
21604 vos_mem_free(pData);
21605 return;
21606 }
21607
21608 pBcnMissRateInfo->callback = (pGetBcnMissRateCB)(pData->callback);
21609 pBcnMissRateInfo->data = pData->data;
21610
21611 wdiStatus = WDI_GetBcnMissRate(pBcnMissRateInfo,
21612 WDA_GetBcnMissRateCallback,
21613 pData->bssid);
21614 if (WDI_STATUS_PENDING == wdiStatus)
21615 {
21616 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21617 "Pending received for %s:%d ", __func__, __LINE__);
21618 }
21619 else if (WDI_STATUS_SUCCESS != wdiStatus)
21620 {
21621 if (pBcnMissRateInfo->callback)
21622 {
21623 pBcnMissRateInfo->callback(VOS_STATUS_E_FAILURE,
21624 -1, pBcnMissRateInfo->data);
21625 }
21626 }
21627 vos_mem_free(pData);
21628}
Dino Mycle41bdc942014-06-10 11:30:24 +053021629
21630#ifdef WLAN_FEATURE_EXTSCAN
21631
21632/*==========================================================================
21633 FUNCTION WDA_EXTScanStartRspCallback
21634
21635 DESCRIPTION
21636 API to send EXTScan Start Response to HDD
21637
21638 PARAMETERS
21639 pEventData: Response from FW
21640 pUserData:
21641===========================================================================*/
21642void WDA_EXTScanStartRspCallback(void *pEventData, void* pUserData)
21643{
21644 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21645 tWDA_CbContext *pWDA = NULL;
21646 void *pCallbackContext;
21647 tpAniSirGlobal pMac;
21648
21649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21650 "%s:", __func__);
21651 if (NULL == pWdaParams)
21652 {
21653 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21654 "%s: pWdaParams received NULL", __func__);
21655 VOS_ASSERT(0);
21656 return;
21657 }
21658
21659 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
21660
21661 if (NULL == pWDA)
21662 {
21663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21664 "%s: pWDA received NULL", __func__);
21665 VOS_ASSERT(0);
21666 goto error;
21667 }
21668
21669 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
21670 if (NULL == pMac)
21671 {
21672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21673 "%s:pMac is NULL", __func__);
21674 VOS_ASSERT(0);
21675 goto error;
21676 }
21677
21678 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
21679
21680 if (pMac->sme.pEXTScanIndCb)
21681 {
21682 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_START_RSP,
21683 pEventData);
21684 }
21685 else
21686 {
21687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21688 "%s:HDD callback is null", __func__);
21689 VOS_ASSERT(0);
21690 }
21691
21692error:
21693
21694 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21695 {
21696 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21697 }
21698 if (pWdaParams->wdaMsgParam != NULL)
21699 {
21700 vos_mem_free(pWdaParams->wdaMsgParam);
21701 }
21702 vos_mem_free(pWdaParams) ;
21703
21704 return;
21705}
21706
21707/*==========================================================================
21708 FUNCTION WDA_EXTScanStopRspCallback
21709
21710 DESCRIPTION
21711 API to send EXTScan Stop Response to HDD
21712
21713 PARAMETERS
21714 pEventData: Response from FW
21715 pUserData:
21716===========================================================================*/
21717void WDA_EXTScanStopRspCallback(void *pEventData, void* pUserData)
21718{
21719 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21720 tWDA_CbContext *pWDA = NULL;
21721 void *pCallbackContext;
21722 tpAniSirGlobal pMac;
21723
21724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21725 "%s:", __func__);
21726 if (NULL == pWdaParams)
21727 {
21728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21729 "%s: pWdaParams received NULL", __func__);
21730 VOS_ASSERT(0);
21731 return;
21732 }
21733
21734 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
21735
21736 if (NULL == pWDA)
21737 {
21738 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21739 "%s: pWDA received NULL", __func__);
21740 VOS_ASSERT(0);
21741 goto error;
21742 }
21743
21744 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
21745 if (NULL == pMac)
21746 {
21747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21748 "%s:pMac is NULL", __func__);
21749 VOS_ASSERT(0);
21750 goto error;
21751 }
21752 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
21753
21754 if (pMac->sme.pEXTScanIndCb)
21755 {
21756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21757 "%s:HDD call back function called", __func__);
21758 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_STOP_RSP,
21759 pEventData);
21760 }
21761 else
21762 {
21763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21764 "%s:HDD callback is null", __func__);
21765 VOS_ASSERT(0);
21766 }
21767
21768error:
21769
21770 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21771 {
21772 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21773 }
21774 if (pWdaParams->wdaMsgParam != NULL)
21775 {
21776 vos_mem_free(pWdaParams->wdaMsgParam);
21777 }
21778 vos_mem_free(pWdaParams) ;
21779
21780
21781 return;
21782}
21783
21784/*==========================================================================
21785 FUNCTION WDA_EXTScanGetCachedResultsRspCallback
21786
21787 DESCRIPTION
21788 API to send EXTScan Get Cached Results Response to HDD
21789
21790 PARAMETERS
21791 pEventData: Response from FW
21792 pUserData:
21793===========================================================================*/
21794void WDA_EXTScanGetCachedResultsRspCallback(void *pEventData, void* pUserData)
21795{
21796 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21797 tWDA_CbContext *pWDA = NULL;
21798 void *pCallbackContext;
21799 tpAniSirGlobal pMac;
21800
21801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21802 "%s: ", __func__);
21803 if (NULL == pWdaParams)
21804 {
21805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21806 "%s: pWdaParams received NULL", __func__);
21807 VOS_ASSERT(0);
21808 return;
21809 }
21810
21811 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
21812
21813 if (NULL == pWDA)
21814 {
21815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21816 "%s: pWDA received NULL", __func__);
21817 VOS_ASSERT(0);
21818 goto error;
21819 }
21820
21821 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
21822 if (NULL == pMac)
21823 {
21824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21825 "%s:pMac is NULL", __func__);
21826 VOS_ASSERT(0);
21827 goto error;
21828 }
21829
21830 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
21831
21832 if (pMac->sme.pEXTScanIndCb)
21833 {
21834 pMac->sme.pEXTScanIndCb(pCallbackContext,
21835 WDA_EXTSCAN_GET_CACHED_RESULTS_RSP,
21836 pEventData);
21837 }
21838 else
21839 {
21840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21841 "%s:HDD callback is null", __func__);
21842 VOS_ASSERT(0);
21843 }
21844
21845
21846error:
21847
21848 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21849 {
21850 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21851 }
21852 if (pWdaParams->wdaMsgParam != NULL)
21853 {
21854 vos_mem_free(pWdaParams->wdaMsgParam);
21855 }
21856 vos_mem_free(pWdaParams) ;
21857
21858 return;
21859}
21860
21861/*==========================================================================
21862 FUNCTION WDA_EXTScanGetCapabilitiesRspCallback
21863
21864 DESCRIPTION
21865 API to send EXTScan Get Capabilities Response to HDD
21866
21867 PARAMETERS
21868 pEventData: Response from FW
21869 pUserData:
21870===========================================================================*/
21871void WDA_EXTScanGetCapabilitiesRspCallback(void *pEventData, void* pUserData)
21872{
21873 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21874 tWDA_CbContext *pWDA = NULL;
21875 void *pCallbackContext;
21876 tpAniSirGlobal pMac;
21877
21878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21879 "%s:", __func__);
21880 if (NULL == pWdaParams)
21881 {
21882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21883 "%s: pWdaParams received NULL", __func__);
21884 VOS_ASSERT(0);
21885 return;
21886 }
21887
21888 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
21889
21890 if (NULL == pWDA)
21891 {
21892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21893 "%s: pWDA received NULL", __func__);
21894 VOS_ASSERT(0);
21895 goto error;
21896 }
21897
21898 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
21899 if (NULL == pMac)
21900 {
21901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21902 "%s:pMac is NULL", __func__);
21903 VOS_ASSERT(0);
21904 goto error;
21905 }
21906
21907 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
21908
21909 if (pMac->sme.pEXTScanIndCb)
21910 {
21911 pMac->sme.pEXTScanIndCb(pCallbackContext,
21912 WDA_EXTSCAN_GET_CAPABILITIES_RSP,
21913 pEventData);
21914 }
21915 else
21916 {
21917 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21918 "%s:HDD callback is null", __func__);
21919 VOS_ASSERT(0);
21920 }
21921
21922
21923error:
21924
21925 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21926 {
21927 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21928 }
21929 if (pWdaParams->wdaMsgParam != NULL)
21930 {
21931 vos_mem_free(pWdaParams->wdaMsgParam);
21932 }
21933 vos_mem_free(pWdaParams) ;
21934
21935 return;
21936}
21937
21938/*==========================================================================
21939 FUNCTION WDA_EXTScanSetBSSIDHotlistRspCallback
21940
21941 DESCRIPTION
21942 API to send EXTScan Set BSSID Hotlist Response to HDD
21943
21944 PARAMETERS
21945 pEventData: Response from FW
21946 pUserData:
21947===========================================================================*/
21948void WDA_EXTScanSetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
21949{
21950 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21951 tWDA_CbContext *pWDA = NULL;
21952 void *pCallbackContext;
21953 tpAniSirGlobal pMac;
21954
21955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21956 "%s: ", __func__);
21957 if (NULL == pWdaParams)
21958 {
21959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21960 "%s: pWdaParams received NULL", __func__);
21961 VOS_ASSERT(0) ;
21962 return;
21963 }
21964
21965 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
21966
21967 if (NULL == pWDA)
21968 {
21969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21970 "%s: pWDA received NULL", __func__);
21971 VOS_ASSERT(0);
21972 goto error;
21973 }
21974
21975 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
21976 if (NULL == pMac)
21977 {
21978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21979 "%s:pMac is NULL", __func__);
21980 VOS_ASSERT(0);
21981 goto error;
21982 }
21983
21984 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
21985
21986 if (pMac->sme.pEXTScanIndCb)
21987 {
21988 pMac->sme.pEXTScanIndCb(pCallbackContext,
21989 WDA_EXTSCAN_SET_BSSID_HOTLIST_RSP,
21990 pEventData);
21991 }
21992 else
21993 {
21994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21995 "%s:HDD callback is null", __func__);
21996 VOS_ASSERT(0);
21997 }
21998
21999
22000error:
22001
22002 if (pWdaParams->wdaWdiApiMsgParam != NULL)
22003 {
22004 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
22005 }
22006 if (pWdaParams->wdaMsgParam != NULL)
22007 {
22008 vos_mem_free(pWdaParams->wdaMsgParam);
22009 }
22010 vos_mem_free(pWdaParams) ;
22011
22012 return;
22013}
22014
22015/*==========================================================================
22016 FUNCTION WDA_EXTScanResetBSSIDHotlistRspCallback
22017
22018 DESCRIPTION
22019 API to send EXTScan ReSet BSSID Hotlist Response to HDD
22020
22021 PARAMETERS
22022 pEventData: Response from FW
22023 pUserData:
22024===========================================================================*/
22025void WDA_EXTScanResetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
22026{
22027 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
22028 tWDA_CbContext *pWDA = NULL;
22029 void *pCallbackContext;
22030 tpAniSirGlobal pMac;
22031
22032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22033 "%s:", __func__);
22034 if (NULL == pWdaParams)
22035 {
22036 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22037 "%s: pWdaParams received NULL", __func__);
22038 VOS_ASSERT(0) ;
22039 return;
22040 }
22041
22042 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
22043
22044 if (NULL == pWDA)
22045 {
22046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22047 "%s: pWDA received NULL", __func__);
22048 VOS_ASSERT(0);
22049 goto error;
22050 }
22051
22052 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
22053 if (NULL == pMac)
22054 {
22055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22056 "%s:pMac is NULL", __func__);
22057 VOS_ASSERT(0);
22058 goto error;
22059 }
22060
22061 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
22062
22063 if (pMac->sme.pEXTScanIndCb)
22064 {
22065 pMac->sme.pEXTScanIndCb(pCallbackContext,
22066 WDA_EXTSCAN_RESET_BSSID_HOTLIST_RSP,
22067 pEventData);
22068 }
22069 else
22070 {
22071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22072 "%s:HDD callback is null", __func__);
22073 VOS_ASSERT(0);
22074 }
22075
22076
22077error:
22078
22079 if (pWdaParams->wdaWdiApiMsgParam != NULL)
22080 {
22081 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
22082 }
22083 if (pWdaParams->wdaMsgParam != NULL)
22084 {
22085 vos_mem_free(pWdaParams->wdaMsgParam);
22086 }
22087 vos_mem_free(pWdaParams) ;
22088
22089 return;
22090}
22091
22092/*==========================================================================
Dino Mycle41bdc942014-06-10 11:30:24 +053022093 FUNCTION WDA_ProcessEXTScanStartReq
22094
22095 DESCRIPTION
22096 API to send EXTScan Start Request to WDI
22097
22098 PARAMETERS
22099 pWDA: Pointer to WDA context
22100 wdaRequest: Pointer to EXTScan req parameters
22101===========================================================================*/
22102VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
22103 tSirEXTScanStartReqParams *wdaRequest)
22104{
22105 WDI_Status status = WDI_STATUS_SUCCESS;
22106 tWDA_ReqParams *pWdaParams;
22107
22108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22109 "%s: ", __func__);
22110 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22111 if (NULL == pWdaParams)
22112 {
22113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22114 "%s: VOS MEM Alloc Failure", __func__);
22115 VOS_ASSERT(0);
22116 return VOS_STATUS_E_NOMEM;
22117 }
22118 pWdaParams->pWdaContext = pWDA;
22119 pWdaParams->wdaMsgParam = wdaRequest;
22120 pWdaParams->wdaWdiApiMsgParam = NULL;
22121
22122 status = WDI_EXTScanStartReq((void *)wdaRequest,
22123 (WDI_EXTScanStartRspCb)WDA_EXTScanStartRspCallback,
22124 (void *)pWdaParams);
22125 if (IS_WDI_STATUS_FAILURE(status))
22126 {
22127 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22128 "Failure to request. Free all the memory " );
22129 vos_mem_free(pWdaParams->wdaMsgParam);
22130 vos_mem_free(pWdaParams);
22131 }
22132 return CONVERT_WDI2VOS_STATUS(status);
22133}
22134
22135/*==========================================================================
22136 FUNCTION WDA_ProcessEXTScanStopReq
22137
22138 DESCRIPTION
22139 API to send EXTScan Start Request to WDI
22140
22141 PARAMETERS
22142 pWDA: Pointer to WDA context
22143 wdaRequest: Pointer to EXTScan req parameters
22144===========================================================================*/
22145VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
22146 tSirEXTScanStopReqParams *wdaRequest)
22147{
22148 WDI_Status status = WDI_STATUS_SUCCESS;
22149 tWDA_ReqParams *pWdaParams;
22150
22151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22152 "%s:", __func__);
22153 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22154 if (NULL == pWdaParams)
22155 {
22156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22157 "%s: VOS MEM Alloc Failure", __func__);
22158 VOS_ASSERT(0);
22159 return VOS_STATUS_E_NOMEM;
22160 }
22161 pWdaParams->pWdaContext = pWDA;
22162 pWdaParams->wdaMsgParam = wdaRequest;
22163 pWdaParams->wdaWdiApiMsgParam = NULL;
22164
22165 status = WDI_EXTScanStopReq((void *)wdaRequest,
22166 (WDI_EXTScanStopRspCb)WDA_EXTScanStopRspCallback,
22167 (void *)pWdaParams);
22168 if (IS_WDI_STATUS_FAILURE(status))
22169 {
22170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22171 "Failure to request. Free all the memory " );
22172 vos_mem_free(pWdaParams->wdaMsgParam);
22173 vos_mem_free(pWdaParams);
22174 }
22175 return CONVERT_WDI2VOS_STATUS(status);
22176}
22177
22178/*==========================================================================
22179 FUNCTION WDA_ProcessEXTScanGetCachedResultsReq
22180
22181 DESCRIPTION
22182 API to send EXTScan Get Cached Results Request to WDI
22183
22184 PARAMETERS
22185 pWDA: Pointer to WDA context
22186 wdaRequest: Pointer to EXTScan req parameters
22187===========================================================================*/
22188VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
22189 tSirEXTScanGetCachedResultsReqParams *wdaRequest)
22190{
22191 WDI_Status status = WDI_STATUS_SUCCESS;
22192 tWDA_ReqParams *pWdaParams;
22193
22194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22195 "%s: ", __func__);
22196 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22197 if (NULL == pWdaParams)
22198 {
22199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22200 "%s: VOS MEM Alloc Failure", __func__);
22201 VOS_ASSERT(0);
22202 return VOS_STATUS_E_NOMEM;
22203 }
22204 pWdaParams->pWdaContext = pWDA;
22205 pWdaParams->wdaMsgParam = wdaRequest;
22206 pWdaParams->wdaWdiApiMsgParam = NULL;
22207
22208 status = WDI_EXTScanGetCachedResultsReq((void *)wdaRequest,
22209 (WDI_EXTScanGetCachedResultsRspCb)WDA_EXTScanGetCachedResultsRspCallback,
22210 (void *)pWdaParams);
22211 if (IS_WDI_STATUS_FAILURE(status))
22212 {
22213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22214 "Failure to request. Free all the memory " );
22215 vos_mem_free(pWdaParams->wdaMsgParam);
22216 vos_mem_free(pWdaParams);
22217 }
22218 return CONVERT_WDI2VOS_STATUS(status);
22219}
22220
22221/*==========================================================================
22222 FUNCTION WDA_ProcessEXTScanGetCapabilitiesReq
22223
22224 DESCRIPTION
22225 API to send EXTScan Get Capabilities Request to WDI
22226
22227 PARAMETERS
22228 pWDA: Pointer to WDA context
22229 wdaRequest: Pointer to EXTScan req parameters
22230===========================================================================*/
22231VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
22232 tSirGetEXTScanCapabilitiesReqParams *wdaRequest)
22233{
22234 WDI_Status status = WDI_STATUS_SUCCESS;
22235 tWDA_ReqParams *pWdaParams;
22236
22237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22238 "%s:", __func__);
22239 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22240 if (NULL == pWdaParams)
22241 {
22242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22243 "%s: VOS MEM Alloc Failure", __func__);
22244 VOS_ASSERT(0);
22245 return VOS_STATUS_E_NOMEM;
22246 }
22247 pWdaParams->pWdaContext = pWDA;
22248 pWdaParams->wdaMsgParam = wdaRequest;
22249 pWdaParams->wdaWdiApiMsgParam = NULL;
22250
22251 status = WDI_EXTScanGetCapabilitiesReq((void *)wdaRequest,
22252 (WDI_EXTScanGetCapabilitiesRspCb)WDA_EXTScanGetCapabilitiesRspCallback,
22253 (void *)pWdaParams);
22254 if (IS_WDI_STATUS_FAILURE(status))
22255 {
22256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22257 "Failure to request. Free all the memory " );
22258 vos_mem_free(pWdaParams->wdaMsgParam);
22259 vos_mem_free(pWdaParams);
22260 }
22261 return CONVERT_WDI2VOS_STATUS(status);
22262}
22263
22264/*==========================================================================
22265 FUNCTION WDA_ProcessEXTScanSetBSSIDHotlistReq
22266
22267 DESCRIPTION
22268 API to send Set BSSID Hotlist Request to WDI
22269
22270 PARAMETERS
22271 pWDA: Pointer to WDA context
22272 wdaRequest: Pointer to EXTScan req parameters
22273===========================================================================*/
22274VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
22275 tSirEXTScanSetBssidHotListReqParams *wdaRequest)
22276{
22277 WDI_Status status = WDI_STATUS_SUCCESS;
22278 tWDA_ReqParams *pWdaParams;
22279
22280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22281 "%s: ", __func__);
22282 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22283 if (NULL == pWdaParams)
22284 {
22285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22286 "%s: VOS MEM Alloc Failure", __func__);
22287 VOS_ASSERT(0);
22288 return VOS_STATUS_E_NOMEM;
22289 }
22290 pWdaParams->pWdaContext = pWDA;
22291 pWdaParams->wdaMsgParam = wdaRequest;
22292 pWdaParams->wdaWdiApiMsgParam = NULL;
22293
22294 status = WDI_EXTScanSetBSSIDHotlistReq((void *)wdaRequest,
22295 (WDI_EXTScanSetBSSIDHotlistRspCb)WDA_EXTScanSetBSSIDHotlistRspCallback,
22296 (void *)pWdaParams);
22297 if (IS_WDI_STATUS_FAILURE(status))
22298 {
22299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22300 "Failure to request. Free all the memory " );
22301 vos_mem_free(pWdaParams->wdaMsgParam);
22302 vos_mem_free(pWdaParams);
22303 }
22304 return CONVERT_WDI2VOS_STATUS(status);
22305}
22306
22307/*==========================================================================
22308 FUNCTION WDA_ProcessEXTScanReSetBSSIDHotlistReq
22309
22310 DESCRIPTION
22311 API to send Reset BSSID Hotlist Request to WDI
22312
22313 PARAMETERS
22314 pWDA: Pointer to WDA context
22315 wdaRequest: Pointer to EXTScan req parameters
22316===========================================================================*/
22317VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
22318 tSirEXTScanResetBssidHotlistReqParams *wdaRequest)
22319{
22320 WDI_Status status = WDI_STATUS_SUCCESS;
22321 tWDA_ReqParams *pWdaParams;
22322
22323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22324 "%s:", __func__);
22325 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22326 if (NULL == pWdaParams)
22327 {
22328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22329 "%s: VOS MEM Alloc Failure", __func__);
22330 VOS_ASSERT(0);
22331 return VOS_STATUS_E_NOMEM;
22332 }
22333 pWdaParams->pWdaContext = pWDA;
22334 pWdaParams->wdaMsgParam = wdaRequest;
22335 pWdaParams->wdaWdiApiMsgParam = NULL;
22336
22337 status = WDI_EXTScanResetBSSIDHotlistReq((void *)wdaRequest,
22338 (WDI_EXTScanResetBSSIDHotlistRspCb)WDA_EXTScanResetBSSIDHotlistRspCallback,
22339 (void *)pWdaParams);
22340 if (IS_WDI_STATUS_FAILURE(status))
22341 {
22342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22343 "Failure to request. Free all the memory " );
22344 vos_mem_free(pWdaParams->wdaMsgParam);
22345 vos_mem_free(pWdaParams);
22346 }
22347 return CONVERT_WDI2VOS_STATUS(status);
22348}
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053022349
22350/*==========================================================================
Padma, Santhosh Kumarc1f7f052015-08-26 12:29:01 +053022351 FUNCTION WDA_ProcessHighPriorityDataInfoInd
22352
22353 DESCRIPTION
22354 API to send Reset SSID Hotlist Request to WDI
22355
22356 PARAMETERS
22357 pWDA: Pointer to WDA context
22358 wdaRequest: Pointer to EXTScan req parameters
22359===========================================================================*/
22360VOS_STATUS WDA_ProcessHighPriorityDataInfoInd(tWDA_CbContext *pWDA,
22361 tSirHighPriorityDataInfoInd *wdaRequest)
22362{
22363 WDI_Status status = WDI_STATUS_SUCCESS;
22364
22365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22366 "%s:", __func__);
22367
22368 status = WDI_HighPriorityDataInfoInd((void *)wdaRequest);
22369 if (WDI_STATUS_PENDING == status)
22370 {
22371 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22372 FL("pending status received "));
22373 }
22374 else if (WDI_STATUS_SUCCESS_SYNC != status)
22375 {
22376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22377 FL("Failure status %d"), status);
22378 }
22379 return CONVERT_WDI2VOS_STATUS(status);
22380}
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053022381
Dino Mycle41bdc942014-06-10 11:30:24 +053022382#endif /* WLAN_FEATURE_EXTSCAN */
22383
Sunil Duttbd736ed2014-05-26 21:19:41 +053022384#ifdef WLAN_FEATURE_LINK_LAYER_STATS
22385
22386/*==========================================================================
22387 FUNCTION WDA_LLStatsSetRspCallback
22388
22389 DESCRIPTION
22390 API to process set link layer statistics response from FW
22391
22392 PARAMETERS
22393 pRsp: Pointer to set link layer statistics response
22394 pUserData: Pointer to user data
22395
22396 RETURN VALUE
22397 NONE
22398
22399===========================================================================*/
22400void WDA_LLStatsSetRspCallback(void *pEventData, void* pUserData)
22401{
22402 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
22403
22404
22405 if (NULL == pWdaParams)
22406 {
22407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22408 "%s: pWdaParams received NULL", __func__);
22409 VOS_ASSERT(0) ;
22410 return ;
22411 }
22412
22413 /* Do not need to send notification to upper layer
22414 * Just free allocated resources */
22415 if (pWdaParams->wdaWdiApiMsgParam != NULL)
22416 {
22417 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
22418 }
22419 if (pWdaParams->wdaMsgParam != NULL)
22420 {
22421 vos_mem_free(pWdaParams->wdaMsgParam);
22422 }
22423 vos_mem_free(pWdaParams) ;
22424
22425 return;
22426}
22427
22428/*==========================================================================
22429 FUNCTION WDA_ProcessLLStatsSetReq
22430
22431 DESCRIPTION
22432 API to send Set Link Layer Stats request to WDI
22433
22434 PARAMETERS
22435 pWDA: Pointer to WDA context
22436 wdaRequest: Pointer to set Link Layer Stats req parameters
22437===========================================================================*/
22438VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
22439 tSirLLStatsSetReq *wdaRequest)
22440{
22441 WDI_Status status = WDI_STATUS_SUCCESS;
22442 tWDA_ReqParams *pWdaParams;
22443
22444 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22445 if (NULL == pWdaParams)
22446 {
22447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22448 "%s: VOS MEM Alloc Failure", __func__);
22449 VOS_ASSERT(0);
22450 return VOS_STATUS_E_NOMEM;
22451 }
22452 pWdaParams->pWdaContext = pWDA;
22453 pWdaParams->wdaMsgParam = wdaRequest;
22454 pWdaParams->wdaWdiApiMsgParam = NULL;
22455
22456 status = WDI_LLStatsSetReq((void *)wdaRequest,
22457 (WDI_LLStatsSetRspCb)WDA_LLStatsSetRspCallback,
22458 (void *)pWdaParams);
22459 if (IS_WDI_STATUS_FAILURE(status))
22460 {
22461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22462 "Failure to request. Free all the memory " );
22463 vos_mem_free(pWdaParams->wdaMsgParam);
22464 vos_mem_free(pWdaParams);
22465 }
22466 return CONVERT_WDI2VOS_STATUS(status);
22467}
22468
22469/*==========================================================================
22470 FUNCTION WDA_LLStatsGetRspCallback
22471
22472 DESCRIPTION
22473 API to process get link layer statistics response from FW
22474
22475 PARAMETERS
22476 pRsp: Pointer to get link layer statistics response
22477 pUserData: Pointer to user data
22478
22479 RETURN VALUE
22480 NONE
22481
22482===========================================================================*/
22483void WDA_LLStatsGetRspCallback(void *pEventData, void* pUserData)
22484{
22485 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
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
22495 /* Do not need to send notification to upper layer
22496 * Just free allocated resources */
22497 if (pWdaParams->wdaWdiApiMsgParam != NULL)
22498 {
22499 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
22500 }
22501 if (pWdaParams->wdaMsgParam != NULL)
22502 {
22503 vos_mem_free(pWdaParams->wdaMsgParam);
22504 }
22505 vos_mem_free(pWdaParams) ;
22506
22507 return;
22508}
22509
22510/*==========================================================================
22511 FUNCTION WDA_ProcessLLStatsGetReq
22512
22513 DESCRIPTION
22514 API to send Get Link Layer Stats request to WDI
22515
22516 PARAMETERS
22517 pWDA: Pointer to WDA context
22518 wdaRequest: Pointer to get Link Layer Stats req parameters
22519===========================================================================*/
22520VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
22521 tSirLLStatsGetReq *wdaRequest)
22522{
22523 WDI_Status status = WDI_STATUS_SUCCESS;
22524 tWDA_ReqParams *pWdaParams;
22525
22526 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22527 if (NULL == pWdaParams)
22528 {
22529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22530 "%s: VOS MEM Alloc Failure", __func__);
22531 VOS_ASSERT(0);
22532 return VOS_STATUS_E_NOMEM;
22533 }
22534 pWdaParams->pWdaContext = pWDA;
22535 pWdaParams->wdaMsgParam = wdaRequest;
22536 pWdaParams->wdaWdiApiMsgParam = NULL;
22537
22538 status = WDI_LLStatsGetReq((void *) wdaRequest,
22539 (WDI_LLStatsGetRspCb)WDA_LLStatsGetRspCallback,
22540 (void *)pWdaParams);
22541 if (IS_WDI_STATUS_FAILURE(status))
22542 {
22543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22544 "Failure to request. Free all the memory " );
22545 vos_mem_free(pWdaParams->wdaMsgParam);
22546 vos_mem_free(pWdaParams);
22547 }
22548 return CONVERT_WDI2VOS_STATUS(status);
22549}
22550
22551/*==========================================================================
22552 FUNCTION WDA_LLStatsClearRspCallback
22553
22554 DESCRIPTION
22555 API to process clear link layer statistics response from FW
22556
22557 PARAMETERS
22558 pRsp: Pointer to clear link layer statistics response
22559 pUserData: Pointer to user data
22560
22561 RETURN VALUE
22562 NONE
22563
22564===========================================================================*/
22565void WDA_LLStatsClearRspCallback(void *pEventData, void* pUserData)
22566{
22567 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
22568
22569
22570 if (NULL == pWdaParams)
22571 {
22572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22573 "%s: pWdaParams received NULL", __func__);
22574 VOS_ASSERT(0) ;
22575 return ;
22576 }
22577 /* Do not need to send notification to upper layer
22578 * Just free allocated resources */
22579 if (pWdaParams->wdaWdiApiMsgParam != NULL)
22580 {
22581 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
22582 }
22583 if (pWdaParams->wdaMsgParam != NULL)
22584 {
22585 vos_mem_free(pWdaParams->wdaMsgParam);
22586 }
22587 vos_mem_free(pWdaParams) ;
22588 return;
22589}
22590
22591/*==========================================================================
22592 FUNCTION WDA_ProcessLLStatsClearReq
22593
22594 DESCRIPTION
22595 API to send Clear Link Layer Stats request to WDI
22596
22597 PARAMETERS
22598 pWDA: Pointer to WDA context
22599 wdaRequest: Pointer to earLink Layer Stats req
22600===========================================================================*/
22601VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
22602 tSirLLStatsClearReq *wdaRequest)
22603{
22604 WDI_Status status = WDI_STATUS_SUCCESS;
22605 tWDA_ReqParams *pWdaParams;
22606
22607 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22608 if (NULL == pWdaParams)
22609 {
22610 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22611 "%s: VOS MEM Alloc Failure", __func__);
22612 VOS_ASSERT(0);
22613 return VOS_STATUS_E_NOMEM;
22614 }
22615 pWdaParams->pWdaContext = pWDA;
22616 pWdaParams->wdaMsgParam = wdaRequest;
22617 pWdaParams->wdaWdiApiMsgParam = NULL;
22618
22619 status = WDI_LLStatsClearReq((void *) wdaRequest,
22620 (WDI_LLStatsClearRspCb)WDA_LLStatsClearRspCallback,
22621 (void *)pWdaParams);
22622 if (IS_WDI_STATUS_FAILURE(status))
22623 {
22624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22625 "Failure to request. Free all the memory " );
22626 vos_mem_free(pWdaParams->wdaMsgParam);
22627 vos_mem_free(pWdaParams);
22628 }
22629 return CONVERT_WDI2VOS_STATUS(status);
22630}
22631
22632#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Abhishek Singh85b74712014-10-08 11:38:19 +053022633
Abhishek Singh85b74712014-10-08 11:38:19 +053022634void WDA_FWStatsGetRspCallback(WDI_Status status,void *fwStatsResp,void *pUserData)
22635{
22636 tSirFWStatsInfo *fwStatsinfo = (tSirFWStatsInfo *)pUserData;
22637
22638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22639 "<------ %s " ,__func__);
22640 if (NULL == fwStatsinfo)
22641 {
22642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22643 "%s: pWdaParams received NULL", __func__);
22644 VOS_ASSERT(0);
22645 return;
22646 }
22647
22648 if(fwStatsinfo->callback)
22649 fwStatsinfo->callback(status, fwStatsResp, fwStatsinfo->data);
22650
22651 vos_mem_free(pUserData);
22652 return;
22653}
22654
22655
22656v_VOID_t WDA_ProcessFWStatsGetReq(tWDA_CbContext *pWDA,
22657 tSirFWStatsGetReq *pData)
22658{
22659
22660 WDI_Status wdiStatus;
22661 tSirFWStatsInfo *fwStatsinfo;
22662
22663 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22664 "------> %s" , __func__);
22665
22666 fwStatsinfo =
22667 (tSirFWStatsInfo *)vos_mem_malloc(sizeof(tSirFWStatsInfo));
22668 if (NULL == fwStatsinfo)
22669 {
22670 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22671 "%s: VOS MEM Alloc Failure", __func__);
22672 VOS_ASSERT(0);
22673 vos_mem_free(pData);
22674 return;
22675 }
22676
22677 fwStatsinfo->callback = (tSirFWStatsCallback)(pData->callback);
22678 fwStatsinfo->data = pData->data;
22679
22680 wdiStatus = WDI_FWStatsGetReq(fwStatsinfo,
22681 WDA_FWStatsGetRspCallback,
22682 pData->stats);
22683 if (WDI_STATUS_PENDING == wdiStatus)
22684 {
22685 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22686 "Pending received for %s:%d ", __func__, __LINE__);
22687 }
22688 else if (WDI_STATUS_SUCCESS != wdiStatus)
22689 {
22690 if (fwStatsinfo->callback)
22691 {
22692 fwStatsinfo->callback(WDI_STATUS_E_FAILURE, NULL ,fwStatsinfo->data);
22693 }
22694 vos_mem_free(fwStatsinfo);
22695 }
22696 vos_mem_free(pData);
22697}
22698
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053022699/*==========================================================================
22700 FUNCTION WDA_EncryptMsgRspCallback
22701
22702 DESCRIPTION
22703 API to send Encrypt message response to HDD
22704
22705 PARAMETERS
22706 pEventData: Response from FW
22707 pUserData: Data sent to firmware as part of request
22708===========================================================================*/
22709void WDA_EncryptMsgRspCallback(WDI_Status status, void *pEventData,
22710 void* pUserData)
22711{
22712 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
22713 tWDA_CbContext *pWDA = NULL;
22714 tpAniSirGlobal pMac;
22715 vos_msg_t vosMsg;
22716 tpSirEncryptedDataRspParams pEncRspParams;
22717 tpSetEncryptedDataRspParams pEncryptedDataRsp;
22718
22719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22720 FL("%s:"), __func__);
22721 if (NULL == pWdaParams)
22722 {
22723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22724 FL("%s: pWdaParams received NULL"), __func__);
22725 VOS_ASSERT(0);
22726 return;
22727 }
22728
22729 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
22730
22731 if (NULL == pWDA)
22732 {
22733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22734 FL("%s: pWDA received NULL"), __func__);
22735 VOS_ASSERT(0);
22736 goto error;
22737 }
22738
22739 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
22740 if (NULL == pMac)
22741 {
22742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22743 FL("%s:pMac is NULL"), __func__);
22744 VOS_ASSERT(0);
22745 goto error;
22746 }
22747
22748 pEncryptedDataRsp = (tpSetEncryptedDataRspParams) pEventData;
22749
22750 pEncRspParams = vos_mem_malloc(sizeof(tSirEncryptedDataRspParams));
22751 if (NULL == pEncRspParams)
22752 {
22753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22754 FL("%s: VOS MEM Alloc Failure"), __func__);
22755 VOS_ASSERT(0);
22756 goto error;
22757 }
22758
22759 /* Message Header */
22760 pEncRspParams->mesgType = eWNI_SME_ENCRYPT_MSG_RSP;
22761 pEncRspParams->mesgLen = sizeof(tSirEncryptedDataRspParams);
22762 pEncRspParams->encryptedDataRsp.encryptedPayload.length =
22763 pEncryptedDataRsp->encryptedPayload.length;
22764 vos_mem_copy(pEncRspParams->encryptedDataRsp.encryptedPayload.data,
22765 pEncryptedDataRsp->encryptedPayload.data,
22766 pEncryptedDataRsp->encryptedPayload.length);
22767
22768 /* VOS message wrapper */
22769 vosMsg.type = eWNI_SME_ENCRYPT_MSG_RSP;
22770 vosMsg.bodyptr = (void *)pEncRspParams;
22771 vosMsg.bodyval = 0;
22772
22773 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
22774 {
22775 /* free the mem */
22776 vos_mem_free((v_VOID_t *) pEncRspParams);
22777 }
22778
22779error:
22780
22781 if (pWdaParams->wdaWdiApiMsgParam != NULL)
22782 {
22783 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
22784 }
22785 if (pWdaParams->wdaMsgParam != NULL)
22786 {
22787 vos_mem_free(pWdaParams->wdaMsgParam);
22788 }
22789 vos_mem_free(pWdaParams) ;
22790
22791 return;
22792}
22793/*==========================================================================
22794 FUNCTION WDA_ProcessEncryptMsgReq
22795
22796 DESCRIPTION
22797 API to send Encrypt message Request to WDI
22798
22799 PARAMETERS
22800 pWDA: Pointer to WDA context
22801 wdaRequest: Pointer to Encrypt_msg req parameters
22802===========================================================================*/
22803VOS_STATUS WDA_ProcessEncryptMsgReq(tWDA_CbContext *pWDA,
22804 u8 *wdaRequest)
22805{
22806 WDI_Status status = WDI_STATUS_SUCCESS;
22807 tWDA_ReqParams *pWdaParams;
22808
22809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22810 FL("%s: "), __func__);
22811 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22812 if (NULL == pWdaParams)
22813 {
22814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22815 FL("%s: VOS MEM Alloc Failure"), __func__);
22816 VOS_ASSERT(0);
22817 return VOS_STATUS_E_NOMEM;
22818 }
22819 pWdaParams->pWdaContext = pWDA;
22820 pWdaParams->wdaMsgParam = wdaRequest;
22821 pWdaParams->wdaWdiApiMsgParam = NULL;
22822
22823 status = WDI_EncryptMsgReq((void *)wdaRequest,
22824 (WDI_EncryptMsgRspCb)WDA_EncryptMsgRspCallback,
22825 (void *)pWdaParams);
22826 if (IS_WDI_STATUS_FAILURE(status))
22827 {
22828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22829 FL("Failure to request. Free all the memory " ));
22830 vos_mem_free(pWdaParams->wdaMsgParam);
22831 vos_mem_free(pWdaParams);
22832 }
22833 return CONVERT_WDI2VOS_STATUS(status);
22834}
Abhishek Singh41988ba2015-05-25 19:42:29 +053022835/*==========================================================================
22836 FUNCTION WDA_ProcessSetRtsCtsHTVhtInd
22837
22838 DESCRIPTION
22839 API to enable/disable RTS/CTS for different modes.
22840
22841 PARAMETERS
22842 pWDA: Pointer to WDA context
22843 rtsCtsVal : Bit mask value to enable RTS/CTS for different modes
22844===========================================================================*/
22845
22846VOS_STATUS
22847WDA_ProcessSetRtsCtsHTVhtInd(tWDA_CbContext *pWDA,
22848 tANI_U32 rtsCtsVal)
22849{
22850 WDI_Status status;
22851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22852 FL("---> %s"), __func__);
22853 status = WDI_SetRtsCtsHTVhtInd(rtsCtsVal);
22854 if (WDI_STATUS_PENDING == status)
22855 {
22856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22857 FL("pending status received "));
22858 }
22859 else if (WDI_STATUS_SUCCESS_SYNC != status)
22860 {
22861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22862 FL("Failure status %d"), status);
22863 }
22864 return CONVERT_WDI2VOS_STATUS(status) ;
22865}
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053022866
22867void WDA_MonModeRspCallback(void *pEventData, void* pUserData)
Katya Nigamf0511f62015-05-05 16:40:57 +053022868{
22869 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053022870 tSirMonModeReq *pData;
Katya Nigamf0511f62015-05-05 16:40:57 +053022871
22872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22873 "<------ %s " ,__func__);
22874 if (NULL == pWdaParams)
22875 {
22876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22877 "%s: pWdaParams received NULL", __func__);
22878 VOS_ASSERT(0) ;
22879 return ;
22880 }
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053022881 pData = (tSirMonModeReq *)pWdaParams->wdaMsgParam;
22882 if (pData != NULL) {
22883 pData->callback(pData->magic, pData->cmpVar);
22884 vos_mem_free(pWdaParams->wdaMsgParam);
22885 }
Katya Nigamf0511f62015-05-05 16:40:57 +053022886 vos_mem_free(pWdaParams) ;
22887
22888 return;
22889}
22890
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053022891VOS_STATUS WDA_ProcessMonStartReq( tWDA_CbContext *pWDA, void *wdaRequest)
Katya Nigamf0511f62015-05-05 16:40:57 +053022892{
22893
22894 WDI_Status status = WDI_STATUS_SUCCESS;
22895 tWDA_ReqParams *pWdaParams;
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053022896 tSirMonModeReq *pMonModeData = (tSirMonModeReq *)wdaRequest;
Katya Nigamf0511f62015-05-05 16:40:57 +053022897
22898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22899 FL("%s: "), __func__);
22900 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22901 if (NULL == pWdaParams)
22902 {
22903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22904 FL("%s: VOS MEM Alloc Failure"), __func__);
22905 VOS_ASSERT(0);
22906 return VOS_STATUS_E_NOMEM;
22907 }
22908 pWdaParams->pWdaContext = pWDA;
22909 pWdaParams->wdaMsgParam = wdaRequest;
22910 pWdaParams->wdaWdiApiMsgParam = NULL;
22911
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053022912 status = WDI_MonStartReq(pMonModeData->data,
22913 (WDI_MonModeRspCb)WDA_MonModeRspCallback,
Katya Nigamf0511f62015-05-05 16:40:57 +053022914 (void *)pWdaParams);
22915 if (IS_WDI_STATUS_FAILURE(status))
22916 {
22917 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22918 "Failure to request. Free all the memory " );
22919 vos_mem_free(pWdaParams->wdaMsgParam);
22920 vos_mem_free(pWdaParams);
22921 }
22922 return CONVERT_WDI2VOS_STATUS(status);
22923}
22924
Katya Nigamf0511f62015-05-05 16:40:57 +053022925VOS_STATUS WDA_ProcessMonStopReq( tWDA_CbContext *pWDA, void* wdaRequest)
22926{
22927
22928 WDI_Status status = WDI_STATUS_SUCCESS;
22929 tWDA_ReqParams *pWdaParams;
22930
22931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22932 FL("%s: "), __func__);
22933 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
22934 if (NULL == pWdaParams)
22935 {
22936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22937 FL("%s: VOS MEM Alloc Failure"), __func__);
22938 VOS_ASSERT(0);
22939 return VOS_STATUS_E_NOMEM;
22940 }
22941 pWdaParams->pWdaContext = pWDA;
22942 pWdaParams->wdaMsgParam = wdaRequest;
22943 pWdaParams->wdaWdiApiMsgParam = NULL;
22944
Bhargav Shah1ae5de02015-07-20 13:32:31 +053022945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22946 "%s: Processing Mon stop request", __func__);
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053022947 status = WDI_MonStopReq((WDI_MonModeRspCb)WDA_MonModeRspCallback,
Katya Nigamf0511f62015-05-05 16:40:57 +053022948 (void *)pWdaParams);
22949
22950 if (IS_WDI_STATUS_FAILURE(status))
22951 {
22952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22953 "Failure to request. Free all the memory " );
22954 vos_mem_free(pWdaParams->wdaMsgParam);
22955 vos_mem_free(pWdaParams);
22956 }
22957 return CONVERT_WDI2VOS_STATUS(status);
22958}
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +053022959
22960VOS_STATUS WDA_ProcessEnableDisableCAEventInd(tWDA_CbContext *pWDA, tANI_U8 val)
22961{
22962 WDI_Status status;
22963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22964 FL("---> %s"), __func__);
22965 status = WDI_EnableDisableCAEventInd(val);
22966 if (WDI_STATUS_PENDING == status)
22967 {
22968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22969 FL("pending status received "));
22970 }
22971 else if (WDI_STATUS_SUCCESS_SYNC != status)
22972 {
22973 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
22974 FL("Failure status %d"), status);
22975 }
22976 return CONVERT_WDI2VOS_STATUS(status) ;
22977}
Arun Khandavalli7eeb1592015-10-19 21:36:57 +053022978
22979/*==========================================================================
22980 FUNCTION WDA_WifiConfigSetRspCallback
22981
22982 DESCRIPTION
22983 API to process set WifiConfig response from FW
22984
22985 PARAMETERS
22986 pRsp: Pointer to set WifiConfig response
22987 pUserData: Pointer to user data
22988
22989 RETURN VALUE
22990 NONE
22991
22992===========================================================================*/
22993void WDA_WifiConfigSetRspCallback(void *pEventData, void* pUserData)
22994{
22995 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
22996
22997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
22998 "<------ %s " ,__func__);
22999
23000 if(NULL == pWdaParams)
23001 {
23002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23003 "%s: pWdaParams received NULL", __func__);
23004 VOS_ASSERT(0);
23005 return ;
23006 }
23007
23008 if(NULL == pWdaParams->wdaMsgParam)
23009 {
23010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23011 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
23012 VOS_ASSERT(0);
23013 vos_mem_free(pWdaParams);
23014 return ;
23015 }
23016
23017 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
23018 vos_mem_free(pWdaParams->wdaMsgParam);
23019 vos_mem_free(pWdaParams);
23020
23021 return;
23022}
23023
23024/*==========================================================================
23025 FUNCTION WDA_ProcessWifiConfigReq
23026
23027 DESCRIPTION
23028 API to send Set WifiConfig params request to WDI
23029
23030 PARAMETERS
23031 pWDA: Pointer to WDA context
23032 wdaRequest: Pointer to set WifiConfig req parameters
23033===========================================================================*/
23034
23035VOS_STATUS WDA_ProcessWifiConfigReq(tWDA_CbContext *pWDA,
23036 tSetWifiConfigParams *pwdaWificonfig)
23037{
23038 WDI_Status status = WDI_STATUS_SUCCESS;
23039 WDI_WifiConfigSetReqType *pwdiWifConfigSetReqParams;
23040 tWDA_ReqParams *pWdaParams ;
23041 WDI_Status wstatus;
23042
23043 /* Sanity Check*/
23044 if(NULL == pwdaWificonfig)
23045 {
23046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23047 "%s: tSetWifiConfigParams received NULL", __func__);
23048 VOS_ASSERT(0) ;
23049 return VOS_STATUS_E_FAULT;
23050 }
23051
23052 pwdiWifConfigSetReqParams = (WDI_WifiConfigSetReqType *)vos_mem_malloc(
23053 sizeof(WDI_WifiConfigSetReqType));
23054 if(NULL == pwdiWifConfigSetReqParams)
23055 {
23056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23057 "%s: VOS MEM Alloc Failure", __func__);
23058 VOS_ASSERT(0);
23059 vos_mem_free(pwdaWificonfig);
23060 return VOS_STATUS_E_NOMEM;
23061 }
23062
23063 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
23064 if(NULL == pWdaParams)
23065 {
23066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23067 "%s: VOS MEM Alloc Failure", __func__);
23068 VOS_ASSERT(0);
23069 vos_mem_free(pwdiWifConfigSetReqParams);
23070 vos_mem_free(pwdaWificonfig);
23071 return VOS_STATUS_E_NOMEM;
23072 }
23073 pwdiWifConfigSetReqParams->paramType = pwdaWificonfig->paramType;
23074 pwdiWifConfigSetReqParams->paramValue = pwdaWificonfig->paramValue;
23075 vos_mem_copy(pwdiWifConfigSetReqParams->bssId,
23076 &(pwdaWificonfig->bssId), sizeof(tSirMacAddr));
23077
23078 pWdaParams->pWdaContext = pWDA;
Arun Khandavallic7ca4172015-10-21 10:42:42 +053023079 pWdaParams->wdaMsgParam = pwdaWificonfig;
Arun Khandavalli7eeb1592015-10-19 21:36:57 +053023080 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiWifConfigSetReqParams;
23081
23082 wstatus = WDI_WifiConfigSetReq(pwdiWifConfigSetReqParams,
23083 (WDI_WifiConfigSetRspCb)WDA_WifiConfigSetRspCallback,
23084 pWdaParams);
23085 if(IS_WDI_STATUS_FAILURE(wstatus))
23086 {
23087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23088 "Failure in sendind WifiConfigReq, free all the memory" );
23089 status = CONVERT_WDI2VOS_STATUS(wstatus);
23090 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
23091 vos_mem_free(pWdaParams->wdaMsgParam);
23092 vos_mem_free(pWdaParams);
23093 }
23094
23095 return status;
23096
23097}
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053023098
23099#ifdef FEATURE_OEM_DATA_SUPPORT
23100/*
23101 * FUNCTION: WDA_ProcessStartOemDataReqIndNew
23102 * Request to WDI.
23103 */
23104VOS_STATUS WDA_ProcessStartOemDataReqIndNew(tWDA_CbContext *pWDA,
23105 tOemDataReqNewConfig *pOemDataReqNewConfig)
23106{
23107 VOS_STATUS status = VOS_STATUS_SUCCESS;
23108 WDI_Status wstatus;
23109 WDI_OemDataReqNewConfig *wdiOemDataReqNewConfig;
23110
23111 /* Sanity Check*/
23112 if(NULL == pOemDataReqNewConfig)
23113 {
23114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23115 "%s: pOemDataReqNewConfig received NULL", __func__);
23116 VOS_ASSERT(0) ;
23117 return VOS_STATUS_E_FAULT;
23118 }
23119
23120 wdiOemDataReqNewConfig = (WDI_OemDataReqNewConfig *)vos_mem_malloc(
23121 sizeof(WDI_OemDataReqNewConfig));
23122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
23123 "------> %s " ,__func__);
23124
23125 if(NULL == wdiOemDataReqNewConfig)
23126 {
23127 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23128 "%s: VOS MEM Alloc Failure", __func__);
23129 VOS_ASSERT(0);
23130 vos_mem_free(pOemDataReqNewConfig);
23131 return VOS_STATUS_E_NOMEM;
23132 }
23133
23134 vos_mem_copy(wdiOemDataReqNewConfig, pOemDataReqNewConfig,
23135 sizeof(WDI_OemDataReqNewConfig));
23136
23137 wstatus = WDI_StartOemDataReqIndNew(wdiOemDataReqNewConfig);
23138
23139 if (WDI_STATUS_PENDING == wstatus)
23140 {
23141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
23142 FL("pending status received "));
23143 }
23144 else if ((WDI_STATUS_SUCCESS_SYNC != wstatus) && (WDI_STATUS_SUCCESS != wstatus))
23145 {
23146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23147 FL("Failure in OemDataReqIndNew WDI API, free all memory %d"), wstatus);
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053023148 }
23149
Selvaraj, Sridhar2133b112016-04-13 14:45:00 +053023150 vos_mem_free(wdiOemDataReqNewConfig);
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053023151 vos_mem_free(pOemDataReqNewConfig);
23152
23153 return status;
23154}
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053023155
Mahesh A Saptasagarcfc65ae2015-12-22 15:06:10 +053023156void WDA_GetCurrentAntennaIndexCallback(WDI_Status status, void *params,
23157 void *pUserData)
23158{
23159 tSirAntennaDiversitySelectionInfo *pAntennaDivSelInfo =
23160 (tSirAntennaDiversitySelectionInfo *)pUserData;
23161
23162 tSirAntennaDivSelRsp *resParams = (tSirAntennaDivSelRsp *)params;
23163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
23164 "<------ %s " ,__func__);
23165 if (NULL == pAntennaDivSelInfo)
23166 {
23167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23168 "%s: pWdaParams received NULL", __func__);
23169 VOS_ASSERT(0) ;
23170 return ;
23171 }
23172 if (NULL == resParams)
23173 {
23174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23175 "%s: resParams received NULL", __func__);
23176 VOS_ASSERT(0) ;
23177 return ;
23178 }
23179
23180 if (pAntennaDivSelInfo->callback)
23181 {
23182 if (WDI_STATUS_SUCCESS == status)
23183 {
23184 pAntennaDivSelInfo->callback(resParams->selectedAntennaId,
23185 pAntennaDivSelInfo->data);
23186 }
23187 else
23188 {
23189 pAntennaDivSelInfo->callback(-1,
23190 pAntennaDivSelInfo->data);
23191 }
23192 }
23193
23194 vos_mem_free(pUserData);
23195 return;
23196}
23197
23198/*
23199 * FUNCTION: WDA_ProcessAntennaDiversitySelectionReq
23200 * Request to WDI.
23201 */
23202v_VOID_t WDA_ProcessAntennaDiversitySelectionReq(tWDA_CbContext *pWDA,
23203 tSirAntennaDiversitySelectionReq *pData)
23204{
23205 WDI_Status wdiStatus;
23206 tSirAntennaDiversitySelectionInfo *pAntennaDivSelInfo;
23207
23208 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
23209 "------> %s " , __func__);
23210
23211 pAntennaDivSelInfo = (tSirAntennaDiversitySelectionInfo *)
23212 vos_mem_malloc(sizeof(tSirAntennaDiversitySelectionInfo));
23213 if (NULL == pAntennaDivSelInfo)
23214 {
23215 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23216 "%s: VOS MEM Alloc Failure", __func__);
23217 VOS_ASSERT(0);
23218 vos_mem_free(pData);
23219 return;
23220 }
23221
23222 pAntennaDivSelInfo->callback = (tAntennaDivSelCB)(pData->callback);
23223 pAntennaDivSelInfo->data = pData->data;
23224
23225 wdiStatus = WDI_GetCurrentAntennaIndex(pAntennaDivSelInfo,
23226 WDA_GetCurrentAntennaIndexCallback, pData->reserved);
23227
23228 if (WDI_STATUS_PENDING == wdiStatus)
23229 {
23230 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
23231 "Pending received for %s:%d ", __func__, __LINE__);
23232 }
23233 else if (WDI_STATUS_SUCCESS != wdiStatus)
23234 {
23235 if (pAntennaDivSelInfo->callback)
23236 {
23237 pAntennaDivSelInfo->callback(-1, pAntennaDivSelInfo->data);
23238 }
23239 }
23240
23241 vos_mem_free(pData);
23242 return;
23243}
23244
Mahesh A Saptasagar7d432952016-02-09 14:01:03 +053023245/*
23246 * FUNCTION: WDA_ProcessBcnMissPenaltyCount
23247 * Request to WDI.
23248 */
23249VOS_STATUS WDA_ProcessBcnMissPenaltyCount(tWDA_CbContext *pWDA,
23250 tModifyRoamParamsReqParams *params)
23251{
23252 WDI_Status status;
23253
23254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
23255 FL("---> %s"), __func__);
23256
23257 if (NULL == params)
23258 {
23259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
23260 FL("tModifyRoamParamsReqParams is received NULL"));
23261 return VOS_STATUS_E_NOMEM;
23262 }
23263
23264 status = WDI_SetBcnMissPenaltyCount((WDI_ModifyRoamParamsReqType *)params);
23265 if (WDI_STATUS_PENDING == status)
23266 {
23267 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
23268 FL("pending status received "));
23269 }
23270 else if (WDI_STATUS_SUCCESS_SYNC != status)
23271 {
23272 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23273 FL("Failure status %d"), status);
23274 }
23275 vos_mem_free(params);
23276 return CONVERT_WDI2VOS_STATUS(status) ;
23277}
Mahesh A Saptasagarcfc65ae2015-12-22 15:06:10 +053023278#endif
Manjeet Singh3ed79242017-01-11 19:04:32 +053023279/*
23280 * WDA_CapTsfRspCb : handle response for tsf requests
23281 * @wdi_rsp : Response from WDI for tsf requests
23282 * @user_data: pointer to user data
23283 * Returns: None
23284 */
23285void WDA_CapTsfRspCb (wdi_cap_tsf_rsp_t *wdi_rsp, void *user_data)
23286{
23287
23288 tWDA_ReqParams *wda_params = (tWDA_ReqParams *)user_data;
23289 tSirCapTsfParams *cap_tsf_params;
23290 struct stsf *stsf_temp;
23291 VOS_STATUS status;
23292
23293 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
23294 "<------ %s " ,__func__);
23295
23296 if (NULL == wda_params) {
23297 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23298 "%s: pWdaParams received NULL", __func__);
23299 VOS_ASSERT(0);
23300 return;
23301 }
23302
23303 if (NULL == wda_params->wdaMsgParam) {
23304 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23305 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
23306 VOS_ASSERT(0);
23307 vos_mem_free(wda_params->wdaWdiApiMsgParam);
23308 vos_mem_free(wda_params);
23309 return;
23310 }
23311
23312 stsf_temp = (struct stsf *)vos_mem_malloc(sizeof(*stsf_temp));
23313 if (NULL == stsf_temp) {
23314 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23315 "%s: Unable to allocate tsf struct", __func__);
23316 VOS_ASSERT(0);
23317 vos_mem_free(wda_params->wdaWdiApiMsgParam);
23318 vos_mem_free(wda_params->wdaMsgParam);
23319 vos_mem_free(wda_params);
23320 return;
23321 }
23322 cap_tsf_params = (tSirCapTsfParams *)wda_params->wdaMsgParam;
23323 stsf_temp->session_id = cap_tsf_params->bss_idx;
23324 stsf_temp->set_tsf_req = true;
23325 stsf_temp->tsf_req_status = wdi_rsp->status;
23326
23327 if (cap_tsf_params->tsf_rsp_cb_func) {
23328 cap_tsf_params->tsf_rsp_cb_func (
23329 cap_tsf_params->tsf_rsp_cb_ctx, stsf_temp);
23330 }
23331 else {
23332 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23333 "%s: tsf callback is NULL", __func__);
23334 vos_mem_free(stsf_temp);
23335 }
23336 status = CONVERT_WDI2VOS_STATUS(wdi_rsp->status);
23337 if (status) {
23338 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23339 "%s: Capture TSF failed with status=%d", __func__,
23340 status);
23341 VOS_ASSERT(0);
23342 }
23343 vos_mem_free(wda_params->wdaWdiApiMsgParam);
23344 vos_mem_free(wda_params->wdaMsgParam);
23345 vos_mem_free(wda_params);
23346 return;
23347}
23348
23349/*
23350 * WDA_GetTsfRspCb : handle response for get tsf request
23351 * @wdi_rsp : Response from WDI for tsf requests
23352 * @user_data: pointer to user data
23353 * Returns: None
23354 */
23355void WDA_GetTsfRspCb (wdi_cap_tsf_rsp_t *wdi_rsp, void *user_data)
23356{
23357
23358 tWDA_ReqParams *wda_params = (tWDA_ReqParams *)user_data;
23359 tSirCapTsfParams *cap_tsf_params;
23360 struct stsf *stsf_temp;
23361 VOS_STATUS status;
23362
23363 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
23364 "<------ %s " ,__func__);
23365
23366 if (NULL == wda_params) {
23367 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23368 "%s: pWdaParams received NULL", __func__);
23369 VOS_ASSERT(0);
23370 return;
23371 }
23372
23373 if (NULL == wda_params->wdaMsgParam) {
23374 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23375 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
23376 VOS_ASSERT(0);
23377 vos_mem_free(wda_params->wdaWdiApiMsgParam);
23378 vos_mem_free(wda_params);
23379 return;
23380 }
23381
23382 stsf_temp = (struct stsf *)vos_mem_malloc(sizeof(*stsf_temp));
23383 if (NULL == stsf_temp) {
23384 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23385 "%s: Unable to allocate tsf struct", __func__);
23386 VOS_ASSERT(0);
23387 vos_mem_free(wda_params->wdaWdiApiMsgParam);
23388 vos_mem_free(wda_params->wdaMsgParam);
23389 vos_mem_free(wda_params);
23390 return;
23391 }
23392 cap_tsf_params = (tSirCapTsfParams *)wda_params->wdaMsgParam;
23393 stsf_temp->session_id = cap_tsf_params->bss_idx;
23394 /* Indicate to upper layer that this is a get request */
23395 stsf_temp->set_tsf_req = false;
23396 stsf_temp->tsf_low = wdi_rsp->tsf_lo;
23397 stsf_temp->tsf_high = wdi_rsp->tsf_hi;
23398 stsf_temp->tsf_req_status = wdi_rsp->status;
23399
23400 if (cap_tsf_params->tsf_rsp_cb_func) {
23401 cap_tsf_params->tsf_rsp_cb_func (
23402 cap_tsf_params->tsf_rsp_cb_ctx, stsf_temp);
23403 }
23404 else {
23405 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23406 "%s: tsf callback is NULL", __func__);
23407 vos_mem_free(stsf_temp);
23408 }
23409 status = CONVERT_WDI2VOS_STATUS(wdi_rsp->status);
23410 if (status) {
23411 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23412 "%s: Capture TSF failed with status=%d", __func__,
23413 status);
23414 VOS_ASSERT(0);
23415 }
23416 vos_mem_free(wda_params->wdaWdiApiMsgParam);
23417 vos_mem_free(wda_params->wdaMsgParam);
23418 vos_mem_free(wda_params);
23419 return;
23420}
23421/*
23422 * FUNCTION: WDA_ProcessCapTsfReq
23423 * Send capture tsf request to FW.
23424 */
23425VOS_STATUS WDA_ProcessCapTsfReq(tWDA_CbContext *pWDA, tSirCapTsfParams *params)
23426{
23427 WDI_Status status = WDI_STATUS_SUCCESS;
23428 wdi_cap_tsf_params_t *pWDICapTsfReqType;
23429 tWDA_ReqParams *pWdaParams ;
23430
23431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
23432 "<------ %s " ,__func__);
23433 if(NULL == params)
23434 {
23435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23436 "%s: cap tsf params NULL", __func__);
23437 VOS_ASSERT(0) ;
23438 return -EINVAL;
23439 }
23440
23441 pWDICapTsfReqType = (wdi_cap_tsf_params_t *)vos_mem_malloc(
23442 sizeof(*pWDICapTsfReqType));
23443 if(NULL == pWDICapTsfReqType)
23444 {
23445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23446 "%s: VOS MEM Alloc Failure", __func__);
23447 VOS_ASSERT(0);
23448 vos_mem_free(params);
23449 return VOS_STATUS_E_NOMEM;
23450 }
23451 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(*pWdaParams)) ;
23452 if(NULL == pWdaParams)
23453 {
23454 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23455 "%s: VOS MEM Alloc Failure", __func__);
23456 VOS_ASSERT(0);
23457 vos_mem_free(pWDICapTsfReqType);
23458 vos_mem_free(params);
23459 return VOS_STATUS_E_NOMEM;
23460 }
23461
23462 pWDICapTsfReqType->bss_idx = params->bss_idx;
23463 pWDICapTsfReqType->capTSFget = CAP_TSF_REQUEST;
23464
23465 pWdaParams->pWdaContext = pWDA;
23466 pWdaParams->wdaMsgParam = params;
23467 pWdaParams->wdaWdiApiMsgParam = (void *)pWDICapTsfReqType;
23468
23469 status = wdi_process_cap_tsf_req(pWDICapTsfReqType,
23470 (wdi_tsf_rsp_cb)WDA_CapTsfRspCb,
23471 pWdaParams);
23472
23473 if(IS_WDI_STATUS_FAILURE(status))
23474 {
23475 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23476 "Failure in sendind WifiConfigReq, free all the memory" );
23477 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
23478 vos_mem_free(pWdaParams->wdaMsgParam);
23479 vos_mem_free(pWdaParams);
23480 vos_mem_free(params);
23481 }
23482 return CONVERT_WDI2VOS_STATUS(status) ;
23483}
23484
23485/*
23486 * FUNCTION: WDA_ProcessGetTsfReq
23487 * Send capture tsf request to FW.
23488 */
23489VOS_STATUS WDA_ProcessGetTsfReq(tWDA_CbContext *pWDA, tSirCapTsfParams *params)
23490{
23491 WDI_Status status = WDI_STATUS_SUCCESS;
23492 wdi_cap_tsf_params_t *pWDIGetTsfReqType;
23493 tWDA_ReqParams *pWdaParams ;
23494
23495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
23496 "<------ %s " ,__func__);
23497 if(NULL == params)
23498 {
23499 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23500 "%s: cap tsf params NULL", __func__);
23501 VOS_ASSERT(0) ;
23502 return VOS_STATUS_E_INVAL;
23503 }
23504
23505 pWDIGetTsfReqType = (wdi_cap_tsf_params_t *)vos_mem_malloc(
23506 sizeof(wdi_cap_tsf_params_t));
23507 if(NULL == pWDIGetTsfReqType)
23508 {
23509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23510 "%s: VOS MEM Alloc Failure", __func__);
23511 VOS_ASSERT(0);
23512 vos_mem_free(params);
23513 return VOS_STATUS_E_INVAL;
23514 }
23515 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
23516 if(NULL == pWdaParams)
23517 {
23518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23519 "%s: VOS MEM Alloc Failure", __func__);
23520 VOS_ASSERT(0);
23521 vos_mem_free(pWDIGetTsfReqType);
23522 vos_mem_free(params);
23523 return VOS_STATUS_E_NOMEM;
23524 }
23525
23526 pWDIGetTsfReqType->bss_idx = params->bss_idx;
23527 /* Indicate that this is a get request */
23528 pWDIGetTsfReqType->capTSFget = GET_TSF_REQUEST;
23529
23530 pWdaParams->pWdaContext = pWDA;
23531 pWdaParams->wdaMsgParam = params;
23532 pWdaParams->wdaWdiApiMsgParam = (void *)pWDIGetTsfReqType;
23533
23534 status = wdi_process_get_tsf_req(pWDIGetTsfReqType,
23535 (wdi_tsf_rsp_cb)WDA_GetTsfRspCb,
23536 pWdaParams);
23537
23538 if(IS_WDI_STATUS_FAILURE(status))
23539 {
23540 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
23541 "Failure in sendind WifiConfigReq, free all the memory" );
23542 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
23543 vos_mem_free(pWdaParams->wdaMsgParam);
23544 vos_mem_free(pWdaParams);
23545 vos_mem_free(params);
23546 }
23547 return CONVERT_WDI2VOS_STATUS(status) ;
23548}