blob: 827f06d2ffec63d776bbf685f8d5594b0ee05689 [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +05302 * Copyright (c) 2012-2016 The Linux Foundation. All rights reserved.
Kiet Lam1ed83fc2014-02-19 01:15:45 -08003 *
4 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
5 *
6 *
7 * Permission to use, copy, modify, and/or distribute this software for
8 * any purpose with or without fee is hereby granted, provided that the
9 * above copyright notice and this permission notice appear in all
10 * copies.
11 *
12 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
13 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
14 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
15 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
16 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
17 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
18 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
19 * PERFORMANCE OF THIS SOFTWARE.
20 */
21
22/*
Kiet Lama7f454d2014-07-24 12:04:06 -070023 * This file was originally distributed by Qualcomm Atheros, Inc.
24 * under proprietary terms before Copyright ownership was assigned
25 * to the Linux Foundation.
Kiet Lam1ed83fc2014-02-19 01:15:45 -080026 */
27
Jeff Johnson295189b2012-06-20 16:38:30 -070028
Kiet Lama7f454d2014-07-24 12:04:06 -070029
30
Jeff Johnson295189b2012-06-20 16:38:30 -070031/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070032 W L A N _ Q C T _ WDA . C
Jeff Johnson295189b2012-06-20 16:38:30 -070033 OVERVIEW:
Jeff Johnson295189b2012-06-20 16:38:30 -070034 This software unit holds the implementation of the WLAN Transport Layer.
Jeff Johnson295189b2012-06-20 16:38:30 -070035 The functions externalized by this module are to be called ONLY by other
36 WLAN modules that properly register with the Transport Layer initially.
Jeff Johnson295189b2012-06-20 16:38:30 -070037 DEPENDENCIES:
Jeff Johnson295189b2012-06-20 16:38:30 -070038 Are listed for each API below.
39
Jeff Johnson295189b2012-06-20 16:38:30 -070040===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070041/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070042 EDIT HISTORY FOR FILE
43
Jeff Johnson295189b2012-06-20 16:38:30 -070044 This section contains comments describing changes made to the module.
45 Notice that changes are listed in reverse chronological order.
46
Jeff Johnson295189b2012-06-20 16:38:30 -070047 $Header$$DateTime$$Author$
48
Jeff Johnson295189b2012-06-20 16:38:30 -070049 when who what, where, why
50---------- --- -------------------------------------------------
5110/05/2011 haparna Adding support for Keep Alive Feature
522010-12-30 smiryala UMAC convergence changes
532010-08-19 adwivedi WLAN DAL AL(WDA) layer for Prima
54===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070055#include "vos_mq.h"
56#include "vos_api.h"
57#include "vos_packet.h"
58#include "vos_nvitem.h"
59#include "sirApi.h"
60#include "wlan_qct_pal_packet.h"
Mihir Shete40a55652014-03-02 14:14:47 +053061#include "wlan_qct_pal_device.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070062#include "wlan_qct_wda.h"
63#include "wlan_qct_wda_msg.h"
64#include "wlan_qct_wdi_cfg.h"
65#include "wlan_qct_wdi.h"
66#include "wlan_qct_wdi_ds.h"
67#include "wlan_hal_cfg.h"
68/**********************/
69#include "wniApi.h"
70#include "cfgApi.h"
71#include "limApi.h"
72#include "wlan_qct_tl.h"
73#include "wlan_qct_tli_ba.h"
74#include "limUtils.h"
75#include "btcApi.h"
76#include "vos_sched.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070077#include "pttMsgApi.h"
78#include "wlan_qct_sys.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070079/* Used MACRO's */
80/* Get WDA context from vOSS module */
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080081#define WDA_2_4_GHZ_MAX_FREQ 3000
Jeff Johnson295189b2012-06-20 16:38:30 -070082#define VOS_GET_WDA_CTXT(a) vos_get_context(VOS_MODULE_ID_WDA, a)
83#define VOS_GET_MAC_CTXT(a) vos_get_context(VOS_MODULE_ID_PE, a)
Jeff Johnson295189b2012-06-20 16:38:30 -070084#define WDA_BA_TX_FRM_THRESHOLD (5)
Jeff Johnson295189b2012-06-20 16:38:30 -070085#define CONVERT_WDI2SIR_STATUS(x) \
86 ((WDI_STATUS_SUCCESS != (x)) ? eSIR_FAILURE : eSIR_SUCCESS)
87
Abhishek Singhe721fb42015-11-30 14:22:10 +053088/* Threshold to print tx time taken in ms*/
89#define WDA_TX_TIME_THRESHOLD 1000
90/* Recover with ssr if tx timeouts continuously
91 * for threshold number of times.
92 */
93#define WDA_TX_FAILURE_RECOVERY_THRESHOLD 3
94
Jeff Johnson295189b2012-06-20 16:38:30 -070095#define IS_WDI_STATUS_FAILURE(status) \
96 ((WDI_STATUS_SUCCESS != (status)) && (WDI_STATUS_PENDING != (status)))
Jeff Johnson295189b2012-06-20 16:38:30 -070097#define CONVERT_WDI2VOS_STATUS(x) \
98 ((IS_WDI_STATUS_FAILURE(x)) ? VOS_STATUS_E_FAILURE : VOS_STATUS_SUCCESS)
99
100/* macro's for acessing TL API/data structures */
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -0700101#define WDA_TL_GET_STA_STATE(a, b, c) WLANTL_GetSTAState(a, b, c)
Jeff Johnson295189b2012-06-20 16:38:30 -0700102#define WDA_TL_GET_TX_PKTCOUNT(a, b, c, d) WLANTL_GetTxPktCount(a, b, c, d)
Jeff Johnson295189b2012-06-20 16:38:30 -0700103#define WDA_GET_BA_TXFLAG(a, b, c) \
104 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) & (1 << (c)))
105
106#define WDA_SET_BA_TXFLAG(a, b, c) \
107 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) |= (1 << (c)))
108
109#define WDA_CLEAR_BA_TXFLAG(a, b, c) \
110 (((a)->wdaStaInfo[b].ucUseBaBitmap) &= ~(1 << c))
Jeff Johnson295189b2012-06-20 16:38:30 -0700111#define WDA_TL_BA_SESSION_ADD(a, b, c, d, e, f, g) \
112 WLANTL_BaSessionAdd(a, b, c, d, e, f, g)
Jeff Johnson295189b2012-06-20 16:38:30 -0700113/* timer related Macros */
114#define WDA_CREATE_TIMER(a, b, c, d, e, f, g) \
115 tx_timer_create(a, b, c, d, e, f, g)
116#define WDA_START_TIMER(a) tx_timer_activate(a)
117#define WDA_STOP_TIMER(a) tx_timer_deactivate(a)
118#define WDA_DESTROY_TIMER(a) tx_timer_delete(a)
Jeff Johnson32d95a32012-09-10 13:15:23 -0700119#define WDA_WDI_START_TIMEOUT (WDI_RESPONSE_TIMEOUT + 5000)
Jeff Johnson295189b2012-06-20 16:38:30 -0700120
121#define WDA_LAST_POLLED_THRESHOLD(a, curSta, tid) \
122 ((a)->wdaStaInfo[curSta].framesTxed[tid] + WDA_BA_TX_FRM_THRESHOLD)
Jeff Johnson295189b2012-06-20 16:38:30 -0700123#define WDA_BA_MAX_WINSIZE (64)
Jeff Johnson295189b2012-06-20 16:38:30 -0700124#define WDA_INVALID_KEY_INDEX 0xFF
Jeff Johnson295189b2012-06-20 16:38:30 -0700125#define WDA_NUM_PWR_SAVE_CFG 11
Jeff Johnson295189b2012-06-20 16:38:30 -0700126#define WDA_TX_COMPLETE_TIME_OUT_VALUE 1000
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800127#define WDA_TRAFFIC_STATS_TIME_OUT_VALUE 1000
Jeff Johnson295189b2012-06-20 16:38:30 -0700128
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700129#define WDA_MAX_RETRIES_TILL_RING_EMPTY 1000 /* MAX 10000 msec = 10 seconds wait */
Jeff Johnson295189b2012-06-20 16:38:30 -0700130
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700131#define WDA_WAIT_MSEC_TILL_RING_EMPTY 10 /* 10 msec wait per cycle */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -0700132#define WDA_IS_NULL_MAC_ADDRESS(mac_addr) \
133 ((mac_addr[0] == 0x00) && (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) &&\
Hu Wang412440a2016-06-16 17:17:28 +0800134 (mac_addr[3] == 0x00) && (mac_addr[4] == 0x00) && (mac_addr[5] == 0x00))
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -0700135
136#define WDA_MAC_ADDR_ARRAY(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
137#define WDA_MAC_ADDRESS_STR "%02x:%02x:%02x:%02x:%02x:%02x"
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -0800138#define WDA_DUMPCMD_WAIT_TIMEOUT 10000
139
Jeff Johnson295189b2012-06-20 16:38:30 -0700140/* extern declarations */
141extern void vos_WDAComplete_cback(v_PVOID_t pVosContext);
Hoonki Lee9af07cf2013-04-24 01:21:58 -0700142extern wpt_uint8 WDI_GetActiveSessionsCount (void *pWDICtx, wpt_macAddr macBSSID, wpt_boolean skipBSSID);
143
Jeff Johnson295189b2012-06-20 16:38:30 -0700144/* forward declarations */
145void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
146 void *pBodyptr, tANI_U32 bodyVal) ;
147VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
148 WDI_StartReqParamsType *wdiStartParams ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700149VOS_STATUS WDA_wdiCompleteCB(v_PVOID_t pVosContext) ;
150VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams);
151
152extern v_BOOL_t sys_validateStaConfig( void *pImage, unsigned long cbFile,
153 void **ppStaConfig, v_SIZE_t *pcbStaConfig ) ;
Sachin Ahujaa4b33a32014-06-18 13:22:00 +0530154void processCfgDownloadReq(tpAniSirGlobal pMac) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700155void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
156 WDI_ConfigBSSReqInfoType *wdiBssParams, tAddBssParams *wdaBssParams) ;
157void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
158 WDI_ConfigStaReqInfoType *wdiStaParams, tAddStaParams *wdaStaParams) ;
159void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
160 void* pUserData ) ;
161static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA) ;
162static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA);
163void WDA_BaCheckActivity(tWDA_CbContext *pWDA) ;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800164void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700165void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams, void* pUserData);
Jeff Johnson295189b2012-06-20 16:38:30 -0700166#ifdef WLAN_FEATURE_VOWIFI_11R
167VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA, tAggrAddTsParams *pAggrAddTsReqParams);
168#endif /* WLAN_FEATURE_VOWIFI_11R */
169
Jeff Johnson295189b2012-06-20 16:38:30 -0700170void WDA_TimerHandler(v_VOID_t *pWDA, tANI_U32 timerInfo) ;
171void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pContext) ;
172VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700173#ifdef FEATURE_WLAN_SCAN_PNO
174static VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA, tSirPNOScanReq *pPNOScanReqParams);
175static VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA, tSirSetRSSIFilterReq* pRssiFilterParams);
176static VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA, tSirUpdateScanParams *pUpdateScanParams);
177#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700178#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -0700179VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,tSirRoamOffloadScanReq *pRoamOffloadScanReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700180void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData);
181void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType);
182void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType);
183#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700184#ifdef WLAN_FEATURE_PACKET_FILTERING
185static VOS_STATUS WDA_Process8023MulticastListReq (
186 tWDA_CbContext *pWDA,
187 tSirRcvFltMcAddrList *pRcvFltMcAddrLis
188 );
189static VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (
190 tWDA_CbContext *pWDA,
191 tSirRcvPktFilterCfgType *pRcvPktFilterCfg
192 );
193static VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (
194 tWDA_CbContext *pWDA,
195 tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp
196 );
197static VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (
198 tWDA_CbContext *pWDA,
199 tSirRcvFltPktClearParam *pRcvFltPktClearParam
200 );
201#endif // WLAN_FEATURE_PACKET_FILTERING
Jeff Johnson295189b2012-06-20 16:38:30 -0700202VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA, tSirSetPowerParamsReq *pPowerParams);
Jeff Johnson295189b2012-06-20 16:38:30 -0700203static VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
204 tpTxControlParams pTxCtrlParam);
Jeff Johnson295189b2012-06-20 16:38:30 -0700205VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
206 v_U8_t *pDefaultKeyId,
207 v_U8_t *pNumKeys,
208 WDI_KeysType *pWdiKeys );
209
210#ifdef WLAN_FEATURE_GTK_OFFLOAD
211static VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA, tpSirGtkOffloadParams pGtkOffloadParams);
212static VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA, tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp);
213#endif // WLAN_FEATURE_GTK_OFFLOAD
214
c_hpothu92367912014-05-01 15:18:17 +0530215v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
216 tSirBcnMissRateReq *pData);
217
Jeff Johnson295189b2012-06-20 16:38:30 -0700218VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
219 tAniSetTmLevelReq *setTmLevelReq);
Mohit Khanna4a70d262012-09-11 16:30:12 -0700220#ifdef WLAN_FEATURE_11AC
221VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
222 tUpdateVHTOpMode *pData);
223#endif
Leo Chang9056f462013-08-01 19:21:11 -0700224
225#ifdef FEATURE_WLAN_LPHB
226VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
227 tSirLPHBReq *pData);
228#endif /* FEATURE_WLAN_LPHB */
Sunil Duttbd736ed2014-05-26 21:19:41 +0530229
Abhishek Singh00b71972016-01-07 10:51:04 +0530230#ifdef WLAN_FEATURE_RMC
231void WDA_IBSSPeerInfoRequestHandler(v_PVOID_t pVosContext,
232 v_PVOID_t pData);
233#endif /* WLAN_FEATURE_RMC */
234
Dino Mycle41bdc942014-06-10 11:30:24 +0530235#ifdef WLAN_FEATURE_EXTSCAN
236VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
237 tSirEXTScanStartReqParams *wdaRequest);
238VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
239 tSirEXTScanStopReqParams *wdaRequest);
240VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
241 tSirEXTScanGetCachedResultsReqParams *wdaRequest);
242VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
243 tSirGetEXTScanCapabilitiesReqParams *wdaRequest);
244VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
245 tSirEXTScanSetBssidHotListReqParams *wdaRequest);
246VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
247 tSirEXTScanResetBssidHotlistReqParams *wdaRequest);
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +0530248VOS_STATUS WDA_ProcessEXTScanSetSSIDHotlistReq(tWDA_CbContext *pWDA,
249 tSirEXTScanSetSsidHotListReqParams *wdaRequest);
250VOS_STATUS WDA_ProcessEXTScanResetSSIDHotlistReq(tWDA_CbContext *pWDA,
251 tSirEXTScanResetSsidHotlistReqParams *wdaRequest);
Padma, Santhosh Kumarc1f7f052015-08-26 12:29:01 +0530252VOS_STATUS WDA_ProcessHighPriorityDataInfoInd(tWDA_CbContext *pWDA,
253 tSirHighPriorityDataInfoInd *wdaRequest);
Dino Mycle41bdc942014-06-10 11:30:24 +0530254#endif /* WLAN_FEATURE_EXTSCAN */
255
Sunil Duttbd736ed2014-05-26 21:19:41 +0530256#ifdef WLAN_FEATURE_LINK_LAYER_STATS
257VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
258 tSirLLStatsSetReq *wdaRequest);
259
260VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
261 tSirLLStatsGetReq *wdaRequest);
262
263VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
264 tSirLLStatsClearReq *wdaRequest);
265#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Abhishek Singh85b74712014-10-08 11:38:19 +0530266
267v_VOID_t WDA_ProcessFWStatsGetReq(tWDA_CbContext *pWDA,
268 tSirFWStatsGetReq *wdaRequest);
269
Srinivas Dasari4dae48f2014-11-26 21:14:16 +0530270VOS_STATUS WDA_ProcessEncryptMsgReq(tWDA_CbContext *pWDA,
271 u8 *wdaRequest);
Abhishek Singh41988ba2015-05-25 19:42:29 +0530272VOS_STATUS
273WDA_ProcessSetRtsCtsHTVhtInd(tWDA_CbContext *pWDA,
274 tANI_U32 val);
Srinivas Dasari4dae48f2014-11-26 21:14:16 +0530275
c_manjeecfd1efb2015-09-25 19:32:34 +0530276VOS_STATUS
277WDA_ProcessFwrMemDumpReq(tWDA_CbContext *pWDA,
278 tAniFwrDumpReq* pFwrMemDumpReq);
Srinivas Dasari32a79262015-02-19 13:04:49 +0530279
Katya Nigamf0511f62015-05-05 16:40:57 +0530280VOS_STATUS WDA_ProcessMonStartReq( tWDA_CbContext *pWDA, void* wdaRequest);
281VOS_STATUS WDA_ProcessMonStopReq( tWDA_CbContext *pWDA, void* wdaRequest);
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +0530282VOS_STATUS WDA_ProcessEnableDisableCAEventInd(tWDA_CbContext *pWDA, tANI_U8 val);
Arun Khandavalli7eeb1592015-10-19 21:36:57 +0530283
284VOS_STATUS WDA_ProcessWifiConfigReq(tWDA_CbContext *pWDA,
285 tSetWifiConfigParams *pwdaWificonfig);
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +0530286
287VOS_STATUS WDA_ProcessStartOemDataReqIndNew(tWDA_CbContext *pWDA,
288 tOemDataReqNewConfig *pOemDataReqNewConfig);
289
Mahesh A Saptasagarcfc65ae2015-12-22 15:06:10 +0530290
291v_VOID_t WDA_ProcessAntennaDiversitySelectionReq(tWDA_CbContext *pWDA,
292 tSirAntennaDiversitySelectionReq *pData);
293
Mahesh A Saptasagar7d432952016-02-09 14:01:03 +0530294VOS_STATUS WDA_ProcessBcnMissPenaltyCount(tWDA_CbContext *pWDA,
295 tModifyRoamParamsReqParams *params);
Srinivas Dasari32a79262015-02-19 13:04:49 +0530296/*
297 * FUNCTION: WDA_ProcessNanRequest
298 * Process NAN request
299 */
300VOS_STATUS WDA_ProcessNanRequest(tWDA_CbContext *pWDA,
301 tNanRequest *wdaRequest)
302{
303 WDI_Status status = WDI_STATUS_SUCCESS;
304 tWDA_ReqParams *pWdaParams;
305 WDI_NanRequestType *wdiRequest = NULL;
306 size_t wdiReqLength = sizeof(WDI_NanRequestType)
307 - sizeof(wdiRequest->request_data)
308 + wdaRequest->request_data_len;
309
310 wdiRequest = (WDI_NanRequestType *)vos_mem_malloc(wdiReqLength);
311
312 if (NULL == wdiRequest)
313 {
314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
315 "%s: VOS MEM Alloc Failure, size : %zu", __func__,
316 wdiReqLength);
317 vos_mem_free(wdaRequest);
318 return VOS_STATUS_E_NOMEM;
319 }
320
321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
322 "WDA: Process Nan Request length: %zu", wdiReqLength);
323
324 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
325 if (NULL == pWdaParams)
326 {
327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
328 "%s: VOS MEM Alloc Failure for tWDA_ReqParams", __func__);
329 VOS_ASSERT(0);
330 vos_mem_free(wdaRequest);
331 vos_mem_free(wdiRequest);
332 return VOS_STATUS_E_NOMEM;
333 }
334
335 wdiRequest->request_data_len = wdaRequest->request_data_len;
336
337 vos_mem_copy( wdiRequest->request_data,
338 wdaRequest->request_data,
339 wdaRequest->request_data_len);
340
341 vos_mem_free(wdaRequest);
342
343 pWdaParams->pWdaContext = pWDA;
344 pWdaParams->wdaMsgParam = NULL;
345 pWdaParams->wdaWdiApiMsgParam = wdiRequest;
346
347 status = WDI_NanRequest(wdiRequest, pWdaParams);
348
349 if (IS_WDI_STATUS_FAILURE(status))
350 {
351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
352 "Failure to request. Free all the memory " );
353 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
354 vos_mem_free(pWdaParams);
355 }
356
357 return CONVERT_WDI2VOS_STATUS(status) ;
358}
359
Padma, Santhosh Kumar9093b202015-07-21 15:37:38 +0530360/**
361 * wda_state_info_dump() - prints state information of wda layer
362 */
363static void wda_state_info_dump(void)
364{
365 v_CONTEXT_t vos_ctx_ptr = NULL;
366 tWDA_CbContext *wda = NULL ;
Srinivas Dasari32a79262015-02-19 13:04:49 +0530367
Padma, Santhosh Kumar9093b202015-07-21 15:37:38 +0530368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
369 "<------ %s " ,__func__);
370
371 /* Get the Global VOSS Context */
372 vos_ctx_ptr = vos_get_global_context(VOS_MODULE_ID_VOSS, NULL);
373
374 if (NULL != vos_ctx_ptr)
375 wda = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA,
376 vos_ctx_ptr );
377 else {
378 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
379 "%s: Invalid Global VOSS Context", __func__);
380 VOS_ASSERT(0);
381 return;
382 }
383
384 if (NULL != wda)
385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
386 "wdaState: %d linkState: %d", wda->wdaState,
387 wda->linkState);
388 else {
389 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
390 "%s: Invalid WDA Context", __func__);
391 VOS_ASSERT(0);
392 }
393}
394
395/**
396 * wda_register_debug_callback() - registration function for wda layer
397 * to print wda state information
398 */
399static void wda_register_debug_callback(void)
400{
401 vos_register_debug_callback(VOS_MODULE_ID_WDA, &wda_state_info_dump);
402}
Srinivas Dasari32a79262015-02-19 13:04:49 +0530403
Jeff Johnson295189b2012-06-20 16:38:30 -0700404/*
405 * FUNCTION: WDA_open
406 * Allocate the WDA context
407 */
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530408VOS_STATUS WDA_open(v_PVOID_t pVosContext, v_PVOID_t devHandle,
Jeff Johnson295189b2012-06-20 16:38:30 -0700409 tMacOpenParameters *pMacParams )
410{
411 tWDA_CbContext *wdaContext;
412 VOS_STATUS status;
413 WDI_DeviceCapabilityType wdiDevCapability = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700414 /* Allocate WDA context */
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +0530415 status = vos_alloc_context(pVosContext, VOS_MODULE_ID_WDA,
Jeff Johnson295189b2012-06-20 16:38:30 -0700416 (v_VOID_t **)&wdaContext, sizeof(tWDA_CbContext)) ;
417 if(!VOS_IS_STATUS_SUCCESS(status))
418 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +0530419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "%s: Failed to "
420 "allocate context for WDA - status = %d",__func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700421 return VOS_STATUS_E_NOMEM;
422 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700423 /*__asm int 3;*/
424 vos_mem_zero(wdaContext,sizeof(tWDA_CbContext));
425
426 /* Initialize data structures */
427 wdaContext->pVosContext = pVosContext;
428 wdaContext->wdaState = WDA_INIT_STATE;
429 wdaContext->uTxFlowMask = WDA_TXFLOWMASK;
430
431 /* Initialize WDA-WDI synchronization event */
432 status = vos_event_init(&wdaContext->wdaWdiEvent);
433 if(!VOS_IS_STATUS_SUCCESS(status))
434 {
435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800436 "WDI Sync Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800437 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700438 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700439 /* Init Frame transfer event */
440 status = vos_event_init(&wdaContext->txFrameEvent);
441 if(!VOS_IS_STATUS_SUCCESS(status))
442 {
443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800444 "VOS Mgmt Frame Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800445 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700446 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700447 status = vos_event_init(&wdaContext->suspendDataTxEvent);
448 if(!VOS_IS_STATUS_SUCCESS(status))
449 {
450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800451 "VOS suspend data tx Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800452 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700453 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700454 status = vos_event_init(&wdaContext->waitOnWdiIndicationCallBack);
455 if(!VOS_IS_STATUS_SUCCESS(status))
456 {
457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800458 "VOS wait On Wdi Ind Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800459 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700460 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700461 vos_trace_setLevel(VOS_MODULE_ID_WDA,VOS_TRACE_LEVEL_ERROR);
Jeff Johnson295189b2012-06-20 16:38:30 -0700462 wdaContext->driverMode = pMacParams->driverType;
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530463 if(WDI_STATUS_SUCCESS != WDI_Init(devHandle, &wdaContext->pWdiContext,
Jeff Johnson295189b2012-06-20 16:38:30 -0700464 &wdiDevCapability, pMacParams->driverType))
465 {
466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
467 "WDI Init failed" );
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800468 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700469 }
470 else
471 {
472 pMacParams->maxStation = wdiDevCapability.ucMaxSTASupported ;
473 pMacParams->maxBssId = wdiDevCapability.ucMaxBSSSupported;
474 pMacParams->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
Jeff Johnson295189b2012-06-20 16:38:30 -0700475 /* update max STA in WDA used for BA */
476 wdaContext->wdaMaxSta = pMacParams->maxStation;
477 /* store the frameTransRequired flag in wdaContext, to send this to HAL
478 * in WDA_Start
479 */
480 wdaContext->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
481 }
Padma, Santhosh Kumar9093b202015-07-21 15:37:38 +0530482
483 wda_register_debug_callback();
484
Jeff Johnson295189b2012-06-20 16:38:30 -0700485 return status;
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800486
487error:
488 vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
489 return VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -0700490}
491
Jeff Johnson295189b2012-06-20 16:38:30 -0700492/*
493 * FUNCTION: WDA_preStart
494 * Trigger DAL-AL to start CFG download
495 */
496VOS_STATUS WDA_preStart(v_PVOID_t pVosContext)
497{
498 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
499 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700500 /*
501 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
502 */
503 wdaMsg.type = WNI_CFG_DNLD_REQ ;
504 wdaMsg.bodyptr = NULL;
505 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700506 /* post the message.. */
507 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
508 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
509 {
510 vosStatus = VOS_STATUS_E_BADMSG;
511 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700512 return( vosStatus );
513}
Jeff Johnson295189b2012-06-20 16:38:30 -0700514/*
515 * FUNCTION: WDA_wdiStartCallback
516 * Once WDI_Start is finished, WDI start callback will be called by WDI
517 * to indicate completion of WDI_Start.
518 */
519void WDA_wdiStartCallback(WDI_StartRspParamsType *wdiRspParams,
520 void *pVosContext)
521{
522 tWDA_CbContext *wdaContext;
523 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700524 if (NULL == pVosContext)
525 {
526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700527 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700528 return;
529 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700530 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
531 if (NULL == wdaContext)
532 {
533 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700534 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700535 return;
536 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700537 if (WDI_STATUS_SUCCESS != wdiRspParams->wdiStatus)
538 {
539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700540 "%s: WDI_Start() failure reported", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700541 }
542 else
543 {
544 wdaContext->wdaState = WDA_START_STATE;
545 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700546 /* extract and save version information from the Start Response */
547 wdaContext->wcnssWlanCompiledVersion.major =
548 wdiRspParams->wlanCompiledVersion.major;
549 wdaContext->wcnssWlanCompiledVersion.minor =
550 wdiRspParams->wlanCompiledVersion.minor;
551 wdaContext->wcnssWlanCompiledVersion.version =
552 wdiRspParams->wlanCompiledVersion.version;
553 wdaContext->wcnssWlanCompiledVersion.revision =
554 wdiRspParams->wlanCompiledVersion.revision;
555 wdaContext->wcnssWlanReportedVersion.major =
556 wdiRspParams->wlanReportedVersion.major;
557 wdaContext->wcnssWlanReportedVersion.minor =
558 wdiRspParams->wlanReportedVersion.minor;
559 wdaContext->wcnssWlanReportedVersion.version =
560 wdiRspParams->wlanReportedVersion.version;
561 wdaContext->wcnssWlanReportedVersion.revision =
562 wdiRspParams->wlanReportedVersion.revision;
563 wpalMemoryCopy(wdaContext->wcnssSoftwareVersionString,
564 wdiRspParams->wcnssSoftwareVersion,
565 sizeof(wdaContext->wcnssSoftwareVersionString));
566 wpalMemoryCopy(wdaContext->wcnssHardwareVersionString,
567 wdiRspParams->wcnssHardwareVersion,
568 sizeof(wdaContext->wcnssHardwareVersionString));
Jeff Johnson295189b2012-06-20 16:38:30 -0700569 /* Notify WDA_start that WDI_Start has completed */
570 status = vos_event_set(&wdaContext->wdaWdiEvent);
Jeff Johnson43971f52012-07-17 12:26:56 -0700571 if (VOS_STATUS_SUCCESS != status)
Jeff Johnson295189b2012-06-20 16:38:30 -0700572 {
573 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700574 "%s: Unable to unblock WDA_start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700575 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700576 return;
577}
578
Jeff Johnson295189b2012-06-20 16:38:30 -0700579/*
580 * FUNCTION: WDA_start
581 * Prepare TLV configuration and call WDI_Start.
582 */
Jeff Johnson295189b2012-06-20 16:38:30 -0700583VOS_STATUS WDA_start(v_PVOID_t pVosContext)
584{
585 tWDA_CbContext *wdaContext;
586 VOS_STATUS status;
587 WDI_Status wdiStatus;
588 WDI_StartReqParamsType wdiStartParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700589 if (NULL == pVosContext)
590 {
591 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700592 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700593 return VOS_STATUS_E_FAILURE;
594 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700595 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
596 if (NULL == wdaContext)
597 {
598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700599 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700600 return VOS_STATUS_E_FAILURE;
601 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700602 /* Non-FTM mode, WDA status for START must be INIT
603 * FTM mode, WDA Status for START can be INIT or STOP */
604 if ( (WDA_INIT_STATE != wdaContext->wdaState) &&
605 (WDA_STOP_STATE != wdaContext->wdaState) )
606 {
607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
608 "%s: Invoked from wrong state %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700609 __func__, wdaContext->wdaState );
Jeff Johnson295189b2012-06-20 16:38:30 -0700610 return VOS_STATUS_E_FAILURE;
611 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700612 /* initialize the wdiStartParam. Note that we can create this on
613 the stack since we won't exit until WDI_Start() completes or
614 times out */
615 vos_mem_set(&wdiStartParam, sizeof(wdiStartParam), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700616 wdiStartParam.wdiDriverType = wdaContext->driverMode;
Jeff Johnson295189b2012-06-20 16:38:30 -0700617 /* prepare the config TLV for the WDI */
618 status = WDA_prepareConfigTLV(pVosContext, &wdiStartParam);
619 if ( !VOS_IS_STATUS_SUCCESS(status) )
620 {
621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700622 "%s: Unable to prepare Config TLV", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700623 return VOS_STATUS_E_FAILURE;
624 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700625 /* note from here onwards if an error occurs we must
626 reclaim the config TLV buffer */
Jeff Johnson295189b2012-06-20 16:38:30 -0700627 wdiStartParam.wdiLowLevelIndCB = WDA_lowLevelIndCallback;
628 wdiStartParam.pIndUserData = (v_PVOID_t *)wdaContext;
629 wdiStartParam.wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700630 /* initialize the WDA-WDI synchronization event */
631 vos_event_reset(&wdaContext->wdaWdiEvent);
Jeff Johnson295189b2012-06-20 16:38:30 -0700632 /* call WDI start */
633 wdiStatus = WDI_Start(&wdiStartParam,
634 (WDI_StartRspCb)WDA_wdiStartCallback,
635 (v_VOID_t *)pVosContext);
636 if ( IS_WDI_STATUS_FAILURE(wdiStatus) )
637 {
638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700639 "%s: WDI Start failed", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700640 vos_mem_free(wdiStartParam.pConfigBuffer);
641 return VOS_STATUS_E_FAILURE;
642 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700643 /* wait for WDI start to invoke our callback */
644 status = vos_wait_single_event( &wdaContext->wdaWdiEvent,
645 WDA_WDI_START_TIMEOUT );
646 if ( !VOS_IS_STATUS_SUCCESS(status) )
647 {
648 if ( VOS_STATUS_E_TIMEOUT == status )
649 {
650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700651 "%s: Timeout occurred during WDI_Start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700652 }
653 else
654 {
655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
656 "%s: Error %d while waiting for WDI_Start",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700657 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700658 }
659 vos_mem_free(wdiStartParam.pConfigBuffer);
Siddharth Bhalbea38ad2014-10-12 14:10:52 +0530660 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700661 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700662 /* WDI_Start() has completed so we can resume our work */
Jeff Johnson295189b2012-06-20 16:38:30 -0700663 /* we no longer need the config TLV */
664 vos_mem_free(wdiStartParam.pConfigBuffer);
Jeff Johnson295189b2012-06-20 16:38:30 -0700665 /* if we are not in the START state then WDI_Start() failed */
666 if (WDA_START_STATE != wdaContext->wdaState)
667 {
668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700669 "%s: WDI_Start() failure detected", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700670 return VOS_STATUS_E_FAILURE;
671 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700672 /* FTM mode does not need to monitor BA activity */
673 if ( eDRIVER_TYPE_MFG != wdaContext->driverMode )
674 {
675 status = wdaCreateTimers(wdaContext) ;
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -0800676 if(VOS_STATUS_SUCCESS == status)
677 {
678 wdaContext->wdaTimersCreated = VOS_TRUE;
679 }
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +0530680 else
681 {
682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
683 FL("wda create timers failed"));
684 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700685 }
Leo Chang9d76f622013-08-23 16:34:52 -0700686 else
687 {
688 vos_event_init(&wdaContext->ftmStopDoneEvent);
689 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700690 return status;
691}
692
Jeff Johnson295189b2012-06-20 16:38:30 -0700693/*
694 * FUNCTION: WDA_prepareConfigTLV
695 * Function to prepare CFG for DAL(WDA)
696 */
697VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
698 WDI_StartReqParamsType *wdiStartParams )
699{
700 /* get pMac to acess CFG data base */
701 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
702 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
703 tHalCfg *tlvStruct = NULL ;
704 tANI_U8 *tlvStructStart = NULL ;
705 tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
706 v_PVOID_t *configParam;
707 tANI_U32 configParamSize;
708 tANI_U32 *configDataValue;
709 WDI_WlanVersionType wcnssCompiledApiVersion;
Wilson Tsaof8b37942013-09-06 10:49:00 -0700710 tANI_U8 i;
711
Jeff Johnson295189b2012-06-20 16:38:30 -0700712 if ((NULL == pMac)||(NULL == wdaContext))
713 {
714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700715 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700716 VOS_ASSERT(0);
717 return VOS_STATUS_E_FAILURE;
718 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700719 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
720 WNI_CFG_STA_ID_LEN +
721 WNI_CFG_EDCA_WME_ACBK_LEN +
722 WNI_CFG_EDCA_WME_ACBE_LEN +
723 WNI_CFG_EDCA_WME_ACVI_LEN +
724 WNI_CFG_EDCA_WME_ACVO_LEN +
725 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700726 /* malloc memory for all configs in one shot */
727 configParam = vos_mem_malloc(configParamSize);
728
729 if(NULL == configParam )
730 {
731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700732 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700733 VOS_ASSERT(0) ;
734 return VOS_STATUS_E_NOMEM;
735 }
736 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700737 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700738 tlvStruct = (tHalCfg *)configParam;
739 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700740 /* TODO: Remove Later */
741 /* QWLAN_HAL_CFG_STA_ID */
742 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
743 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
744 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
745 eSIR_SUCCESS)
746 {
747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
748 "Failed to get value for WNI_CFG_STA_ID");
749 goto handle_failure;
750 }
751 tlvStruct->length = strLength ;
752 /* calculate the pad bytes to have the CFG in aligned format */
753 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
754 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700755 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
756 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700757 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
758 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
759 tlvStruct->length = sizeof(tANI_U32);
760 configDataValue = (tANI_U32 *)(tlvStruct + 1);
761 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
762 != eSIR_SUCCESS)
763 {
764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
765 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
766 goto handle_failure;
767 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700768 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
769 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700770 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
771 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
772 tlvStruct->length = sizeof(tANI_U32);
773 configDataValue = (tANI_U32 *)(tlvStruct + 1);
774 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
775 eSIR_SUCCESS)
776 {
777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
778 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
779 goto handle_failure;
780 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700781 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
782 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700783 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
784 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
785 tlvStruct->length = sizeof(tANI_U32);
786 configDataValue = (tANI_U32 *)(tlvStruct + 1);
787 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
788 != eSIR_SUCCESS)
789 {
790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
791 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
792 goto handle_failure;
793 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700794 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
795 + sizeof(tHalCfg) + tlvStruct->length)) ;
796
797 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
798 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
799 tlvStruct->length = sizeof(tANI_U32);
800 configDataValue = (tANI_U32 *)(tlvStruct + 1);
801 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
802 configDataValue ) != eSIR_SUCCESS)
803 {
804 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
805 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
806 goto handle_failure;
807 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700808 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
809 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700810 /* QWLAN_HAL_CFG_CAL_PERIOD */
811 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
812 tlvStruct->length = sizeof(tANI_U32);
813 configDataValue = (tANI_U32 *)(tlvStruct + 1);
814 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
815 != eSIR_SUCCESS)
816 {
817 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
818 "Failed to get value for WNI_CFG_CAL_PERIOD");
819 goto handle_failure;
820 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700821 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
822 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700823 /* QWLAN_HAL_CFG_CAL_CONTROL */
824 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
825 tlvStruct->length = sizeof(tANI_U32);
826 configDataValue = (tANI_U32 *)(tlvStruct + 1);
827 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
828 != eSIR_SUCCESS)
829 {
830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
831 "Failed to get value for WNI_CFG_CAL_CONTROL");
832 goto handle_failure;
833 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700834 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
835 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700836 /* QWLAN_HAL_CFG_PROXIMITY */
837 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
838 tlvStruct->length = sizeof(tANI_U32);
839 configDataValue = (tANI_U32 *)(tlvStruct + 1);
840 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
841 != eSIR_SUCCESS)
842 {
843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
844 "Failed to get value for WNI_CFG_PROXIMITY");
845 goto handle_failure;
846 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700847 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
848 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700849 /* QWLAN_HAL_CFG_NETWORK_DENSITY */
850 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
851 tlvStruct->length = sizeof(tANI_U32);
852 configDataValue = (tANI_U32 *)(tlvStruct + 1);
853 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
854 != eSIR_SUCCESS)
855 {
856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
857 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
858 goto handle_failure;
859 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700860 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
861 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700862 /* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */
863 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
864 tlvStruct->length = sizeof(tANI_U32);
865 configDataValue = (tANI_U32 *)(tlvStruct + 1);
866 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
867 eSIR_SUCCESS)
868 {
869 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
870 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
871 goto handle_failure;
872 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700873 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
874 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700875 /* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */
876 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
877 tlvStruct->length = sizeof(tANI_U32);
878 configDataValue = (tANI_U32 *)(tlvStruct + 1);
879 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
880 configDataValue ) != eSIR_SUCCESS)
881 {
882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
883 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
884 goto handle_failure;
885 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700886 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
887 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700888 /* QWLAN_HAL_CFG_RTS_THRESHOLD */
889 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
890 tlvStruct->length = sizeof(tANI_U32);
891 configDataValue = (tANI_U32 *)(tlvStruct + 1);
892 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
893 eSIR_SUCCESS)
894 {
895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
896 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
897 goto handle_failure;
898 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700899 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
900 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700901 /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
902 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
903 tlvStruct->length = sizeof(tANI_U32);
904 configDataValue = (tANI_U32 *)(tlvStruct + 1);
905 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
906 eSIR_SUCCESS)
907 {
908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
909 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
910 goto handle_failure;
911 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700912 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
913 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700914 /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
915 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
916 tlvStruct->length = sizeof(tANI_U32);
917 configDataValue = (tANI_U32 *)(tlvStruct + 1);
918 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
919 eSIR_SUCCESS)
920 {
921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
922 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
923 goto handle_failure;
924 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700925 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
926 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700927 /* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */
928 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
929 tlvStruct->length = sizeof(tANI_U32);
930 configDataValue = (tANI_U32 *)(tlvStruct + 1);
931 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
932 configDataValue ) != eSIR_SUCCESS)
933 {
934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
935 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
936 goto handle_failure;
937 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700938 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
939 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700940 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
941 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
942 tlvStruct->length = sizeof(tANI_U32);
943 configDataValue = (tANI_U32 *)(tlvStruct + 1);
944 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
945 configDataValue ) != eSIR_SUCCESS)
946 {
947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
948 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
949 goto handle_failure;
950 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700951 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
952 + sizeof(tHalCfg) + tlvStruct->length));
953
954 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
955 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
956 tlvStruct->length = sizeof(tANI_U32);
957 configDataValue = (tANI_U32 *)(tlvStruct + 1);
958 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
959 configDataValue ) != eSIR_SUCCESS)
960 {
961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
962 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
963 goto handle_failure;
964 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700965 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
966 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700967 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
968 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
969 tlvStruct->length = sizeof(tANI_U32);
970 configDataValue = (tANI_U32 *)(tlvStruct + 1);
971 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
972 configDataValue ) != eSIR_SUCCESS)
973 {
974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
975 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
976 goto handle_failure;
977 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700978 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
979 + sizeof(tHalCfg) + tlvStruct->length));
980
981 /* QWLAN_HAL_CFG_FIXED_RATE */
982 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
983 tlvStruct->length = sizeof(tANI_U32);
984 configDataValue = (tANI_U32 *)(tlvStruct + 1);
985 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
986 != eSIR_SUCCESS)
987 {
988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
989 "Failed to get value for WNI_CFG_FIXED_RATE");
990 goto handle_failure;
991 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700992 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
993 + sizeof(tHalCfg) + tlvStruct->length));
994
995 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
996 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
997 tlvStruct->length = sizeof(tANI_U32);
998 configDataValue = (tANI_U32 *)(tlvStruct + 1);
999 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
1000 != eSIR_SUCCESS)
1001 {
1002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1003 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
1004 goto handle_failure;
1005 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001006 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
1007 + sizeof(tHalCfg) + tlvStruct->length));
1008
1009 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
1010 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
1011 tlvStruct->length = sizeof(tANI_U32);
1012 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1013 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
1014 configDataValue ) != eSIR_SUCCESS)
1015 {
1016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1017 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
1018 goto handle_failure;
1019 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001020 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
1021 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001022 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
1023 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
1024 tlvStruct->length = sizeof(tANI_U32);
1025 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1026 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
1027 configDataValue ) != eSIR_SUCCESS)
1028 {
1029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1030 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
1031 goto handle_failure;
1032 }
1033 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
1034 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001035 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
1036 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
1037 tlvStruct->length = sizeof(tANI_U32);
1038 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1039 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
1040 configDataValue ) != eSIR_SUCCESS)
1041 {
1042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1043 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
1044 goto handle_failure;
1045 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001046 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1047 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001048 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
1049 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
1050 tlvStruct->length = sizeof(tANI_U32);
1051 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1052 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
1053 configDataValue ) != eSIR_SUCCESS)
1054 {
1055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1056 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
1057 goto handle_failure;
1058 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001059 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1060 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001061 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
1062 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
1063 tlvStruct->length = sizeof(tANI_U32);
1064 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1065 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
1066 configDataValue ) != eSIR_SUCCESS)
1067 {
1068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1069 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
1070 goto handle_failure;
1071 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001072 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1073 + sizeof(tHalCfg) + tlvStruct->length);
1074
Jeff Johnson295189b2012-06-20 16:38:30 -07001075 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
1076 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
1077 tlvStruct->length = sizeof(tANI_U32);
1078 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1079 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
1080 configDataValue ) != eSIR_SUCCESS)
1081 {
1082 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1083 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
1084 goto handle_failure;
1085 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001086 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1087 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001088 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
1089 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
1090 tlvStruct->length = sizeof(tANI_U32);
1091 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1092 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
1093 configDataValue ) != eSIR_SUCCESS)
1094 {
1095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1096 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
1097 goto handle_failure;
1098 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001099 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1100 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001101 /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
1102 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
1103 tlvStruct->length = sizeof(tANI_U32);
1104 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1105 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
1106 eSIR_SUCCESS)
1107 {
1108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1109 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
1110 goto handle_failure;
1111 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001112 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1113 + sizeof(tHalCfg) + tlvStruct->length);
1114
1115 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
1116 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
1117 tlvStruct->length = sizeof(tANI_U32);
1118 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1119 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
1120 configDataValue ) != eSIR_SUCCESS)
1121 {
1122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1123 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
1124 goto handle_failure;
1125 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001126 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1127 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001128 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
1129 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
1130 tlvStruct->length = sizeof(tANI_U32);
1131 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1132 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
1133 configDataValue ) != eSIR_SUCCESS)
1134 {
1135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1136 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
1137 goto handle_failure;
1138 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001139 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1140 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001141 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
1142 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
1143 tlvStruct->length = sizeof(tANI_U32);
1144 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1145 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
1146 configDataValue ) != eSIR_SUCCESS)
1147 {
1148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1149 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
1150 goto handle_failure;
1151 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001152 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1153 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001154 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
1155 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
1156 tlvStruct->length = sizeof(tANI_U32);
1157 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1158 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
1159 configDataValue ) != eSIR_SUCCESS)
1160 {
1161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1162 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
1163 goto handle_failure;
1164 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001165 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1166 + sizeof(tHalCfg) + tlvStruct->length);
1167
1168 /* QWLAN_HAL_CFG_STATS_PERIOD */
1169 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
1170 tlvStruct->length = sizeof(tANI_U32);
1171 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1172 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
1173 eSIR_SUCCESS)
1174 {
1175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1176 "Failed to get value for WNI_CFG_STATS_PERIOD");
1177 goto handle_failure;
1178 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001179 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1180 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001181 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
1182 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
1183 tlvStruct->length = sizeof(tANI_U32);
1184 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1185 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
1186 eSIR_SUCCESS)
1187 {
1188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1189 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
1190 goto handle_failure;
1191 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001192 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1193 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001194 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
1195 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
1196 tlvStruct->length = sizeof(tANI_U32);
1197 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1198 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
1199 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -07001200 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1201 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001202 /* QWLAN_HAL_CFG_DTIM_PERIOD */
1203 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
1204 tlvStruct->length = sizeof(tANI_U32);
1205 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1206 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
1207 != eSIR_SUCCESS)
1208 {
1209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1210 "Failed to get value for WNI_CFG_DTIM_PERIOD");
1211 goto handle_failure;
1212 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001213 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1214 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001215 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
1216 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
1217 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
1218 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1219 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
1220 &strLength) != eSIR_SUCCESS)
1221 {
1222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1223 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1224 goto handle_failure;
1225 }
1226 tlvStruct->length = strLength;
1227 /* calculate the pad bytes to have the CFG in aligned format */
1228 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1229 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001230 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1231 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001232 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1233 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1234 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1235 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1236 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1237 &strLength) != eSIR_SUCCESS)
1238 {
1239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1240 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1241 goto handle_failure;
1242 }
1243 tlvStruct->length = strLength;
1244 /* calculate the pad bytes to have the CFG in aligned format */
1245 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1246 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001247 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1248 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001249 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1250 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1251 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1252 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1253 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1254 &strLength) != eSIR_SUCCESS)
1255 {
1256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1257 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1258 goto handle_failure;
1259 }
1260 tlvStruct->length = strLength;
1261 /* calculate the pad bytes to have the CFG in aligned format */
1262 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1263 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001264 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1265 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001266 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1267 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1268 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1269 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1270 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1271 &strLength) != eSIR_SUCCESS)
1272 {
1273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1274 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1275 goto handle_failure;
1276 }
1277 tlvStruct->length = strLength;
1278 /* calculate the pad bytes to have the CFG in aligned format */
1279 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1280 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001281 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1282 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001283 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1284 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1285 tlvStruct->length = sizeof(tANI_U32);
1286 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1287 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1288 != eSIR_SUCCESS)
1289 {
1290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1291 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1292 goto handle_failure;
1293 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001294 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1295 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001296 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1297 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1298 tlvStruct->length = sizeof(tANI_U32);
1299 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1300 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1301 != eSIR_SUCCESS)
1302 {
1303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1304 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1305 goto handle_failure;
1306 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001307 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1308 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001309 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1310 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1311 tlvStruct->length = sizeof(tANI_U32);
1312 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1313 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1314 != eSIR_SUCCESS)
1315 {
1316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1317 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1318 goto handle_failure;
1319 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001320 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1321 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001322 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1323 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1324 tlvStruct->length = sizeof(tANI_U32);
1325 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1326 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1327 != eSIR_SUCCESS)
1328 {
1329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1330 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1331 goto handle_failure;
1332 }
1333 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1334 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001335 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1336 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1337 tlvStruct->length = sizeof(tANI_U32);
1338 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1339 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1340 != eSIR_SUCCESS)
1341 {
1342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1343 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1344 goto handle_failure;
1345 }
1346 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1347 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001348 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1349 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1350 tlvStruct->length = sizeof(tANI_U32);
1351 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1352 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1353 != eSIR_SUCCESS)
1354 {
1355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1356 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1357 goto handle_failure;
1358 }
1359 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1360 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001361 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1362 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1363 tlvStruct->length = sizeof(tANI_U32);
1364 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1365 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1366 != eSIR_SUCCESS)
1367 {
1368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1369 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1370 goto handle_failure;
1371 }
1372 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1373 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001374 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1375 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1376 tlvStruct->length = sizeof(tANI_U32);
1377 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1378 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
1379 != eSIR_SUCCESS)
1380 {
1381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1382 "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
1383 goto handle_failure;
1384 }
1385 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1386 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001387 /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
1388 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1389 tlvStruct->length = sizeof(tANI_U32);
1390 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1391 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1392 != eSIR_SUCCESS)
1393 {
1394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1395 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1396 goto handle_failure;
1397 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001398 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1399 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001400 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1401 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1402 tlvStruct->length = sizeof(tANI_U32);
1403 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1404 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1405 != eSIR_SUCCESS)
1406 {
1407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1408 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1409 goto handle_failure;
1410 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001411 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1412 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001413 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1414 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1415 tlvStruct->length = sizeof(tANI_U32);
1416 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1417 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1418 != eSIR_SUCCESS)
1419 {
1420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1421 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1422 goto handle_failure;
1423 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001424 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1425 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001426 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1427 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1428 * into FW, so the parameters are added here.
1429 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001430 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1431 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1432 tlvStruct->length = sizeof(tANI_U32);
1433 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1434 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1435 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1436 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001437 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1438 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1439 tlvStruct->length = sizeof(tANI_U32);
1440 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1441 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1442 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1443 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001444 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1445 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1446 tlvStruct->length = sizeof(tANI_U32);
1447 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1448 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1449 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1450 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001451 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1452 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1453 tlvStruct->length = sizeof(tANI_U32);
1454 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1455 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1456 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1457 + sizeof(tHalCfg) + tlvStruct->length) ;
1458
1459 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1460 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1461 tlvStruct->length = sizeof(tANI_U32);
1462 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1463 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1464 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1465 + sizeof(tHalCfg) + tlvStruct->length) ;
1466
1467 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1468 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1469 tlvStruct->length = sizeof(tANI_U32);
1470 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1471 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1472 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1473 + sizeof(tHalCfg) + tlvStruct->length) ;
1474
1475 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1476 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1477 tlvStruct->length = sizeof(tANI_U32);
1478 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1479 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1480 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1481 + sizeof(tHalCfg) + tlvStruct->length) ;
1482
1483 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1484 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1485 tlvStruct->length = sizeof(tANI_U32);
1486 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1487 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1488 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1489 + sizeof(tHalCfg) + tlvStruct->length) ;
1490
1491 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1492 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1493 tlvStruct->length = sizeof(tANI_U32);
1494 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1495 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1496 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1497 + sizeof(tHalCfg) + tlvStruct->length) ;
1498
1499 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1500 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1501 tlvStruct->length = sizeof(tANI_U32);
1502 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1503 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1504 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1505 + sizeof(tHalCfg) + tlvStruct->length) ;
1506
1507 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1508 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1509 tlvStruct->length = sizeof(tANI_U32);
1510 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1511 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1512 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1513 + sizeof(tHalCfg) + tlvStruct->length) ;
1514
1515 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1516 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1517 tlvStruct->length = sizeof(tANI_U32);
1518 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1519 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1520 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1521 + sizeof(tHalCfg) + tlvStruct->length) ;
1522
1523 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1524 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1525 tlvStruct->length = sizeof(tANI_U32);
1526 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1527 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1528 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1529 + sizeof(tHalCfg) + tlvStruct->length) ;
1530
1531 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1532 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1533 tlvStruct->length = sizeof(tANI_U32);
1534 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1535 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1536 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1537 + sizeof(tHalCfg) + tlvStruct->length) ;
1538
1539 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1540 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1541 tlvStruct->length = sizeof(tANI_U32);
1542 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1543 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1544 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1545 + sizeof(tHalCfg) + tlvStruct->length) ;
1546
1547 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1548 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1549 tlvStruct->length = sizeof(tANI_U32);
1550 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1551 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1552 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1553 + sizeof(tHalCfg) + tlvStruct->length) ;
1554
Wilson Tsaof8b37942013-09-06 10:49:00 -07001555 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_VICTIM; i++)
1556 {
1557 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WAN_FREQ */
1558 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WAN_FREQ + i*4;
1559 tlvStruct->length = sizeof(tANI_U32);
1560 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1561 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWANFreq[i];
1562 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1563 + sizeof(tHalCfg) + tlvStruct->length) ;
1564
1565 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WLAN_FREQ */
1566 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WLAN_FREQ + i*4;
1567 tlvStruct->length = sizeof(tANI_U32);
1568 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1569 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWLANFreq[i];
1570 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1571 + sizeof(tHalCfg) + tlvStruct->length) ;
1572
1573 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG */
1574 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG + i*4;
1575 tlvStruct->length = sizeof(tANI_U32);
1576 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1577 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig[i];
1578 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1579 + sizeof(tHalCfg) + tlvStruct->length) ;
1580
1581 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG2 */
1582 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG2 + i*4;
1583 tlvStruct->length = sizeof(tANI_U32);
1584 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1585 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig2[i];
1586 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1587 + sizeof(tHalCfg) + tlvStruct->length) ;
1588 }
1589
1590 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF */
1591 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF ;
1592 tlvStruct->length = sizeof(tANI_U32);
1593 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1594 *configDataValue = pMac->btc.btcConfig.mwsCoexModemBackoff;
1595 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1596 + sizeof(tHalCfg) + tlvStruct->length) ;
1597
1598 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_CONFIG; i++)
1599 {
1600 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_CONFIGX */
1601 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_CONFIG1 + i;
1602 tlvStruct->length = sizeof(tANI_U32);
1603 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1604 *configDataValue = pMac->btc.btcConfig.mwsCoexConfig[i];
1605 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1606 + sizeof(tHalCfg) + tlvStruct->length) ;
1607 }
1608
1609 /* [COEX] QWLAN_HAL_CFG_SAR_POWER_BACKOFF */
1610 tlvStruct->type = QWLAN_HAL_CFG_SAR_POWER_BACKOFF ;
1611 tlvStruct->length = sizeof(tANI_U32);
1612 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1613 *configDataValue = pMac->btc.btcConfig.SARPowerBackoff;
1614 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1615 + sizeof(tHalCfg) + tlvStruct->length) ;
1616
Jeff Johnson32d95a32012-09-10 13:15:23 -07001617 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001618 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1619 tlvStruct->length = sizeof(tANI_U32);
1620 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1621 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1622 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1623 wcnssCompiledApiVersion.minor,
1624 wcnssCompiledApiVersion.version,
1625 wcnssCompiledApiVersion.revision);
1626 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1627 + sizeof(tHalCfg) + tlvStruct->length) ;
1628
Jeff Johnsond13512a2012-07-17 11:42:19 -07001629 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1630 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1631 tlvStruct->length = sizeof(tANI_U32);
1632 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1633 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1634 configDataValue ) != eSIR_SUCCESS)
1635 {
1636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1637 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1638 goto handle_failure;
1639 }
1640
1641 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1642 + sizeof(tHalCfg) + tlvStruct->length) ;
1643 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1644 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1645 tlvStruct->length = sizeof(tANI_U32);
1646 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1647 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1648 configDataValue ) != eSIR_SUCCESS)
1649 {
1650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1651 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1652 goto handle_failure;
1653 }
1654
1655 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1656 + sizeof(tHalCfg) + tlvStruct->length) ;
1657
1658 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1659 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1660 tlvStruct->length = sizeof(tANI_U32);
1661 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1662 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1663 != eSIR_SUCCESS)
1664 {
1665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1666 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1667 goto handle_failure;
1668 }
1669
1670 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1671 + sizeof(tHalCfg) + tlvStruct->length) ;
1672
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08001673 /* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */
1674 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION ;
1675 tlvStruct->length = sizeof(tANI_U32);
1676 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1677 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION, configDataValue)
1678 != eSIR_SUCCESS)
1679 {
1680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1681 "Failed to get value for WNI_CFG_ENABLE_LPWR_IMG_TRANSITION");
1682 goto handle_failure;
1683 }
1684
1685 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1686 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala976e3252013-01-03 15:45:56 -08001687#ifdef WLAN_SOFTAP_VSTA_FEATURE
1688 tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
1689 tlvStruct->length = sizeof(tANI_U32);
1690 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1691 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
1692 != eSIR_SUCCESS)
1693 {
1694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1695 "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
1696 goto handle_failure;
1697 }
1698
1699 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1700 + sizeof(tHalCfg) + tlvStruct->length) ;
1701#endif
1702
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08001703 /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
1704 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
1705 tlvStruct->length = sizeof(tANI_U32);
1706 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1707
1708 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
1709 != eSIR_SUCCESS)
1710 {
1711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1712 "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
1713 goto handle_failure;
1714 }
1715
1716 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1717 + sizeof(tHalCfg) + tlvStruct->length) ;
1718
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301719/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */
1720 tlvStruct->type = QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT ;
1721 tlvStruct->length = sizeof(tANI_U32);
1722 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1723 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
1724 configDataValue ) != eSIR_SUCCESS)
1725 {
1726 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1727 "Failed to get value for WNI_CFG_AP_LINK_MONITOR_TIMEOUT");
1728 goto handle_failure;
1729 }
1730
1731 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1732 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301733#ifdef FEATURE_WLAN_TDLS
1734 /* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */
1735 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_MASK;
1736 tlvStruct->length = sizeof(tANI_U32);
1737 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1738 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK,
1739 configDataValue ) != eSIR_SUCCESS)
1740 {
1741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1742 "Failed to get value for WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK");
1743 goto handle_failure;
1744 }
1745 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1746 + sizeof(tHalCfg) + tlvStruct->length) ;
1747
1748 /* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */
1749 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE;
1750 tlvStruct->length = sizeof(tANI_U32);
1751 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1752 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_BUF_STA_ENABLED,
1753 configDataValue ) != eSIR_SUCCESS)
1754 {
1755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1756 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1757 goto handle_failure;
1758 }
1759 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1760 + sizeof(tHalCfg) + tlvStruct->length) ;
1761 /* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */
1762 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME;
1763 tlvStruct->length = sizeof(tANI_U32);
1764 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1765 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_PUAPSD_INACT_TIME,
1766 configDataValue ) != eSIR_SUCCESS)
1767 {
1768 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1769 "Failed to get value for WNI_CFG_TDLS_PUAPSD_INACT_TIME");
1770 goto handle_failure;
1771 }
1772 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1773 + sizeof(tHalCfg) + tlvStruct->length) ;
1774 /* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */
1775 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP;
1776 tlvStruct->length = sizeof(tANI_U32);
1777 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1778 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_RX_FRAME_THRESHOLD,
1779 configDataValue ) != eSIR_SUCCESS)
1780 {
1781 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1782 "Failed to get value for WNI_CFG_TDLS_RX_FRAME_THRESHOLD");
1783 goto handle_failure;
1784 }
1785 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1786 + sizeof(tHalCfg) + tlvStruct->length) ;
Naresh Jayaramf73f3762014-02-04 16:13:20 +05301787 /* QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE */
1788 tlvStruct->type = QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE;
1789 tlvStruct->length = sizeof(tANI_U32);
1790 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1791 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_OFF_CHANNEL_ENABLED,
1792 configDataValue ) != eSIR_SUCCESS)
1793 {
1794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1795 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1796 goto handle_failure;
1797 }
1798 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1799 + sizeof(tHalCfg) + tlvStruct->length) ;
1800
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301801#endif
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301802
Sudhir Sattayappa Kohallida1be202013-07-11 12:04:30 -07001803 /* QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN */
1804 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE ;
1805 tlvStruct->length = sizeof(tANI_U32);
1806 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1807 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_ADAPT_RX_DRAIN,
1808 configDataValue ) != eSIR_SUCCESS)
1809 {
1810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1811 "Failed to get value for WNI_CFG_ENABLE_ADAPT_RX_DRAIN");
1812 goto handle_failure;
1813 }
1814
1815 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1816 + sizeof(tHalCfg) + tlvStruct->length) ;
Yue Ma0fd23872013-08-01 15:56:47 -07001817
1818 /* QWLAN_HAL_CFG_FLEX_CONNECT_POWER_FACTOR */
1819 tlvStruct->type = QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR;
1820 tlvStruct->length = sizeof(tANI_U32);
1821 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1822 if(wlan_cfgGetInt(pMac, WNI_CFG_FLEX_CONNECT_POWER_FACTOR, configDataValue)
1823 != eSIR_SUCCESS)
1824 {
1825 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1826 "Failed to get value for WNI_CFG_FLEX_CONNECT_POWER_FACTOR");
1827 goto handle_failure;
1828 }
1829 tlvStruct = (tHalCfg *)(((tANI_U8 *) tlvStruct
1830 + sizeof(tHalCfg) + tlvStruct->length));
1831
Madan Mohan Koyyalamudica454572013-08-07 19:57:03 +05301832 /* QWLAN_HAL_CFG_ANTENNA_DIVERSITY */
1833 tlvStruct->type = QWLAN_HAL_CFG_ANTENNA_DIVERSITY;
1834 tlvStruct->length = sizeof(tANI_U32);
1835 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1836 if (wlan_cfgGetInt(pMac, WNI_CFG_ANTENNA_DIVESITY,
1837 configDataValue ) != eSIR_SUCCESS)
1838 {
1839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1840 "Failed to get value for WNI_CFG_ANTENNA_DIVESITY");
1841 goto handle_failure;
1842 }
1843
1844 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1845 + sizeof(tHalCfg) + tlvStruct->length) ;
1846
Madan Mohan Koyyalamudi2558bc92013-08-24 16:54:31 +05301847 /* QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT */
1848 tlvStruct->type = QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT ;
1849 tlvStruct->length = sizeof(tANI_U32);
1850 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1851 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_LINK_MONITOR_TIMEOUT,
1852 configDataValue ) != eSIR_SUCCESS)
1853 {
1854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1855 "Failed to get value for WNI_CFG_GO_LINK_MONITOR_TIMEOUT");
1856 goto handle_failure;
1857 }
1858 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1859 + sizeof(tHalCfg) + tlvStruct->length) ;
1860
Kiet Lam4bbd3cb2013-11-07 20:03:49 +05301861 /* QWLAN_HAL_CFG_ATH_DISABLE */
1862 tlvStruct->type = QWLAN_HAL_CFG_ATH_DISABLE ;
1863 tlvStruct->length = sizeof(tANI_U32);
1864 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1865 if(wlan_cfgGetInt(pMac, WNI_CFG_ATH_DISABLE,
1866 configDataValue ) != eSIR_SUCCESS)
1867 {
1868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1869 "Failed to get value for WNI_CFG_ATH_DISABLE");
1870 goto handle_failure;
1871 }
1872 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1873 + sizeof(tHalCfg) + tlvStruct->length) ;
1874
c_hpothu6d7dc922013-12-02 12:36:41 +05301875 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_WLAN_LEN */
1876 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1877 tlvStruct->length = sizeof(tANI_U32);
1878 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1879 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_WLAN_LEN,
1880 configDataValue ) != eSIR_SUCCESS)
1881 {
1882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1883 "Failed to get value for WNI_CFG_BTC_ACTIVE_WLAN_LEN");
1884 goto handle_failure;
1885 }
1886 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1887 + sizeof(tHalCfg) + tlvStruct->length) ;
1888
1889 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1890 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1891 tlvStruct->length = sizeof(tANI_U32);
1892 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1893 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_BT_LEN,
1894 configDataValue ) != eSIR_SUCCESS)
1895 {
1896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1897 "Failed to get value for WNI_CFG_BTC_ACTIVE_BT_LEN");
1898 goto handle_failure;
1899 }
1900 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1901 + sizeof(tHalCfg) + tlvStruct->length) ;
1902
1903 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN */
1904 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1905 tlvStruct->length = sizeof(tANI_U32);
1906 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1907 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN,
1908 configDataValue ) != eSIR_SUCCESS)
1909 {
1910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1911 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN");
1912 goto handle_failure;
1913 }
1914 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1915 + sizeof(tHalCfg) + tlvStruct->length) ;
1916
1917 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1918 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1919 tlvStruct->length = sizeof(tANI_U32);
1920 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1921 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_BT_LEN,
1922 configDataValue ) != eSIR_SUCCESS)
1923 {
1924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1925 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_BT_LEN");
1926 goto handle_failure;
1927 }
1928 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1929 + sizeof(tHalCfg) + tlvStruct->length) ;
1930
AnjaneeDevi Kapparapu50239e32014-01-07 18:09:33 +05301931 /* QWLAN_HAL_CFG_ASD_PROBE_INTERVAL */
1932 tlvStruct->type = QWLAN_HAL_CFG_ASD_PROBE_INTERVAL ;
1933 tlvStruct->length = sizeof(tANI_U32);
1934 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1935 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_PROBE_INTERVAL,
1936 configDataValue ) != eSIR_SUCCESS)
1937 {
1938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1939 "Failed to get value for WNI_CFG_ASD_PROBE_INTERVAL");
1940 goto handle_failure;
1941 }
1942 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1943 + sizeof(tHalCfg) + tlvStruct->length) ;
1944
1945 /* QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD */
1946 tlvStruct->type = QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD ;
1947 tlvStruct->length = sizeof(tANI_U32);
1948 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1949 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_TRIGGER_THRESHOLD,
1950 configDataValue ) != eSIR_SUCCESS)
1951 {
1952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1953 "Failed to get value for WNI_CFG_ASD_TRIGGER_THRESHOLD");
1954 goto handle_failure;
1955 }
1956 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1957 + sizeof(tHalCfg) + tlvStruct->length) ;
1958
1959 /* QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD */
1960 tlvStruct->type = QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD ;
1961 tlvStruct->length = sizeof(tANI_U32);
1962 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1963 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD,
1964 configDataValue ) != eSIR_SUCCESS)
1965 {
1966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1967 "Failed to get value for WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD");
1968 goto handle_failure;
1969 }
1970 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1971 + sizeof(tHalCfg) + tlvStruct->length) ;
1972
Leela Venkata Kiran Kumar Reddy Chirala22c159b2013-12-23 18:19:13 -08001973 /* QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO */
1974 tlvStruct->type = QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO ;
1975 tlvStruct->length = sizeof(tANI_U32);
1976 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1977 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CTS2S_DURING_SCO,
1978 configDataValue ) != eSIR_SUCCESS)
1979 {
1980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1981 "Failed to get value for WNI_CFG_BTC_CTS2S_DURING_SCO");
1982 goto handle_failure;
1983 }
1984 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1985 + sizeof(tHalCfg) + tlvStruct->length) ;
1986
c_hpothu5bd1ae42014-03-07 20:28:22 +05301987 /* QWLAN_HAL_CFG_RA_FILTER_ENABLE */
1988 tlvStruct->type = QWLAN_HAL_CFG_RA_FILTER_ENABLE ;
1989 tlvStruct->length = sizeof(tANI_U32);
1990 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1991
1992 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_FILTER_ENABLE,
1993 configDataValue ) != eSIR_SUCCESS)
1994 {
1995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1996 "Failed to get value for WNI_CFG_RA_FILTER_ENABLE");
1997 goto handle_failure;
1998 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05301999 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2000 + sizeof(tHalCfg) + tlvStruct->length) ;
2001
2002 /* QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL */
2003 tlvStruct->type = QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL ;
2004 tlvStruct->length = sizeof(tANI_U32);
2005 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2006
2007 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_RATE_LIMIT_INTERVAL,
2008 configDataValue ) != eSIR_SUCCESS)
2009 {
2010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2011 "Failed to get value for WNI_CFG_RA_RATE_LIMIT_INTERVAL");
2012 goto handle_failure;
2013 }
c_hpothu2d0f1c42014-04-01 18:38:51 +05302014 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2015 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu5bd1ae42014-03-07 20:28:22 +05302016
c_hpothu2d0f1c42014-04-01 18:38:51 +05302017 /* QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE */
2018 tlvStruct->type = QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE ;
2019 tlvStruct->length = sizeof(tANI_U32);
2020 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2021
2022 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE,
2023 configDataValue ) != eSIR_SUCCESS)
2024 {
2025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2026 "Failed to get value for WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE");
2027 goto handle_failure;
2028 }
2029 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2030 + sizeof(tHalCfg) + tlvStruct->length) ;
2031
2032 /* QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE */
2033 tlvStruct->type = QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE ;
2034 tlvStruct->length = sizeof(tANI_U32);
2035 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2036
2037 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE,
2038 configDataValue ) != eSIR_SUCCESS)
2039 {
2040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2041 "Failed to get value for WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE");
2042 goto handle_failure;
2043 }
2044 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2045 + sizeof(tHalCfg) + tlvStruct->length) ;
2046
2047 /* QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD */
2048 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD ;
2049 tlvStruct->length = sizeof(tANI_U32);
2050 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2051
2052 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD,
2053 configDataValue ) != eSIR_SUCCESS)
2054 {
2055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2056 "Failed to get value for WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD");
2057 goto handle_failure;
2058 }
2059 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2060 + sizeof(tHalCfg) + tlvStruct->length) ;
2061
2062 /* QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD */
2063 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD ;
2064 tlvStruct->length = sizeof(tANI_U32);
2065 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2066
2067 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD,
2068 configDataValue ) != eSIR_SUCCESS)
2069 {
2070 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2071 "Failed to get value for WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD");
2072 goto handle_failure;
2073 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05302074 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2075 + sizeof(tHalCfg) + tlvStruct->length) ;
2076
Mihir Shetec34258c2014-07-30 17:50:27 +05302077 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP */
2078 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP ;
2079 tlvStruct->length = sizeof(tANI_U32);
2080 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2081
2082 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_SP,
2083 configDataValue ) != eSIR_SUCCESS)
2084 {
2085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2086 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_SP");
2087 goto handle_failure;
2088 }
2089 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2090 + sizeof(tHalCfg) + tlvStruct->length) ;
2091
2092 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT */
2093 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT ;
2094 tlvStruct->length = sizeof(tANI_U32);
2095 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2096
2097 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT,
2098 configDataValue ) != eSIR_SUCCESS)
2099 {
2100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2101 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT");
2102 goto handle_failure;
2103 }
2104 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2105 + sizeof(tHalCfg) + tlvStruct->length) ;
2106
2107 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT */
2108 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT ;
2109 tlvStruct->length = sizeof(tANI_U32);
2110 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2111
2112 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT,
2113 configDataValue ) != eSIR_SUCCESS)
2114 {
2115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2116 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT");
2117 goto handle_failure;
2118 }
2119 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2120 + sizeof(tHalCfg) + tlvStruct->length) ;
2121
2122 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW */
2123 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW ;
2124 tlvStruct->length = sizeof(tANI_U32);
2125 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2126
2127 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW,
2128 configDataValue ) != eSIR_SUCCESS)
2129 {
2130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2131 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW");
2132 goto handle_failure;
2133 }
2134 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2135 + sizeof(tHalCfg) + tlvStruct->length) ;
2136
2137 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW */
2138 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW ;
2139 tlvStruct->length = sizeof(tANI_U32);
2140 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2141
2142 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW,
2143 configDataValue ) != eSIR_SUCCESS)
2144 {
2145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2146 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW");
2147 goto handle_failure;
2148 }
2149 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2150 + sizeof(tHalCfg) + tlvStruct->length) ;
2151
2152 /* QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE */
2153 tlvStruct->type = QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE ;
2154 tlvStruct->length = sizeof(tANI_U32);
2155 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2156
2157 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE,
2158 configDataValue ) != eSIR_SUCCESS)
2159 {
2160 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2161 "Failed to get value for WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE");
2162 goto handle_failure;
2163 }
2164 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2165 + sizeof(tHalCfg) + tlvStruct->length) ;
2166
2167 /* QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS */
2168 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS ;
2169 tlvStruct->length = sizeof(tANI_U32);
2170 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2171
2172 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS,
2173 configDataValue ) != eSIR_SUCCESS)
2174 {
2175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2176 "Failed to get value for WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS");
2177 goto handle_failure;
2178 }
2179 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2180 + sizeof(tHalCfg) + tlvStruct->length) ;
2181
2182 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS */
2183 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS ;
2184 tlvStruct->length = sizeof(tANI_U32);
2185 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2186
2187 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_WMMPS,
2188 configDataValue ) != eSIR_SUCCESS)
2189 {
2190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2191 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_WMMPS");
2192 goto handle_failure;
2193 }
2194 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2195 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu03d961b2014-09-19 16:45:00 +05302196
2197 /* QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE */
2198 tlvStruct->type = QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE ;
2199 tlvStruct->length = sizeof(tANI_U32);
2200 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2201
2202 if (wlan_cfgGetInt(pMac, WNI_CFG_BURST_MODE_BE_TXOP_VALUE,
2203 configDataValue ) != eSIR_SUCCESS)
2204 {
2205 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2206 "Failed to get value for WNI_CFG_BURST_MODE_BE_TXOP_VALUE");
2207 goto handle_failure;
2208 }
2209 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2210 + sizeof(tHalCfg) + tlvStruct->length) ;
2211
Deepthi Gowri9025aa62014-11-07 19:45:36 +05302212 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE */
2213 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE ;
2214 tlvStruct->length = sizeof(tANI_U32);
2215 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2216
2217 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE,
2218 configDataValue ) != eSIR_SUCCESS)
2219 {
2220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2221 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE");
2222 goto handle_failure;
2223 }
2224 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2225 + sizeof(tHalCfg) + tlvStruct->length) ;
2226
Naresh Jayaramf5bbe3f2014-12-29 18:32:47 +05302227 /* QWLAN_HAL_CFG_BTC_FAST_WLAN_CONN_PREF */
2228 tlvStruct->type = QWLAN_HAL_CFG_BTC_FAST_WLAN_CONN_PREF ;
2229 tlvStruct->length = sizeof(tANI_U32);
2230 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2231
2232 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FAST_WLAN_CONN_PREF,
2233 configDataValue ) != eSIR_SUCCESS)
2234 {
2235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2236 "Failed to get value for WNI_CFG_BTC_FAST_WLAN_CONN_PREF");
2237 goto handle_failure;
2238 }
2239 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2240 + sizeof(tHalCfg) + tlvStruct->length) ;
Deepthi Gowri9025aa62014-11-07 19:45:36 +05302241
jagadeeshaf2d0ce2015-03-31 11:45:30 +05302242 /* QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT */
2243 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT;
2244 tlvStruct->length = sizeof(tANI_U32);
2245 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2246
2247 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_RTSCTS_HTVHT,
2248 configDataValue ) != eSIR_SUCCESS)
2249 {
2250 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2251 "Failed to get value for WNI_CFG_ENABLE_RTSCTS_HTVHT");
2252 goto handle_failure;
2253 }
2254 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2255 + sizeof(tHalCfg) + tlvStruct->length) ;
2256
Sachin Ahuja41b61902015-06-18 18:32:15 +05302257
2258 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN */
2259 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN ;
2260 tlvStruct->length = sizeof(tANI_U32);
2261 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2262
2263 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN,
2264 configDataValue ) != eSIR_SUCCESS)
2265 {
2266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2267 "Failed to get value for WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN");
2268 goto handle_failure;
2269 }
2270 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2271 + sizeof(tHalCfg) + tlvStruct->length) ;
2272
2273 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN */
2274 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN ;
2275 tlvStruct->length = sizeof(tANI_U32);
2276 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2277
2278 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN,
2279 configDataValue ) != eSIR_SUCCESS)
2280 {
2281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2282 "Failed to get value for WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN");
2283 goto handle_failure;
2284 }
Sachin Ahuja41b61902015-06-18 18:32:15 +05302285 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2286 + sizeof(tHalCfg) + tlvStruct->length) ;
2287
Hanumantha Reddy Pothula9a8ccab2015-07-03 14:33:17 +05302288 /* QWLAN_HAL_CFG_LINK_FAIL_TIMEOUT */
2289 tlvStruct->type = QWLAN_HAL_CFG_LINK_FAIL_TIMEOUT ;
2290 tlvStruct->length = sizeof(tANI_U32);
2291 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2292
2293 if (wlan_cfgGetInt(pMac, WNI_CFG_LINK_FAIL_TIMEOUT,
2294 configDataValue ) != eSIR_SUCCESS)
2295 {
2296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2297 "Failed to get value for WNI_CFG_LINK_FAIL_TIMEOUT");
2298 goto handle_failure;
2299 }
2300 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2301 + sizeof(tHalCfg) + tlvStruct->length) ;
2302
2303 /* QWLAN_HAL_CFG_LINK_FAIL_TX_CNT */
2304 tlvStruct->type = QWLAN_HAL_CFG_LINK_FAIL_TX_CNT ;
2305 tlvStruct->length = sizeof(tANI_U32);
2306 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2307
2308 if (wlan_cfgGetInt(pMac, WNI_CFG_LINK_FAIL_TX_CNT,
2309 configDataValue ) != eSIR_SUCCESS)
2310 {
2311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2312 "Failed to get value for WNI_CFG_LINK_FAIL_TX_CNT");
2313 goto handle_failure;
2314 }
2315 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2316 + sizeof(tHalCfg) + tlvStruct->length) ;
Sachin Ahuja41b61902015-06-18 18:32:15 +05302317
Hanumantha Reddy Pothulae0216f92015-08-11 18:30:06 +05302318 /* QWLAN_HAL_CFG_TOGGLE_ARP_BDRATES */
2319 tlvStruct->type = QWLAN_HAL_CFG_TOGGLE_ARP_BDRATES;
2320 tlvStruct->length = sizeof(tANI_U32);
2321 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2322
2323 if (wlan_cfgGetInt(pMac, WNI_CFG_TOGGLE_ARP_BDRATES,
2324 configDataValue ) != eSIR_SUCCESS)
2325 {
2326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2327 "Failed to get value for WNI_CFG_TOGGLE_ARP_BDRATES");
2328 goto handle_failure;
2329 }
2330 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2331 + sizeof(tHalCfg) + tlvStruct->length) ;
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +05302332 /* QWLAN_HAL_CFG_OPTIMIZE_CA_EVENT */
2333 tlvStruct->type = QWLAN_HAL_CFG_OPTIMIZE_CA_EVENT ;
2334 tlvStruct->length = sizeof(tANI_U32);
2335 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2336 if (wlan_cfgGetInt(pMac, WNI_CFG_OPTIMIZE_CA_EVENT,
2337 configDataValue ) != eSIR_SUCCESS)
2338 {
2339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2340 "Failed to get value for WNI_CFG_OPTIMIZE_CA_EVENT");
2341 goto handle_failure;
2342 }
2343 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2344 + sizeof(tHalCfg) + tlvStruct->length) ;
Hanumantha Reddy Pothulae0216f92015-08-11 18:30:06 +05302345
Padma, Santhosh Kumare2eb0fa2015-08-26 13:40:47 +05302346 /* QWLAN_HAL_CFG_EXT_SCAN_CONC_MODE */
2347 tlvStruct->type = QWLAN_HAL_CFG_EXT_SCAN_CONC_MODE ;
2348 tlvStruct->length = sizeof(tANI_U32);
2349 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2350
2351 if (wlan_cfgGetInt(pMac, WNI_CFG_EXT_SCAN_CONC_MODE,
2352 configDataValue ) != eSIR_SUCCESS)
2353 {
2354 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2355 "Failed to get value for WNI_CFG_EXT_SCAN_CONC_MODE");
2356 goto handle_failure;
2357 }
2358 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2359 + sizeof(tHalCfg) + tlvStruct->length) ;
2360
Sachin Ahujae9f85aa2015-12-08 19:57:04 +05302361 /* QWLAN_HAL_CFG_BAR_WAKEUP_HOST_DISABLE */
2362 tlvStruct->type = QWLAN_HAL_CFG_BAR_WAKEUP_HOST_DISABLE;
2363 tlvStruct->length = sizeof(tANI_U32);
2364 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2365
2366 if (wlan_cfgGetInt(pMac, WNI_CFG_DISABLE_BAR_WAKE_UP_HOST,
2367 configDataValue ) != eSIR_SUCCESS)
2368 {
2369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2370 "Failed to get value for WNI_CFG_DISABLE_BAR_WAKE_UP_HOST");
2371 goto handle_failure;
2372 }
2373 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2374 + sizeof(tHalCfg) + tlvStruct->length) ;
Manjeet Singh3d8e0942016-02-09 19:06:08 +05302375
2376 /* QWLAN_HAL_CFG_SAR_BOFFSET_CORRECTION_ENABLE */
2377 tlvStruct->type = QWLAN_HAL_CFG_SAR_BOFFSET_CORRECTION_ENABLE;
2378 tlvStruct->length = sizeof(tANI_U32);
2379 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2380
2381 if (wlan_cfgGetInt(pMac, WNI_CFG_SAR_BOFFSET_SET_CORRECTION,
2382 configDataValue ) != eSIR_SUCCESS)
2383 {
2384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2385 "Failed to get value for WNI_CFG_SAR_BOFFSET_SET_CORRECTION");
2386 goto handle_failure;
2387 }
2388 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2389 + sizeof(tHalCfg) + tlvStruct->length) ;
2390
Jeff Johnson295189b2012-06-20 16:38:30 -07002391 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002392#ifdef WLAN_DEBUG
2393 {
2394 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07002395 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2396 "****** Dumping CFG TLV ***** ");
2397 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
2398 {
2399 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2400 "%02x %02x %02x %02x %02x %02x %02x %02x",
2401 tlvStructStart[i],
2402 tlvStructStart[i+1],
2403 tlvStructStart[i+2],
2404 tlvStructStart[i+3],
2405 tlvStructStart[i+4],
2406 tlvStructStart[i+5],
2407 tlvStructStart[i+6],
2408 tlvStructStart[i+7]);
2409 }
2410 /* Dump the bytes in the last line*/
2411 for (; i < wdiStartParams->usConfigBufferLen; i++)
2412 {
2413 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2414 "%02x ",tlvStructStart[i]);
2415 }
2416 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2417 "**************************** ");
2418 }
2419#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002420 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002421handle_failure:
2422 vos_mem_free(configParam);
2423 return VOS_STATUS_E_FAILURE;
2424}
Jeff Johnson295189b2012-06-20 16:38:30 -07002425/*
2426 * FUNCTION: WDA_wdiCompleteCB
2427 * call the voss call back function
2428 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002429void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07002430{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002431 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2432 tWDA_CbContext *wdaContext;
2433
2434 if(NULL == pWdaParams)
2435 {
2436 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002437 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002438 VOS_ASSERT(0) ;
2439 return ;
2440 }
2441
2442 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
2443
Jeff Johnson295189b2012-06-20 16:38:30 -07002444 if (NULL == wdaContext)
2445 {
2446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002447 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002448 return ;
2449 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002450
Jeff Johnson295189b2012-06-20 16:38:30 -07002451 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002452 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07002453 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002454 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002455 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002456 vos_mem_free(pWdaParams);
2457
Jeff Johnson295189b2012-06-20 16:38:30 -07002458 if(WDI_STATUS_SUCCESS != status)
2459 {
2460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2461 "WDI stop callback returned failure" );
2462 VOS_ASSERT(0) ;
2463 }
2464 else
2465 {
2466 wdaContext->wdaState = WDA_STOP_STATE;
2467 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002468
Leo Chang9d76f622013-08-23 16:34:52 -07002469 /* FTM Driver stop procedure should be synced.
2470 * Stop and Close will happen on same context */
2471 if (eDRIVER_TYPE_MFG == wdaContext->driverMode)
2472 {
2473 if (VOS_STATUS_SUCCESS != vos_event_set(&wdaContext->ftmStopDoneEvent))
2474 {
2475 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2476 "%s: FTM Stop Event Set Fail", __func__);
2477 VOS_ASSERT(0);
2478 }
2479 }
2480
Jeff Johnson295189b2012-06-20 16:38:30 -07002481 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002482 vos_WDAComplete_cback(wdaContext->pVosContext);
2483
Jeff Johnson295189b2012-06-20 16:38:30 -07002484 return ;
2485}
Jeff Johnson295189b2012-06-20 16:38:30 -07002486/*
2487 * FUNCTION: WDA_stop
2488 * call WDI_stop
2489 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002490VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
2491{
2492 WDI_Status wdiStatus;
2493 VOS_STATUS status = VOS_STATUS_SUCCESS;
2494 WDI_StopReqParamsType *wdiStopReq;
2495 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002496 tWDA_ReqParams *pWdaParams ;
2497
Jeff Johnson295189b2012-06-20 16:38:30 -07002498 if (NULL == pWDA)
2499 {
2500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002501 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002502 VOS_ASSERT(0);
2503 return VOS_STATUS_E_FAILURE;
2504 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002505 if (pWDA->wdiFailed == true)
2506 {
2507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002508 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002509 return VOS_STATUS_E_ALREADY;
2510 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002511
Jeff Johnson295189b2012-06-20 16:38:30 -07002512 /* FTM mode stay START_STATE */
2513 if( (WDA_READY_STATE != pWDA->wdaState) &&
2514 (WDA_INIT_STATE != pWDA->wdaState) &&
2515 (WDA_START_STATE != pWDA->wdaState) )
2516 {
2517 VOS_ASSERT(0);
2518 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002519 wdiStopReq = (WDI_StopReqParamsType *)
2520 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
2521 if(NULL == wdiStopReq)
2522 {
2523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002524 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002525 VOS_ASSERT(0);
2526 return VOS_STATUS_E_NOMEM;
2527 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002528
Jeff Johnson295189b2012-06-20 16:38:30 -07002529 wdiStopReq->wdiStopReason = reason;
2530 wdiStopReq->wdiReqStatusCB = NULL;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302531
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002532 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2533 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07002534 {
2535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002536 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002537 VOS_ASSERT(0);
2538 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002539 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07002540 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002541
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002542 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
2543 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07002544 {
2545 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002546 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002547 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002548
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002549 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
2550 pWdaParams->wdaMsgParam = NULL;
2551 pWdaParams->pWdaContext = pWDA;
2552
Jeff Johnson295189b2012-06-20 16:38:30 -07002553 /* call WDI stop */
2554 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002555 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
2556
Jeff Johnson295189b2012-06-20 16:38:30 -07002557 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
2558 {
2559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2560 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002561 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2562 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002563 status = VOS_STATUS_E_FAILURE;
2564 }
Leo Chang9d76f622013-08-23 16:34:52 -07002565
2566 /* FTM Driver stop procedure should be synced.
2567 * Stop and Close will happen on same context */
2568 if (eDRIVER_TYPE_MFG == pWDA->driverMode)
2569 {
2570 status = vos_wait_single_event(&pWDA->ftmStopDoneEvent,
2571 WDI_RESPONSE_TIMEOUT);
2572 if (status != VOS_STATUS_SUCCESS)
2573 {
2574 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2575 "%s: FTM Stop Timepoout", __func__);
2576 VOS_ASSERT(0);
Leo Chang9d76f622013-08-23 16:34:52 -07002577 }
c_hpothu0d36bc42014-07-03 17:43:45 +05302578 vos_event_destroy(&pWDA->ftmStopDoneEvent);
Leo Chang9d76f622013-08-23 16:34:52 -07002579 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002580 return status;
2581}
Jeff Johnson295189b2012-06-20 16:38:30 -07002582/*
2583 * FUNCTION: WDA_close
2584 * call WDI_close and free the WDA context
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302585 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002586VOS_STATUS WDA_close(v_PVOID_t pVosContext)
2587{
Jeff Johnson43971f52012-07-17 12:26:56 -07002588 VOS_STATUS status = VOS_STATUS_SUCCESS;
2589 WDI_Status wstatus;
2590 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07002591 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07002592 if (NULL == wdaContext)
2593 {
2594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002595 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002596 return VOS_STATUS_E_FAILURE;
2597 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002598 if((WDA_INIT_STATE != wdaContext->wdaState) &&
2599 (WDA_STOP_STATE != wdaContext->wdaState))
2600 {
2601 VOS_ASSERT(0);
2602 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002603 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07002604 wstatus = WDI_Close();
2605 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07002606 {
2607 status = VOS_STATUS_E_FAILURE;
2608 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002609 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002610 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07002611 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
2612 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002613 {
2614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002615 "WDI Sync Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002616 status = VOS_STATUS_E_FAILURE;
2617 }
2618
Jeff Johnson43971f52012-07-17 12:26:56 -07002619 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002620 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002621 {
2622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002623 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002624 status = VOS_STATUS_E_FAILURE;
2625 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002626 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002627 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002628 {
2629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002630 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002631 status = VOS_STATUS_E_FAILURE;
2632 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002633 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07002634 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002635 {
2636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002637 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002638 status = VOS_STATUS_E_FAILURE;
2639 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002640 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07002641 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07002642 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07002643 {
2644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2645 "error in WDA close " );
2646 status = VOS_STATUS_E_FAILURE;
2647 }
2648 return status;
2649}
Jeff Johnson295189b2012-06-20 16:38:30 -07002650/*
2651 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
2652 * returns 1 if the compiled version is greater than or equal to the input version
2653 */
2654
2655uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2656{
2657 VOS_STATUS status = VOS_STATUS_SUCCESS;
2658 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2659 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002660 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002661 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
2662 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
2663 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
2664 (compiledVersion.revision >= revision)))
2665 return 1;
2666 else
2667 return 0;
2668}
Jeff Johnson295189b2012-06-20 16:38:30 -07002669/*
2670 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
2671 * returns 1 if the compiled version is greater than or equal to the input version
2672 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002673uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2674{
2675 VOS_STATUS status = VOS_STATUS_SUCCESS;
2676 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2677 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002678 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002679 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
2680 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
2681 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
2682 (reportedVersion.revision >= revision)))
2683 return 1;
2684 else
2685 return 0;
2686}
Jeff Johnson295189b2012-06-20 16:38:30 -07002687/*
2688 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
2689 * Returns the version of the WCNSS WLAN API with which the HOST
2690 * device driver was compiled
2691 */
2692VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
2693 tSirVersionType *pVersion)
2694{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302695 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002696 if ((NULL == pvosGCtx) || (NULL == pVersion))
2697 {
2698 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002699 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002700 VOS_ASSERT(0);
2701 return VOS_STATUS_E_FAILURE;
2702 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002703 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2704 if (NULL == pWDA )
2705 {
2706 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002707 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002708 VOS_ASSERT(0);
2709 return VOS_STATUS_E_FAILURE;
2710 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002711 *pVersion = pWDA->wcnssWlanCompiledVersion;
2712 return VOS_STATUS_SUCCESS;
2713}
Jeff Johnson295189b2012-06-20 16:38:30 -07002714/*
2715 * FUNCTION: WDA_GetWcnssWlanReportedVersion
2716 * Returns the version of the WCNSS WLAN API with which the WCNSS
2717 * device driver was compiled
2718 */
2719VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
2720 tSirVersionType *pVersion)
2721{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302722 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002723 if ((NULL == pvosGCtx) || (NULL == pVersion))
2724 {
2725 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002726 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002727 VOS_ASSERT(0);
2728 return VOS_STATUS_E_FAILURE;
2729 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002730 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2731 if (NULL == pWDA )
2732 {
2733 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002734 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002735 VOS_ASSERT(0);
2736 return VOS_STATUS_E_FAILURE;
2737 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002738 *pVersion = pWDA->wcnssWlanReportedVersion;
2739 return VOS_STATUS_SUCCESS;
2740}
Jeff Johnson295189b2012-06-20 16:38:30 -07002741/*
2742 * FUNCTION: WDA_GetWcnssSoftwareVersion
2743 * Returns the WCNSS Software version string
2744 */
2745VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
2746 tANI_U8 *pVersion,
2747 tANI_U32 versionBufferSize)
2748{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302749 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002750 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002751 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002752 if ((NULL == pvosGCtx) || (NULL == pVersion))
2753 {
2754 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002755 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002756 VOS_ASSERT(0);
2757 return VOS_STATUS_E_FAILURE;
2758 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002759 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2760 if (NULL == pWDA )
2761 {
2762 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002763 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002764 VOS_ASSERT(0);
2765 return VOS_STATUS_E_FAILURE;
2766 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002767 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
2768 return VOS_STATUS_SUCCESS;
2769}
Jeff Johnson295189b2012-06-20 16:38:30 -07002770/*
2771 * FUNCTION: WDA_GetWcnssHardwareVersion
2772 * Returns the WCNSS Hardware version string
2773 */
2774VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
2775 tANI_U8 *pVersion,
2776 tANI_U32 versionBufferSize)
2777{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302778 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002779 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002780 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002781 if ((NULL == pvosGCtx) || (NULL == pVersion))
2782 {
2783 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002784 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002785 VOS_ASSERT(0);
2786 return VOS_STATUS_E_FAILURE;
2787 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002788 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2789 if (NULL == pWDA )
2790 {
2791 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002792 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002793 VOS_ASSERT(0);
2794 return VOS_STATUS_E_FAILURE;
2795 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002796 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
2797 return VOS_STATUS_SUCCESS;
2798}
Jeff Johnson295189b2012-06-20 16:38:30 -07002799/*
2800 * FUNCTION: WDA_WniCfgDnld
2801 * Trigger CFG Download
2802 */
2803VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
2804{
2805 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302806 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnsonab81a082013-04-03 16:00:31 -07002807
Jeff Johnson295189b2012-06-20 16:38:30 -07002808 if (NULL == pMac )
2809 {
2810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002811 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002812 VOS_ASSERT(0);
2813 return VOS_STATUS_E_FAILURE;
2814 }
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302815 processCfgDownloadReq(pMac);
Jeff Johnson295189b2012-06-20 16:38:30 -07002816 return vosStatus;
2817}
Jeff Johnson295189b2012-06-20 16:38:30 -07002818/* -----------------------------------------------------------------
2819 * WDI interface
2820 * -----------------------------------------------------------------
2821 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002822/*
2823 * FUNCTION: WDA_suspendDataTxCallback
2824 * call back function called from TL after suspend Transmission
2825 */
2826VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
2827 v_U8_t* ucSTAId,
2828 VOS_STATUS vosStatus)
2829{
2830 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07002831 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002832 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002833 if (NULL == pWDA )
2834 {
2835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002836 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002837 VOS_ASSERT(0);
2838 return VOS_STATUS_E_FAILURE;
2839 }
2840 if(VOS_IS_STATUS_SUCCESS(vosStatus))
2841 {
2842 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
2843 }
2844 else
2845 {
2846 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
2847 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002848 /* Trigger the event to bring the WDA TL suspend function to come
2849 * out of wait*/
2850 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
2851 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
2852 {
2853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002854 "NEW VOS Event Set failed - status = %d", vosStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07002855 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002856 /* If TL suspended had timedout before this callback was called, resume back
2857 * TL.*/
2858 if (pWDA->txSuspendTimedOut)
2859 {
2860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002861 "Late TLSuspendCallback, resuming TL back again");
Jeff Johnson295189b2012-06-20 16:38:30 -07002862 WDA_ResumeDataTx(pWDA);
2863 pWDA->txSuspendTimedOut = FALSE;
2864 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002865 return VOS_STATUS_SUCCESS;
2866}
Jeff Johnson295189b2012-06-20 16:38:30 -07002867/*
2868 * FUNCTION: WDA_suspendDataTx
2869 * Update TL to suspend the data Transmission
2870 */
2871VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
2872{
2873 VOS_STATUS status = VOS_STATUS_E_FAILURE;
2874 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002875
2876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002877 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002878 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002879 if (pWDA->txSuspendTimedOut)
2880 {
2881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002882 "TL suspend timedout previously, CB not called yet");
Jeff Johnson295189b2012-06-20 16:38:30 -07002883 return status;
2884 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002885 /* Reset the event to be not signalled */
2886 status = vos_event_reset(&pWDA->suspendDataTxEvent);
2887 if(!VOS_IS_STATUS_SUCCESS(status))
2888 {
2889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002890 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002891 return VOS_STATUS_E_FAILURE;
2892 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002893 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07002894 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07002895 WDA_SuspendDataTxCallback);
2896 if(status != VOS_STATUS_SUCCESS)
2897 {
2898 return status;
2899 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002900 /* Wait for the event to be set by the TL, to get the response of
2901 * suspending the TX queues, this event should be set by the Callback
2902 * function called by TL*/
2903 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2904 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2905 if(!VOS_IS_STATUS_SUCCESS(status))
2906 {
2907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2908 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002909 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002910 /* Set this flag to true when TL suspend times out, so that when TL
2911 * suspend eventually happens and calls the callback, TL can be resumed
2912 * right away by looking at this flag when true.*/
2913 pWDA->txSuspendTimedOut = TRUE;
2914 }
2915 else
2916 {
2917 pWDA->txSuspendTimedOut = FALSE;
2918 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002919 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2920 {
2921 status = VOS_STATUS_SUCCESS;
2922 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002923 return status;
2924}
Jeff Johnson295189b2012-06-20 16:38:30 -07002925/*
2926 * FUNCTION: WDA_resumeDataTx
2927 * Update TL to resume the data Transmission
2928 */
2929VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
2930{
2931 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07002932
2933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002934 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07002935
2936 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07002937 return status;
2938}
Jeff Johnson295189b2012-06-20 16:38:30 -07002939/*
2940 * FUNCTION: WDA_InitScanReqCallback
2941 * Trigger Init SCAN callback
2942 */
2943void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2944{
2945 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2946 tWDA_CbContext *pWDA;
2947 tInitScanParams *pWDA_ScanParam ;
2948 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002950 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002951 if(NULL == pWdaParams)
2952 {
2953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002954 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002955 VOS_ASSERT(0) ;
2956 return ;
2957 }
2958 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2959 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002960 if(NULL == pWDA_ScanParam)
2961 {
2962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002963 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002964 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002965 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2966 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002967 return ;
2968 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002969 if(WDI_STATUS_SUCCESS != wdiStatus)
2970 {
2971 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002972 if(VOS_STATUS_SUCCESS != status)
2973 {
2974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002975 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002976 }
2977 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002978 /* free WDI command buffer */
2979 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002980 vos_mem_free(pWdaParams) ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302981
2982
Jeff Johnson295189b2012-06-20 16:38:30 -07002983 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002984 /* without converting the Status to Failure or Success Just
2985 pass the same status to lim */
2986 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002987 /* send SCAN RSP message back to PE */
2988 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002989 return ;
2990}
2991
2992/*
2993 * FUNCTION: WDA_ProcessInitScanReq
2994 * Trigger Init SCAN in DAL
2995 */
2996VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2997 tInitScanParams *initScanParams)
2998{
2999 WDI_Status status = WDI_STATUS_SUCCESS ;
3000 WDI_InitScanReqParamsType *wdiInitScanParam =
3001 (WDI_InitScanReqParamsType *)vos_mem_malloc(
3002 sizeof(WDI_InitScanReqParamsType)) ;
3003 tWDA_ReqParams *pWdaParams;
3004 tANI_U8 i = 0;
3005
3006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003007 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003008 if(NULL == wdiInitScanParam)
3009 {
3010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003011 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003012 VOS_ASSERT(0);
3013 return VOS_STATUS_E_NOMEM;
3014 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003015 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3016 if(NULL == pWdaParams)
3017 {
3018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003019 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003020 VOS_ASSERT(0);
3021 vos_mem_free(wdiInitScanParam);
3022 return VOS_STATUS_E_NOMEM;
3023 }
3024
3025 /* Copy init Scan params to WDI structure */
3026 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
3027 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
3028 sizeof(tSirMacAddr)) ;
3029 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
3030 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
3031 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003032 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
3033 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07003034 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
3035 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003036 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
3037 {
3038 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
3039 initScanParams->scanEntry.bssIdx[i] ;
3040 }
3041
3042 /* if Frame length, copy macMgmtHdr or WDI structure */
3043 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
3044 {
3045 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
3046 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
3047 }
3048 wdiInitScanParam->wdiReqStatusCB = NULL ;
3049
Jeff Johnson295189b2012-06-20 16:38:30 -07003050 /* Store Init Req pointer, as this will be used for response */
3051 pWdaParams->pWdaContext = pWDA;
3052 pWdaParams->wdaMsgParam = initScanParams;
3053 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003054 /* first try to suspend TX */
3055 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003056 if(WDI_STATUS_SUCCESS != status)
3057 {
3058 goto handleWdiFailure;
3059 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003060 /* call DAL API to pass init scan request to DAL */
3061 status = WDI_InitScanReq(wdiInitScanParam,
3062 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003063 if(IS_WDI_STATUS_FAILURE(status))
3064 {
3065 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3066 "error in WDA Init Scan, Resume Tx " );
3067 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003068 VOS_ASSERT(0) ;
3069
3070 goto handleWdiFailure;
3071 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003072 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003073handleWdiFailure:
3074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3075 "Failure in WDI Api, free all the memory " );
3076 /* free WDI command buffer */
3077 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3078 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003079 /* send Failure to PE */
3080 initScanParams->status = eSIR_FAILURE ;
3081 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003082 return CONVERT_WDI2VOS_STATUS(status) ;
3083}
3084
Jeff Johnson295189b2012-06-20 16:38:30 -07003085/*
3086 * FUNCTION: WDA_StartScanReqCallback
3087 * send Start SCAN RSP back to PE
3088 */
3089void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
3090 void* pUserData)
3091{
3092 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3093 tWDA_CbContext *pWDA;
3094 tStartScanParams *pWDA_ScanParam;
3095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003096 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003097 if(NULL == pWdaParams)
3098 {
3099 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003100 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003101 VOS_ASSERT(0) ;
3102 return ;
3103 }
3104 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3105 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003106 if(NULL == pWDA_ScanParam)
3107 {
3108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003109 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003110 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003111 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003112 return ;
3113 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003114 if(NULL == pWdaParams->wdaWdiApiMsgParam)
3115 {
3116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003117 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003118 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003119 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003120 return ;
3121 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003122 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3123 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003124
Jeff Johnson295189b2012-06-20 16:38:30 -07003125
3126 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003127 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003128 /* send SCAN RSP message back to PE */
3129 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003130 return ;
3131}
3132
Jeff Johnson295189b2012-06-20 16:38:30 -07003133/*
3134 * FUNCTION: WDA_ProcessStartScanReq
3135 * Trigger start SCAN in WDI
3136 */
3137VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
3138 tStartScanParams *startScanParams)
3139{
3140 WDI_Status status = WDI_STATUS_SUCCESS;
3141 WDI_StartScanReqParamsType *wdiStartScanParams =
3142 (WDI_StartScanReqParamsType *)vos_mem_malloc(
3143 sizeof(WDI_StartScanReqParamsType)) ;
3144 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003146 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003147 if(NULL == wdiStartScanParams)
3148 {
3149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003150 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003151 VOS_ASSERT(0);
3152 return VOS_STATUS_E_NOMEM;
3153 }
3154 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3155 if(NULL == pWdaParams)
3156 {
3157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003158 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003159 VOS_ASSERT(0);
3160 vos_mem_free(wdiStartScanParams);
3161 return VOS_STATUS_E_NOMEM;
3162 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003163 /* Copy init Scan params to WDI structure */
3164 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
3165 wdiStartScanParams->wdiReqStatusCB = NULL ;
3166
Jeff Johnson295189b2012-06-20 16:38:30 -07003167 /* Store Init Req pointer, as this will be used for response */
3168 /* store Params pass it to WDI */
3169 pWdaParams->pWdaContext = pWDA;
3170 pWdaParams->wdaMsgParam = startScanParams;
3171 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003172 /* call DAL API to pass init scan request to DAL */
3173 status = WDI_StartScanReq(wdiStartScanParams,
3174 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003175 /* failure returned by WDI API */
3176 if(IS_WDI_STATUS_FAILURE(status))
3177 {
3178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3179 "Failure in Start Scan WDI API, free all the memory "
3180 "It should be due to previous abort scan." );
3181 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3182 vos_mem_free(pWdaParams) ;
3183 startScanParams->status = eSIR_FAILURE ;
3184 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
3185 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003186 return CONVERT_WDI2VOS_STATUS(status) ;
3187}
Jeff Johnson295189b2012-06-20 16:38:30 -07003188/*
3189 * FUNCTION: WDA_EndScanReqCallback
3190 * END SCAN callback
3191 */
3192void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
3193{
3194 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3195 tWDA_CbContext *pWDA;
3196 tEndScanParams *endScanParam;
3197 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003198 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003199 if(NULL == pWdaParams)
3200 {
3201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003202 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003203 VOS_ASSERT(0) ;
3204 return ;
3205 }
3206 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3207 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003208 if(NULL == endScanParam)
3209 {
3210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003211 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003212 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003213 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3214 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003215 return ;
3216 }
3217
3218 /* Free WDI command buffer */
3219 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3220 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003221 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003222 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003223 /* send response back to PE */
3224 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
3225 return ;
3226}
3227
Jeff Johnson295189b2012-06-20 16:38:30 -07003228/*
3229 * FUNCTION: WDA_ProcessEndScanReq
3230 * Trigger END SCAN in WDI
3231 */
3232VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
3233 tEndScanParams *endScanParams)
3234{
3235 WDI_Status status = WDI_STATUS_SUCCESS;
3236 WDI_EndScanReqParamsType *wdiEndScanParams =
3237 (WDI_EndScanReqParamsType *)vos_mem_malloc(
3238 sizeof(WDI_EndScanReqParamsType)) ;
3239 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003241 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003242 if(NULL == wdiEndScanParams)
3243 {
3244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003245 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003246 VOS_ASSERT(0);
3247 return VOS_STATUS_E_NOMEM;
3248 }
3249 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3250 if(NULL == pWdaParams)
3251 {
3252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003253 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003254 VOS_ASSERT(0);
3255 vos_mem_free(wdiEndScanParams);
3256 return VOS_STATUS_E_NOMEM;
3257 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003258 /* Copy init Scan params to WDI structure */
3259 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
3260 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003261 /* Store Init Req pointer, as this will be used for response */
3262 /* store Params pass it to WDI */
3263 pWdaParams->pWdaContext = pWDA;
3264 pWdaParams->wdaMsgParam = endScanParams;
3265 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003266 /* call DAL API to pass init scan request to DAL */
3267 status = WDI_EndScanReq(wdiEndScanParams,
3268 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003269 if(IS_WDI_STATUS_FAILURE(status))
3270 {
3271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3272 "Failure in End Scan WDI API, free all the memory "
3273 "It should be due to previous abort scan." );
3274 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3275 vos_mem_free(pWdaParams) ;
3276 endScanParams->status = eSIR_FAILURE ;
3277 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
3278 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003279 return CONVERT_WDI2VOS_STATUS(status) ;
3280}
Jeff Johnson295189b2012-06-20 16:38:30 -07003281/*
3282 * FUNCTION: WDA_FinishScanReqCallback
3283 * Trigger Finish SCAN callback
3284 */
3285void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
3286{
3287 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3288 tWDA_CbContext *pWDA;
3289 tFinishScanParams *finishScanParam;
3290 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003292 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003293 if(NULL == pWdaParams)
3294 {
3295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003296 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003297 VOS_ASSERT(0) ;
3298 return ;
3299 }
3300
3301 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3302 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003303 if(NULL == finishScanParam)
3304 {
3305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003306 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003307 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003308 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3309 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003310 return ;
3311 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003312 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3313 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003314 /*
3315 * Now Resume TX, if we reached here means, TX is already suspended, we
3316 * have to resume it unconditionaly
3317 */
3318 status = WDA_ResumeDataTx(pWDA) ;
3319
3320 if(VOS_STATUS_SUCCESS != status)
3321 {
3322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003323 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003324 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003325 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003326 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
3327 return ;
3328}
Jeff Johnson295189b2012-06-20 16:38:30 -07003329/*
3330 * FUNCTION: WDA_ProcessFinshScanReq
3331 * Trigger Finish SCAN in WDI
3332 */
3333VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
3334 tFinishScanParams *finishScanParams)
3335{
3336 WDI_Status status = WDI_STATUS_SUCCESS;
3337 WDI_FinishScanReqParamsType *wdiFinishScanParams =
3338 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
3339 sizeof(WDI_FinishScanReqParamsType)) ;
3340 tWDA_ReqParams *pWdaParams ;
3341 tANI_U8 i = 0;
3342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003343 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003344 if(NULL == wdiFinishScanParams)
3345 {
3346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003347 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003348 VOS_ASSERT(0);
3349 return VOS_STATUS_E_NOMEM;
3350 }
3351 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3352 if(NULL == pWdaParams)
3353 {
3354 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003355 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003356 VOS_ASSERT(0);
3357 vos_mem_free(wdiFinishScanParams);
3358 return VOS_STATUS_E_NOMEM;
3359 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003360 /* Copy init Scan params to WDI structure */
3361 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
3362 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
3363 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003364 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
3365 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
3366 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
3367 finishScanParams->frameLength ;
3368 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
3369 finishScanParams->currentOperChannel ;
3370 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
3371 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
3372 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003373 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
3374 {
3375 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
3376 finishScanParams->scanEntry.bssIdx[i] ;
3377 }
3378
3379
Jeff Johnson295189b2012-06-20 16:38:30 -07003380 /* if Frame length, copy macMgmtHdr ro WDI structure */
3381 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
3382 {
3383 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
3384 &finishScanParams->macMgmtHdr,
3385 sizeof(WDI_MacMgmtHdr)) ;
3386 }
3387 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003388 /* Store Init Req pointer, as this will be used for response */
3389 /* store Params pass it to WDI */
3390 pWdaParams->pWdaContext = pWDA;
3391 pWdaParams->wdaMsgParam = finishScanParams;
3392 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003393 /* call DAL API to pass init scan request to DAL */
3394 status = WDI_FinishScanReq(wdiFinishScanParams,
3395 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003396
Jeff Johnson295189b2012-06-20 16:38:30 -07003397
3398 /*
3399 * WDI API returns failure..
3400 */
3401 if(IS_WDI_STATUS_FAILURE( status))
3402 {
3403 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3404 "Failure in Finish Scan WDI API, free all the memory " );
3405 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3406 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003407 finishScanParams->status = eSIR_FAILURE ;
3408 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
3409 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003410 return CONVERT_WDI2VOS_STATUS(status) ;
3411}
Jeff Johnson295189b2012-06-20 16:38:30 -07003412/*---------------------------------------------------------------------
3413 * ASSOC API's
3414 *---------------------------------------------------------------------
3415 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003416/*
Sachin Ahuja935eda782014-07-30 14:57:41 +05303417 * FUNCTION: WDA_JoinRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07003418 * Trigger Init SCAN callback
3419 */
Sachin Ahuja935eda782014-07-30 14:57:41 +05303420void WDA_JoinRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07003421{
3422 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3423 tWDA_CbContext *pWDA;
3424 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003426 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003427 if(NULL == pWdaParams)
3428 {
3429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003430 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003431 VOS_ASSERT(0) ;
3432 return ;
3433 }
3434 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3435 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003436 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3437 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003438 /* reset macBSSID */
3439 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07003440 /* reset macSTASelf */
3441 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003442 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003443 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003444 return ;
3445}
Sachin Ahuja935eda782014-07-30 14:57:41 +05303446
3447/*
3448 * FUNCTION: WDA_JoinReqCallback
3449 * Free memory and send SWITCH CHANNEL RSP back to PE.
3450 * Invoked when Enter JOIN REQ failed in WDI and no RSP callback is generated.
3451 */
3452void WDA_JoinReqCallback(WDI_Status wdiStatus, void* pUserData)
3453{
3454 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3455 tWDA_CbContext *pWDA;
3456 tSwitchChannelParams *joinReqParam;
3457
3458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3459 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
3460
3461 if(NULL == pWdaParams)
3462 {
3463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3464 "%s: pWdaParams received NULL", __func__);
3465 VOS_ASSERT(0);
3466 return;
3467 }
3468
3469 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3470 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3471 joinReqParam->status = wdiStatus;
3472
3473 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3474 {
3475 /* reset macBSSID */
3476 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
3477 /* reset macSTASelf */
3478 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
3479
3480 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3481 vos_mem_free(pWdaParams);
3482 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
3483 }
3484
3485 return;
3486}
3487
Jeff Johnson295189b2012-06-20 16:38:30 -07003488/*
3489 * FUNCTION: WDA_ProcessJoinReq
3490 * Trigger Join REQ in WDI
3491 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003492VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
3493 tSwitchChannelParams* joinReqParam)
3494{
3495 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003496 WDI_JoinReqParamsType *wdiJoinReqParam =
3497 (WDI_JoinReqParamsType *)vos_mem_malloc(
3498 sizeof(WDI_JoinReqParamsType)) ;
3499 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003501 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003502 if(NULL == wdiJoinReqParam)
3503 {
3504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003505 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003506 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003507 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003508 return VOS_STATUS_E_NOMEM;
3509 }
3510 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3511 if(NULL == pWdaParams)
3512 {
3513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003514 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003515 VOS_ASSERT(0);
3516 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003517 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003518 return VOS_STATUS_E_NOMEM;
3519 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003520
3521 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
3522 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
3523 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
3524 {
3525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3526 "%s: received join request when BSSID or self-STA is NULL "
3527 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003528 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003529 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
3530 VOS_ASSERT(0);
3531 vos_mem_free(wdiJoinReqParam);
3532 vos_mem_free(pWdaParams);
3533 joinReqParam->status = eSIR_FAILURE ;
3534 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3535 return VOS_STATUS_E_INVAL;
3536 }
3537
Jeff Johnson295189b2012-06-20 16:38:30 -07003538 /* copy the BSSID for pWDA */
3539 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
3540 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003541 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
3542 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003543 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
3544 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07003545#ifdef WLAN_FEATURE_VOWIFI
3546 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
3547 joinReqParam->maxTxPower ;
3548#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003549 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
3550 joinReqParam->localPowerConstraint ;
3551#endif
3552 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
3553 joinReqParam->secondaryChannelOffset ;
3554 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
3555
Sachin Ahuja935eda782014-07-30 14:57:41 +05303556 wdiJoinReqParam->wdiReqStatusCB = WDA_JoinReqCallback;
3557 wdiJoinReqParam->pUserData = pWdaParams;
3558
Jeff Johnson295189b2012-06-20 16:38:30 -07003559 /* Store Init Req pointer, as this will be used for response */
3560 /* store Params pass it to WDI */
3561 pWdaParams->pWdaContext = pWDA;
3562 pWdaParams->wdaMsgParam = joinReqParam;
3563 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003564 status = WDI_JoinReq(wdiJoinReqParam,
Sachin Ahuja935eda782014-07-30 14:57:41 +05303565 (WDI_JoinRspCb )WDA_JoinRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003566 if(IS_WDI_STATUS_FAILURE(status))
3567 {
3568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3569 "Failure in Join WDI API, free all the memory " );
3570 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3571 vos_mem_free(pWdaParams) ;
3572 joinReqParam->status = eSIR_FAILURE ;
3573 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3574 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003575 return CONVERT_WDI2VOS_STATUS(status) ;
3576}
Jeff Johnson295189b2012-06-20 16:38:30 -07003577/*
3578 * FUNCTION: WDA_SwitchChannelReqCallback
3579 * send Switch channel RSP back to PE
3580 */
3581void WDA_SwitchChannelReqCallback(
3582 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
3583{
3584 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3585 tWDA_CbContext *pWDA;
3586 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003587 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003588 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003589 if(NULL == pWdaParams)
3590 {
3591 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003592 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003593 VOS_ASSERT(0) ;
3594 return ;
3595 }
3596 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3597 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3598
3599#ifdef WLAN_FEATURE_VOWIFI
3600 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
3601#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003602 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3603 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003604 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003605 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003606 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003607 return ;
3608}
Jeff Johnson295189b2012-06-20 16:38:30 -07003609/*
3610 * FUNCTION: WDA_ProcessChannelSwitchReq
3611 * Request to WDI to switch channel REQ params.
3612 */
3613VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
3614 tSwitchChannelParams *pSwitchChanParams)
3615{
3616 WDI_Status status = WDI_STATUS_SUCCESS ;
3617 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
3618 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
3619 sizeof(WDI_SwitchChReqParamsType)) ;
3620 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003622 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003623 if(NULL == wdiSwitchChanParam)
3624 {
3625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003626 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003627 VOS_ASSERT(0);
3628 return VOS_STATUS_E_NOMEM;
3629 }
3630 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3631 if(NULL == pWdaParams)
3632 {
3633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003634 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003635 VOS_ASSERT(0);
3636 vos_mem_free(wdiSwitchChanParam);
3637 return VOS_STATUS_E_NOMEM;
3638 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003639 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
3640#ifndef WLAN_FEATURE_VOWIFI
3641 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3642 pSwitchChanParams->localPowerConstraint;
3643#endif
3644 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3645 pSwitchChanParams->secondaryChannelOffset;
3646 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003647 /* Store req pointer, as this will be used for response */
3648 /* store Params pass it to WDI */
3649 pWdaParams->pWdaContext = pWDA;
3650 pWdaParams->wdaMsgParam = pSwitchChanParams;
3651 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003652#ifdef WLAN_FEATURE_VOWIFI
3653 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
3654 = pSwitchChanParams->maxTxPower;
3655 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3656 pSwitchChanParams ->selfStaMacAddr,
3657 sizeof(tSirMacAddr));
3658#endif
3659 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3660 pSwitchChanParams->bssId,
3661 sizeof(tSirMacAddr));
3662
3663 status = WDI_SwitchChReq(wdiSwitchChanParam,
3664 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003665 if(IS_WDI_STATUS_FAILURE(status))
3666 {
3667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3668 "Failure in process channel switch Req WDI API, free all the memory " );
3669 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3670 vos_mem_free(pWdaParams) ;
3671 pSwitchChanParams->status = eSIR_FAILURE ;
3672 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
3673 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003674 return CONVERT_WDI2VOS_STATUS(status) ;
3675}
Kalikinkar dhara1e83b772014-02-06 12:59:22 -08003676
3677/*
3678 * FUNCTION: WDA_SwitchChannelReqCallback_V1
3679 * send Switch channel RSP back to PE
3680 */
3681void WDA_SwitchChannelReqCallback_V1(
3682 WDI_SwitchChRspParamsType_V1 *wdiSwitchChanRsp,
3683 void* pUserData)
3684{
3685 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3686 tWDA_CbContext *pWDA;
3687 tSwitchChannelParams *pSwitchChanParams;
3688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3689 "<------ %s " ,__func__);
3690
3691 if (NULL == pWdaParams)
3692 {
3693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3694 "%s: pWdaParams received NULL", __func__);
3695 VOS_ASSERT(0);
3696 return ;
3697 }
3698 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3699 pSwitchChanParams =
3700 (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3701 pSwitchChanParams->channelSwitchSrc =
3702 wdiSwitchChanRsp->channelSwitchSrc;
3703#ifdef WLAN_FEATURE_VOWIFI
3704 pSwitchChanParams->txMgmtPower =
3705 wdiSwitchChanRsp->ucTxMgmtPower;
3706#endif
3707 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3708 vos_mem_free(pWdaParams);
3709 pSwitchChanParams->status =
3710 wdiSwitchChanRsp->wdiStatus ;
3711 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3712 (void *)pSwitchChanParams , 0);
3713 return;
3714}
3715
3716/*
3717 * FUNCTION: WDA_ProcessChannelSwitchReq_V1
3718 * Request to WDI to switch channel REQ params.
3719 */
3720VOS_STATUS WDA_ProcessChannelSwitchReq_V1(tWDA_CbContext *pWDA,
3721 tSwitchChannelParams *pSwitchChanParams)
3722{
3723 WDI_Status status = WDI_STATUS_SUCCESS ;
3724 WDI_SwitchChReqParamsType_V1 *wdiSwitchChanParam =
3725 (WDI_SwitchChReqParamsType_V1 *)vos_mem_malloc(
3726 sizeof(WDI_SwitchChReqParamsType_V1)) ;
3727 tWDA_ReqParams *pWdaParams ;
3728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3729 "------> %s " ,__func__);
3730 if (NULL == wdiSwitchChanParam)
3731 {
3732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3733 "%s: VOS MEM Alloc Failure", __func__);
3734 VOS_ASSERT(0);
3735 return VOS_STATUS_E_NOMEM;
3736 }
3737 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3738 if (NULL == pWdaParams)
3739 {
3740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3741 "%s: VOS MEM Alloc Failure", __func__);
3742 VOS_ASSERT(0);
3743 vos_mem_free(wdiSwitchChanParam);
3744 return VOS_STATUS_E_NOMEM;
3745 }
3746 wdiSwitchChanParam->wdiChInfo.channelSwitchSrc =
3747 pSwitchChanParams->channelSwitchSrc;
3748
3749 wdiSwitchChanParam->wdiChInfo.ucChannel =
3750 pSwitchChanParams->channelNumber;
3751#ifndef WLAN_FEATURE_VOWIFI
3752 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3753 pSwitchChanParams->localPowerConstraint;
3754#endif
3755 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3756 pSwitchChanParams->secondaryChannelOffset;
3757 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
3758 /* Store req pointer, as this will be used for response */
3759 /* store Params pass it to WDI */
3760 pWdaParams->pWdaContext = pWDA;
3761 pWdaParams->wdaMsgParam = pSwitchChanParams;
3762 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
3763#ifdef WLAN_FEATURE_VOWIFI
3764 wdiSwitchChanParam->wdiChInfo.cMaxTxPower =
3765 pSwitchChanParams->maxTxPower;
3766 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3767 pSwitchChanParams ->selfStaMacAddr,
3768 sizeof(tSirMacAddr));
3769#endif
3770 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3771 pSwitchChanParams->bssId,
3772 sizeof(tSirMacAddr));
3773
3774 status = WDI_SwitchChReq_V1(wdiSwitchChanParam,
3775 (WDI_SwitchChRspCb_V1)WDA_SwitchChannelReqCallback_V1,
3776 pWdaParams);
3777 if (IS_WDI_STATUS_FAILURE(status))
3778 {
3779 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3780 "Failure in process channel switch Req WDI "
3781 "API, free all the memory " );
3782 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3783 vos_mem_free(pWdaParams) ;
3784 pSwitchChanParams->status = eSIR_FAILURE ;
3785 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3786 (void *)pSwitchChanParams, 0) ;
3787 }
3788 return CONVERT_WDI2VOS_STATUS(status) ;
3789}
3790
Jeff Johnson295189b2012-06-20 16:38:30 -07003791/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05303792 * FUNCTION: WDA_ConfigBssRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07003793 * config BSS Req Callback, called by WDI
3794 */
Abhishek Singhf1221ab2015-08-04 16:38:39 +05303795void WDA_ConfigBssRspCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
Jeff Johnson295189b2012-06-20 16:38:30 -07003796 ,void* pUserData)
3797{
3798 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3799 tWDA_CbContext *pWDA;
3800 tAddBssParams *configBssReqParam;
3801 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003803 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003804 if(NULL == pWdaParams)
3805 {
3806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003807 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003808 VOS_ASSERT(0) ;
3809 return ;
3810 }
3811 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3812 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
3813 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003814 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003815 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003816 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
3817 {
3818 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
3819 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003820 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
3821 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
3822 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
3823
3824 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
3825 {
3826 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
3827 {
3828 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
3829 staConfigBssParam->staType = STA_ENTRY_BSSID;
3830 }
3831 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
3832 (staConfigBssParam->staType == STA_ENTRY_SELF))
3833 {
3834 /* This is the 1st add BSS Req for the BTAMP STA */
3835 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3836 staConfigBssParam->staType = STA_ENTRY_BSSID;
3837 }
3838 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3839 (staConfigBssParam->staType == STA_ENTRY_PEER))
3840 {
3841 /* This is the 2nd ADD BSS Request that is sent
3842 * on the BTAMP STA side. The Sta type is
3843 * set to STA_ENTRY_PEER here.*/
3844 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3845 }
3846 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3847 (staConfigBssParam->staType == STA_ENTRY_SELF))
3848 {
3849 /* statype is already set by PE.
3850 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
3851 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
3852 staConfigBssParam->staType = STA_ENTRY_BSSID;
3853 }
3854 else
3855 {
3856 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
3857 staConfigBssParam->staType = STA_ENTRY_PEER;
3858 }
3859 }
3860 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
3861 {
3862 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
3863 staConfigBssParam->staType = STA_ENTRY_SELF;
3864 }
3865 else
3866 {
3867 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3868 "Invalid operation mode specified");
3869 VOS_ASSERT(0);
3870 }
3871
3872 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003873 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003874 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003875 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003876 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
3877 sizeof(tSirMacAddr));
3878 staConfigBssParam->txChannelWidthSet =
3879 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07003880 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
3881 staConfigBssParam->htCapable)
3882 {
3883 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
3884 wdiConfigBssRsp->ucBSSIdx;
3885 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
3886 WDA_VALID_STA_INDEX ;
Abhishek Singh0644e482014-10-06 18:38:23 +05303887 pWDA->wdaStaInfo[staConfigBssParam->staIdx].currentOperChan =
3888 configBssReqParam->currentOperChannel;
Jeff Johnson295189b2012-06-20 16:38:30 -07003889 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003890 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
3891 wdiConfigBssRsp->ucBSSIdx,
3892 wdiConfigBssRsp->ucSTAIdx))
3893 {
3894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003895 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003896 VOS_ASSERT(0) ;
3897 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003898 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
3899 {
3900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003901 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003902 VOS_ASSERT(0) ;
3903 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003904#ifdef WLAN_FEATURE_VOWIFI
3905 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
3906#endif
3907 }
Abhishek Singh837adf22015-10-01 17:37:37 +05303908 else
3909 {
3910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3911 "%s: Failure with status %d", __func__,
3912 wdiConfigBssRsp->wdiStatus);
3913 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
3914 WLAN_LOG_INDICATOR_HOST_DRIVER,
3915 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
3916 FALSE, TRUE);
3917 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05303918 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
3919 sizeof(WDI_ConfigBSSReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07003920 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3921 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003922 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003923 return ;
3924}
Jeff Johnson295189b2012-06-20 16:38:30 -07003925/*
3926 * FUNCTION: WDA_UpdateEdcaParamsForAC
3927 * Update WDI EDCA params with PE edca params
3928 */
3929void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
3930 WDI_EdcaParamRecord *wdiEdcaParam,
3931 tSirMacEdcaParamRecord *macEdcaParam)
3932{
3933 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
3934 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
3935 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
3936 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
3937 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
3938 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
3939}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05303940void WDA_ConfigBssReqCallback(WDI_Status wdiStatus,
3941 void* pUserData)
3942{
3943 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3944 tWDA_CbContext *pWDA;
3945 tAddBssParams *addBssParams;
3946
3947 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3948 "<------ %s, wdiStatus: %d",
3949 __func__, wdiStatus);
3950
3951 if (NULL == pWdaParams)
3952 {
3953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3954 "%s: Invalid pWdaParams pointer", __func__);
3955 VOS_ASSERT(0);
3956 return;
3957 }
3958
3959 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3960 addBssParams = (tAddBssParams *)pWdaParams->wdaMsgParam;
3961
3962 addBssParams->status = wdiStatus;
3963
3964 if (IS_WDI_STATUS_FAILURE(wdiStatus))
3965 {
3966 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3967 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05303968 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
3969 WLAN_LOG_INDICATOR_HOST_DRIVER,
3970 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
3971 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05303972 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)addBssParams , 0);
3973 }
3974
3975 return ;
3976}
3977
Jeff Johnson295189b2012-06-20 16:38:30 -07003978/*
3979 * FUNCTION: WDA_ProcessConfigBssReq
3980 * Configure BSS before starting Assoc with AP
3981 */
3982VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
3983 tAddBssParams* configBssReqParam)
3984{
3985 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303986 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003987 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003989 "------> %s " ,__func__);
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303990 if (NULL == configBssReqParam)
3991 {
3992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3993 "%s: configBssReqParam is NULL", __func__);
3994 return VOS_STATUS_E_INVAL;
3995 }
3996
3997 wdiConfigBssReqParam = (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
3998 sizeof(WDI_ConfigBSSReqParamsType)) ;
3999
Jeff Johnson295189b2012-06-20 16:38:30 -07004000 if(NULL == wdiConfigBssReqParam)
4001 {
4002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004003 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004004 VOS_ASSERT(0);
4005 return VOS_STATUS_E_NOMEM;
4006 }
4007 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4008 if(NULL == pWdaParams)
4009 {
4010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004011 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004012 VOS_ASSERT(0);
4013 vos_mem_free(wdiConfigBssReqParam);
4014 return VOS_STATUS_E_NOMEM;
4015 }
Kiran4a17ebe2013-01-31 10:43:43 -08004016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4017 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07004018 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004019 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
4020 configBssReqParam) ;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304021 wdiConfigBssReqParam->wdiReqStatusCB = WDA_ConfigBssReqCallback;
4022 wdiConfigBssReqParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004023 /* Store Init Req pointer, as this will be used for response */
4024 /* store Params pass it to WDI */
4025 pWdaParams->pWdaContext = pWDA;
4026 pWdaParams->wdaMsgParam = configBssReqParam;
4027 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004028 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304029 (WDI_ConfigBSSRspCb )WDA_ConfigBssRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004030 if(IS_WDI_STATUS_FAILURE(status))
4031 {
4032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4033 "Failure in Config BSS WDI API, free all the memory " );
4034 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4035 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004036 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004037 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
4038 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004039 return CONVERT_WDI2VOS_STATUS(status) ;
4040}
Jeff Johnson295189b2012-06-20 16:38:30 -07004041#ifdef ENABLE_HAL_COMBINED_MESSAGES
4042/*
4043 * FUNCTION: WDA_PostAssocReqCallback
4044 * Post ASSOC req callback, send RSP back to PE
4045 */
4046void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
4047 void* pUserData)
4048{
4049 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4050 tPostAssocParams *postAssocReqParam =
4051 (tPostAssocParams *)pWDA->wdaMsgParam ;
4052 /*STA context within the BSS Params*/
4053 tAddStaParams *staPostAssocParam =
4054 &postAssocReqParam->addBssParams.staContext ;
4055 /*STA Params for self STA*/
4056 tAddStaParams *selfStaPostAssocParam =
4057 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004059 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004060 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004061 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004062 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
4063 {
4064 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
4065 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
4066 sizeof(tSirMacAddr)) ;
4067 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
4068 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
4069 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004070 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
4071 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05304072 vos_mem_zero(pWDA->wdaWdiApiMsgParam, sizeof(WDI_PostAssocReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004073 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
4074 pWDA->wdaWdiApiMsgParam = NULL;
4075 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004076 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004077 return ;
4078}
Jeff Johnson295189b2012-06-20 16:38:30 -07004079/*
4080 * FUNCTION: WDA_ProcessPostAssocReq
4081 * Trigger POST ASSOC processing in WDI
4082 */
4083VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
4084 tPostAssocParams *postAssocReqParam)
4085{
Jeff Johnson295189b2012-06-20 16:38:30 -07004086 WDI_Status status = WDI_STATUS_SUCCESS ;
4087
4088 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
4089 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
4090 sizeof(WDI_PostAssocReqParamsType)) ;
4091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004092 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004093
Jeff Johnson295189b2012-06-20 16:38:30 -07004094 if(NULL == wdiPostAssocReqParam)
4095 {
4096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004097 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004098 VOS_ASSERT(0);
4099 return VOS_STATUS_E_NOMEM;
4100 }
4101
4102 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
4103 {
4104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004105 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004106 VOS_ASSERT(0);
4107 return VOS_STATUS_E_FAILURE;
4108 }
4109
Jeff Johnson295189b2012-06-20 16:38:30 -07004110 /* update BSS params into WDI structure */
4111 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
4112 &postAssocReqParam->addBssParams) ;
4113 /* update STA params into WDI structure */
4114 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
4115 &postAssocReqParam->addStaParams) ;
4116
4117 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
4118 postAssocReqParam->addBssParams.highPerformance;
4119 WDA_UpdateEdcaParamsForAC(pWDA,
4120 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
4121 &postAssocReqParam->addBssParams.acbe);
4122 WDA_UpdateEdcaParamsForAC(pWDA,
4123 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
4124 &postAssocReqParam->addBssParams.acbk);
4125 WDA_UpdateEdcaParamsForAC(pWDA,
4126 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
4127 &postAssocReqParam->addBssParams.acvi);
4128 WDA_UpdateEdcaParamsForAC(pWDA,
4129 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
4130 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07004131 /* Store Init Req pointer, as this will be used for response */
4132 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004133 /* store Params pass it to WDI */
4134 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004135 status = WDI_PostAssocReq(wdiPostAssocReqParam,
4136 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004137 if(IS_WDI_STATUS_FAILURE(status))
4138 {
4139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4140 "Failure in Post Assoc WDI API, free all the memory " );
4141 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
4142 pWDA->wdaWdiApiMsgParam = NULL;
4143 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004144 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004145 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
4146 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004147 return CONVERT_WDI2VOS_STATUS(status) ;
4148}
4149#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004150/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304151 * FUNCTION: WDA_AddStaRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004152 * ADD STA req callback, send RSP back to PE
4153 */
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304154void WDA_AddStaRspCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -07004155 void* pUserData)
4156{
4157 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4158 tWDA_CbContext *pWDA;
4159 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004160 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004161 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004162 if(NULL == pWdaParams)
4163 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004165 VOS_ASSERT(0) ;
4166 return ;
4167 }
4168 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4169 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004170 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004171 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004172 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
4173 {
4174 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
4175 /*TODO: UMAC structure doesn't have these fields*/
4176 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
4177 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
4178 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
4179 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
4180 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
4181 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08004182#ifdef FEATURE_WLAN_TDLS
4183 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
4184 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
4185#else
Jeff Johnson295189b2012-06-20 16:38:30 -07004186 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08004187#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004188 {
4189 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
4190 wdiConfigStaRsp->ucBssIdx;
4191 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
4192 WDA_VALID_STA_INDEX ;
Abhishek Singhf08a82b2014-10-07 11:00:42 +05304193 pWDA->wdaStaInfo[addStaReqParam->staIdx].currentOperChan =
4194 addStaReqParam->currentOperChan;
Jeff Johnson295189b2012-06-20 16:38:30 -07004195 }
4196 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
4197 {
4198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004199 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004200 VOS_ASSERT(0) ;
4201 return ;
4202 }
4203 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304204 else
4205 {
4206 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4207 "%s: Failure with status %d", __func__,
4208 wdiConfigStaRsp->wdiStatus);
4209 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4210 WLAN_LOG_INDICATOR_HOST_DRIVER,
4211 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4212 FALSE, TRUE);
4213 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004214 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4215 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004216 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004217 return ;
4218}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304219void WDA_AddStaReqCallback(WDI_Status wdiStatus,
4220 void* pUserData)
4221{
4222 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4223 tWDA_CbContext *pWDA;
4224 tAddStaParams *addStaParams;
4225
4226 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4227 "<------ %s, wdiStatus: %d",
4228 __func__, wdiStatus);
4229
4230 if (NULL == pWdaParams)
4231 {
4232 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4233 "%s: Invalid pWdaParams pointer", __func__);
4234 VOS_ASSERT(0);
4235 return;
4236 }
4237
4238 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4239 addStaParams = (tAddStaParams *)pWdaParams->wdaMsgParam;
4240
4241 addStaParams->status = wdiStatus;
4242
4243 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4244 {
4245 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4246 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304247 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4248 WLAN_LOG_INDICATOR_HOST_DRIVER,
4249 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4250 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304251 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaParams , 0);
4252 }
4253
4254 return ;
4255}
4256
Jeff Johnson295189b2012-06-20 16:38:30 -07004257/*
4258 * FUNCTION: WDA_ConfigStaReq
4259 * Trigger Config STA processing in WDI
4260 */
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304261VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
Jeff Johnson295189b2012-06-20 16:38:30 -07004262 tAddStaParams *addStaReqParam)
4263{
Jeff Johnson295189b2012-06-20 16:38:30 -07004264 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004265 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
4266 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
4267 sizeof(WDI_ConfigSTAReqParamsType)) ;
4268 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004270 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004271 if(NULL == wdiConfigStaReqParam)
4272 {
4273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004274 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004275 VOS_ASSERT(0);
4276 return VOS_STATUS_E_NOMEM;
4277 }
4278 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4279 if(NULL == pWdaParams)
4280 {
4281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004282 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004283 VOS_ASSERT(0);
4284 vos_mem_free(wdiConfigStaReqParam);
4285 return VOS_STATUS_E_NOMEM;
4286 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004287 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004288 /* update STA params into WDI structure */
4289 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
4290 addStaReqParam) ;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304291 wdiConfigStaReqParam->wdiReqStatusCB = WDA_AddStaReqCallback;
4292 wdiConfigStaReqParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004293 /* Store Init Req pointer, as this will be used for response */
4294 /* store Params pass it to WDI */
4295 pWdaParams->pWdaContext = pWDA;
4296 pWdaParams->wdaMsgParam = addStaReqParam;
4297 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304298
Jeff Johnson295189b2012-06-20 16:38:30 -07004299 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304300 (WDI_ConfigSTARspCb )WDA_AddStaRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004301 if(IS_WDI_STATUS_FAILURE(status))
4302 {
4303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4304 "Failure in Config STA WDI API, free all the memory " );
4305 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4306 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004307 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004308 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
4309 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004310 return CONVERT_WDI2VOS_STATUS(status) ;
4311}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304312
Jeff Johnson295189b2012-06-20 16:38:30 -07004313/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304314 * FUNCTION: WDA_DelBSSRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004315 * Dens DEL BSS RSP back to PE
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304316 */
4317void WDA_DelBSSRspCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -07004318 void* pUserData)
4319{
4320 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4321 tWDA_CbContext *pWDA;
4322 tDeleteBssParams *delBssReqParam;
4323 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07004324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004325 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004326 if(NULL == pWdaParams)
4327 {
4328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004329 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004330 VOS_ASSERT(0) ;
4331 return ;
4332 }
4333 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4334 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004335 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004336 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
4337 {
4338 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
4339 sizeof(tSirMacAddr)) ;
4340 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304341 else
4342 {
4343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4344 "%s: Failure with status %d", __func__,
4345 wdiDelBssRsp->wdiStatus);
4346 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4347 WLAN_LOG_INDICATOR_HOST_DRIVER,
4348 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4349 FALSE, TRUE);
4350 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004351 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
4352 {
4353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004354 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004355 VOS_ASSERT(0) ;
4356 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004357 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
4358 {
4359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004360 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004361 VOS_ASSERT(0) ;
4362 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004363 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
4364 {
4365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004366 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004367 VOS_ASSERT(0) ;
4368 }
Mihir Shete2ab1d492014-06-04 14:21:05 +05304369
4370 WLANTL_StartForwarding(staIdx,0,0);
4371
Jeff Johnson295189b2012-06-20 16:38:30 -07004372 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4373 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004374 /* reset the the system role*/
4375 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
4376
4377 /* Reset the BA related information */
4378 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
4379 {
4380 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
4381 {
4382 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
4383 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05304384 pWDA->wdaStaInfo[staIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004385 /* Reset framesTxed counters here */
4386 for(tid = 0; tid < STACFG_MAX_TC; tid++)
4387 {
4388 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
4389 }
4390 }
4391 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304392
Jeff Johnson295189b2012-06-20 16:38:30 -07004393 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004394 return ;
4395}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304396void WDA_DelBSSReqCallback(WDI_Status wdiStatus,
4397 void* pUserData)
4398{
4399 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4400 tWDA_CbContext *pWDA;
4401 tDeleteBssParams *delbssParams;
4402
4403 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4404 "<------ %s, wdiStatus: %d",
4405 __func__, wdiStatus);
4406
4407 if (NULL == pWdaParams)
4408 {
4409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4410 "%s: Invalid pWdaParams pointer", __func__);
4411 VOS_ASSERT(0);
4412 return;
4413 }
4414
4415 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4416 delbssParams = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
4417
4418 delbssParams->status = wdiStatus ;
4419
4420 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4421 {
4422 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4423 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304424 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4425 WLAN_LOG_INDICATOR_HOST_DRIVER,
4426 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4427 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304428 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delbssParams , 0) ;
4429 }
4430
4431 return ;
4432}
Jeff Johnson295189b2012-06-20 16:38:30 -07004433
Jeff Johnson295189b2012-06-20 16:38:30 -07004434/*
4435 * FUNCTION: WDA_ProcessDelBssReq
4436 * Init DEL BSS req with WDI
4437 */
4438VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
4439 tDeleteBssParams *delBssParam)
4440{
4441 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004442 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
4443 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
4444 sizeof(WDI_DelBSSReqParamsType)) ;
4445 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004447 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004448 if(NULL == wdiDelBssReqParam)
4449 {
4450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304451 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004452 VOS_ASSERT(0);
4453 return VOS_STATUS_E_NOMEM;
4454 }
4455 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4456 if(NULL == pWdaParams)
4457 {
4458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004459 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004460 VOS_ASSERT(0);
4461 vos_mem_free(wdiDelBssReqParam);
4462 return VOS_STATUS_E_NOMEM;
4463 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004464 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304465 wdiDelBssReqParam->wdiReqStatusCB = WDA_DelBSSReqCallback ;
4466 wdiDelBssReqParam->pUserData = pWdaParams;
4467
Jeff Johnson295189b2012-06-20 16:38:30 -07004468 /* Store Init Req pointer, as this will be used for response */
4469 /* store Params pass it to WDI */
4470 pWdaParams->pWdaContext = pWDA;
4471 pWdaParams->wdaMsgParam = delBssParam;
4472 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304473
Jeff Johnson295189b2012-06-20 16:38:30 -07004474 status = WDI_DelBSSReq(wdiDelBssReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304475 (WDI_DelBSSRspCb )WDA_DelBSSRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004476 if(IS_WDI_STATUS_FAILURE(status))
4477 {
4478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4479 "Failure in Del BSS WDI API, free all the memory " );
4480 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4481 vos_mem_free(pWdaParams) ;
4482 delBssParam->status = eSIR_FAILURE ;
4483 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
4484 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004485 return CONVERT_WDI2VOS_STATUS(status) ;
4486}
Jeff Johnson295189b2012-06-20 16:38:30 -07004487/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304488 * FUNCTION: WDA_DelSTARspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004489 * Dens DEL STA RSP back to PE
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304490 */
4491void WDA_DelSTARspCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -07004492 void* pUserData)
4493{
4494 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4495 tWDA_CbContext *pWDA;
4496 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004497 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004498 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004499 if(NULL == pWdaParams)
4500 {
4501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004502 "%s: pWdaParams received NULL", __func__);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304503 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004504 return ;
4505 }
4506 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4507 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004508 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004509 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
4510 {
4511 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
4512 {
4513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004514 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004515 VOS_ASSERT(0) ;
4516 }
4517 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
Mihir Shete2ab1d492014-06-04 14:21:05 +05304518 WLANTL_StartForwarding(delStaReqParam->staIdx,0,0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004519 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304520 else
4521 {
4522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4523 "%s: Failure with status %d", __func__,
4524 wdiDelStaRsp->wdiStatus);
4525 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4526 WLAN_LOG_INDICATOR_HOST_DRIVER,
4527 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4528 FALSE, TRUE);
4529 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004530 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4531 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004532 /*Reset the BA information corresponding to this STAIdx */
4533 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
4534 WDA_INVALID_STA_INDEX;
4535 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05304536 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004537 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004538 return ;
4539}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304540void WDA_DelSTAReqCallback(WDI_Status wdiStatus,
4541 void* pUserData)
4542{
4543 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4544 tWDA_CbContext *pWDA;
4545 tDeleteStaParams *delStaParams;
4546
4547 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4548 "<------ %s, wdiStatus: %d",
4549 __func__, wdiStatus);
4550
4551 if (NULL == pWdaParams)
4552 {
4553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4554 "%s: Invalid pWdaParams pointer", __func__);
4555 VOS_ASSERT(0);
4556 return;
4557 }
4558
4559 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4560 delStaParams = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
4561
4562 delStaParams->status = wdiStatus ;
4563
4564 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4565 {
4566 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4567 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304568 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4569 WLAN_LOG_INDICATOR_HOST_DRIVER,
4570 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4571 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304572 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParams , 0) ;
4573 }
4574
4575 return ;
4576}
4577
Jeff Johnson295189b2012-06-20 16:38:30 -07004578/*
4579 * FUNCTION: WDA_ProcessDelStaReq
4580 * Init DEL STA req with WDI
4581 */
4582VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
4583 tDeleteStaParams *delStaParam)
4584{
4585 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004586 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
4587 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
4588 sizeof(WDI_DelSTAReqParamsType)) ;
4589 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004591 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004592 if(NULL == wdiDelStaReqParam)
4593 {
4594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004595 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004596 VOS_ASSERT(0);
4597 return VOS_STATUS_E_NOMEM;
4598 }
4599 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4600 if(NULL == pWdaParams)
4601 {
4602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004603 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004604 VOS_ASSERT(0);
4605 vos_mem_free(wdiDelStaReqParam);
4606 return VOS_STATUS_E_NOMEM;
4607 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004608 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304609 wdiDelStaReqParam->wdiReqStatusCB = WDA_DelSTAReqCallback ;
4610 wdiDelStaReqParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004611 /* Store Init Req pointer, as this will be used for response */
4612 /* store Params pass it to WDI */
4613 pWdaParams->pWdaContext = pWDA;
4614 pWdaParams->wdaMsgParam = delStaParam;
4615 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304616
Jeff Johnson295189b2012-06-20 16:38:30 -07004617 status = WDI_DelSTAReq(wdiDelStaReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304618 (WDI_DelSTARspCb )WDA_DelSTARspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004619 if(IS_WDI_STATUS_FAILURE(status))
4620 {
4621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4622 "Failure in Del STA WDI API, free all the memory status = %d",
4623 status );
4624 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4625 vos_mem_free(pWdaParams) ;
4626 delStaParam->status = eSIR_FAILURE ;
4627 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
4628 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004629 return CONVERT_WDI2VOS_STATUS(status) ;
4630}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304631void WDA_ProcessAddStaSelfRspCallback(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07004632{
4633 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4634 tWDA_CbContext *pWDA;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304635 tAddStaSelfParams *pAddStaSelfRsp = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004637 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004638 if(NULL == pWdaParams)
4639 {
4640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004641 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004642 VOS_ASSERT(0) ;
4643 return ;
4644 }
4645 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4646 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004647 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4648 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004649 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
4650 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
4651 pwdiAddSTASelfRsp->macSelfSta,
4652 sizeof(pAddStaSelfRsp->selfMacAddr));
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304653 pWDA->wdaAddSelfStaParams.ucSTASelfIdx = pwdiAddSTASelfRsp->ucSTASelfIdx;
4654 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaRspCounter++;
4655 if (pAddStaSelfRsp->status == eSIR_FAILURE)
4656 {
4657 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_RSP_WDI_FAIL;
4658 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Abhishek Singh837adf22015-10-01 17:37:37 +05304659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4660 "%s: Failure with status %d failcnter %d", __func__,
4661 pwdiAddSTASelfRsp->wdiStatus,
4662 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter);
4663 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4664 WLAN_LOG_INDICATOR_HOST_DRIVER,
4665 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4666 FALSE, TRUE);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304667 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004668 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004669 return ;
4670}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304671void WDA_ProcessAddStaSelfReqCallback(WDI_Status wdiStatus,
4672 void* pUserData)
4673{
4674 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4675 tWDA_CbContext *pWDA;
4676 tAddStaSelfParams *addStaSelfParams;
4677
4678 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4679 "<------ %s, wdiStatus: %d",
4680 __func__, wdiStatus);
4681
4682 if (NULL == pWdaParams)
4683 {
4684 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4685 "%s: Invalid pWdaParams pointer", __func__);
4686 VOS_ASSERT(0);
4687 return;
4688 }
4689
4690 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4691 addStaSelfParams = (tAddStaSelfParams *)pWdaParams->wdaMsgParam;
4692
4693 addStaSelfParams->status = wdiStatus ;
4694
4695 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4696 {
4697 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4698 vos_mem_free(pWdaParams) ;
4699 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason
4700 = WDA_ADDSTA_REQ_WDI_FAIL;
4701 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Abhishek Singh837adf22015-10-01 17:37:37 +05304702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4703 "%s: Failure with status %d failcnter %d", __func__,
4704 wdiStatus,
4705 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter);
4706 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4707 WLAN_LOG_INDICATOR_HOST_DRIVER,
4708 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4709 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304710 WDA_SendMsg(pWDA, WDA_ADD_STA_SELF_RSP, (void *)addStaSelfParams , 0);
4711 }
4712
4713 return ;
4714}
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304715
Jeff Johnson295189b2012-06-20 16:38:30 -07004716/*
4717 * FUNCTION: WDA_ProcessAddStaSelfReq
4718 *
4719 */
4720VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
4721{
4722 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004723 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004724 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
4725 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
4726 sizeof(WDI_AddSTASelfReqParamsType)) ;
4727 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004729 "------> %s " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304730 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaReqCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004731 if( NULL == wdiAddStaSelfReq )
4732 {
4733 VOS_ASSERT( 0 );
4734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004735 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304736 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4737 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004738 return( VOS_STATUS_E_NOMEM );
4739 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004740 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004741 if( NULL == pWdaParams )
4742 {
4743 VOS_ASSERT( 0 );
4744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004745 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304746 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4747 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004748 vos_mem_free(wdiAddStaSelfReq) ;
4749 return( VOS_STATUS_E_NOMEM );
4750 }
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304751 wdiAddStaSelfReq->wdiReqStatusCB = WDA_ProcessAddStaSelfReqCallback;
4752 wdiAddStaSelfReq->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004753 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
Kiran Kumar Lokere0ad5cd32013-06-25 11:26:22 -07004754 wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004755 /* Store Init Req pointer, as this will be used for response */
4756 /* store Params pass it to WDI */
4757 pWdaParams->pWdaContext = pWDA;
4758 pWdaParams->wdaMsgParam = pAddStaSelfReq;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304759 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
4760
4761 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq,
4762 WDA_ProcessAddStaSelfRspCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004763
Jeff Johnson43971f52012-07-17 12:26:56 -07004764 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004765 {
4766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4767 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07004768 wstatus );
4769 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004770 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4771 vos_mem_free(pWdaParams) ;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304772 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_WDI_FAIL;
4773 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004774 pAddStaSelfReq->status = eSIR_FAILURE ;
4775 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
4776 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004777 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004778}
Jeff Johnson295189b2012-06-20 16:38:30 -07004779/*
4780 * FUNCTION: WDA_DelSTASelfRespCallback
4781 *
4782 */
4783void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
4784 wdiDelStaSelfRspParams , void* pUserData)
4785{
4786 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4787 tWDA_CbContext *pWDA;
4788 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004790 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004791 if (NULL == pWdaParams)
4792 {
4793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004794 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004795 VOS_ASSERT(0);
4796 return;
4797 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004798 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4799 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004800 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004801 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004802
4803 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4804 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304805 if (WDI_STATUS_SUCCESS != delStaSelfParams->status)
Abhishek Singh1c6ee5d2015-12-14 12:31:42 +05304806 {
Abhishek Singh837adf22015-10-01 17:37:37 +05304807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4808 "%s: Failure with status %d", __func__,
4809 wdiDelStaSelfRspParams->wdiStatus);
4810 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4811 WLAN_LOG_INDICATOR_HOST_DRIVER,
4812 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4813 FALSE, TRUE);
Abhishek Singh1c6ee5d2015-12-14 12:31:42 +05304814 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004815 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004816 return ;
4817}
Jeff Johnson295189b2012-06-20 16:38:30 -07004818/*
4819 * FUNCTION: WDA_DelSTASelfReqCallback
4820 *
4821 */
4822void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
4823 void* pUserData)
4824{
4825 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4826 tWDA_CbContext *pWDA;
4827 tDelStaSelfParams *delStaSelfParams;
4828
4829 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05304830 "<------ %s, wdiStatus: %d pWdaParams: %p",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004831 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004832
4833 if (NULL == pWdaParams)
4834 {
4835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004836 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004837 VOS_ASSERT(0);
4838 return;
4839 }
4840
4841 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4842 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
4843
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004844 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004845
4846 if(IS_WDI_STATUS_FAILURE(wdiStatus))
4847 {
4848 VOS_ASSERT(0);
4849 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4850 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304851 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4852 WLAN_LOG_INDICATOR_HOST_DRIVER,
4853 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4854 FALSE, TRUE);
Jeff Johnson295189b2012-06-20 16:38:30 -07004855 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
4856 }
4857
4858 return ;
4859}
4860
4861/*
4862 * FUNCTION: WDA_DelSTASelfReq
4863 * Trigger Config STA processing in WDI
4864 */
4865VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
4866 tDelStaSelfParams* pDelStaSelfReqParam)
4867{
4868 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004869 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004870 tWDA_ReqParams *pWdaParams = NULL;
4871 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
4872 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
4873 sizeof(WDI_DelSTASelfReqParamsType)) ;
4874
Jeff Johnson295189b2012-06-20 16:38:30 -07004875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004876 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004877 if( NULL == wdiDelStaSelfReq )
4878 {
4879 VOS_ASSERT( 0 );
4880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004881 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004882 return( VOS_STATUS_E_NOMEM );
4883 }
4884
4885 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4886 if( NULL == pWdaParams )
4887 {
4888 VOS_ASSERT( 0 );
4889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004890 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004891 vos_mem_free(wdiDelStaSelfReq) ;
4892 return( VOS_STATUS_E_NOMEM );
4893 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004894 pWdaParams->pWdaContext = pWDA;
4895 /* Store param pointer as passed in by caller */
4896 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
4897 /* store Params pass it to WDI */
4898 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07004899 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
4900 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
4901
4902 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
4903 wdiDelStaSelfReq->pUserData = pWdaParams;
4904
Jeff Johnson43971f52012-07-17 12:26:56 -07004905 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07004906 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
4907
Jeff Johnson43971f52012-07-17 12:26:56 -07004908 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004909 {
4910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
4911 "Failure in Del Sta Self REQ WDI API, free all the memory " );
4912 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07004913 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004914 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4915 vos_mem_free(pWdaParams) ;
4916 pDelStaSelfReqParam->status = eSIR_FAILURE ;
4917 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
4918 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004919 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004920}
4921
Jeff Johnson295189b2012-06-20 16:38:30 -07004922/*
4923 * FUNCTION: WDA_SendMsg
4924 * Send Message back to PE
4925 */
4926void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
4927 void *pBodyptr, tANI_U32 bodyVal)
4928{
4929 tSirMsgQ msg = {0} ;
4930 tANI_U32 status = VOS_STATUS_SUCCESS ;
4931 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07004932 msg.type = msgType;
4933 msg.bodyval = bodyVal;
4934 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07004935 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07004936 if (VOS_STATUS_SUCCESS != status)
4937 {
4938 if(NULL != pBodyptr)
4939 {
4940 vos_mem_free(pBodyptr);
4941 }
4942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004943 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004944 VOS_ASSERT(0) ;
4945 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004946 return ;
4947}
Jeff Johnson295189b2012-06-20 16:38:30 -07004948/*
4949 * FUNCTION: WDA_UpdateBSSParams
4950 * Translated WDA/PE BSS info into WDI BSS info..
4951 */
4952void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
4953 WDI_ConfigBSSReqInfoType *wdiBssParams,
4954 tAddBssParams *wdaBssParams)
4955{
4956 v_U8_t keyIndex = 0;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05304957 v_U8_t i = 0;
4958
Jeff Johnson295189b2012-06-20 16:38:30 -07004959 /* copy bssReq Params to WDI structure */
4960 vos_mem_copy(wdiBssParams->macBSSID,
4961 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
4962 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
4963 sizeof(tSirMacAddr)) ;
4964 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
4965 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
4966 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004967 wdiBssParams->ucShortSlotTimeSupported =
4968 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004969 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
4970 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
4971 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
4972 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
4973 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
4974
4975 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
4976 wdiBssParams->ucTXOPProtectionFullSupport =
4977 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004978 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
4979 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004980 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004981 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
4982 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
4983 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
4984 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
4985
Chet Lanctot186b5732013-03-18 10:26:30 -07004986 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
4987
Jeff Johnson295189b2012-06-20 16:38:30 -07004988 /* copy SSID into WDI structure */
4989 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
4990 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
4991 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004992 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
4993 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004994 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07004995#ifdef WLAN_FEATURE_VOWIFI
4996 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
4997#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004998 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07004999 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07005000#ifdef WLAN_FEATURE_VOWIFI_11R
5001 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07005002 if(wdiBssParams->bExtSetStaKeyParamValid)
5003 {
5004 /* copy set STA key params to WDI structure */
5005 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
5006 wdaBssParams->extSetStaKeyParam.staIdx;
5007 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
5008 wdaBssParams->extSetStaKeyParam.encType;
5009 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
5010 wdaBssParams->extSetStaKeyParam.wepType;
5011 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
5012 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005013 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
5014 {
Jeff Johnson43971f52012-07-17 12:26:56 -07005015 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005016 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
5017 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
5018 {
5019 WDA_GetWepKeysFromCfg( pWDA,
5020 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
5021 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
5022 wdiBssParams->wdiExtSetKeyParam.wdiKey );
5023 }
5024 else
5025 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005026 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5027 keyIndex++)
5028 {
5029 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
5030 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
5031 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
5032 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
5033 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
5034 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05305035
5036 if(WDA_getHostWlanFeatCaps(DISA) && WDA_getFwWlanFeatCaps(DISA))
5037 {
5038 for (i = 0; i < WLAN_MAX_KEY_RSC_LEN; i ++)
5039 {
5040 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc[i] =
5041 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc[i]);
5042 }
5043
5044 for (i = 0; i < SIR_MAC_MAX_KEY_LENGTH; i++)
5045 {
5046 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key[i] =
5047 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].key[i]);
5048 }
5049 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5050 FL("%s: Negated Keys"), __func__);
5051 }
5052 else
5053 {
5054 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5055 FL("%s: No change in Keys "), __func__);
5056 vos_mem_copy(
5057 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
5058 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc,
5059 WLAN_MAX_KEY_RSC_LEN);
5060 vos_mem_copy(
5061 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
5062 wdaBssParams->extSetStaKeyParam.key[keyIndex].key,
5063 SIR_MAC_MAX_KEY_LENGTH);
5064 }
5065
Jeff Johnson295189b2012-06-20 16:38:30 -07005066 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
5067 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
5068 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
5069 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07005070 }
Srinivas Dasari9b57b112014-11-27 12:25:23 +05305071 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
Jeff Johnson295189b2012-06-20 16:38:30 -07005072 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005073 }
5074 }
5075 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
5076 }
5077 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
5078 {
5079 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
5080 sizeof(wdaBssParams->extSetStaKeyParam) );
5081 }
5082#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07005083#ifdef WLAN_FEATURE_11AC
5084 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
5085 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
5086#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005087
5088 return ;
5089}
Jeff Johnson295189b2012-06-20 16:38:30 -07005090/*
5091 * FUNCTION: WDA_UpdateSTAParams
5092 * Translated WDA/PE BSS info into WDI BSS info..
5093 */
5094void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
5095 WDI_ConfigStaReqInfoType *wdiStaParams,
5096 tAddStaParams *wdaStaParams)
5097{
5098 tANI_U8 i = 0;
5099 /* Update STA params */
5100 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
5101 sizeof(tSirMacAddr)) ;
5102 wdiStaParams->usAssocId = wdaStaParams->assocId;
5103 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07005104 wdiStaParams->staIdx = wdaStaParams->staIdx;
5105
Jeff Johnson295189b2012-06-20 16:38:30 -07005106 wdiStaParams->ucShortPreambleSupported =
5107 wdaStaParams->shortPreambleSupported;
5108 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
5109 sizeof(tSirMacAddr)) ;
5110 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
5111
5112 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
5113
5114 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
5115 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
5116 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
5117 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
5118 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
5119 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
5120 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
5121
5122 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
5123 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07005124 wdiStaParams->wdiSupportedRates.opRateMode =
5125 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07005126 for(i = 0;i < WDI_NUM_11B_RATES;i++)
5127 {
5128 wdiStaParams->wdiSupportedRates.llbRates[i] =
5129 wdaStaParams->supportedRates.llbRates[i];
5130 }
5131 for(i = 0;i < WDI_NUM_11A_RATES;i++)
5132 {
5133 wdiStaParams->wdiSupportedRates.llaRates[i] =
5134 wdaStaParams->supportedRates.llaRates[i];
5135 }
5136 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
5137 {
5138 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
5139 wdaStaParams->supportedRates.aniLegacyRates[i];
5140 }
5141 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
5142 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07005143#ifdef WLAN_FEATURE_11AC
5144 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
5145 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
5146 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
5147 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
5148#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005149 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
5150 {
5151 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
5152 wdaStaParams->supportedRates.supportedMCSSet[i];
5153 }
5154 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
5155 wdaStaParams->supportedRates.rxHighestDataRate;
5156
5157 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
5158
5159 wdiStaParams->wdiAction = wdaStaParams->updateSta;
5160
5161 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
5162 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
5163 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
5164
5165 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
5166 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
5167 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
5168 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07005169 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07005170#ifdef WLAN_FEATURE_11AC
5171 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
5172 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08005173 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Abhishek Singh6927fa02014-06-27 17:19:55 +05305174 wdiStaParams->vhtTxMUBformeeCapable = wdaStaParams->vhtTxMUBformeeCapable;
5175 /* When MU vhtTxMUBformeeCapable is set, SU ucVhtTxBFEnabled
5176 * must be set by default */
5177 if ( wdiStaParams->vhtTxMUBformeeCapable )
5178 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxMUBformeeCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07005179#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08005180 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
5181 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07005182 return ;
5183}
Jeff Johnson295189b2012-06-20 16:38:30 -07005184/*
5185 * -------------------------------------------------------------------------
5186 * CFG update to WDI
5187 * -------------------------------------------------------------------------
5188 */
5189
5190 /*
5191 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
5192 * Convert the WNI CFG ID to HAL CFG ID
5193 */
Jeff Johnsone7245742012-09-05 17:12:55 -07005194static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07005195{
5196 switch(wniCfgId)
5197 {
5198 case WNI_CFG_STA_ID:
5199 return QWLAN_HAL_CFG_STA_ID;
5200 case WNI_CFG_CURRENT_TX_ANTENNA:
5201 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
5202 case WNI_CFG_CURRENT_RX_ANTENNA:
5203 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
5204 case WNI_CFG_LOW_GAIN_OVERRIDE:
5205 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
5206 case WNI_CFG_POWER_STATE_PER_CHAIN:
5207 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
5208 case WNI_CFG_CAL_PERIOD:
5209 return QWLAN_HAL_CFG_CAL_PERIOD;
5210 case WNI_CFG_CAL_CONTROL:
5211 return QWLAN_HAL_CFG_CAL_CONTROL;
5212 case WNI_CFG_PROXIMITY:
5213 return QWLAN_HAL_CFG_PROXIMITY;
5214 case WNI_CFG_NETWORK_DENSITY:
5215 return QWLAN_HAL_CFG_NETWORK_DENSITY;
5216 case WNI_CFG_MAX_MEDIUM_TIME:
5217 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
5218 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
5219 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
5220 case WNI_CFG_RTS_THRESHOLD:
5221 return QWLAN_HAL_CFG_RTS_THRESHOLD;
5222 case WNI_CFG_SHORT_RETRY_LIMIT:
5223 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
5224 case WNI_CFG_LONG_RETRY_LIMIT:
5225 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
5226 case WNI_CFG_FRAGMENTATION_THRESHOLD:
5227 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
5228 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
5229 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
5230 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
5231 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
5232 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
5233 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
5234 case WNI_CFG_FIXED_RATE:
5235 return QWLAN_HAL_CFG_FIXED_RATE;
5236 case WNI_CFG_RETRYRATE_POLICY:
5237 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
5238 case WNI_CFG_RETRYRATE_SECONDARY:
5239 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
5240 case WNI_CFG_RETRYRATE_TERTIARY:
5241 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
5242 case WNI_CFG_FORCE_POLICY_PROTECTION:
5243 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
5244 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
5245 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
5246 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
5247 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
5248 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
5249 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
5250 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
5251 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
5252 case WNI_CFG_MAX_BA_SESSIONS:
5253 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
5254 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
5255 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
5256 case WNI_CFG_PS_ENABLE_BCN_FILTER:
5257 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
5258 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
5259 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
5260 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
5261 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
5262 case WNI_CFG_STATS_PERIOD:
5263 return QWLAN_HAL_CFG_STATS_PERIOD;
5264 case WNI_CFG_CFP_MAX_DURATION:
5265 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
5266#if 0 /*This is not part of CFG*/
5267 case WNI_CFG_FRAME_TRANS_ENABLED:
5268 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
5269#endif
5270 case WNI_CFG_DTIM_PERIOD:
5271 return QWLAN_HAL_CFG_DTIM_PERIOD;
5272 case WNI_CFG_EDCA_WME_ACBK:
5273 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
5274 case WNI_CFG_EDCA_WME_ACBE:
5275 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
5276 case WNI_CFG_EDCA_WME_ACVI:
5277 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
5278 case WNI_CFG_EDCA_WME_ACVO:
5279 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
5280#if 0
5281 case WNI_CFG_TELE_BCN_WAKEUP_EN:
5282 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
5283 case WNI_CFG_TELE_BCN_TRANS_LI:
5284 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
5285 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
5286 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
5287 case WNI_CFG_TELE_BCN_MAX_LI:
5288 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
5289 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
5290 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
5291#endif
5292 case WNI_CFG_ENABLE_CLOSE_LOOP:
5293 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08005294 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
5295 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
jagadeeshaf2d0ce2015-03-31 11:45:30 +05305296 case WNI_CFG_ENABLE_RTSCTS_HTVHT:
5297 return QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT;
Jeff Johnson295189b2012-06-20 16:38:30 -07005298 default:
5299 {
5300 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005301 "There is no HAL CFG Id corresponding to WNI CFG Id: %d",
Jeff Johnson295189b2012-06-20 16:38:30 -07005302 wniCfgId);
5303 return VOS_STATUS_E_INVAL;
5304 }
5305 }
5306}
Jeff Johnson295189b2012-06-20 16:38:30 -07005307/*
5308 * FUNCTION: WDA_UpdateCfgCallback
5309 *
5310 */
5311void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
5312{
5313 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
5314 WDI_UpdateCfgReqParamsType *wdiCfgParam =
5315 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005317 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005318 /*
5319 * currently there is no response message is expected between PE and
5320 * WDA, Failure return from WDI is a ASSERT condition
5321 */
5322 if(WDI_STATUS_SUCCESS != wdiStatus)
5323 {
5324 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005325 "%s: CFG (%d) config failure", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07005326 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
5327 }
5328
5329 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
5330 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5331 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07005332 return ;
5333}
Jeff Johnson295189b2012-06-20 16:38:30 -07005334/*
5335 * FUNCTION: WDA_UpdateCfg
5336 *
5337 */
5338VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
5339{
5340
5341 WDI_Status status = WDI_STATUS_SUCCESS ;
5342 tANI_U32 val =0;
5343 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
5344 tHalCfg *configData;
5345 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
5346 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07005347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005348 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005349 if (NULL == pMac )
5350 {
5351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005352 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07005353 return VOS_STATUS_E_FAILURE;
5354 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005355 if(WDA_START_STATE != pWDA->wdaState)
5356 {
5357 return VOS_STATUS_E_FAILURE;
5358 }
5359
5360 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
5361 {
5362 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005363 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005364 VOS_ASSERT(0);
5365 return VOS_STATUS_E_FAILURE;
5366 }
5367
5368 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
5369 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005370 if(NULL == wdiCfgReqParam)
5371 {
5372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005373 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005374 VOS_ASSERT(0);
5375 return VOS_STATUS_E_NOMEM;
5376 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005377 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
5378 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005379 if(NULL == wdiCfgReqParam->pConfigBuffer)
5380 {
5381 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005382 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005383 vos_mem_free(wdiCfgReqParam);
5384 VOS_ASSERT(0);
5385 return VOS_STATUS_E_NOMEM;
5386 }
5387
5388 /*convert the WNI CFG Id to HAL CFG Id*/
5389 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
5390 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
5391
5392 /*TODO: revisit this for handling string parameters */
5393 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
5394 &val) != eSIR_SUCCESS)
5395 {
5396 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005397 "Failed to cfg get id %d", cfgParam->bodyval);
Jeff Johnson295189b2012-06-20 16:38:30 -07005398 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
5399 vos_mem_free(wdiCfgReqParam);
5400 return eSIR_FAILURE;
5401 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005402 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
5403 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
5404 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
5405 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
5406 wdiCfgReqParam->wdiReqStatusCB = NULL ;
5407
5408 /* store Params pass it to WDI */
5409 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005410#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
5411 status = WDI_UpdateCfgReq(wdiCfgReqParam,
5412 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005413 if(IS_WDI_STATUS_FAILURE(status))
5414 {
5415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5416 "Failure in Update CFG WDI API, free all the memory " );
5417 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
5418 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5419 pWDA->wdaWdiCfgApiMsgParam = NULL;
5420 /* Failure is not expected */
5421 VOS_ASSERT(0) ;
5422 }
5423#else
5424 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
5425 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5426 pWDA->wdaWdiCfgApiMsgParam = NULL;
5427#endif
5428 return CONVERT_WDI2VOS_STATUS(status) ;
5429}
5430
Jeff Johnson295189b2012-06-20 16:38:30 -07005431VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
5432 v_U8_t *pDefaultKeyId,
5433 v_U8_t *pNumKeys,
5434 WDI_KeysType *pWdiKeys )
5435{
5436 v_U32_t i, j, defKeyId = 0;
5437 v_U32_t val = SIR_MAC_KEY_LENGTH;
5438 VOS_STATUS status = WDI_STATUS_SUCCESS;
5439 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005440 if (NULL == pMac )
5441 {
5442 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005443 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07005444 return VOS_STATUS_E_FAILURE;
5445 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005446 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
5447 &defKeyId ))
5448 {
5449 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5450 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
5451 }
5452
5453 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07005454 /* Need to extract ALL of the configured WEP Keys */
5455 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
5456 {
5457 val = SIR_MAC_KEY_LENGTH;
5458 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
5459 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
5460 pWdiKeys[j].key,
5461 &val ))
5462 {
5463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005464 "WEP Key index [%d] may not configured in CFG",i);
Jeff Johnson295189b2012-06-20 16:38:30 -07005465 }
5466 else
5467 {
5468 pWdiKeys[j].keyId = (tANI_U8) i;
5469 /*
5470 * Actually, a DC (Don't Care) because
5471 * this is determined (and set) by PE/MLME
5472 */
5473 pWdiKeys[j].unicast = 0;
5474 /*
5475 * Another DC (Don't Care)
5476 */
5477 pWdiKeys[j].keyDirection = eSIR_TX_RX;
5478 /* Another DC (Don't Care). Unused for WEP */
5479 pWdiKeys[j].paeRole = 0;
5480 /* Determined from wlan_cfgGetStr() above.*/
5481 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07005482 j++;
5483 *pNumKeys = (tANI_U8) j;
5484 }
5485 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005486 return status;
5487}
Jeff Johnson295189b2012-06-20 16:38:30 -07005488/*
5489 * FUNCTION: WDA_SetBssKeyReqCallback
5490 * send SET BSS key RSP back to PE
5491 */
5492void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
5493{
5494 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5495 tWDA_CbContext *pWDA;
5496 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005497 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005498 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005499 if(NULL == pWdaParams)
5500 {
5501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005502 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005503 VOS_ASSERT(0) ;
5504 return ;
5505 }
5506 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5507 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05305508 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
5509 sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005510 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5511 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005512 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005513 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005514 return ;
5515}
Jeff Johnson295189b2012-06-20 16:38:30 -07005516/*
5517 * FUNCTION: WDA_ProcessSetBssKeyReq
5518 * Request to WDI for programming the BSS key( key for
5519 * broadcast/multicast frames Encryption)
5520 */
5521VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
5522 tSetBssKeyParams *setBssKeyParams )
5523{
5524 WDI_Status status = WDI_STATUS_SUCCESS ;
5525 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
5526 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
5527 sizeof(WDI_SetBSSKeyReqParamsType)) ;
5528 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005529 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005531 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005532 if(NULL == wdiSetBssKeyParam)
5533 {
5534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005535 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005536 VOS_ASSERT(0);
5537 return VOS_STATUS_E_NOMEM;
5538 }
5539 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5540 if(NULL == pWdaParams)
5541 {
5542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005543 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005544 VOS_ASSERT(0);
5545 vos_mem_free(wdiSetBssKeyParam);
5546 return VOS_STATUS_E_NOMEM;
5547 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005548 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005549 /* copy set BSS params to WDI structure */
5550 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
5551 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
5552 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07005553 if(setBssKeyParams->encType != eSIR_ED_NONE)
5554 {
5555 if( setBssKeyParams->numKeys == 0 &&
5556 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
5557 setBssKeyParams->encType == eSIR_ED_WEP104))
5558 {
5559 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005560 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
5561 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
5562 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
5563 }
5564 else
5565 {
5566 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
5567 {
5568 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
5569 setBssKeyParams->key[keyIndex].keyId;
5570 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
5571 setBssKeyParams->key[keyIndex].unicast;
5572 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
5573 setBssKeyParams->key[keyIndex].keyDirection;
5574 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
5575 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5576 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
5577 setBssKeyParams->key[keyIndex].paeRole;
5578 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
5579 setBssKeyParams->key[keyIndex].keyLength;
5580 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
5581 setBssKeyParams->key[keyIndex].key,
5582 SIR_MAC_MAX_KEY_LENGTH);
5583 }
5584 }
5585 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005586 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
5587 setBssKeyParams->singleTidRc;
5588 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005589 /* Store set key pointer, as this will be used for response */
5590 /* store Params pass it to WDI */
5591 pWdaParams->pWdaContext = pWDA;
5592 pWdaParams->wdaMsgParam = setBssKeyParams;
5593 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005594 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
5595 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
5596
5597 if(IS_WDI_STATUS_FAILURE(status))
5598 {
5599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5600 "Failure in Set BSS Key Req WDI API, free all the memory " );
5601 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5602 vos_mem_free(pWdaParams) ;
5603 setBssKeyParams->status = eSIR_FAILURE ;
5604 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
5605 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005606 return CONVERT_WDI2VOS_STATUS(status) ;
5607}
Jeff Johnson295189b2012-06-20 16:38:30 -07005608/*
5609 * FUNCTION: WDA_RemoveBssKeyReqCallback
5610 * send SET BSS key RSP back to PE
5611 */
5612void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
5613{
5614 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5615 tWDA_CbContext *pWDA;
5616 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005618 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005619 if(NULL == pWdaParams)
5620 {
5621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005622 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005623 VOS_ASSERT(0) ;
5624 return ;
5625 }
5626 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5627 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005628 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5629 vos_mem_free(pWdaParams) ;
5630
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005631 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005632 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005633 return ;
5634}
Siddharth Bhal171788a2014-09-29 21:02:40 +05305635
5636/*
Siddharth Bhal64246172015-02-27 01:04:37 +05305637 * FUNCTION: WDA_GetFrameLogRspCallback
5638 * recieves get frame log response from FW
5639 */
5640void WDA_GetFrameLogRspCallback(WDI_GetFrameLogRspParamType* wdiRsp,
5641 void* pUserData)
5642{
5643 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5644 tWDA_CbContext *pWDA = NULL;
5645 tAniGetFrameLogReq *pGetFrameLogReqParams = NULL;
5646
5647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5648 "<------ Entering: %s " ,__func__);
5649 if(NULL == pWdaParams)
5650 {
5651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5652 "%s: pWdaParams received NULL", __func__);
5653 VOS_ASSERT(0) ;
5654 return ;
5655 }
5656
5657 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5658 if (NULL == pWDA)
5659 {
5660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5661 "%s:pWDA is NULL", __func__);
5662 VOS_ASSERT(0);
5663 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5664 vos_mem_free(pWdaParams);
5665 return ;
5666 }
5667
5668 pGetFrameLogReqParams = (tAniGetFrameLogReq *)pWdaParams->wdaMsgParam;
5669 if(NULL == pGetFrameLogReqParams)
5670 {
5671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5672 "%s: pGetFrameLogReqParams received NULL", __func__);
5673 VOS_ASSERT(0);
5674 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5675 vos_mem_free(pWdaParams);
5676 return;
5677 }
5678
Siddharth Bhal64246172015-02-27 01:04:37 +05305679 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
5680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Abhishek Singh611295e2015-07-09 11:11:54 +05305681 "%s:GetFrameLog with rsp status %d flag %d", __func__,
5682 wdiRsp->wdiStatus,pGetFrameLogReqParams->getFrameLogCmdFlag);
Siddharth Bhal64246172015-02-27 01:04:37 +05305683 }
5684
5685 /* free WDI command buffer only */
5686 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5687 vos_mem_free(pWdaParams->wdaMsgParam);
5688 vos_mem_free(pWdaParams);
5689
5690 return ;
5691
5692}
Gupta, Kapil7c34b322015-09-30 13:12:35 +05305693
5694/*
5695 * FUNCTION: WDA_RssiMonitorStopRspCallback
5696 * recieves Rssi Monitor stop response from FW
5697 */
5698void WDA_RssiMonitorStopRspCallback(WDI_RssiMonitorStopRspParamType *wdiRsp,
5699 void* pUserData)
5700{
5701 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5702 tSirRssiMonitorReq *pRssiMonitorReqParams;
5703
5704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5705 "<------ %s " ,__func__);
5706
5707 if(NULL == pWdaParams)
5708 {
5709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5710 "%s: pWdaParams received NULL", __func__);
5711 VOS_ASSERT(0);
5712 return ;
5713 }
5714
5715 if(NULL == pWdaParams->wdaMsgParam)
5716 {
5717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5718 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
5719 VOS_ASSERT(0);
5720 vos_mem_free(pWdaParams);
5721 return ;
5722 }
5723
5724 pRssiMonitorReqParams = (tSirRssiMonitorReq *)pWdaParams->wdaMsgParam;
5725
5726 if(pRssiMonitorReqParams->rssiMonitorCallback)
5727 {
5728 pRssiMonitorReqParams->rssiMonitorCallback(
5729 pRssiMonitorReqParams->rssiMonitorCbContext,
5730 CONVERT_WDI2VOS_STATUS(wdiRsp->status));
5731 }
5732 else
5733 {
5734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5735 "%s: pFWLoggingInitParams callback is NULL", __func__);
5736 }
5737
5738 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5739 vos_mem_free(pWdaParams->wdaMsgParam);
5740 vos_mem_free(pWdaParams);
5741
5742 return;
5743}
5744
5745/*
5746 * FUNCTION: WDA_RssiMonitorStartRspCallback
5747 * recieves Rssi Monitor start response from FW
5748 */
5749void WDA_RssiMonitorStartRspCallback(WDI_RssiMonitorStartRspParamType* wdiRsp,
5750 void* pUserData)
5751{
5752 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5753 tSirRssiMonitorReq *pRssiMonitorReqParams;
5754
5755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5756 "<------ %s " ,__func__);
5757
5758 if(NULL == pWdaParams)
5759 {
5760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5761 "%s: pWdaParams received NULL", __func__);
5762 VOS_ASSERT(0);
5763 return ;
5764 }
5765
5766 if(NULL == pWdaParams->wdaMsgParam)
5767 {
5768 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5769 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
5770 VOS_ASSERT(0);
5771 vos_mem_free(pWdaParams);
5772 return ;
5773 }
5774
5775 pRssiMonitorReqParams = (tSirRssiMonitorReq *)pWdaParams->wdaMsgParam;
5776
5777 if(pRssiMonitorReqParams->rssiMonitorCallback)
5778 {
5779 pRssiMonitorReqParams->rssiMonitorCallback(
5780 pRssiMonitorReqParams->rssiMonitorCbContext,
5781 CONVERT_WDI2VOS_STATUS(wdiRsp->status));
5782 }
5783 else
5784 {
5785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5786 "%s: pFWLoggingInitParams callback is NULL", __func__);
5787 }
5788
5789 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5790 vos_mem_free(pWdaParams->wdaMsgParam);
5791 vos_mem_free(pWdaParams);
5792
5793 return;
5794}
5795
Siddharth Bhal64246172015-02-27 01:04:37 +05305796/*
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305797 * FUNCTION: WDA_FWLoggingInitRspCallback
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305798 * recieves Mgmt Logging init response from FW
5799 */
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305800void WDA_FWLoggingInitRspCallback(WDI_FWLoggingInitRspParamType* wdiRsp,
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305801 void* pUserData)
5802{
5803 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305804 tSirFWLoggingInitParam *pFWLoggingInitParams;
c_manjeecfd1efb2015-09-25 19:32:34 +05305805 tAniLoggingInitRsp *pLoggingInitRsp;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305806
5807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5808 "<------ %s " ,__func__);
5809
5810 if(NULL == pWdaParams)
5811 {
5812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5813 "%s: pWdaParams received NULL", __func__);
5814 VOS_ASSERT(0);
5815 return ;
5816 }
5817
5818 if(NULL == pWdaParams->wdaMsgParam)
5819 {
5820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5821 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
5822 VOS_ASSERT(0);
5823 vos_mem_free(pWdaParams);
5824 return ;
5825 }
5826
c_manjeecfd1efb2015-09-25 19:32:34 +05305827 pLoggingInitRsp = (tAniLoggingInitRsp *)vos_mem_malloc(sizeof(tAniLoggingInitRsp)) ;
5828 if(NULL == pWdaParams)
5829 {
5830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5831 "%s: VOS MEM Alloc Failure for pLoggingInitRsp", __func__);
5832 VOS_ASSERT(0);
5833 vos_mem_free(pWdaParams);
5834 return;
5835 }
5836
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305837 pFWLoggingInitParams = (tSirFWLoggingInitParam *)pWdaParams->wdaMsgParam;
c_manjeecfd1efb2015-09-25 19:32:34 +05305838 vos_mem_copy(pLoggingInitRsp, wdiRsp, sizeof(tAniLoggingInitRsp));
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305839
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305840 if(pFWLoggingInitParams->fwlogInitCallback)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305841 {
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305842 pFWLoggingInitParams->fwlogInitCallback(
5843 pFWLoggingInitParams->fwlogInitCbContext,
c_manjeecfd1efb2015-09-25 19:32:34 +05305844 pLoggingInitRsp);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305845 }
5846 else
5847 {
5848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305849 "%s: pFWLoggingInitParams callback is NULL", __func__);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305850 }
5851
c_manjeecfd1efb2015-09-25 19:32:34 +05305852 vos_mem_free(pLoggingInitRsp);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305853 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5854 vos_mem_free(pWdaParams->wdaMsgParam);
5855 vos_mem_free(pWdaParams);
5856
5857 return;
5858}
5859
5860/*
Siddharth Bhal171788a2014-09-29 21:02:40 +05305861 * FUNCTION: WDA_SpoofMacAddrRspCallback
5862 * recieves spoof mac addr response from FW
5863 */
5864void WDA_SpoofMacAddrRspCallback(WDI_SpoofMacAddrRspParamType* wdiRsp, void* pUserData)
5865{
5866 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5867 tWDA_CbContext *pWDA;
Siddharth Bhal029d6732014-10-09 21:31:23 +05305868
Siddharth Bhal171788a2014-09-29 21:02:40 +05305869 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5870 "<------ %s " ,__func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305871
Siddharth Bhal171788a2014-09-29 21:02:40 +05305872 if(NULL == pWdaParams)
5873 {
5874 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5875 "%s: pWdaParams received NULL", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305876 VOS_ASSERT(0);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305877 return ;
5878 }
Siddharth Bhal171788a2014-09-29 21:02:40 +05305879 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Siddharth Bhal171788a2014-09-29 21:02:40 +05305880
Siddharth Bhal029d6732014-10-09 21:31:23 +05305881 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
Siddharth Bhal171788a2014-09-29 21:02:40 +05305882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhal029d6732014-10-09 21:31:23 +05305883 "%s:Spoofing with rsp status %d", __func__, wdiRsp->wdiStatus);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305884 }
Siddharth Bhal029d6732014-10-09 21:31:23 +05305885 WDA_SendMsg(pWDA, WDA_SPOOF_MAC_ADDR_RSP, NULL,
5886 CONVERT_WDI2SIR_STATUS(wdiRsp->wdiStatus));
Siddharth Bhal171788a2014-09-29 21:02:40 +05305887
Siddharth Bhal171788a2014-09-29 21:02:40 +05305888 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305889 vos_mem_free(pWdaParams->wdaMsgParam);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305890 vos_mem_free(pWdaParams);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305891
5892 return;
Siddharth Bhal171788a2014-09-29 21:02:40 +05305893}
5894
Jeff Johnson295189b2012-06-20 16:38:30 -07005895/*
5896 * FUNCTION: WDA_ProcessRemoveBssKeyReq
5897 * Request to WDI to remove the BSS key( key for broadcast/multicast
5898 * frames Encryption)
5899 */
5900VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
5901 tRemoveBssKeyParams *removeBssKeyParams )
5902{
5903 WDI_Status status = WDI_STATUS_SUCCESS ;
5904 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
5905 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
5906 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
5907 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005909 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005910 if(NULL == wdiRemoveBssKeyParam)
5911 {
5912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005913 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005914 VOS_ASSERT(0);
5915 return VOS_STATUS_E_NOMEM;
5916 }
5917 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5918 if(NULL == pWdaParams)
5919 {
5920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005921 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005922 VOS_ASSERT(0);
5923 vos_mem_free(wdiRemoveBssKeyParam);
5924 return VOS_STATUS_E_NOMEM;
5925 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005926 /* copy Remove BSS key params to WDI structure*/
5927 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
5928 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
5929 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
5930 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
5931 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005932 /* Store remove key pointer, as this will be used for response */
5933 /* store Params pass it to WDI */
5934 pWdaParams->pWdaContext = pWDA;
5935 pWdaParams->wdaMsgParam = removeBssKeyParams;
5936 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005937 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
5938 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005939 if(IS_WDI_STATUS_FAILURE(status))
5940 {
5941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5942 "Failure in Remove BSS Key Req WDI API, free all the memory " );
5943 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5944 vos_mem_free(pWdaParams) ;
5945 removeBssKeyParams->status = eSIR_FAILURE ;
5946 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
5947 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005948 return CONVERT_WDI2VOS_STATUS(status) ;
5949}
Jeff Johnson295189b2012-06-20 16:38:30 -07005950/*
5951 * FUNCTION: WDA_SetBssKeyReqCallback
5952 * send SET BSS key RSP back to PE
5953 */
5954void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
5955{
5956 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5957 tWDA_CbContext *pWDA;
5958 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005960 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005961 if(NULL == pWdaParams)
5962 {
5963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005964 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005965 VOS_ASSERT(0) ;
5966 return ;
5967 }
5968 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5969 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05305970 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
5971 sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005972 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5973 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005974 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005975 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005976 return ;
5977}
Jeff Johnson295189b2012-06-20 16:38:30 -07005978/*
5979 * FUNCTION: WDA_ProcessSetStaKeyReq
5980 * Request to WDI for programming the STA key( key for Unicast frames
5981 * Encryption)
5982 */
5983VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
5984 tSetStaKeyParams *setStaKeyParams )
5985{
5986 WDI_Status status = WDI_STATUS_SUCCESS ;
5987 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
5988 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
5989 sizeof(WDI_SetSTAKeyReqParamsType)) ;
5990 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005991 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005993 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005994 if(NULL == wdiSetStaKeyParam)
5995 {
5996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005997 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005998 VOS_ASSERT(0);
5999 return VOS_STATUS_E_NOMEM;
6000 }
6001 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6002 if(NULL == pWdaParams)
6003 {
6004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006005 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006006 VOS_ASSERT(0);
6007 vos_mem_free(wdiSetStaKeyParam);
6008 return VOS_STATUS_E_NOMEM;
6009 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006010 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006011 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006012 /* copy set STA key params to WDI structure */
6013 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
6014 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
6015 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
6016 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006017 if(setStaKeyParams->encType != eSIR_ED_NONE)
6018 {
Jeff Johnson43971f52012-07-17 12:26:56 -07006019 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07006020 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
6021 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
6022 {
6023 WDA_GetWepKeysFromCfg( pWDA,
6024 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
6025 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
6026 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
6027 }
6028 else
6029 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006030 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
6031 keyIndex++)
6032 {
6033 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
6034 setStaKeyParams->key[keyIndex].keyId;
6035 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
6036 setStaKeyParams->key[keyIndex].unicast;
6037 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
6038 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07006039 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
6040 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
6041 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
6042 setStaKeyParams->key[keyIndex].paeRole;
6043 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
6044 setStaKeyParams->key[keyIndex].keyLength;
6045 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
6046 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
6047 /* set default index to index which have key direction as WDI_TX_DEFAULT */
6048 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
6049 {
6050 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
6051 }
6052 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006053 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
6054 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07006055 }
6056 }
6057 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
6058 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006059 /* Store set key pointer, as this will be used for response */
6060 /* store Params pass it to WDI */
6061 pWdaParams->pWdaContext = pWDA;
6062 pWdaParams->wdaMsgParam = setStaKeyParams;
6063 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006064 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
6065 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006066 if(IS_WDI_STATUS_FAILURE(status))
6067 {
6068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6069 "Failure in set STA Key Req WDI API, free all the memory " );
6070 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6071 vos_mem_free(pWdaParams) ;
6072 setStaKeyParams->status = eSIR_FAILURE ;
6073 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
6074 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006075 return CONVERT_WDI2VOS_STATUS(status) ;
6076}
Jeff Johnson295189b2012-06-20 16:38:30 -07006077/*
6078 * FUNCTION: WDA_SetBcastStaKeyReqCallback
6079 * send SET Bcast STA key RSP back to PE
6080 */
6081void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
6082{
6083 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6084 tWDA_CbContext *pWDA;
6085 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006086 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006087 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006088 if(NULL == pWdaParams)
6089 {
6090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006091 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006092 VOS_ASSERT(0) ;
6093 return ;
6094 }
6095 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6096 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006097 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6098 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006099 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006100 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006101 return ;
6102}
6103
Jeff Johnson295189b2012-06-20 16:38:30 -07006104/*
6105 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
6106 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
6107 * Encryption)
6108 */
6109VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
6110 tSetStaKeyParams *setStaKeyParams )
6111{
6112 WDI_Status status = WDI_STATUS_SUCCESS ;
6113 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
6114 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
6115 sizeof(WDI_SetSTAKeyReqParamsType)) ;
6116 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006117 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07006118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006119 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006120 if(NULL == wdiSetStaKeyParam)
6121 {
6122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006123 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006124 VOS_ASSERT(0);
6125 return VOS_STATUS_E_NOMEM;
6126 }
6127 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6128 if(NULL == pWdaParams)
6129 {
6130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006131 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006132 VOS_ASSERT(0);
6133 vos_mem_free(wdiSetStaKeyParam);
6134 return VOS_STATUS_E_NOMEM;
6135 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006136 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006137 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006138 /* copy set STA key params to WDI structure */
6139 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
6140 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
6141 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
6142 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006143 if(setStaKeyParams->encType != eSIR_ED_NONE)
6144 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006145 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
6146 keyIndex++)
6147 {
6148 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
6149 setStaKeyParams->key[keyIndex].keyId;
6150 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
6151 setStaKeyParams->key[keyIndex].unicast;
6152 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
6153 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07006154 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
6155 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
6156 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
6157 setStaKeyParams->key[keyIndex].paeRole;
6158 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
6159 setStaKeyParams->key[keyIndex].keyLength;
6160 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
6161 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
6162 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006163 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
6164 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07006165 }
6166 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07006167 /* Store set key pointer, as this will be used for response */
6168 /* store Params pass it to WDI */
6169 pWdaParams->pWdaContext = pWDA;
6170 pWdaParams->wdaMsgParam = setStaKeyParams;
6171 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006172 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
6173 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006174 if(IS_WDI_STATUS_FAILURE(status))
6175 {
6176 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6177 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
6178 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6179 vos_mem_free(pWdaParams) ;
6180 setStaKeyParams->status = eSIR_FAILURE ;
6181 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
6182 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006183 return CONVERT_WDI2VOS_STATUS(status) ;
6184}
Jeff Johnson295189b2012-06-20 16:38:30 -07006185/*
6186 * FUNCTION: WDA_RemoveStaKeyReqCallback
6187 * send SET BSS key RSP back to PE
6188 */
6189void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
6190{
6191 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6192 tWDA_CbContext *pWDA;
6193 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006195 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006196 if(NULL == pWdaParams)
6197 {
6198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006199 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006200 VOS_ASSERT(0) ;
6201 return ;
6202 }
6203 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6204 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006205 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6206 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006207 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006208 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006209 return ;
6210}
6211
Jeff Johnson295189b2012-06-20 16:38:30 -07006212/*
6213 * FUNCTION: WDA_ProcessRemoveStaKeyReq
6214 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
6215 */
6216VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
6217 tRemoveStaKeyParams *removeStaKeyParams )
6218{
6219 WDI_Status status = WDI_STATUS_SUCCESS ;
6220 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
6221 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
6222 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
6223 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006224 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006225 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006226 if(NULL == wdiRemoveStaKeyParam)
6227 {
6228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006229 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006230 VOS_ASSERT(0);
6231 return VOS_STATUS_E_NOMEM;
6232 }
6233 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6234 if(NULL == pWdaParams)
6235 {
6236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006237 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006238 VOS_ASSERT(0);
6239 vos_mem_free(wdiRemoveStaKeyParam);
6240 return VOS_STATUS_E_NOMEM;
6241 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006242 /* copy remove STA key params to WDI structure*/
6243 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
6244 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
6245 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
6246 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
6247 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006248 /* Store remove key pointer, as this will be used for response */
6249 /* store Params pass it to WDI */
6250 pWdaParams->pWdaContext = pWDA;
6251 pWdaParams->wdaMsgParam = removeStaKeyParams;
6252 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006253 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
6254 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006255 if(IS_WDI_STATUS_FAILURE(status))
6256 {
6257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6258 "Failure in remove STA Key Req WDI API, free all the memory " );
6259 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6260 vos_mem_free(pWdaParams) ;
6261 removeStaKeyParams->status = eSIR_FAILURE ;
6262 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
6263 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006264 return CONVERT_WDI2VOS_STATUS(status) ;
6265}
Jeff Johnson295189b2012-06-20 16:38:30 -07006266/*
6267 * FUNCTION: WDA_IsHandleSetLinkStateReq
6268 * Update the WDA state and return the status to handle this message or not
6269 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006270WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
6271 tWDA_CbContext *pWDA,
6272 tLinkStateParams *linkStateParams)
6273{
6274 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006275 switch(linkStateParams->state)
6276 {
6277 case eSIR_LINK_PREASSOC_STATE:
6278 case eSIR_LINK_BTAMP_PREASSOC_STATE:
6279 /*
6280 * set the WDA state to PRE ASSOC
6281 * copy the BSSID into pWDA to use it in join request and return,
6282 * No need to handle these messages.
6283 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006284 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
6285 {
6286 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07006287 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006288 }
6289 else
6290 {
6291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006292 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006293 VOS_ASSERT(0);
6294 }
6295
6296 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
6297 {
6298 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07006299 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006300 }
6301 else
6302 {
6303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006304 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006305 VOS_ASSERT(0);
6306 }
6307
Jeff Johnson295189b2012-06-20 16:38:30 -07006308 /* UMAC is issuing the setlink state with PREASSOC twice (before set
6309 *channel and after ) so reset the WDA state to ready when the second
6310 * time UMAC issue the link state with PREASSOC
6311 */
6312 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
6313 {
6314 /* RESET WDA state back to WDA_READY_STATE */
6315 pWDA->wdaState = WDA_READY_STATE;
6316 }
6317 else
6318 {
6319 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
6320 }
6321 //populate linkState info in WDACbCtxt
6322 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07006323 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07006324 default:
6325 if(pWDA->wdaState != WDA_READY_STATE)
6326 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07006327 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
6328 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
6329 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
6330 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
6331 *the ASSERT in WDA_Stop during module unload.*/
6332 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
6333 {
6334 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006335 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07006336 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006337 else
6338 {
6339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07006340 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006341 status = WDA_IGNORE_SET_LINK_STATE;
6342 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006343 }
6344 break;
6345 }
6346
6347 return status;
6348}
Jeff Johnson295189b2012-06-20 16:38:30 -07006349/*
6350 * FUNCTION: WDA_SetLinkStateCallback
6351 * call back function for set link state from WDI
6352 */
6353void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
6354{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306355 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006356 tLinkStateParams *linkStateParams;
6357 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006359 "<------ %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306360 if (NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006361 {
6362 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006363 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006364 VOS_ASSERT(0) ;
6365 return ;
6366 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006367 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306368 if (NULL == pWDA)
6369 {
6370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6371 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306372 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6373 vos_mem_free(pWdaParams->wdaMsgParam);
6374 vos_mem_free(pWdaParams);
6375
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306376 VOS_ASSERT(0);
6377 return ;
6378 }
6379
Jeff Johnson295189b2012-06-20 16:38:30 -07006380 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006381 /*
6382 * In STA mode start the BA activity check timer after association
6383 * and in AP mode start BA activity check timer after BSS start */
6384 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
6385 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07006386 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
6387 ((status == WDI_STATUS_SUCCESS) &&
6388 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07006389 {
6390 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
6391 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006392 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006393 /*
6394 * No respone required for WDA_SET_LINK_STATE so free the request
6395 * param here
6396 */
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306397 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6398 vos_mem_free(pWdaParams);
6399
Jeff Johnson295189b2012-06-20 16:38:30 -07006400 return ;
6401}
Jeff Johnson295189b2012-06-20 16:38:30 -07006402/*
6403 * FUNCTION: WDA_ProcessSetLinkState
6404 * Request to WDI to set the link status.
6405 */
6406VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
6407 tLinkStateParams *linkStateParams)
6408{
6409 WDI_Status status = WDI_STATUS_SUCCESS ;
6410 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
6411 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
6412 sizeof(WDI_SetLinkReqParamsType)) ;
6413 tWDA_ReqParams *pWdaParams ;
6414 tpAniSirGlobal pMac;
6415 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
6416
6417 if(NULL == pMac)
6418 {
6419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006420 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006421 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07006422 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006423 return VOS_STATUS_E_FAILURE;
6424 }
6425
6426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006427 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006428 if(NULL == wdiSetLinkStateParam)
6429 {
6430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006431 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006432 VOS_ASSERT(0);
6433 return VOS_STATUS_E_NOMEM;
6434 }
6435 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6436 if(NULL == pWdaParams)
6437 {
6438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006439 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006440 VOS_ASSERT(0);
6441 vos_mem_free(wdiSetLinkStateParam);
6442 return VOS_STATUS_E_NOMEM;
6443 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006444 if(WDA_IGNORE_SET_LINK_STATE ==
6445 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
6446 {
6447 status = WDI_STATUS_E_FAILURE;
6448 }
6449 else
6450 {
6451 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
6452 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006453 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
6454 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006455 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
6456 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006457 pWdaParams->pWdaContext = pWDA;
6458 /* Store remove key pointer, as this will be used for response */
6459 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006460 /* store Params pass it to WDI */
6461 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
6462 /* Stop Timer only other than GO role and concurrent session */
6463 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07006464 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07006465 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
6466 {
6467 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
6468 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006469 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
6470 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006471 if(IS_WDI_STATUS_FAILURE(status))
6472 {
6473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6474 "Failure in set link state Req WDI API, free all the memory " );
6475 }
6476 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006477 if(IS_WDI_STATUS_FAILURE(status))
6478 {
6479 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07006480 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006481 vos_mem_free(pWdaParams);
6482 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006483 return CONVERT_WDI2VOS_STATUS(status) ;
6484}
Jeff Johnson295189b2012-06-20 16:38:30 -07006485/*
6486 * FUNCTION: WDA_GetStatsReqParamsCallback
6487 * send the response to PE with Stats received from WDI
6488 */
6489void WDA_GetStatsReqParamsCallback(
6490 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
6491 void* pUserData)
6492{
Jeff Johnson295189b2012-06-20 16:38:30 -07006493 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306494 vos_msg_t vosMsg;
Jeff Johnson295189b2012-06-20 16:38:30 -07006495
6496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006497 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006498 pGetPEStatsRspParams =
6499 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
6500 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
6501
6502 if(NULL == pGetPEStatsRspParams)
6503 {
6504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006505 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006506 VOS_ASSERT(0);
6507 return;
6508 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006509 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306510 pGetPEStatsRspParams->msgType = eWNI_SME_GET_STATISTICS_RSP;
Jeff Johnson295189b2012-06-20 16:38:30 -07006511 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
6512 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006513
6514 //Fill the Session Id Properly in PE
6515 pGetPEStatsRspParams->sessionId = 0;
6516 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006517 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07006518 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
6519 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07006520 vos_mem_copy( pGetPEStatsRspParams + 1,
6521 wdiGetStatsRsp + 1,
6522 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306523
6524 vosMsg.type = eWNI_SME_GET_STATISTICS_RSP;
6525 vosMsg.bodyptr = (void *)pGetPEStatsRspParams;
6526 vosMsg.bodyval = 0;
6527 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME,
6528 (vos_msg_t*)&vosMsg))
6529 {
6530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6531 "%s: fail to post eWNI_SME_GET_STATISTICS_RSP", __func__);
6532 vos_mem_free(pGetPEStatsRspParams);
6533 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006534
6535 return;
6536}
6537
Jeff Johnson295189b2012-06-20 16:38:30 -07006538/*
6539 * FUNCTION: WDA_ProcessGetStatsReq
6540 * Request to WDI to get the statistics
6541 */
6542VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
6543 tAniGetPEStatsReq *pGetStatsParams)
6544{
6545 WDI_Status status = WDI_STATUS_SUCCESS ;
6546 WDI_GetStatsReqParamsType wdiGetStatsParam;
6547 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306548 vos_msg_t vosMsg;
6549
Jeff Johnson295189b2012-06-20 16:38:30 -07006550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006551 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006552 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
6553 pGetStatsParams->staId;
6554 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
6555 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07006556 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006557 status = WDI_GetStatsReq(&wdiGetStatsParam,
6558 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006559 if(IS_WDI_STATUS_FAILURE(status))
6560 {
6561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6562 "Failure in Get Stats Req WDI API, free all the memory " );
6563 pGetPEStatsRspParams =
6564 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
6565 if(NULL == pGetPEStatsRspParams)
6566 {
6567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006568 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006569 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006570 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006571 return VOS_STATUS_E_NOMEM;
6572 }
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306573 pGetPEStatsRspParams->msgType = eWNI_SME_GET_STATISTICS_RSP;
Jeff Johnson295189b2012-06-20 16:38:30 -07006574 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
6575 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
6576 pGetPEStatsRspParams->rc = eSIR_FAILURE;
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306577
6578 vosMsg.type = eWNI_SME_GET_STATISTICS_RSP;
6579 vosMsg.bodyptr = (void *)pGetPEStatsRspParams;
6580 vosMsg.bodyval = 0;
6581 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME,
6582 (vos_msg_t*)&vosMsg))
6583 {
6584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6585 "%s: fail to post eWNI_SME_GET_STATISTICS_RSP", __func__);
6586 vos_mem_free(pGetPEStatsRspParams);
6587 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006588 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006589 /* Free the request message */
6590 vos_mem_free(pGetStatsParams);
6591 return CONVERT_WDI2VOS_STATUS(status);
6592}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006593
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08006594#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006595/*
6596 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
6597 * send the response to PE with roam Rssi received from WDI
6598 */
6599void WDA_GetRoamRssiReqParamsCallback(
6600 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
6601 void* pUserData)
6602{
6603 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6604 tWDA_CbContext *pWDA = NULL;
6605 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
6606 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
6607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6608 "<------ %s " ,__func__);
6609 if(NULL == pWdaParams)
6610 {
6611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6612 "%s: pWdaParams received NULL", __func__);
6613 VOS_ASSERT(0) ;
6614 return ;
6615 }
6616 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6617 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
6618
6619 if(NULL == pGetRoamRssiReqParams)
6620 {
6621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6622 "%s: pGetRoamRssiReqParams received NULL", __func__);
6623 VOS_ASSERT(0);
6624 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6625 vos_mem_free(pWdaParams);
6626 return ;
6627 }
6628 pGetRoamRssiRspParams =
6629 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
6630
6631 if(NULL == pGetRoamRssiRspParams)
6632 {
6633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6634 "%s: VOS MEM Alloc Failure", __func__);
6635 VOS_ASSERT(0);
6636 return;
6637 }
6638 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
6639 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006640 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006641 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
6642 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
6643
6644 /* Assign get roam rssi req (backup) in to the response */
6645 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
6646
6647 /* free WDI command buffer */
6648 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6649 vos_mem_free(pWdaParams) ;
6650
6651 /* send response to UMAC*/
6652 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
6653
6654 return;
6655}
6656
6657
6658
6659/*
6660 * FUNCTION: WDA_ProcessGetRoamRssiReq
6661 * Request to WDI to get the statistics
6662 */
6663VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
6664 tAniGetRssiReq *pGetRoamRssiParams)
6665{
6666 WDI_Status status = WDI_STATUS_SUCCESS ;
6667 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
6668 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
6669 tWDA_ReqParams *pWdaParams = NULL;
6670
6671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6672 "------> %s " ,__func__);
6673 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
6674 pGetRoamRssiParams->staId;
6675 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
6676
6677 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6678 if(NULL == pWdaParams)
6679 {
6680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6681 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05306682 vos_mem_free(pGetRoamRssiParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006683 VOS_ASSERT(0);
6684 return VOS_STATUS_E_NOMEM;
6685 }
6686
6687 /* Store Init Req pointer, as this will be used for response */
6688 pWdaParams->pWdaContext = pWDA;
6689
6690 /* Take Get roam Rssi req backup as it stores the callback to be called after
6691 receiving the response */
6692 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
6693 pWdaParams->wdaWdiApiMsgParam = NULL;
6694
6695 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
6696 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
6697 if(IS_WDI_STATUS_FAILURE(status))
6698 {
6699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6700 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
6701 pGetRoamRssiRspParams =
6702 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
6703 if(NULL == pGetRoamRssiRspParams)
6704 {
6705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6706 "%s: VOS MEM Alloc Failure", __func__);
6707 VOS_ASSERT(0);
Abhishek Singh1e2bfa32014-01-02 15:44:15 +05306708 vos_mem_free(pGetRoamRssiParams);
6709 vos_mem_free(pWdaParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006710 return VOS_STATUS_E_NOMEM;
6711 }
6712 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
6713 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
6714 pGetRoamRssiRspParams->rssi = 0;
6715 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
6716 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
6717 (void *)pGetRoamRssiRspParams, 0) ;
6718 }
6719 return CONVERT_WDI2VOS_STATUS(status);
6720}
6721#endif
6722
6723
Jeff Johnson295189b2012-06-20 16:38:30 -07006724/*
6725 * FUNCTION: WDA_UpdateEDCAParamCallback
6726 * call back function for Update EDCA params from WDI
6727 */
6728void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
6729{
6730 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6731 tEdcaParams *pEdcaParams;
6732
6733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006734 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006735 if(NULL == pWdaParams)
6736 {
6737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006738 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006739 VOS_ASSERT(0) ;
6740 return ;
6741 }
6742 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006743 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6744 vos_mem_free(pWdaParams);
6745 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006746 return ;
6747}
Jeff Johnson295189b2012-06-20 16:38:30 -07006748/*
6749 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
6750 * Request to WDI to Update the EDCA params.
6751 */
6752VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
6753 tEdcaParams *pEdcaParams)
6754{
6755 WDI_Status status = WDI_STATUS_SUCCESS ;
6756 WDI_UpdateEDCAParamsType *wdiEdcaParam =
6757 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
6758 sizeof(WDI_UpdateEDCAParamsType)) ;
6759 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006761 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006762 if(NULL == wdiEdcaParam)
6763 {
6764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006765 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006766 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006767 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006768 return VOS_STATUS_E_NOMEM;
6769 }
6770 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6771 if(NULL == pWdaParams)
6772 {
6773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006774 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006775 VOS_ASSERT(0);
6776 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006777 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006778 return VOS_STATUS_E_NOMEM;
6779 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006780 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
Bansidhar Gopalachari5dcf9e02013-07-29 19:53:58 -07006781 /*
6782 Since firmware is not using highperformance flag, we have removed
6783 this flag from wdiEDCAInfo structure to match sizeof the structure
6784 between host and firmware.In future if we are planning to use
6785 highperformance flag then Please define this flag in wdiEDCAInfo
6786 structure, update it here and send it to firmware. i.e.
6787 Following is the original line which we removed as part of the fix
6788 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid =
6789 pEdcaParams->highPerformance;
6790 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006791 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
6792 &pEdcaParams->acbe);
6793 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
6794 &pEdcaParams->acbk);
6795 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
6796 &pEdcaParams->acvi);
6797 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
6798 &pEdcaParams->acvo);
6799 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006800 pWdaParams->pWdaContext = pWDA;
6801 /* Store remove key pointer, as this will be used for response */
6802 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006803 /* store Params pass it to WDI */
6804 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006805 status = WDI_UpdateEDCAParams(wdiEdcaParam,
6806 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006807 if(IS_WDI_STATUS_FAILURE(status))
6808 {
6809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6810 "Failure in Update EDCA Params WDI API, free all the memory " );
6811 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6812 vos_mem_free(pWdaParams);
6813 vos_mem_free(pEdcaParams);
6814 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006815 return CONVERT_WDI2VOS_STATUS(status) ;
6816}
Jeff Johnson295189b2012-06-20 16:38:30 -07006817/*
6818 * FUNCTION: WDA_AddBAReqCallback
6819 * send ADD BA RSP back to PE
6820 */
6821void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
6822 void* pUserData)
6823{
6824 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6825 tWDA_CbContext *pWDA;
6826 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006828 "<------ %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306829 if (NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006830 {
6831 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006832 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006833 VOS_ASSERT(0) ;
6834 return ;
6835 }
6836 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306837 if (NULL == pWDA)
6838 {
6839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6840 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306841 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6842 vos_mem_free(pWdaParams->wdaMsgParam);
6843 vos_mem_free(pWdaParams);
6844
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306845 VOS_ASSERT(0);
6846 return ;
6847 }
6848
Jeff Johnson295189b2012-06-20 16:38:30 -07006849 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006850 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6851 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006852 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006853 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006854 return ;
6855}
6856
Jeff Johnson295189b2012-06-20 16:38:30 -07006857/*
6858 * FUNCTION: WDA_ProcessAddBAReq
6859 * Request to WDI to Update the ADDBA REQ params.
6860 */
6861VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
Abhishek Singh01c73d12015-03-12 15:13:44 +05306862 tANI_U16 baSessionID, tANI_U8 staIdx, tANI_U8 ucWinSize, tAddBAParams *pAddBAReqParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006863{
Jeff Johnson43971f52012-07-17 12:26:56 -07006864 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07006865 WDI_AddBAReqParamsType *wdiAddBAReqParam =
6866 (WDI_AddBAReqParamsType *)vos_mem_malloc(
6867 sizeof(WDI_AddBAReqParamsType)) ;
6868 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006869 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006870 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006871 if(NULL == wdiAddBAReqParam)
6872 {
6873 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006874 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006875 VOS_ASSERT(0);
6876 return VOS_STATUS_E_NOMEM;
6877 }
6878 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6879 if(NULL == pWdaParams)
6880 {
6881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006882 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006883 VOS_ASSERT(0);
6884 vos_mem_free(wdiAddBAReqParam);
6885 return VOS_STATUS_E_NOMEM;
6886 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006887 do
6888 {
6889 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006890 wdiAddBaInfo->ucSTAIdx = staIdx ;
6891 wdiAddBaInfo->ucBaSessionID = baSessionID ;
Abhishek Singh01c73d12015-03-12 15:13:44 +05306892 wdiAddBaInfo->ucWinSize = ucWinSize ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006893 } while(0) ;
6894 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006895 pWdaParams->pWdaContext = pWDA;
6896 /* store Params pass it to WDI */
6897 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
6898 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07006899 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
6900 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006901
Jeff Johnson43971f52012-07-17 12:26:56 -07006902 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07006903 {
6904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07006905 "Failure in ADD BA REQ Params WDI API, free all the memory" );
6906 status = CONVERT_WDI2VOS_STATUS(wstatus);
6907 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006908 vos_mem_free(pWdaParams);
6909 pAddBAReqParams->status = eSIR_FAILURE;
6910 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6911 }
Jeff Johnson43971f52012-07-17 12:26:56 -07006912 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07006913}
Jeff Johnson295189b2012-06-20 16:38:30 -07006914/*
6915 * FUNCTION: WDA_AddBASessionReqCallback
6916 * send ADD BA SESSION RSP back to PE/(or TL)
6917 */
6918void WDA_AddBASessionReqCallback(
6919 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
6920{
6921 VOS_STATUS status = VOS_STATUS_SUCCESS ;
6922 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306923 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006924 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006926 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006927 if(NULL == pWdaParams)
6928 {
6929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006930 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006931 VOS_ASSERT(0) ;
6932 return ;
6933 }
6934 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306935 if (NULL == pWDA)
6936 {
6937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6938 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306939 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6940 vos_mem_free(pWdaParams->wdaMsgParam);
6941 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306942 VOS_ASSERT(0);
6943 return ;
6944 }
6945
Jeff Johnson295189b2012-06-20 16:38:30 -07006946 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006947 if( NULL == pAddBAReqParams )
6948 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006950 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006951 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006952 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6953 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006954 return ;
6955 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006956 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6957 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006958 /*
Deepthi Gowriba794fc2015-03-27 17:14:01 +05306959 * if BA direction is for recipient, update TL with BA session params and send
Jeff Johnson295189b2012-06-20 16:38:30 -07006960 * another request to HAL(/WDI) (ADD_BA_REQ)
6961 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006962 if((VOS_STATUS_SUCCESS ==
6963 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
Deepthi Gowriba794fc2015-03-27 17:14:01 +05306964 (eBA_RECIPIENT == pAddBAReqParams->baDirection))
Jeff Johnson295189b2012-06-20 16:38:30 -07006965 {
6966 /* Update TL with BA info received from HAL/WDI */
6967 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
6968 wdiAddBaSession->usBaSessionID,
6969 wdiAddBaSession->ucSTAIdx,
6970 wdiAddBaSession->ucBaTID,
6971 wdiAddBaSession->ucBaBufferSize,
6972 wdiAddBaSession->ucWinSize,
6973 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07006974 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
Abhishek Singh01c73d12015-03-12 15:13:44 +05306975 wdiAddBaSession->ucSTAIdx,
6976 wdiAddBaSession->ucWinSize, pAddBAReqParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006977 }
6978 else
6979 {
6980 pAddBAReqParams->status =
6981 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
6982
6983 /* Setting Flag to indicate that Set BA is success */
6984 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
6985 {
6986 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
6987 tANI_U8 tid = wdiAddBaSession->ucBaTID;
6988 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
6989 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006990 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6991 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006992 /*Reset the WDA state to READY */
6993 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006994 return ;
6995}
6996
Jeff Johnson295189b2012-06-20 16:38:30 -07006997/*
6998 * FUNCTION: WDA_ProcessAddBASessionReq
6999 * Request to WDI to Update the ADDBA REQ params.
7000 */
7001VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
7002 tAddBAParams *pAddBAReqParams)
7003{
7004 WDI_Status status = WDI_STATUS_SUCCESS ;
7005 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
7006 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
7007 sizeof(WDI_AddBASessionReqParamsType)) ;
7008 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07007009 WLANTL_STAStateType tlSTAState = 0;
7010
Jeff Johnson295189b2012-06-20 16:38:30 -07007011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007012 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007013 if(NULL == wdiAddBASessionReqParam)
7014 {
7015 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007016 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007017 VOS_ASSERT(0);
7018 return VOS_STATUS_E_NOMEM;
7019 }
7020 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7021 if(NULL == pWdaParams)
7022 {
7023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007024 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007025 VOS_ASSERT(0);
7026 vos_mem_free(wdiAddBASessionReqParam);
7027 return VOS_STATUS_E_NOMEM;
7028 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007029 /*
7030 * Populate ADD BA parameters and pass these paarmeters to WDI.
7031 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
7032 * the state to track if these is BA recipient case or BA initiator
7033 * case.
7034 */
7035 do
7036 {
7037 WDI_AddBASessionReqinfoType *wdiBAInfoType =
7038 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
7039 /* vos_mem_copy(wdiBAInfoType->macBSSID,
7040 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
7041 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
7042 vos_mem_copy(wdiBAInfoType->macPeerAddr,
7043 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007044 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07007045 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
7046 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
7047 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
7048 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
7049 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Deepthi Gowriba794fc2015-03-27 17:14:01 +05307050
Jeff Johnson295189b2012-06-20 16:38:30 -07007051 }while(0) ;
7052 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007053 pWdaParams->pWdaContext = pWDA;
7054 /* Store ADD BA pointer, as this will be used for response */
7055 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
7056 /* store Params pass it to WDI */
7057 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07007058
7059 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
7060 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
7061 */
7062 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
7063 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
7064 {
7065 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007066 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.", pAddBAReqParams->staIdx, tlSTAState );
Hoonki Leea0631ce2013-04-15 16:59:08 -07007067 status = WDI_STATUS_E_NOT_ALLOWED;
7068 pAddBAReqParams->status =
7069 CONVERT_WDI2SIR_STATUS(status) ;
7070 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
7071 /*Reset the WDA state to READY */
7072 pWDA->wdaState = WDA_READY_STATE;
7073 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7074 vos_mem_free(pWdaParams);
7075
7076 return CONVERT_WDI2VOS_STATUS(status) ;
7077 }
7078
Jeff Johnson295189b2012-06-20 16:38:30 -07007079 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
7080 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007081 if(IS_WDI_STATUS_FAILURE(status))
7082 {
7083 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007084 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d", status);
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07007085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007086 "Send ADD BA failure response to PE");
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07007087 pAddBAReqParams->status =
7088 CONVERT_WDI2SIR_STATUS(status) ;
7089 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07007090 /*Reset the WDA state to READY */
7091 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07007092 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007093 vos_mem_free(pWdaParams);
7094 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007095 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007096}
Jeff Johnson295189b2012-06-20 16:38:30 -07007097/*
7098 * FUNCTION: WDA_DelBANotifyTL
7099 * send DEL BA IND to TL
7100 */
7101void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
7102 tDelBAParams *pDelBAReqParams)
7103{
7104 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
7105 //tSirMsgQ msg;
7106 vos_msg_t vosMsg;
7107 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07007108 if(NULL == pDelBAInd)
7109 {
7110 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007111 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007112 VOS_ASSERT(0) ;
7113 return;
7114 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007115 pDelBAInd->mesgType = WDA_DELETEBA_IND;
7116 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
7117 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
7118 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07007119
Jeff Johnson295189b2012-06-20 16:38:30 -07007120
7121 vosMsg.type = WDA_DELETEBA_IND;
7122 vosMsg.bodyptr = pDelBAInd;
7123 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
7124 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
7125 {
7126 vosStatus = VOS_STATUS_E_BADMSG;
7127 }
7128}
Jeff Johnson295189b2012-06-20 16:38:30 -07007129/*
7130 * FUNCTION: WDA_DelBAReqCallback
7131 * send DEL BA RSP back to PE
7132 */
7133void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
7134{
7135 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7136 tWDA_CbContext *pWDA;
7137 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007139 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007140 if(NULL == pWdaParams)
7141 {
7142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007143 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007144 VOS_ASSERT(0) ;
7145 return ;
7146 }
7147 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307148
Jeff Johnson295189b2012-06-20 16:38:30 -07007149 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007150 /* Notify TL about DEL BA in case of recipinet */
7151 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
7152 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
7153 {
7154 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
7155 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007156 /*
7157 * No respone required for WDA_DELBA_IND so just free the request
7158 * param here
7159 */
7160 vos_mem_free(pDelBAReqParams);
7161 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7162 vos_mem_free(pWdaParams);
7163 return ;
7164}
7165
Jeff Johnson295189b2012-06-20 16:38:30 -07007166/*
7167 * FUNCTION: WDA_ProcessDelBAReq
7168 * Request to WDI to Update the DELBA REQ params.
7169 */
7170VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
7171 tDelBAParams *pDelBAReqParams)
7172{
7173 WDI_Status status = WDI_STATUS_SUCCESS ;
7174 WDI_DelBAReqParamsType *wdiDelBAReqParam =
7175 (WDI_DelBAReqParamsType *)vos_mem_malloc(
7176 sizeof(WDI_DelBAReqParamsType)) ;
7177 tWDA_ReqParams *pWdaParams ;
7178 tANI_U16 staIdx = 0;
7179 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07007180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007181 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007182 if(NULL == wdiDelBAReqParam)
7183 {
7184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007185 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007186 VOS_ASSERT(0);
7187 return VOS_STATUS_E_NOMEM;
7188 }
7189 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7190 if(NULL == pWdaParams)
7191 {
7192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007193 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007194 VOS_ASSERT(0);
7195 vos_mem_free(wdiDelBAReqParam);
7196 return VOS_STATUS_E_NOMEM;
7197 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007198 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
7199 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
7200 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
7201 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007202 pWdaParams->pWdaContext = pWDA;
7203 /* Store DEL BA pointer, as this will be used for response */
7204 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007205 /* store Params pass it to WDI */
7206 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007207 /* if BA exchange over the air is failed, clear this tid in BaBitmap
7208 * maintained in WDA, so that WDA can retry for another BA session
7209 */
7210 staIdx = pDelBAReqParams->staIdx;
7211 tid = pDelBAReqParams->baTID;
7212 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07007213 status = WDI_DelBAReq(wdiDelBAReqParam,
7214 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007215 if(IS_WDI_STATUS_FAILURE(status))
7216 {
7217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7218 "Failure in DEL BA REQ Params WDI API, free all the memory " );
7219 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7220 vos_mem_free(pWdaParams->wdaMsgParam);
7221 vos_mem_free(pWdaParams);
7222 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007223 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007224}
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007225
7226/*
7227 * FUNCTION: WDA_UpdateChReqCallback
7228 *
7229 */
7230void WDA_UpdateChReqCallback(WDI_Status status, void* pUserData)
7231{
Siddharth Bhala006c122014-05-03 12:13:27 +05307232 tWDA_ReqParams *pWdaParams;
7233 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
7234 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
7235 WDI_UpdateChannelReqinfoType *pChanInfoType;
7236 tSirUpdateChanList *pChanList;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007237
7238 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7239 "<------ %s " ,__func__);
Siddharth Bhala006c122014-05-03 12:13:27 +05307240 if(NULL == pUserData)
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007241 {
7242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhala006c122014-05-03 12:13:27 +05307243 "%s: pUserData received NULL", __func__);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007244 VOS_ASSERT(0);
7245 return;
7246 }
7247
Siddharth Bhala006c122014-05-03 12:13:27 +05307248 pWdaParams = (tWDA_ReqParams *)pUserData;
7249 pwdiUpdateChReqParam =
7250 (WDI_UpdateChReqParamsType *)pWdaParams->wdaWdiApiMsgParam;
7251 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
7252 pChanInfoType = pwdiUpdateChanReqType->pchanParam;
7253 pChanList = (tSirUpdateChanList *)pWdaParams->wdaMsgParam;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007254 /*
7255 * currently there is no response message is expected between PE and
7256 * WDA, Failure return from WDI is a ASSERT condition
7257 */
7258 vos_mem_free(pChanInfoType);
7259 vos_mem_free(pChanList);
7260 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7261 vos_mem_free(pWdaParams);
7262
7263 return;
7264}
7265
7266/*
7267 * FUNCTION: WDA_ProcessUpdateChannelList
7268 * Request to WDI to Update the ChannelList params.
7269 */
7270VOS_STATUS WDA_ProcessUpdateChannelList(tWDA_CbContext *pWDA,
7271 tSirUpdateChanList *pChanList)
7272{
7273 WDI_Status status = WDI_STATUS_SUCCESS;
7274 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
7275 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
7276 WDI_UpdateChannelReqinfoType *pChanInfoType;
7277 tWDA_ReqParams *pWdaParams;
7278 wpt_uint8 i;
7279
7280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7281 "------> %s " ,__func__);
7282 if(NULL == pChanList)
7283 {
7284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7285 "%s: NULL pChanList", __func__);
7286 VOS_ASSERT(0);
7287 return VOS_STATUS_E_INVAL;
7288 }
7289
7290 if(!WDA_getFwWlanFeatCaps(UPDATE_CHANNEL_LIST))
7291 {
Ratheesh S P36dbc932015-08-07 14:28:57 +05307292 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007293 "Update channel list capability Not Supported");
7294 vos_mem_free(pChanList);
7295 return VOS_STATUS_E_INVAL;
7296 }
7297
7298 pwdiUpdateChReqParam = (WDI_UpdateChReqParamsType *)vos_mem_malloc(
7299 sizeof(WDI_UpdateChReqParamsType));
7300 if(NULL == pwdiUpdateChReqParam)
7301 {
7302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7303 "%s: VOS MEM Alloc Failed for WDI_UpdateChReqParamsType",
7304 __func__);
7305 VOS_ASSERT(0);
7306 vos_mem_free(pChanList);
7307 return VOS_STATUS_E_NOMEM;
7308 }
7309 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
7310 pChanInfoType = (WDI_UpdateChannelReqinfoType *)
7311 vos_mem_malloc(sizeof(WDI_UpdateChannelReqinfoType) *
7312 pChanList->numChan);
7313 if(NULL == pChanInfoType)
7314 {
7315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7316 "%s: VOS MEM Alloc Failure", __func__);
7317 VOS_ASSERT(0);
7318 vos_mem_free(pChanList);
7319 vos_mem_free(pwdiUpdateChReqParam);
7320 return VOS_STATUS_E_NOMEM;
7321 }
7322 vos_mem_zero(pChanInfoType, sizeof(WDI_UpdateChannelReqinfoType)
7323 * pChanList->numChan);
7324 pwdiUpdateChanReqType->pchanParam = pChanInfoType;
7325
7326 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7327 if(NULL == pWdaParams)
7328 {
7329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7330 "%s: VOS MEM Alloc Failure", __func__);
7331 VOS_ASSERT(0);
7332 vos_mem_free(pChanList);
7333 vos_mem_free(pChanInfoType);
7334 vos_mem_free(pwdiUpdateChReqParam);
7335 return VOS_STATUS_E_NOMEM;
7336 }
7337 pwdiUpdateChanReqType->numchan = pChanList->numChan;
7338
7339 for(i = 0; i < pwdiUpdateChanReqType->numchan; i++)
7340 {
7341 pChanInfoType->mhz =
7342 vos_chan_to_freq(pChanList->chanParam[i].chanId);
7343
7344 pChanInfoType->band_center_freq1 = pChanInfoType->mhz;
7345 pChanInfoType->band_center_freq2 = 0;
7346
7347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7348 "chan[%d] = %u", i, pChanInfoType->mhz);
7349 if (pChanList->chanParam[i].dfsSet)
7350 {
7351 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_PASSIVE);
7352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7353 "chan[%d] DFS[%d]", pChanList->chanParam[i].chanId,
7354 pChanList->chanParam[i].dfsSet);
7355 }
7356
7357 if (pChanInfoType->mhz < WDA_2_4_GHZ_MAX_FREQ)
7358 {
7359 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11G);
7360 }
7361 else
7362 {
7363 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11A);
7364 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_HT);
7365 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_VHT);
7366 }
7367
7368 WDA_SET_CHANNEL_MAX_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
7369 WDA_SET_CHANNEL_REG_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
Sachin Ahujacb64fc82015-01-12 17:01:05 +05307370 WDA_SET_CUURENT_REG_DOMAIN(pChanInfoType, pChanList->regId);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007371 pChanInfoType++;
7372 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007373 pwdiUpdateChReqParam->wdiReqStatusCB = NULL;
7374 pWdaParams->pWdaContext = pWDA;
7375 pWdaParams->wdaMsgParam = (void *)pChanList;
7376 /* store Params pass it to WDI */
7377 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiUpdateChReqParam;
7378 status = WDI_UpdateChannelReq(pwdiUpdateChReqParam,
7379 (WDI_UpdateChannelRspCb)WDA_UpdateChReqCallback, pWdaParams);
7380 if(IS_WDI_STATUS_FAILURE(status))
7381 {
7382 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7383 "Failure in Update Channel REQ Params WDI API, free all the memory");
7384 vos_mem_free(pwdiUpdateChanReqType->pchanParam);
7385 vos_mem_free(pwdiUpdateChReqParam);
7386 vos_mem_free(pWdaParams->wdaMsgParam);
7387 vos_mem_free(pWdaParams);
7388 }
7389 return CONVERT_WDI2VOS_STATUS(status);
7390}
7391
Jeff Johnson295189b2012-06-20 16:38:30 -07007392/*
7393 * FUNCTION: WDA_AddTSReqCallback
7394 * send ADD TS RSP back to PE
7395 */
7396void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
7397{
7398 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307399 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007400 tAddTsParams *pAddTsReqParams;
7401
7402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007403 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007404 if(NULL == pWdaParams)
7405 {
7406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007407 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007408 VOS_ASSERT(0) ;
7409 return ;
7410 }
7411 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307412 if (NULL == pWDA)
7413 {
7414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7415 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307416 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7417 vos_mem_free(pWdaParams->wdaMsgParam);
7418 vos_mem_free(pWdaParams);
7419
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307420 VOS_ASSERT(0);
7421 return ;
7422 }
7423
Jeff Johnson295189b2012-06-20 16:38:30 -07007424 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
7425 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7426 vos_mem_free(pWdaParams);
7427
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007428 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007429 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007430 return ;
7431}
7432
Jeff Johnson295189b2012-06-20 16:38:30 -07007433/*
7434 * FUNCTION: WDA_ProcessAddTSReq
7435 * Request to WDI to Update the ADD TS REQ params.
7436 */
7437VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
7438 tAddTsParams *pAddTsReqParams)
7439{
7440 WDI_Status status = WDI_STATUS_SUCCESS ;
7441 WDI_AddTSReqParamsType *wdiAddTSReqParam =
7442 (WDI_AddTSReqParamsType *)vos_mem_malloc(
7443 sizeof(WDI_AddTSReqParamsType)) ;
7444 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007446 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007447 if(NULL == wdiAddTSReqParam)
7448 {
7449 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007450 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007451 VOS_ASSERT(0);
7452 return VOS_STATUS_E_NOMEM;
7453 }
7454 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7455 if(NULL == pWdaParams)
7456 {
7457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007458 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007459 VOS_ASSERT(0);
7460 vos_mem_free(wdiAddTSReqParam);
7461 return VOS_STATUS_E_NOMEM;
7462 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007463 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
7464 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07007465 //TS IE
7466 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
7467 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
7468 pAddTsReqParams->tspec.length;
7469
7470 //TS IE : TS INFO : TRAFFIC
7471 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
7472 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
7473 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
7474 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
7475 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
7476 pAddTsReqParams->tspec.tsinfo.traffic.psb;
7477 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
7478 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
7479 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
7480 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
7481 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
7482 pAddTsReqParams->tspec.tsinfo.traffic.direction;
7483 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
7484 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
7485 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
7486 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
7487
7488 //TS IE : TS INFO : SCHEDULE
7489 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
7490 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
7491 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
7492 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07007493 //TS IE
7494 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
7495 pAddTsReqParams->tspec.nomMsduSz;
7496 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
7497 pAddTsReqParams->tspec.maxMsduSz;
7498 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
7499 pAddTsReqParams->tspec.minSvcInterval;
7500 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
7501 pAddTsReqParams->tspec.maxSvcInterval;
7502 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
7503 pAddTsReqParams->tspec.inactInterval;
7504 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
7505 pAddTsReqParams->tspec.suspendInterval;
7506 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
7507 pAddTsReqParams->tspec.svcStartTime;
7508 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
7509 pAddTsReqParams->tspec.minDataRate;
7510 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
7511 pAddTsReqParams->tspec.meanDataRate;
7512 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
7513 pAddTsReqParams->tspec.peakDataRate;
7514 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
7515 pAddTsReqParams->tspec.maxBurstSz;
7516 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
7517 pAddTsReqParams->tspec.delayBound;
7518 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
7519 pAddTsReqParams->tspec.minPhyRate;
7520 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
7521 pAddTsReqParams->tspec.surplusBw;
7522 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
7523 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07007524 /* TODO: tAddTsParams doesn't have the following fields */
7525#if 0
7526 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
7527 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
7528 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
7529 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
7530#endif
7531 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
7532
7533 pWdaParams->pWdaContext = pWDA;
7534 /* Store ADD TS pointer, as this will be used for response */
7535 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007536 /* store Params pass it to WDI */
7537 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007538 status = WDI_AddTSReq(wdiAddTSReqParam,
7539 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007540 if(IS_WDI_STATUS_FAILURE(status))
7541 {
7542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7543 "Failure in ADD TS REQ Params WDI API, free all the memory " );
7544 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7545 vos_mem_free(pWdaParams);
7546 pAddTsReqParams->status = eSIR_FAILURE ;
7547 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
7548 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007549 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007550}
7551
Jeff Johnson295189b2012-06-20 16:38:30 -07007552/*
7553 * FUNCTION: WDA_DelTSReqCallback
7554 * send DEL TS RSP back to PE
7555 */
7556void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
7557{
7558 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007560 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007561 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7562 vos_mem_free(pWdaParams->wdaMsgParam) ;
7563 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007564 /*
7565 * No respone required for WDA_DEL_TS_REQ so just free the request
7566 * param here
7567 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007568 return ;
7569}
7570
Jeff Johnson295189b2012-06-20 16:38:30 -07007571/*
7572 * FUNCTION: WDA_ProcessDelTSReq
7573 * Request to WDI to Update the DELTS REQ params.
7574 */
7575VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
7576 tDelTsParams *pDelTSReqParams)
7577{
7578 WDI_Status status = WDI_STATUS_SUCCESS ;
7579 WDI_DelTSReqParamsType *wdiDelTSReqParam =
7580 (WDI_DelTSReqParamsType *)vos_mem_malloc(
7581 sizeof(WDI_DelTSReqParamsType)) ;
7582 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007584 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007585 if(NULL == wdiDelTSReqParam)
7586 {
7587 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007588 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007589 VOS_ASSERT(0);
7590 return VOS_STATUS_E_NOMEM;
7591 }
7592 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7593 if(NULL == pWdaParams)
7594 {
7595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007596 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007597 VOS_ASSERT(0);
7598 vos_mem_free(wdiDelTSReqParam);
7599 return VOS_STATUS_E_NOMEM;
7600 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007601 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
7602 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
7603 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
7604 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
7605 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007606 pWdaParams->pWdaContext = pWDA;
7607 /* Store DEL TS pointer, as this will be used for response */
7608 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007609 /* store Params pass it to WDI */
7610 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007611 status = WDI_DelTSReq(wdiDelTSReqParam,
7612 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007613 if(IS_WDI_STATUS_FAILURE(status))
7614 {
7615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7616 "Failure in DEL TS REQ Params WDI API, free all the memory " );
7617 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7618 vos_mem_free(pWdaParams->wdaMsgParam);
7619 vos_mem_free(pWdaParams);
7620 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007621 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007622}
Jeff Johnson295189b2012-06-20 16:38:30 -07007623/*
7624 * FUNCTION: WDA_UpdateBeaconParamsCallback
7625 * Free the memory. No need to send any response to PE in this case
7626 */
7627void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
7628{
7629 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007631 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007632 if(NULL == pWdaParams)
7633 {
7634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007635 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007636 VOS_ASSERT(0) ;
7637 return ;
7638 }
7639 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7640 vos_mem_free(pWdaParams->wdaMsgParam) ;
7641 vos_mem_free(pWdaParams);
7642 /*
7643 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
7644 * param here
7645 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007646 return ;
7647}
Jeff Johnson295189b2012-06-20 16:38:30 -07007648/*
7649 * FUNCTION: WDA_ProcessUpdateBeaconParams
7650 * Request to WDI to send the beacon parameters to HAL to update the Hardware
7651 */
7652VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
7653 tUpdateBeaconParams *pUpdateBeaconParams)
7654{
7655 WDI_Status status = WDI_STATUS_SUCCESS ;
7656 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
7657 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
7658 sizeof(WDI_UpdateBeaconParamsType)) ;
7659 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007661 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007662 if(NULL == wdiUpdateBeaconParams)
7663 {
7664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007665 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007666 VOS_ASSERT(0);
7667 return VOS_STATUS_E_NOMEM;
7668 }
7669 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7670 if(NULL == pWdaParams)
7671 {
7672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007673 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007674 VOS_ASSERT(0);
7675 vos_mem_free(wdiUpdateBeaconParams);
7676 return VOS_STATUS_E_NOMEM;
7677 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007678 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
7679 pUpdateBeaconParams->bssIdx;
7680 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
7681 pUpdateBeaconParams->fShortPreamble;
7682 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
7683 pUpdateBeaconParams->fShortSlotTime;
7684 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
7685 pUpdateBeaconParams->beaconInterval;
7686 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
7687 pUpdateBeaconParams->llaCoexist;
7688 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
7689 pUpdateBeaconParams->llbCoexist;
7690 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
7691 pUpdateBeaconParams->llgCoexist;
7692 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
7693 pUpdateBeaconParams->ht20MhzCoexist;
7694 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
7695 pUpdateBeaconParams->llnNonGFCoexist;
7696 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
7697 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
7698 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
7699 pUpdateBeaconParams->fRIFSMode;
7700 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
7701 pUpdateBeaconParams->paramChangeBitmap;
7702 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
7703
7704 pWdaParams->pWdaContext = pWDA;
7705 /* Store UpdateBeacon Req pointer, as this will be used for response */
7706 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007707 /* store Params pass it to WDI */
7708 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007709 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
7710 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
7711 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007712 if(IS_WDI_STATUS_FAILURE(status))
7713 {
7714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7715 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
7716 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7717 vos_mem_free(pWdaParams->wdaMsgParam);
7718 vos_mem_free(pWdaParams);
7719 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007720 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007721}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08007722#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -07007723/*
7724 * FUNCTION: WDA_TSMStatsReqCallback
7725 * send TSM Stats RSP back to PE
7726 */
7727void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
7728{
7729 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7730 tWDA_CbContext *pWDA = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007731 tpAniGetTsmStatsRsp pTsmRspParams = NULL;
7732 tpAniGetTsmStatsReq pGetTsmStatsReqParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007733
7734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007735 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007736 if(NULL == pWdaParams)
7737 {
7738 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007739 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007740 VOS_ASSERT(0) ;
7741 return ;
7742 }
7743 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307744 if (NULL == pWDA)
7745 {
7746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7747 "%s:pWDA is NULL", __func__);
7748 VOS_ASSERT(0);
7749 return ;
7750 }
7751
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007752 pGetTsmStatsReqParams = (tAniGetTsmStatsReq *)pWdaParams->wdaMsgParam;
7753
7754 if(NULL == pGetTsmStatsReqParams)
7755 {
7756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7757 "%s: pGetTsmStatsReqParams received NULL", __func__);
7758 VOS_ASSERT(0);
7759 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7760 vos_mem_free(pWdaParams);
7761 return;
7762 }
7763
7764 pTsmRspParams =
7765 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
Jeff Johnson295189b2012-06-20 16:38:30 -07007766 if( NULL == pTsmRspParams )
7767 {
7768 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007769 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007770 VOS_ASSERT( 0 );
7771 return ;
7772 }
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007773 vos_mem_set(pTsmRspParams, sizeof(tAniGetTsmStatsRsp), 0);
7774 pTsmRspParams->rc = pwdiTSMStatsRspParams->wdiStatus;
7775 pTsmRspParams->staId = pGetTsmStatsReqParams->staId;
7776
Jeff Johnson295189b2012-06-20 16:38:30 -07007777 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
7778 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
7779 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
7780 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
7781 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
7782 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
7783 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
7784 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
7785 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
7786 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007787
7788 /* Assign get tsm stats req req (backup) in to the response */
7789 pTsmRspParams->tsmStatsReq = pGetTsmStatsReqParams;
7790
7791 /* free WDI command buffer */
7792 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7793 vos_mem_free(pWdaParams);
7794
Jeff Johnson295189b2012-06-20 16:38:30 -07007795 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007796 return ;
7797}
7798
7799
Jeff Johnson295189b2012-06-20 16:38:30 -07007800/*
7801 * FUNCTION: WDA_ProcessTsmStatsReq
7802 * Request to WDI to get the TSM Stats params.
7803 */
7804VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007805 tpAniGetTsmStatsReq pTsmStats)
Jeff Johnson295189b2012-06-20 16:38:30 -07007806{
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007807 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007808 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007809 tWDA_ReqParams *pWdaParams = NULL;
7810 tAniGetTsmStatsRsp *pGetTsmStatsRspParams = NULL;
7811
Jeff Johnson295189b2012-06-20 16:38:30 -07007812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007813 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007814 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
7815 sizeof(WDI_TSMStatsReqParamsType));
7816 if(NULL == wdiTSMReqParam)
7817 {
7818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007819 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007820 VOS_ASSERT(0);
7821 return VOS_STATUS_E_NOMEM;
7822 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007823 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7824 if(NULL == pWdaParams)
7825 {
7826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007827 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007828 VOS_ASSERT(0);
7829 vos_mem_free(wdiTSMReqParam);
7830 return VOS_STATUS_E_NOMEM;
7831 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007832 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
7833 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
7834 pTsmStats->bssId,
7835 sizeof(wpt_macAddr));
7836 wdiTSMReqParam->wdiReqStatusCB = NULL ;
7837
7838 pWdaParams->pWdaContext = pWDA;
7839 /* Store TSM Stats pointer, as this will be used for response */
7840 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007841 pWdaParams->wdaWdiApiMsgParam = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007842 status = WDI_TSMStatsReq(wdiTSMReqParam,
7843 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007844 if(IS_WDI_STATUS_FAILURE(status))
7845 {
7846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7847 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007848 vos_mem_free(pWdaParams);
7849
7850 pGetTsmStatsRspParams =
7851 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
7852 if(NULL == pGetTsmStatsRspParams)
7853 {
7854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7855 "%s: VOS MEM Alloc Failure", __func__);
7856 VOS_ASSERT(0);
7857 vos_mem_free(pTsmStats);
7858 return VOS_STATUS_E_NOMEM;
7859 }
7860 pGetTsmStatsRspParams->staId = pTsmStats->staId;
7861 pGetTsmStatsRspParams->rc = eSIR_FAILURE;
7862 pGetTsmStatsRspParams->tsmStatsReq = pTsmStats;
7863
7864 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pGetTsmStatsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007865 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007866 return CONVERT_WDI2VOS_STATUS(status) ;
7867}
7868#endif
7869/*
7870 * FUNCTION: WDA_SendBeaconParamsCallback
7871 * No need to send any response to PE in this case
7872 */
7873void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
7874{
7875
Jeff Johnson295189b2012-06-20 16:38:30 -07007876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007877 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007878 return ;
7879}
Jeff Johnson295189b2012-06-20 16:38:30 -07007880/*
7881 * FUNCTION: WDA_ProcessSendBeacon
7882 * Request to WDI to send the beacon template to HAL to update the TPE memory and
7883 * start beacon trasmission
7884 */
7885VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
7886 tSendbeaconParams *pSendbeaconParams)
7887{
7888 WDI_Status status = WDI_STATUS_SUCCESS ;
7889 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007891 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007892 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
7893 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
7894 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
7895 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07007896 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
7897 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05307898 /* p2pIeOffset should be atleast greater than timIeOffset */
7899 if ((pSendbeaconParams->p2pIeOffset != 0) &&
7900 (pSendbeaconParams->p2pIeOffset <
7901 pSendbeaconParams->timIeOffset))
7902 {
7903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7904 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
Ratheesh S P62439fe2015-06-11 15:53:31 +05307905 vos_mem_free(pSendbeaconParams);
Gopichand Nakkala81aef732013-03-22 11:15:19 +05307906 VOS_ASSERT( 0 );
7907 return WDI_STATUS_E_FAILURE;
7908 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007909 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
7910 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07007911 /* Copy the beacon template to local buffer */
7912 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
7913 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
7914 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
7915
Jeff Johnson295189b2012-06-20 16:38:30 -07007916 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
7917 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007918 if(IS_WDI_STATUS_FAILURE(status))
7919 {
7920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7921 "Failure in SEND BEACON REQ Params WDI API" );
7922 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007923 vos_mem_free(pSendbeaconParams);
7924 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07007925}
Jeff Johnson295189b2012-06-20 16:38:30 -07007926/*
7927 * FUNCTION: WDA_UpdateProbeRspParamsCallback
7928 * No need to send any response to PE in this case
7929 */
7930void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
7931{
Jeff Johnson295189b2012-06-20 16:38:30 -07007932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007933 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007934 return ;
7935}
7936
Jeff Johnson295189b2012-06-20 16:38:30 -07007937/*
7938 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
7939 * Request to WDI to send the probe response template to HAL to update the TPE memory and
7940 * send probe response
7941 */
7942VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
7943 tSendProbeRespParams *pSendProbeRspParams)
7944{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007945 WDI_Status status = WDI_STATUS_SUCCESS;
7946 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
7947 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07007948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007949 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007950
7951 if (!wdiSendProbeRspParam)
Ratheesh S P62439fe2015-06-11 15:53:31 +05307952 {
7953 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007954 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
Ratheesh S P62439fe2015-06-11 15:53:31 +05307955 }
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007956
Jeff Johnson295189b2012-06-20 16:38:30 -07007957 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007958 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07007959 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007960 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07007961 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07007962 /* Copy the Probe Response template to local buffer */
7963 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007964 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07007965 pSendProbeRspParams->pProbeRespTemplate,
7966 pSendProbeRspParams->probeRespTemplateLen);
7967 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007968 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07007969 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
7970 WDI_PROBE_REQ_BITMAP_IE_LEN);
7971
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007972 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007973
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007974 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07007975 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007976 if(IS_WDI_STATUS_FAILURE(status))
7977 {
7978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7979 "Failure in SEND Probe RSP Params WDI API" );
7980 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007981 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007982 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007983 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07007984}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08007985#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -07007986/*
7987 * FUNCTION: WDA_SetMaxTxPowerCallBack
7988 * send the response to PE with power value received from WDI
7989 */
7990void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
7991 void* pUserData)
7992{
7993 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7994 tWDA_CbContext *pWDA = NULL;
7995 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
7996
7997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007998 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007999 if(NULL == pWdaParams)
8000 {
8001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008002 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008003 VOS_ASSERT(0) ;
8004 return ;
8005 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008006 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308007 if (NULL == pWDA)
8008 {
8009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8010 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308011 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8012 vos_mem_free(pWdaParams->wdaMsgParam);
8013 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308014 VOS_ASSERT(0);
8015 return ;
8016 }
8017
Jeff Johnson295189b2012-06-20 16:38:30 -07008018 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008019 if( NULL == pMaxTxPowerParams )
8020 {
8021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008022 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07008023 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008024 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8025 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008026 return ;
8027 }
Jeff Johnsone7245742012-09-05 17:12:55 -07008028
Jeff Johnson295189b2012-06-20 16:38:30 -07008029
8030 /*need to free memory for the pointers used in the
8031 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008032 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8033 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008034 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07008035
Jeff Johnson295189b2012-06-20 16:38:30 -07008036
8037 /* send response to UMAC*/
8038 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
8039
8040 return;
8041}
Jeff Johnson295189b2012-06-20 16:38:30 -07008042/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008043 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07008044 * Request to WDI to send set Max Tx Power Request
8045 */
8046 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
8047 tMaxTxPowerParams *MaxTxPowerParams)
8048{
8049 WDI_Status status = WDI_STATUS_SUCCESS;
8050 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
8051 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008052
Jeff Johnson295189b2012-06-20 16:38:30 -07008053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008054 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008055
Jeff Johnson295189b2012-06-20 16:38:30 -07008056 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
8057 sizeof(WDI_SetMaxTxPowerParamsType));
8058 if(NULL == wdiSetMaxTxPowerParams)
8059 {
8060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008061 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008062 VOS_ASSERT(0);
8063 return VOS_STATUS_E_NOMEM;
8064 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008065 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8066 if(NULL == pWdaParams)
8067 {
8068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008069 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008070 vos_mem_free(wdiSetMaxTxPowerParams);
8071 VOS_ASSERT(0);
8072 return VOS_STATUS_E_NOMEM;
8073 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008074 /* Copy.Max.Tx.Power Params to WDI structure */
8075 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
8076 MaxTxPowerParams->bssId,
8077 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008078 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
8079 MaxTxPowerParams->selfStaMacAddr,
8080 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008081 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
8082 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07008083 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008084 pWdaParams->pWdaContext = pWDA;
8085 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008086 /* store Params pass it to WDI */
8087 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008088 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
8089 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008090 if(IS_WDI_STATUS_FAILURE(status))
8091 {
8092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8093 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
8094 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8095 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008096 /* send response to UMAC*/
8097 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008098 }
8099 return CONVERT_WDI2VOS_STATUS(status);
8100
8101}
Jeff Johnson295189b2012-06-20 16:38:30 -07008102#endif
schang86c22c42013-03-13 18:41:24 -07008103
8104/*
Arif Hussaina5ebce02013-08-09 15:09:58 -07008105 * FUNCTION: WDA_SetMaxTxPowerPerBandCallBack
8106 * send the response to PE with power value received from WDI
8107 */
8108void WDA_SetMaxTxPowerPerBandCallBack(WDI_SetMaxTxPowerPerBandRspMsg
8109 *pwdiSetMaxTxPowerPerBandRsp,
8110 void* pUserData)
8111{
8112 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8113 tWDA_CbContext *pWDA = NULL;
8114 tMaxTxPowerPerBandParams *pMxTxPwrPerBandParams = NULL;
8115
8116 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8117 "<------ %s ", __func__);
8118 if (NULL == pWdaParams)
8119 {
8120 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8121 "%s: pWdaParams received NULL", __func__);
8122 VOS_ASSERT(0);
8123 return ;
8124 }
8125 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308126 if (NULL == pWDA)
8127 {
8128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8129 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308130 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8131 vos_mem_free(pWdaParams->wdaMsgParam);
8132 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308133 VOS_ASSERT(0);
8134 return ;
8135 }
8136
Arif Hussaina5ebce02013-08-09 15:09:58 -07008137 pMxTxPwrPerBandParams = (tMaxTxPowerPerBandParams*)pWdaParams->wdaMsgParam;
8138 if ( NULL == pMxTxPwrPerBandParams )
8139 {
8140 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8141 "%s: pMxTxPwrPerBandParams received NULL ", __func__);
8142 VOS_ASSERT(0);
8143 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8144 vos_mem_free(pWdaParams);
8145 return;
8146 }
8147
8148 /*need to free memory for the pointers used in the
8149 WDA Process.Set Max Tx Power Req function*/
8150 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8151 vos_mem_free(pWdaParams);
8152 pMxTxPwrPerBandParams->power = pwdiSetMaxTxPowerPerBandRsp->ucPower;
8153
8154 /* send response to UMAC*/
8155 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
8156 pMxTxPwrPerBandParams, 0);
8157
8158 return;
8159}
8160
8161/*
8162 * FUNCTION: WDA_ProcessSetMaxTxPowerPerBandReq
8163 * Request to WDI to send set Max Tx Power Per band Request
8164 */
8165 VOS_STATUS WDA_ProcessSetMaxTxPowerPerBandReq(tWDA_CbContext *pWDA,
8166 tMaxTxPowerPerBandParams
8167 *MaxTxPowerPerBandParams)
8168{
8169 WDI_Status status = WDI_STATUS_SUCCESS;
8170 WDI_SetMaxTxPowerPerBandParamsType *wdiSetMxTxPwrPerBandParams = NULL;
8171 tWDA_ReqParams *pWdaParams = NULL;
8172
8173 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8174 "------> %s ", __func__);
8175
8176 wdiSetMxTxPwrPerBandParams = vos_mem_malloc(
8177 sizeof(WDI_SetMaxTxPowerPerBandParamsType));
8178
8179 if (NULL == wdiSetMxTxPwrPerBandParams)
8180 {
8181 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8182 "%s: VOS MEM Alloc Failure", __func__);
8183 VOS_ASSERT(0);
8184 return VOS_STATUS_E_NOMEM;
8185 }
8186 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8187 if (NULL == pWdaParams)
8188 {
8189 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8190 "%s: VOS MEM Alloc Failure", __func__);
8191 vos_mem_free(wdiSetMxTxPwrPerBandParams);
8192 VOS_ASSERT(0);
8193 return VOS_STATUS_E_NOMEM;
8194 }
8195 /* Copy.Max.Tx.Power.Per.Band Params to WDI structure */
8196 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.bandInfo = \
8197 MaxTxPowerPerBandParams->bandInfo;
8198 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.ucPower = \
8199 MaxTxPowerPerBandParams->power;
8200 wdiSetMxTxPwrPerBandParams->wdiReqStatusCB = NULL;
8201 pWdaParams->pWdaContext = pWDA;
8202 pWdaParams->wdaMsgParam = (void *)MaxTxPowerPerBandParams;
8203 /* store Params pass it to WDI */
8204 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMxTxPwrPerBandParams;
8205 status = WDI_SetMaxTxPowerPerBandReq(wdiSetMxTxPwrPerBandParams,
8206 WDA_SetMaxTxPowerPerBandCallBack,
8207 pWdaParams);
8208 if (IS_WDI_STATUS_FAILURE(status))
8209 {
8210 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8211 "Failure in SET MAX TX Power REQ Params WDI API,"
8212 " free all the memory");
8213 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8214 vos_mem_free(pWdaParams);
8215 /* send response to UMAC*/
8216 WDA_SendMsg(pWDA,
8217 WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
8218 MaxTxPowerPerBandParams, 0);
8219 }
8220 return CONVERT_WDI2VOS_STATUS(status);
8221}
8222
8223/*
schang86c22c42013-03-13 18:41:24 -07008224 * FUNCTION: WDA_SetTxPowerCallBack
8225 * send the response to PE with power value received from WDI
8226 */
8227void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
8228 void* pUserData)
8229{
8230 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8231 tWDA_CbContext *pWDA = NULL;
8232 tSirSetTxPowerReq *pTxPowerParams = NULL;
8233
8234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8235 "<------ %s ", __func__);
8236 if(NULL == pWdaParams)
8237 {
8238 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8239 "%s: pWdaParams received NULL", __func__);
8240 VOS_ASSERT(0) ;
8241 return ;
8242 }
8243 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308244 if (NULL == pWDA)
8245 {
8246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8247 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308248 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8249 vos_mem_free(pWdaParams->wdaMsgParam);
8250 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308251 VOS_ASSERT(0);
8252 return ;
8253 }
8254
schang86c22c42013-03-13 18:41:24 -07008255 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
8256 if(NULL == pTxPowerParams)
8257 {
8258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8259 "%s: pTxPowerParams received NULL " ,__func__);
8260 VOS_ASSERT(0);
8261 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8262 vos_mem_free(pWdaParams);
8263 return ;
8264 }
8265
8266 /*need to free memory for the pointers used in the
8267 WDA Process.Set Max Tx Power Req function*/
8268 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8269 vos_mem_free(pWdaParams);
8270
8271 /* send response to UMAC*/
8272 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
8273 return;
8274}
8275
8276/*
8277 * FUNCTION: WDA_ProcessSetTxPowerReq
8278 * Request to WDI to send set Tx Power Request
8279 */
8280 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
8281 tSirSetTxPowerReq *txPowerParams)
8282{
8283 WDI_Status status = WDI_STATUS_SUCCESS;
8284 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
8285 tWDA_ReqParams *pWdaParams = NULL;
8286
8287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8288 "------> %s ", __func__);
8289
8290 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
8291 sizeof(WDI_SetTxPowerParamsType));
8292 if(NULL == wdiSetTxPowerParams)
8293 {
8294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8295 "%s: VOS MEM Alloc Failure", __func__);
8296 VOS_ASSERT(0);
8297 return VOS_STATUS_E_NOMEM;
8298 }
8299 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8300 if(NULL == pWdaParams)
8301 {
8302 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8303 "%s: VOS MEM Alloc Failure", __func__);
8304 vos_mem_free(wdiSetTxPowerParams);
8305 VOS_ASSERT(0);
8306 return VOS_STATUS_E_NOMEM;
8307 }
8308 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
8309 txPowerParams->bssIdx;
8310 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
8311 txPowerParams->mwPower;
8312 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
8313 pWdaParams->pWdaContext = pWDA;
8314 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
8315 /* store Params pass it to WDI */
8316 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
8317 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
8318 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
8319 if(IS_WDI_STATUS_FAILURE(status))
8320 {
8321 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8322 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
8323 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8324 vos_mem_free(pWdaParams);
8325 /* send response to UMAC*/
8326 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
8327 }
8328 return CONVERT_WDI2VOS_STATUS(status);
8329}
8330
Jeff Johnson295189b2012-06-20 16:38:30 -07008331/*
8332 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
8333 * Free the memory. No need to send any response to PE in this case
8334 */
8335void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
8336{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008337 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8338
Jeff Johnson295189b2012-06-20 16:38:30 -07008339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008340 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008341
8342 if(NULL == pWdaParams)
8343 {
8344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008345 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008346 VOS_ASSERT(0) ;
8347 return ;
8348 }
8349
8350 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8351 vos_mem_free(pWdaParams->wdaMsgParam) ;
8352 vos_mem_free(pWdaParams);
8353
Jeff Johnson295189b2012-06-20 16:38:30 -07008354 /*
8355 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
8356 * so just free the request param here
8357 */
Jeff Johnson295189b2012-06-20 16:38:30 -07008358 return ;
8359}
8360
Jeff Johnson295189b2012-06-20 16:38:30 -07008361/*
8362 * FUNCTION: WDA_ProcessSetP2PGONOAReq
8363 * Request to WDI to set the P2P Group Owner Notice of Absence Req
8364 */
8365VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
8366 tP2pPsParams *pP2pPsConfigParams)
8367{
8368 WDI_Status status = WDI_STATUS_SUCCESS ;
8369 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
8370 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
8371 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008372 tWDA_ReqParams *pWdaParams = NULL;
8373
Jeff Johnson295189b2012-06-20 16:38:30 -07008374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008375 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008376 if(NULL == wdiSetP2PGONOAReqParam)
8377 {
8378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008379 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308380 vos_mem_free(pP2pPsConfigParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008381 VOS_ASSERT(0);
8382 return VOS_STATUS_E_NOMEM;
8383 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008384
8385 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8386 if(NULL == pWdaParams)
8387 {
8388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008389 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008390 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008391 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008392 VOS_ASSERT(0);
8393 return VOS_STATUS_E_NOMEM;
8394 }
8395
Jeff Johnson295189b2012-06-20 16:38:30 -07008396 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
8397 pP2pPsConfigParams->opp_ps;
8398 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
8399 pP2pPsConfigParams->ctWindow;
8400 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
8401 pP2pPsConfigParams->count;
8402 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
8403 pP2pPsConfigParams->duration;
8404 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
8405 pP2pPsConfigParams->interval;
8406 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
8407 pP2pPsConfigParams->single_noa_duration;
8408 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
8409 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008410
Jeff Johnson295189b2012-06-20 16:38:30 -07008411 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
8412 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008413 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
8414
Jeff Johnson295189b2012-06-20 16:38:30 -07008415 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008416 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
8417 pWdaParams->pWdaContext = pWDA;
8418
Jeff Johnson295189b2012-06-20 16:38:30 -07008419 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008420 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
8421
Jeff Johnson295189b2012-06-20 16:38:30 -07008422 if(IS_WDI_STATUS_FAILURE(status))
8423 {
8424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8425 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008426 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8427 vos_mem_free(pWdaParams->wdaMsgParam);
8428 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008429 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008430 return CONVERT_WDI2VOS_STATUS(status);
8431
Jeff Johnson295189b2012-06-20 16:38:30 -07008432}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308433
8434#ifdef FEATURE_WLAN_TDLS
8435/*
8436 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
8437 * Free the memory. No need to send any response to PE in this case
8438 */
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308439void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
8440 void* pUserData)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308441{
8442 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8443 tWDA_CbContext *pWDA = NULL;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308444 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308445
8446
8447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8448 "<------ %s " ,__func__);
8449 if(NULL == pWdaParams)
8450 {
8451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8452 "%s: pWdaParams received NULL", __func__);
8453 VOS_ASSERT(0) ;
8454 return ;
8455 }
8456 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
8457
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308458 if (NULL == pWDA)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308459 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8461 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308462 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8463 vos_mem_free(pWdaParams->wdaMsgParam);
8464 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308465 VOS_ASSERT(0);
8466 return ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308467 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308468
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308469 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
8470 if( NULL == pTdlsLinkEstablishParams )
8471 {
8472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8473 "%s: pTdlsLinkEstablishParams "
8474 "received NULL " ,__func__);
8475 VOS_ASSERT(0);
8476 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8477 vos_mem_free(pWdaParams);
8478 return ;
8479 }
8480 pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
8481 wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308482 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308483 vos_mem_free(pWdaParams);
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308484 /* send response to UMAC*/
8485 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
8486
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308487 return ;
8488}
8489
8490VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
8491 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
8492{
8493 WDI_Status status = WDI_STATUS_SUCCESS ;
8494 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
8495 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
8496 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
8497 tWDA_ReqParams *pWdaParams = NULL;
8498 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8499 "------> %s " ,__func__);
8500 if(NULL == wdiSetTDLSLinkEstablishReqParam)
8501 {
8502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8503 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308504 vos_mem_free(pTdlsLinkEstablishParams);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308505 VOS_ASSERT(0);
8506 return VOS_STATUS_E_NOMEM;
8507 }
8508 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8509 if(NULL == pWdaParams)
8510 {
8511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8512 "%s: VOS MEM Alloc Failure", __func__);
8513 vos_mem_free(pTdlsLinkEstablishParams);
8514 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
8515 VOS_ASSERT(0);
8516 return VOS_STATUS_E_NOMEM;
8517 }
8518 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308519 pTdlsLinkEstablishParams->staIdx;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308520 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308521 pTdlsLinkEstablishParams->isResponder;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308522 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308523 pTdlsLinkEstablishParams->uapsdQueues;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308524 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308525 pTdlsLinkEstablishParams->maxSp;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308526 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308527 pTdlsLinkEstablishParams->isBufsta;
Naresh Jayaramc7cbd782014-02-04 17:38:23 +05308528 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsOffChannelSupported =
8529 pTdlsLinkEstablishParams->isOffChannelSupported;
8530
8531 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannels,
8532 pTdlsLinkEstablishParams->validChannels,
8533 pTdlsLinkEstablishParams->validChannelsLen);
8534
8535 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannelsLen =
8536 pTdlsLinkEstablishParams->validChannelsLen;
8537
8538 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClasses,
8539 pTdlsLinkEstablishParams->validOperClasses,
8540 pTdlsLinkEstablishParams->validOperClassesLen);
8541 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClassesLen =
8542 pTdlsLinkEstablishParams->validOperClassesLen;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308543
8544 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
8545 /* Store msg pointer from PE, as this will be used for response */
8546 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
8547 /* store Params pass it to WDI */
8548 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
8549 pWdaParams->pWdaContext = pWDA;
8550
8551 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
8552 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
8553 WDA_SetTDLSLinkEstablishReqParamsCallback,
8554 pWdaParams);
8555 if(IS_WDI_STATUS_FAILURE(status))
8556 {
8557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8558 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
8559 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8560 vos_mem_free(pWdaParams->wdaMsgParam);
8561 vos_mem_free(pWdaParams);
8562 }
8563 return CONVERT_WDI2VOS_STATUS(status);
8564}
Atul Mittalc0f739f2014-07-31 13:47:47 +05308565
8566// tdlsoffchan
8567void WDA_SetTDLSChanSwitchReqParamsCallback(WDI_SetTdlsChanSwitchReqResp *wdiSetTdlsChanSwitchReqRsp,
8568 void* pUserData)
8569{
8570 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8571 tWDA_CbContext *pWDA = NULL;
8572 tTdlsChanSwitchParams *pTdlsChanSwitchParams;
8573
8574
8575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8576 "<------ %s " ,__func__);
8577 if(NULL == pWdaParams)
8578 {
8579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8580 "%s: pWdaParams received NULL", __func__);
Atul Mittalc0f739f2014-07-31 13:47:47 +05308581 VOS_ASSERT(0) ;
8582 return ;
8583 }
8584 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
8585
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308586 if (NULL == pWDA)
Atul Mittal60bd4292014-08-14 12:19:27 +05308587 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8589 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308590 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8591 vos_mem_free(pWdaParams->wdaMsgParam);
8592 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308593 VOS_ASSERT(0);
8594 return ;
Atul Mittal60bd4292014-08-14 12:19:27 +05308595 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308596
Atul Mittalc0f739f2014-07-31 13:47:47 +05308597 pTdlsChanSwitchParams = (tTdlsChanSwitchParams *)pWdaParams->wdaMsgParam ;
Atul Mittal60bd4292014-08-14 12:19:27 +05308598 if( NULL == pTdlsChanSwitchParams )
Atul Mittalc0f739f2014-07-31 13:47:47 +05308599 {
8600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8601 "%s: pTdlsChanSwitchParams "
8602 "received NULL " ,__func__);
8603 VOS_ASSERT(0);
8604 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8605 vos_mem_free(pWdaParams);
8606 return ;
8607 }
8608 pTdlsChanSwitchParams->status = CONVERT_WDI2SIR_STATUS(
8609 wdiSetTdlsChanSwitchReqRsp->wdiStatus);
Atul Mittalc0f739f2014-07-31 13:47:47 +05308610 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8611 vos_mem_free(pWdaParams);
Atul Mittal60bd4292014-08-14 12:19:27 +05308612 /* send response to UMAC*/
8613 WDA_SendMsg(pWDA, WDA_SET_TDLS_CHAN_SWITCH_REQ_RSP, pTdlsChanSwitchParams, 0) ;
Atul Mittalc0f739f2014-07-31 13:47:47 +05308614
8615 return ;
8616}
8617VOS_STATUS WDA_ProcessSetTdlsChanSwitchReq(tWDA_CbContext *pWDA,
8618 tTdlsChanSwitchParams *pTdlsChanSwitchParams)
8619{
8620 WDI_Status status = WDI_STATUS_SUCCESS ;
8621 WDI_SetTDLSChanSwitchReqParamsType *wdiSetTDLSChanSwitchReqParam =
8622 (WDI_SetTDLSChanSwitchReqParamsType *)vos_mem_malloc(
8623 sizeof(WDI_SetTDLSChanSwitchReqParamsType));
8624 tWDA_ReqParams *pWdaParams = NULL;
8625
8626 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8627 "Enter: %s ",__func__);
8628 if(NULL == wdiSetTDLSChanSwitchReqParam)
8629 {
8630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8631 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308632 vos_mem_free(pTdlsChanSwitchParams);
Atul Mittalc0f739f2014-07-31 13:47:47 +05308633 VOS_ASSERT(0);
8634 return VOS_STATUS_E_NOMEM;
8635 }
8636
8637 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8638 if(NULL == pWdaParams)
8639 {
8640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8641 "%s: VOS MEM Alloc Failure", __func__);
8642 vos_mem_free(pTdlsChanSwitchParams);
8643 vos_mem_free(wdiSetTDLSChanSwitchReqParam);
8644 VOS_ASSERT(0);
8645 return VOS_STATUS_E_NOMEM;
8646 }
8647 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.staIdx =
8648 pTdlsChanSwitchParams->staIdx;
8649 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.isOffchannelInitiator =
8650 pTdlsChanSwitchParams->tdlsSwMode;
8651 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetOperClass =
8652 pTdlsChanSwitchParams->operClass;
8653 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetChannel =
8654 pTdlsChanSwitchParams->tdlsOffCh;
8655 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.secondaryChannelOffset =
8656 pTdlsChanSwitchParams->tdlsOffChBwOffset;
8657
8658
8659 /* Store msg pointer from PE, as this will be used for response */
8660 pWdaParams->wdaMsgParam = (void *)pTdlsChanSwitchParams ;
8661 /* store Params pass it to WDI */
8662 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSChanSwitchReqParam ;
8663 pWdaParams->pWdaContext = pWDA;
8664 status = WDI_SetTDLSChanSwitchReq(wdiSetTDLSChanSwitchReqParam,
8665 (WDI_SetTDLSChanSwitchReqParamsRspCb)
8666 WDA_SetTDLSChanSwitchReqParamsCallback,
8667 pWdaParams);
8668 if(IS_WDI_STATUS_FAILURE(status))
8669 {
8670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8671 "Failure in TDLS Channel Switch Req WDI API, free all the memory" );
8672 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8673 vos_mem_free(pWdaParams->wdaMsgParam);
8674 vos_mem_free(pWdaParams);
8675 }
8676 return CONVERT_WDI2VOS_STATUS(status);
8677}
8678#endif /*FEATURE_WLAN_TDLS*/
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308679
8680
Jeff Johnson295189b2012-06-20 16:38:30 -07008681#ifdef WLAN_FEATURE_VOWIFI_11R
8682/*
8683 * FUNCTION: WDA_AggrAddTSReqCallback
8684 * send ADD AGGREGATED TS RSP back to PE
8685 */
8686void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
8687{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008688 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308689 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008690 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008691 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07008692 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008693 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008694 if(NULL == pWdaParams)
8695 {
8696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008697 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008698 VOS_ASSERT(0) ;
8699 return ;
8700 }
8701
8702 pWDA = pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308703 if (NULL == pWDA)
8704 {
8705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8706 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308707 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8708 vos_mem_free(pWdaParams->wdaMsgParam);
8709 vos_mem_free(pWdaParams);
8710
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308711 VOS_ASSERT(0);
8712 return ;
8713 }
8714
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008715 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008716
8717 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
8718 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008719 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008720 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008721 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008722
8723 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8724 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008725 return ;
8726}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07008727/*
8728 * FUNCTION: WDA_ProcessAddTSReq
8729 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
8730 */
8731VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
8732 tAggrAddTsParams *pAggrAddTsReqParams)
8733{
8734 WDI_Status status = WDI_STATUS_SUCCESS ;
8735 int i;
8736 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008737 tWDA_ReqParams *pWdaParams = NULL;
8738
8739
Jeff Johnson295189b2012-06-20 16:38:30 -07008740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008741 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008742 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
8743 sizeof(WDI_AggrAddTSReqParamsType)) ;
8744 if(NULL == wdiAggrAddTSReqParam)
8745 {
8746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008747 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308748 vos_mem_free(pAggrAddTsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008749 VOS_ASSERT(0);
8750 return VOS_STATUS_E_NOMEM;
8751 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008752
8753
8754 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8755 if(NULL == pWdaParams)
8756 {
8757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008758 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008759 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008760 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008761 VOS_ASSERT(0);
8762 return VOS_STATUS_E_NOMEM;
8763 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008764 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
8765 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
8766 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008767 for( i = 0; i < WDI_MAX_NO_AC; i++ )
8768 {
8769 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
8770 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
8771 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07008772 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
8773 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
8774 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
8775 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
8776 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
8777 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
8778 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
8779 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
8780 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
8781 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
8782 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
8783 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
8784 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
8785 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
8786 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
8787 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07008788 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
8789 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07008790 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
8791 pAggrAddTsReqParams->tspec[i].nomMsduSz;
8792 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
8793 pAggrAddTsReqParams->tspec[i].maxMsduSz;
8794 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
8795 pAggrAddTsReqParams->tspec[i].minSvcInterval;
8796 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
8797 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
8798 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
8799 pAggrAddTsReqParams->tspec[i].inactInterval;
8800 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
8801 pAggrAddTsReqParams->tspec[i].suspendInterval;
8802 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
8803 pAggrAddTsReqParams->tspec[i].svcStartTime;
8804 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
8805 pAggrAddTsReqParams->tspec[i].minDataRate;
8806 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
8807 pAggrAddTsReqParams->tspec[i].meanDataRate;
8808 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
8809 pAggrAddTsReqParams->tspec[i].peakDataRate;
8810 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
8811 pAggrAddTsReqParams->tspec[i].maxBurstSz;
8812 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
8813 pAggrAddTsReqParams->tspec[i].delayBound;
8814 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
8815 pAggrAddTsReqParams->tspec[i].minPhyRate;
8816 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
8817 pAggrAddTsReqParams->tspec[i].surplusBw;
8818 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
8819 pAggrAddTsReqParams->tspec[i].mediumTime;
8820 }
8821
8822 /* TODO: tAggrAddTsParams doesn't have the following fields */
8823#if 0
8824 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
8825 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
8826 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
8827 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
8828#endif
8829 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
8830
8831 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008832 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008833 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008834 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
8835
8836 pWdaParams->pWdaContext = pWDA;
8837
Jeff Johnson295189b2012-06-20 16:38:30 -07008838 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008839 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
8840
Jeff Johnson295189b2012-06-20 16:38:30 -07008841 if(IS_WDI_STATUS_FAILURE(status))
8842 {
8843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8844 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008845 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8846 vos_mem_free(pWdaParams);
8847
8848 /* send the failure response back to PE*/
8849 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
8850 {
8851 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
8852 }
8853
8854 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
8855 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008856 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008857 return CONVERT_WDI2VOS_STATUS(status) ;
8858}
8859#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07008860/*
Mihir Shetea4306052014-03-25 00:02:54 +05308861 * FUNCTION: WDA_EnterImpsRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008862 * send Enter IMPS RSP back to PE
8863 */
Mihir Shetea4306052014-03-25 00:02:54 +05308864void WDA_EnterImpsRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008865{
Mihir Shetea4306052014-03-25 00:02:54 +05308866 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308867 tWDA_CbContext *pWDA = NULL;
Mihir Shetea4306052014-03-25 00:02:54 +05308868
Jeff Johnson295189b2012-06-20 16:38:30 -07008869 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Mihir Shetea4306052014-03-25 00:02:54 +05308870 "<------ %s status=%d" ,__func__,status);
8871 if(NULL == pWdaParams)
8872 {
8873 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8874 "%s: pWdaParams received NULL", __func__);
8875 VOS_ASSERT(0);
8876 return;
8877 }
8878
8879 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308880 if (NULL == pWDA)
8881 {
8882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8883 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308884 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8885 vos_mem_free(pWdaParams->wdaMsgParam);
8886 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308887 VOS_ASSERT(0);
8888 return ;
8889 }
Mihir Shetea4306052014-03-25 00:02:54 +05308890
8891 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8892 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05308893 if (WDI_STATUS_SUCCESS != status)
8894 {
8895 pWDA->failureCounts.enterImpsFailureCount++;
8896 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
8897 pWDA->failureCounts.enterImpsFailureCount)
8898 {
8899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8900 "%s: Status %d fail count %d", __func__, status,
8901 pWDA->failureCounts.enterImpsFailureCount);
8902 pWDA->failureCounts.enterImpsFailureCount = 0;
8903 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
8904 WLAN_LOG_INDICATOR_HOST_DRIVER,
8905 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
8906 FALSE, TRUE);
8907 }
8908 }
8909 else
8910 {
8911 pWDA->failureCounts.enterImpsFailureCount = 0;
8912 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008913 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008914 return ;
8915}
Mihir Shetea4306052014-03-25 00:02:54 +05308916
8917
8918/*
8919 * FUNCTION: WDA_EnterImpsReqCallback
8920 * Free memory and send Enter IMPS RSP back to PE.
8921 * Invoked when Enter IMPS REQ failed in WDI and no RSP callback is generated.
8922 */
8923void WDA_EnterImpsReqCallback(WDI_Status wdiStatus, void* pUserData)
8924{
8925 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308926 tWDA_CbContext *pWDA = NULL;
Mihir Shetea4306052014-03-25 00:02:54 +05308927
8928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8929 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8930
8931 if(NULL == pWdaParams)
8932 {
8933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8934 "%s: pWdaParams received NULL", __func__);
8935 VOS_ASSERT(0);
8936 return;
8937 }
8938
8939 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308940 if (NULL == pWDA)
8941 {
8942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8943 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308944 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8945 vos_mem_free(pWdaParams->wdaMsgParam);
8946 vos_mem_free(pWdaParams);
8947
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308948 VOS_ASSERT(0);
8949 return ;
8950 }
8951
Mihir Shetea4306052014-03-25 00:02:54 +05308952
8953 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8954 {
8955 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8956 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05308957 pWDA->failureCounts.enterImpsFailureCount++;
8958 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
8959 pWDA->failureCounts.enterImpsFailureCount)
8960 {
8961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8962 "%s: wdiStatus %d fail count %d", __func__, wdiStatus,
8963 pWDA->failureCounts.enterImpsFailureCount);
8964 pWDA->failureCounts.enterImpsFailureCount = 0;
8965 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
8966 WLAN_LOG_INDICATOR_HOST_DRIVER,
8967 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
8968 FALSE, TRUE);
8969 }
Mihir Shetea4306052014-03-25 00:02:54 +05308970 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
8971 CONVERT_WDI2SIR_STATUS(wdiStatus));
8972 }
8973
8974 return;
8975}
Jeff Johnson295189b2012-06-20 16:38:30 -07008976/*
8977 * FUNCTION: WDA_ProcessEnterImpsReq
8978 * Request to WDI to Enter IMPS power state.
8979 */
8980VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
8981{
8982 WDI_Status status = WDI_STATUS_SUCCESS ;
Mihir Shetea4306052014-03-25 00:02:54 +05308983 WDI_EnterImpsReqParamsType *wdiEnterImpsReqParams;
8984 tWDA_ReqParams *pWdaParams;
Sushant Kaushik7438e252015-05-01 14:55:09 +05308985 static int failcnt = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07008986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008987 "------> %s " ,__func__);
Mihir Shetea4306052014-03-25 00:02:54 +05308988
8989
8990 wdiEnterImpsReqParams = vos_mem_malloc(sizeof(WDI_EnterImpsReqParamsType));
8991 if (NULL == wdiEnterImpsReqParams)
8992 {
8993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8994 "%s: VOS MEM Alloc Failure", __func__);
8995 VOS_ASSERT(0);
8996 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
8997 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
8998 return VOS_STATUS_E_NOMEM;
8999 }
9000
9001 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
9002 if (NULL == pWdaParams)
9003 {
9004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9005 "%s: VOS MEM Alloc Failure", __func__);
9006 VOS_ASSERT(0);
9007 vos_mem_free(wdiEnterImpsReqParams);
9008 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL ,
9009 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
9010 return VOS_STATUS_E_NOMEM;
9011 }
9012
9013 wdiEnterImpsReqParams->wdiReqStatusCB = WDA_EnterImpsReqCallback;
9014 wdiEnterImpsReqParams->pUserData = pWdaParams;
9015
9016 pWdaParams->wdaWdiApiMsgParam = wdiEnterImpsReqParams;
9017 pWdaParams->wdaMsgParam = NULL;
9018 pWdaParams->pWdaContext = pWDA;
9019
9020 status = WDI_EnterImpsReq(wdiEnterImpsReqParams,
9021 (WDI_EnterImpsRspCb)WDA_EnterImpsRspCallback,
9022 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009023 if(IS_WDI_STATUS_FAILURE(status))
9024 {
Sushant Kaushik7438e252015-05-01 14:55:09 +05309025 if (! (failcnt & 0xF))
9026 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9027 "Failure in Enter IMPS REQ WDI API, free all the memory " );
9028 failcnt++;
Mihir Shetea4306052014-03-25 00:02:54 +05309029 vos_mem_free(wdiEnterImpsReqParams);
9030 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009031 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009032 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009033 return CONVERT_WDI2VOS_STATUS(status) ;
9034}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309035
9036/*
9037 * FUNCTION: WDA_ExitImpsRespCallback
9038 * send Exit IMPS RSP back to PE
9039 */
9040void WDA_ExitImpsRespCallback(WDI_Status status, void* pUserData)
9041{
9042 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9043 tWDA_CbContext *pWDA;
9044
9045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9046 "<------ %s " ,__func__);
9047
9048 if (NULL == pWdaParams)
9049 {
9050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9051 "%s: pWdaParams received NULL", __func__);
9052 VOS_ASSERT(0);
9053 return;
9054 }
9055 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9056
9057 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9058 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309059 if (WDI_STATUS_SUCCESS != status)
9060 {
9061 pWDA->failureCounts.exitImpsFailureCount++;
9062 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9063 pWDA->failureCounts.exitImpsFailureCount)
9064 {
9065 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9066 "%s: Status %d fail count %d", __func__,
9067 status,
9068 pWDA->failureCounts.exitImpsFailureCount);
9069 pWDA->failureCounts.exitImpsFailureCount = 0;
9070 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9071 WLAN_LOG_INDICATOR_HOST_DRIVER,
9072 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9073 FALSE, TRUE);
9074 }
9075 }
9076 else
9077 {
9078 pWDA->failureCounts.exitImpsFailureCount = 0;
9079 }
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309080
9081 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status));
9082 return;
9083}
9084
Jeff Johnson295189b2012-06-20 16:38:30 -07009085/*
9086 * FUNCTION: WDA_ExitImpsReqCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009087 */
9088void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
9089{
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309090 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Abhishek Singh837adf22015-10-01 17:37:37 +05309091 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009093 "<------ %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309094 if(NULL == pWdaParams)
9095 {
9096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9097 "%s: pWdaParams received NULL", __func__);
9098 VOS_ASSERT(0);
9099 return;
9100 }
Abhishek Singh837adf22015-10-01 17:37:37 +05309101 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309102 if (IS_WDI_STATUS_FAILURE(status))
9103 {
9104 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9105 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309106
9107 pWDA->failureCounts.exitImpsFailureCount++;
9108 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9109 pWDA->failureCounts.exitImpsFailureCount)
9110 {
9111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9112 "%s: wdiStatus %d fail count %d", __func__,
9113 status,
9114 pWDA->failureCounts.exitImpsFailureCount);
9115 pWDA->failureCounts.exitImpsFailureCount = 0;
9116 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9117 WLAN_LOG_INDICATOR_HOST_DRIVER,
9118 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9119 FALSE, TRUE);
9120 }
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309121 if (WDI_STATUS_DEV_INTERNAL_FAILURE == status)
9122 {
9123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9124 FL("reload wlan driver"));
9125 wpalWlanReload();
9126 }
9127 }
9128 return;
Jeff Johnson295189b2012-06-20 16:38:30 -07009129}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309130
Jeff Johnson295189b2012-06-20 16:38:30 -07009131/*
9132 * FUNCTION: WDA_ProcessExitImpsReq
9133 * Request to WDI to Exit IMPS power state.
9134 */
9135VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
9136{
9137 WDI_Status status = WDI_STATUS_SUCCESS ;
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309138 tWDA_ReqParams *pWdaParams;
9139 WDI_ExitImpsReqParamsType *wdiExitImpsReqParams;
9140
Jeff Johnson295189b2012-06-20 16:38:30 -07009141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009142 "------> %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309143 wdiExitImpsReqParams = (WDI_ExitImpsReqParamsType *)vos_mem_malloc(
9144 sizeof(WDI_ExitImpsReqParamsType));
9145 if (NULL == wdiExitImpsReqParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009146 {
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9148 "%s: VOS MEM Alloc Failure", __func__);
9149 VOS_ASSERT(0);
9150 return VOS_STATUS_E_NOMEM;
9151 }
9152 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
9153 if(NULL == pWdaParams)
9154 {
9155 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9156 "%s: VOS MEM Alloc Failure", __func__);
9157 VOS_ASSERT(0);
9158 vos_mem_free(wdiExitImpsReqParams);
9159 return VOS_STATUS_E_NOMEM;
9160 }
9161 wdiExitImpsReqParams->wdiReqStatusCB = WDA_ExitImpsReqCallback;
9162 wdiExitImpsReqParams->pUserData = pWdaParams;
9163
9164 /* Store param pointer as passed in by caller */
9165 /* store Params pass it to WDI */
9166 pWdaParams->wdaWdiApiMsgParam = wdiExitImpsReqParams;
9167 pWdaParams->pWdaContext = pWDA;
9168 pWdaParams->wdaMsgParam = wdiExitImpsReqParams;
9169 status = WDI_ExitImpsReq(wdiExitImpsReqParams,
9170 (WDI_ExitImpsRspCb)WDA_ExitImpsRespCallback,
9171 pWdaParams);
9172 if (IS_WDI_STATUS_FAILURE(status))
9173 {
9174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9175 "Failure in Exit IMPS REQ WDI API, free all the memory " );
9176 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9177 vos_mem_free(pWdaParams);
9178 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009179 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009180 return CONVERT_WDI2VOS_STATUS(status) ;
9181}
Jeff Johnson295189b2012-06-20 16:38:30 -07009182/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009183 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009184 * send Enter BMPS RSP back to PE
9185 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009186void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009187{
9188 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309189 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009190 tEnterBmpsParams *pEnterBmpsRspParams;
9191
Jeff Johnson295189b2012-06-20 16:38:30 -07009192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009193 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009194 if(NULL == pWdaParams)
9195 {
9196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009197 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009198 VOS_ASSERT(0) ;
9199 return ;
9200 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009201
9202 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309203 if (NULL == pWDA)
9204 {
9205 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9206 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05309207
9208 if(pWdaParams->wdaWdiApiMsgParam)
9209 {
9210 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9211 }
9212 vos_mem_free(pWdaParams);
9213
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309214 VOS_ASSERT(0);
9215 return ;
9216 }
9217
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009218 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
9219
9220 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009221 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009222
9223 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009224 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05309225 if (eHAL_STATUS_SUCCESS != pEnterBmpsRspParams->status)
9226 {
9227 pWDA->failureCounts.enterBmpsFailureCount++;
9228 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9229 pWDA->failureCounts.enterBmpsFailureCount)
9230 {
9231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9232 "%s: wdiStatus %d fail count %d", __func__,
9233 pwdiEnterBmpsRsp->wdiStatus,
9234 pWDA->failureCounts.enterBmpsFailureCount);
9235 pWDA->failureCounts.enterBmpsFailureCount = 0;
9236 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9237 WLAN_LOG_INDICATOR_HOST_DRIVER,
9238 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
9239 FALSE, TRUE);
9240 }
9241 }
9242 else
9243 {
9244 pWDA->failureCounts.enterBmpsFailureCount = 0;
9245 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009246 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
9247
Jeff Johnson295189b2012-06-20 16:38:30 -07009248 return ;
9249}
Jeff Johnson295189b2012-06-20 16:38:30 -07009250/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009251 * FUNCTION: WDA_EnterBmpsReqCallback
9252 * Free memory and send Enter BMPS RSP back to PE.
9253 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
9254 */
9255void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
9256{
9257 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309258 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009259 tEnterBmpsParams *pEnterBmpsRspParams;
9260
9261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9262 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9263
9264 if(NULL == pWdaParams)
9265 {
9266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9267 "%s: pWdaParams received NULL", __func__);
9268 VOS_ASSERT(0);
9269 return;
9270 }
9271
9272 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309273 if (NULL == pWDA)
9274 {
9275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9276 "%s:pWDA is NULL", __func__);
9277 VOS_ASSERT(0);
9278 return ;
9279 }
9280
Yue Ma7f44bbe2013-04-12 11:47:39 -07009281 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
9282 pEnterBmpsRspParams->status = wdiStatus;
9283
9284 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9285 {
9286 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9287 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309288 pWDA->failureCounts.enterBmpsFailureCount++;
9289 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9290 pWDA->failureCounts.enterBmpsFailureCount)
9291 {
9292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9293 "%s: wdiStatus %d fail count %d", __func__,
9294 wdiStatus,
9295 pWDA->failureCounts.enterBmpsFailureCount);
9296 pWDA->failureCounts.enterBmpsFailureCount = 0;
9297 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9298 WLAN_LOG_INDICATOR_HOST_DRIVER,
9299 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
9300 FALSE, TRUE);
9301 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009302 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
9303 }
9304
9305 return;
9306}
9307/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009308 * FUNCTION: WDA_ProcessEnterBmpsReq
9309 * Request to WDI to Enter BMPS power state.
9310 */
9311VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
9312 tEnterBmpsParams *pEnterBmpsReqParams)
9313{
9314 WDI_Status status = WDI_STATUS_SUCCESS;
9315 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
9316 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009317 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009318 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009319 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
9320 {
9321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009322 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009323 VOS_ASSERT(0);
9324 return VOS_STATUS_E_FAILURE;
9325 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009326 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
9327 if (NULL == wdiEnterBmpsReqParams)
9328 {
9329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009330 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009331 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009332 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
9333 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009334 return VOS_STATUS_E_NOMEM;
9335 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009336 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
9337 if (NULL == pWdaParams)
9338 {
9339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009340 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009341 VOS_ASSERT(0);
9342 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009343 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
9344 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009345 return VOS_STATUS_E_NOMEM;
9346 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009347 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
9348 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
9349 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
9350 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08009351 // For ESE and 11R Roaming
Jeff Johnson295189b2012-06-20 16:38:30 -07009352 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
9353 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
9354 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009355 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
9356 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009357
Jeff Johnson295189b2012-06-20 16:38:30 -07009358 /* Store param pointer as passed in by caller */
9359 /* store Params pass it to WDI */
9360 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009361 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009362 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009363 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009364 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009365 if (IS_WDI_STATUS_FAILURE(status))
9366 {
9367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9368 "Failure in Enter BMPS REQ WDI API, free all the memory" );
9369 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009370 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07009371 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009372 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009373 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009374 return CONVERT_WDI2VOS_STATUS(status);
9375}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009376
9377
9378static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
9379 WDI_Status wdiStatus,
9380 tExitBmpsParams *pExitBmpsReqParams)
9381{
9382 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
9383
9384 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
9385}
9386
9387
Jeff Johnson295189b2012-06-20 16:38:30 -07009388/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009389 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009390 * send Exit BMPS RSP back to PE
9391 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009392void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009393{
9394 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309395 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009396 tExitBmpsParams *pExitBmpsRspParams;
9397
Jeff Johnson295189b2012-06-20 16:38:30 -07009398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009399 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009400 if(NULL == pWdaParams)
9401 {
9402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009403 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009404 VOS_ASSERT(0) ;
9405 return ;
9406 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009407
9408 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309409 if (NULL == pWDA)
9410 {
9411 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9412 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05309413
9414 if(pWdaParams->wdaWdiApiMsgParam)
9415 {
9416 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9417 }
9418 vos_mem_free(pWdaParams);
9419
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309420 VOS_ASSERT(0);
9421 return ;
9422 }
9423
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009424 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
9425
9426 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009427 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009428
Jeff Johnson295189b2012-06-20 16:38:30 -07009429 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Abhishek Singh837adf22015-10-01 17:37:37 +05309430 vos_mem_free(pWdaParams);
9431
9432 if (WDI_STATUS_SUCCESS != pwdiExitBmpsRsp->wdiStatus)
9433 {
9434 pWDA->failureCounts.exitBmpsFailureCount++;
9435 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9436 pWDA->failureCounts.exitBmpsFailureCount)
9437 {
9438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9439 "%s: Status %d fail count %d", __func__,
9440 pExitBmpsRspParams->status,
9441 pWDA->failureCounts.exitBmpsFailureCount);
9442 pWDA->failureCounts.exitBmpsFailureCount = 0;
9443 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9444 WLAN_LOG_INDICATOR_HOST_DRIVER,
9445 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9446 FALSE, TRUE);
9447 }
9448 }
9449 else
9450 {
9451 pWDA->failureCounts.exitBmpsFailureCount = 0;
9452 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009453
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009454 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009455 return ;
9456}
Jeff Johnson295189b2012-06-20 16:38:30 -07009457/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009458 * FUNCTION: WDA_ExitBmpsReqCallback
9459 * Free memory and send Exit BMPS RSP back to PE.
9460 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
9461 */
9462void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
9463{
9464 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309465 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009466 tExitBmpsParams *pExitBmpsRspParams;
9467
9468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9469 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9470
9471 if(NULL == pWdaParams)
9472 {
9473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9474 "%s: pWdaParams received NULL", __func__);
9475 VOS_ASSERT(0);
9476 return;
9477 }
9478
9479 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309480 if (NULL == pWDA)
9481 {
9482 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9483 "%s:pWDA is NULL", __func__);
9484 VOS_ASSERT(0);
9485 return ;
9486 }
9487
Yue Ma7f44bbe2013-04-12 11:47:39 -07009488 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
9489 pExitBmpsRspParams->status = wdiStatus;
9490
9491 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9492 {
9493 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9494 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309495 pWDA->failureCounts.exitBmpsFailureCount++;
9496 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9497 pWDA->failureCounts.exitBmpsFailureCount)
9498 {
9499 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9500 "%s: wdiStatus %d fail count %d", __func__,
9501 wdiStatus,
9502 pWDA->failureCounts.exitBmpsFailureCount);
9503 pWDA->failureCounts.exitBmpsFailureCount = 0;
9504 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9505 WLAN_LOG_INDICATOR_HOST_DRIVER,
9506 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9507 FALSE, TRUE);
9508 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009509 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
9510 }
9511
9512 return;
9513}
9514/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009515 * FUNCTION: WDA_ProcessExitBmpsReq
9516 * Request to WDI to Exit BMPS power state.
9517 */
9518VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
9519 tExitBmpsParams *pExitBmpsReqParams)
9520{
9521 WDI_Status status = WDI_STATUS_SUCCESS ;
9522 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
9523 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
9524 sizeof(WDI_ExitBmpsReqParamsType)) ;
9525 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009527 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009528 if(NULL == wdiExitBmpsReqParams)
9529 {
9530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009531 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009532 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009533 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009534 return VOS_STATUS_E_NOMEM;
9535 }
9536 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9537 if(NULL == pWdaParams)
9538 {
9539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009540 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009541 VOS_ASSERT(0);
9542 vos_mem_free(wdiExitBmpsReqParams);
9543 return VOS_STATUS_E_NOMEM;
9544 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009545 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07009546
9547 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
9548
Yue Ma7f44bbe2013-04-12 11:47:39 -07009549 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
9550 wdiExitBmpsReqParams->pUserData = pWdaParams;
9551
Jeff Johnson295189b2012-06-20 16:38:30 -07009552 /* Store param pointer as passed in by caller */
9553 /* store Params pass it to WDI */
9554 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
9555 pWdaParams->pWdaContext = pWDA;
9556 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009557 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009558 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009559 if(IS_WDI_STATUS_FAILURE(status))
9560 {
9561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9562 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009563 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9564 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009565 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009566 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009567 return CONVERT_WDI2VOS_STATUS(status) ;
9568}
Jeff Johnson295189b2012-06-20 16:38:30 -07009569/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009570 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009571 * send Enter UAPSD RSP back to PE
9572 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009573void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009574{
9575 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309576 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009577 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009579 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009580 if(NULL == pWdaParams)
9581 {
9582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009583 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009584 VOS_ASSERT(0) ;
9585 return ;
9586 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009587
9588 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309589 if (NULL == pWDA)
9590 {
9591 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9592 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05309593
9594 if(pWdaParams->wdaWdiApiMsgParam)
9595 {
9596 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9597 }
9598 vos_mem_free(pWdaParams);
9599
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309600 VOS_ASSERT(0);
9601 return ;
9602 }
9603
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009604 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
9605
9606 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009607 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009608
Jeff Johnson295189b2012-06-20 16:38:30 -07009609 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9610 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009611 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009612 return ;
9613}
Jeff Johnson295189b2012-06-20 16:38:30 -07009614/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009615 * FUNCTION: WDA_EnterUapsdReqCallback
9616 * Free memory and send Enter UAPSD RSP back to PE.
9617 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
9618 */
9619void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
9620{
9621 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9622 tWDA_CbContext *pWDA;
9623 tUapsdParams *pEnterUapsdRsqParams;
9624
9625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9626 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9627
9628 if(NULL == pWdaParams)
9629 {
9630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9631 "%s: pWdaParams received NULL", __func__);
9632 VOS_ASSERT(0);
9633 return;
9634 }
9635
9636 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309637 if (NULL == pWDA)
9638 {
9639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9640 "%s:pWDA is NULL", __func__);
9641 VOS_ASSERT(0);
9642 return ;
9643 }
9644
Yue Ma7f44bbe2013-04-12 11:47:39 -07009645 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
9646 pEnterUapsdRsqParams->status = wdiStatus;
9647
9648 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9649 {
9650 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9651 vos_mem_free(pWdaParams);
9652 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
9653 }
9654
9655 return;
9656}
9657/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009658 * FUNCTION: WDA_ProcessEnterUapsdReq
9659 * Request to WDI to Enter UAPSD power state.
9660 */
9661VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
9662 tUapsdParams *pEnterUapsdReqParams)
9663{
9664 WDI_Status status = WDI_STATUS_SUCCESS ;
9665 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
9666 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
9667 sizeof(WDI_EnterUapsdReqParamsType)) ;
9668 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009670 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009671 if(NULL == wdiEnterUapsdReqParams)
9672 {
9673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009674 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009675 VOS_ASSERT(0);
9676 return VOS_STATUS_E_NOMEM;
9677 }
9678 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9679 if(NULL == pWdaParams)
9680 {
9681 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009682 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009683 VOS_ASSERT(0);
9684 vos_mem_free(wdiEnterUapsdReqParams);
9685 return VOS_STATUS_E_NOMEM;
9686 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009687 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
9688 pEnterUapsdReqParams->beDeliveryEnabled;
9689 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
9690 pEnterUapsdReqParams->beTriggerEnabled;
9691 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
9692 pEnterUapsdReqParams->bkDeliveryEnabled;
9693 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
9694 pEnterUapsdReqParams->bkTriggerEnabled;
9695 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
9696 pEnterUapsdReqParams->viDeliveryEnabled;
9697 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
9698 pEnterUapsdReqParams->viTriggerEnabled;
9699 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
9700 pEnterUapsdReqParams->voDeliveryEnabled;
9701 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
9702 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07009703 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07009704
Yue Ma7f44bbe2013-04-12 11:47:39 -07009705 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
9706 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009707
Jeff Johnson295189b2012-06-20 16:38:30 -07009708 /* Store param pointer as passed in by caller */
9709 /* store Params pass it to WDI */
9710 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
9711 pWdaParams->pWdaContext = pWDA;
9712 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009713 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009714 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009715 if(IS_WDI_STATUS_FAILURE(status))
9716 {
9717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9718 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
9719 vos_mem_free(pWdaParams->wdaMsgParam) ;
9720 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9721 vos_mem_free(pWdaParams) ;
9722 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009723 return CONVERT_WDI2VOS_STATUS(status) ;
9724}
Jeff Johnson295189b2012-06-20 16:38:30 -07009725/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009726 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009727 * send Exit UAPSD RSP back to PE
9728 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009729void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009730{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009731
9732 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9733 tWDA_CbContext *pWDA;
9734 tExitUapsdParams *pExitUapsdRspParams;
9735
Jeff Johnson295189b2012-06-20 16:38:30 -07009736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009737 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009738 if(NULL == pWdaParams)
9739 {
9740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009741 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009742 VOS_ASSERT(0);
9743 return;
9744 }
9745
9746 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9747 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
9748
9749 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009750 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009751
9752 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9753 vos_mem_free(pWdaParams) ;
9754
9755 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009756 return ;
9757}
Jeff Johnson295189b2012-06-20 16:38:30 -07009758/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009759 * FUNCTION: WDA_ExitUapsdReqCallback
9760 * Free memory and send Exit UAPSD RSP back to PE.
9761 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
9762 */
9763void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
9764{
9765 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309766 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009767 tExitUapsdParams *pExitUapsdRspParams;
9768
9769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9770 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9771
9772 if(NULL == pWdaParams)
9773 {
9774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9775 "%s: pWdaParams received NULL", __func__);
9776 VOS_ASSERT(0);
9777 return;
9778 }
9779
9780 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309781 if (NULL == pWDA)
9782 {
9783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9784 "%s:pWDA is NULL", __func__);
9785 VOS_ASSERT(0);
9786 return ;
9787 }
9788
Yue Ma7f44bbe2013-04-12 11:47:39 -07009789 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
9790 pExitUapsdRspParams->status = wdiStatus;
9791
9792 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9793 {
9794 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9795 vos_mem_free(pWdaParams);
9796 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
9797 }
9798
9799 return;
9800}
9801/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009802 * FUNCTION: WDA_ProcessExitUapsdReq
9803 * Request to WDI to Exit UAPSD power state.
9804 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009805VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
9806 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009807{
9808 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009809 tWDA_ReqParams *pWdaParams ;
9810 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
9811 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
9812 sizeof(WDI_ExitUapsdReqParamsType)) ;
9813
Jeff Johnson295189b2012-06-20 16:38:30 -07009814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009815 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009816
9817 if(NULL == wdiExitUapsdReqParams)
9818 {
9819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009820 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009821 VOS_ASSERT(0);
9822 return VOS_STATUS_E_NOMEM;
9823 }
9824 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9825 if(NULL == pWdaParams)
9826 {
9827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009828 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009829 VOS_ASSERT(0);
9830 vos_mem_free(wdiExitUapsdReqParams);
9831 return VOS_STATUS_E_NOMEM;
9832 }
9833
9834 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009835 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
9836 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009837
9838 /* Store param pointer as passed in by caller */
9839 /* store Params pass it to WDI */
9840 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
9841 pWdaParams->pWdaContext = pWDA;
9842 pWdaParams->wdaMsgParam = pExitUapsdParams;
9843
Yue Ma7f44bbe2013-04-12 11:47:39 -07009844 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009845 if(IS_WDI_STATUS_FAILURE(status))
9846 {
9847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9848 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009849 vos_mem_free(pWdaParams->wdaMsgParam) ;
9850 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9851 vos_mem_free(pWdaParams) ;
9852
Jeff Johnson295189b2012-06-20 16:38:30 -07009853 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009854 return CONVERT_WDI2VOS_STATUS(status) ;
9855}
9856
Jeff Johnson295189b2012-06-20 16:38:30 -07009857/*
9858 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
9859 *
9860 */
9861void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
9862{
9863 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009865 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009866 if(NULL == pWdaParams)
9867 {
9868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009869 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009870 VOS_ASSERT(0) ;
9871 return ;
9872 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009873 if( pWdaParams != NULL )
9874 {
9875 if( pWdaParams->wdaWdiApiMsgParam != NULL )
9876 {
9877 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9878 }
9879 if( pWdaParams->wdaMsgParam != NULL )
9880 {
9881 vos_mem_free(pWdaParams->wdaMsgParam) ;
9882 }
9883 vos_mem_free(pWdaParams) ;
9884 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009885 return ;
9886}
Jeff Johnson295189b2012-06-20 16:38:30 -07009887/*
9888 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
9889 * Request to WDI to set the power save params at start.
9890 */
9891VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
9892 tSirPowerSaveCfg *pPowerSaveCfg)
9893{
9894 WDI_Status status = WDI_STATUS_SUCCESS ;
9895 tHalCfg *tlvStruct = NULL ;
9896 tANI_U8 *tlvStructStart = NULL ;
9897 v_PVOID_t *configParam;
9898 tANI_U32 configParamSize;
9899 tANI_U32 *configDataValue;
9900 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
9901 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009903 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009904 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
9905 {
9906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009907 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009908 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009909 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009910 return VOS_STATUS_E_FAILURE;
9911 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009912 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
9913 if (NULL == wdiPowerSaveCfg)
9914 {
9915 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009916 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009917 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009918 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009919 return VOS_STATUS_E_NOMEM;
9920 }
9921 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9922 if(NULL == pWdaParams)
9923 {
9924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009925 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009926 VOS_ASSERT(0);
9927 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009928 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009929 return VOS_STATUS_E_NOMEM;
9930 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009931 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
9932 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07009933 if(NULL == configParam)
9934 {
9935 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08009936 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009937 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07009938 vos_mem_free(pWdaParams);
9939 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009940 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009941 return VOS_STATUS_E_NOMEM;
9942 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009943 vos_mem_set(configParam, configParamSize, 0);
9944 wdiPowerSaveCfg->pConfigBuffer = configParam;
9945 tlvStruct = (tHalCfg *)configParam;
9946 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009947 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
9948 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
9949 tlvStruct->length = sizeof(tANI_U32);
9950 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9951 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07009952 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9953 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009954 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
9955 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
9956 tlvStruct->length = sizeof(tANI_U32);
9957 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9958 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07009959 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9960 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009961 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
9962 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
9963 tlvStruct->length = sizeof(tANI_U32);
9964 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9965 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07009966 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9967 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009968 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
9969 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
9970 tlvStruct->length = sizeof(tANI_U32);
9971 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9972 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07009973 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9974 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009975 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
9976 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
9977 tlvStruct->length = sizeof(tANI_U32);
9978 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9979 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07009980 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9981 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009982 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
9983 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
9984 tlvStruct->length = sizeof(tANI_U32);
9985 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9986 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07009987 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9988 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009989 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
9990 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
9991 tlvStruct->length = sizeof(tANI_U32);
9992 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9993 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07009994 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9995 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009996 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
9997 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
9998 tlvStruct->length = sizeof(tANI_U32);
9999 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10000 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
10001 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10002 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010003 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
10004 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
10005 tlvStruct->length = sizeof(tANI_U32);
10006 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10007 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
10008 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10009 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010010 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
10011 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
10012 tlvStruct->length = sizeof(tANI_U32);
10013 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10014 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -070010015 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10016 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010017 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
10018 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
10019 tlvStruct->length = sizeof(tANI_U32);
10020 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10021 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070010022 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10023 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010024 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010025 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010026 /* store Params pass it to WDI */
10027 pWdaParams->wdaMsgParam = configParam;
10028 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
10029 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070010030 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
10031 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010032 if(IS_WDI_STATUS_FAILURE(status))
10033 {
10034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10035 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
10036 vos_mem_free(pWdaParams->wdaMsgParam);
10037 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10038 vos_mem_free(pWdaParams);
10039 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010040 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -070010041 return CONVERT_WDI2VOS_STATUS(status);
10042}
Jeff Johnson295189b2012-06-20 16:38:30 -070010043/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010044 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010045 *
10046 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010047void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010048{
Yue Ma7f44bbe2013-04-12 11:47:39 -070010049 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10050
Jeff Johnson295189b2012-06-20 16:38:30 -070010051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010052 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070010053
10054 if(NULL == pWdaParams)
10055 {
10056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10057 "%s: pWdaParams received NULL", __func__);
10058 VOS_ASSERT(0);
10059 return ;
10060 }
10061
10062 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -070010063 vos_mem_free(pWdaParams);
10064
Jeff Johnson295189b2012-06-20 16:38:30 -070010065 return ;
10066}
Jeff Johnson295189b2012-06-20 16:38:30 -070010067/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010068 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
10069 * Free memory.
10070 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
10071 */
10072void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
10073{
10074 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10075
10076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10077 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10078
10079 if(NULL == pWdaParams)
10080 {
10081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10082 "%s: pWdaParams received NULL", __func__);
10083 VOS_ASSERT(0);
10084 return;
10085 }
10086
10087 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10088 {
10089 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10090 vos_mem_free(pWdaParams);
10091 }
10092
10093 return;
10094}
10095/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010096 * FUNCTION: WDA_SetUapsdAcParamsReq
10097 * Request to WDI to set the UAPSD params for an ac (sta mode).
10098 */
10099VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
10100 tUapsdInfo *pUapsdInfo)
10101{
10102 WDI_Status status = WDI_STATUS_SUCCESS;
10103 tWDA_CbContext *pWDA = NULL ;
10104 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
10105 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
10106 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
10107 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010109 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010110 if(NULL == wdiUapsdParams)
10111 {
10112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010113 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010114 VOS_ASSERT(0);
10115 return VOS_STATUS_E_NOMEM;
10116 }
10117 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10118 if(NULL == pWdaParams)
10119 {
10120 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010121 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010122 VOS_ASSERT(0);
10123 vos_mem_free(wdiUapsdParams);
10124 return VOS_STATUS_E_NOMEM;
10125 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010126 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
10127 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
10128 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
10129 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
10130 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
10131 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010132 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
10133 wdiUapsdParams->pUserData = pWdaParams;
10134
Jeff Johnson295189b2012-06-20 16:38:30 -070010135 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -070010136 pWdaParams->pWdaContext = pWDA;
10137 /* Store param pointer as passed in by caller */
10138 pWdaParams->wdaMsgParam = pUapsdInfo;
10139 /* store Params pass it to WDI */
10140 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010141 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010142 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070010143 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010144 if(IS_WDI_STATUS_FAILURE(status))
10145 {
10146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10147 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
10148 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10149 vos_mem_free(pWdaParams);
10150 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010151 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
10152 return VOS_STATUS_SUCCESS;
10153 else
10154 return VOS_STATUS_E_FAILURE;
10155
Jeff Johnson295189b2012-06-20 16:38:30 -070010156}
10157/*
10158 * FUNCTION: WDA_ClearUapsdAcParamsReq
10159 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
10160 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
10161 * and again enter the UPASD with the modified params. Hence the disable
10162 * function was kept empty.
10163 *
10164 */
10165VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
10166{
10167 /* do nothing */
10168 return VOS_STATUS_SUCCESS;
10169}
Jeff Johnson295189b2012-06-20 16:38:30 -070010170/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010171 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010172 *
10173 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010174void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010175{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010176 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10177
Jeff Johnson295189b2012-06-20 16:38:30 -070010178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010179 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010180
10181 if(NULL == pWdaParams)
10182 {
10183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010184 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010185 VOS_ASSERT(0) ;
10186 return ;
10187 }
10188
10189 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10190 vos_mem_free(pWdaParams->wdaMsgParam);
10191 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010192
Jeff Johnson295189b2012-06-20 16:38:30 -070010193 //print a msg, nothing else to do
10194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010195 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010196 return ;
10197}
Jeff Johnson295189b2012-06-20 16:38:30 -070010198/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010199 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
10200 * Free memory.
10201 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
10202 */
10203void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
10204{
10205 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10206
10207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10208 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10209
10210 if(NULL == pWdaParams)
10211 {
10212 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10213 "%s: pWdaParams received NULL", __func__);
10214 VOS_ASSERT(0);
10215 return;
10216 }
10217
10218 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10219 {
10220 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10221 vos_mem_free(pWdaParams->wdaMsgParam);
10222 vos_mem_free(pWdaParams);
10223 }
10224
10225 return;
10226}
10227/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010228 * FUNCTION: WDA_UpdateUapsdParamsReq
10229 * Request to WDI to update UAPSD params (in softAP mode) for a station.
10230 */
10231VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
10232 tUpdateUapsdParams* pUpdateUapsdInfo)
10233{
10234 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010235 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010236 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
10237 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
10238 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010239 tWDA_ReqParams *pWdaParams = NULL;
10240
Jeff Johnson295189b2012-06-20 16:38:30 -070010241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010242 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010243 if(NULL == wdiUpdateUapsdParams)
10244 {
10245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010246 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010247 VOS_ASSERT(0);
10248 return VOS_STATUS_E_NOMEM;
10249 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010250 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
10251 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
10252 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010253 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
10254 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010255
10256 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10257 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010258 {
10259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010260 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010261 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010262 vos_mem_free(pUpdateUapsdInfo);
10263 vos_mem_free(wdiUpdateUapsdParams);
10264 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -070010265 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010266 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010267 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -070010268 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010269 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
10270 pWdaParams->pWdaContext = pWDA;
10271
Jeff Johnson43971f52012-07-17 12:26:56 -070010272 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010273 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010274 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010275
Jeff Johnson43971f52012-07-17 12:26:56 -070010276 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010277 {
10278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10279 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010280 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
10281 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10282 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070010283 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010284 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010285 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010286}
Jeff Johnson295189b2012-06-20 16:38:30 -070010287/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010288 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010289 *
10290 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010291void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010292{
10293 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010295 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010296 if(WDI_STATUS_SUCCESS != wdiStatus)
10297 {
10298 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080010299 "%s: RXP config filter failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070010300 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010301 if(NULL == pWdaParams)
10302 {
10303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010304 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010305 VOS_ASSERT(0) ;
10306 return ;
10307 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010308 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10309 vos_mem_free(pWdaParams->wdaMsgParam);
10310 vos_mem_free(pWdaParams);
10311 return ;
10312}
Jeff Johnson295189b2012-06-20 16:38:30 -070010313/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010314 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
10315 * Free memory.
10316 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
10317 */
10318void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
10319{
10320 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10321
10322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10323 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10324
10325 if(NULL == pWdaParams)
10326 {
10327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10328 "%s: pWdaParams received NULL", __func__);
10329 VOS_ASSERT(0);
10330 return;
10331 }
10332
10333 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10334 {
10335 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10336 vos_mem_free(pWdaParams->wdaMsgParam);
10337 vos_mem_free(pWdaParams);
10338 }
10339
10340 return;
10341}
10342/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010343 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
10344 *
10345 */
10346VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
10347 tSirWlanSetRxpFilters *pWlanSuspendParam)
10348{
Jeff Johnson295189b2012-06-20 16:38:30 -070010349 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010350 WDI_Status wstatus;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +053010351 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010352 tWDA_ReqParams *pWdaParams ;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +053010353 /* Sanity Check
10354 * This is very unlikely and add assert to collect more info next time */
10355 if(NULL == pWlanSuspendParam)
10356 {
10357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10358 "%s: pWlanSuspendParam received NULL", __func__);
10359 VOS_ASSERT(0) ;
10360 return VOS_STATUS_E_FAULT;
10361 }
10362 wdiRxpFilterParams = (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
10363 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010365 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010366 if(NULL == wdiRxpFilterParams)
10367 {
10368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010369 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010370 VOS_ASSERT(0);
10371 vos_mem_free(pWlanSuspendParam);
10372 return VOS_STATUS_E_NOMEM;
10373 }
10374 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10375 if(NULL == pWdaParams)
10376 {
10377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010378 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010379 VOS_ASSERT(0);
10380 vos_mem_free(wdiRxpFilterParams);
10381 vos_mem_free(pWlanSuspendParam);
10382 return VOS_STATUS_E_NOMEM;
10383 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010384 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
10385 pWlanSuspendParam->setMcstBcstFilter;
10386 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
10387 pWlanSuspendParam->configuredMcstBcstFilterSetting;
10388
Yue Ma7f44bbe2013-04-12 11:47:39 -070010389 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
10390 wdiRxpFilterParams->pUserData = pWdaParams;
10391
Jeff Johnson295189b2012-06-20 16:38:30 -070010392 pWdaParams->pWdaContext = pWDA;
10393 pWdaParams->wdaMsgParam = pWlanSuspendParam;
10394 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010395 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010396 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070010397 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010398 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010399 {
10400 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10401 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010402 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010403 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10404 vos_mem_free(pWdaParams->wdaMsgParam);
10405 vos_mem_free(pWdaParams);
10406 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010407 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010408}
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010409
10410/*
Siddharth Bhal64246172015-02-27 01:04:37 +053010411 * FUNCTION: WDA_ProcessGetFrameLogReq
10412 * Request to WDI to get the Frame Log.
10413 */
10414VOS_STATUS WDA_ProcessGetFrameLogReq(tWDA_CbContext *pWDA,
10415 tAniGetFrameLogReq *pGetFrameLog)
10416{
10417 VOS_STATUS status = VOS_STATUS_SUCCESS;
10418 WDI_Status wstatus;
10419 WDI_GetFrameLogReqInfoType *wdiGetFrameLogInfo;
10420 tWDA_ReqParams *pWdaParams ;
10421
10422 /* Sanity Check*/
10423 if(NULL == pGetFrameLog)
10424 {
10425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010426 "%s: pFWLoggingInitParam received NULL", __func__);
Siddharth Bhal64246172015-02-27 01:04:37 +053010427 VOS_ASSERT(0) ;
10428 return VOS_STATUS_E_FAULT;
10429 }
10430
10431 wdiGetFrameLogInfo = (WDI_GetFrameLogReqInfoType *)vos_mem_malloc(
10432 sizeof(WDI_GetFrameLogReqInfoType));
10433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10434 "------> %s " ,__func__);
10435
10436 if(NULL == wdiGetFrameLogInfo)
10437 {
10438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10439 "%s: VOS MEM Alloc Failure", __func__);
10440 VOS_ASSERT(0);
10441 vos_mem_free(pGetFrameLog);
10442 return VOS_STATUS_E_NOMEM;
10443 }
10444
10445 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
10446 if(NULL == pWdaParams)
10447 {
10448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10449 "%s: VOS MEM Alloc Failure", __func__);
10450 VOS_ASSERT(0);
10451 vos_mem_free(wdiGetFrameLogInfo);
10452 vos_mem_free(pGetFrameLog);
10453 return VOS_STATUS_E_NOMEM;
10454 }
10455
10456 wdiGetFrameLogInfo->flags = pGetFrameLog->getFrameLogCmdFlag;
10457
10458 pWdaParams->pWdaContext = pWDA;
10459 pWdaParams->wdaMsgParam = pGetFrameLog;
10460 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGetFrameLogInfo;
10461
10462 wstatus = WDI_GetFrameLogReq(wdiGetFrameLogInfo,
10463 (WDI_GetFrameLogRspCb)WDA_GetFrameLogRspCallback,
10464 pWdaParams);
10465 if(IS_WDI_STATUS_FAILURE(wstatus))
10466 {
10467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10468 "Failure in get frame log REQ WDI API, free all the memory" );
10469 status = CONVERT_WDI2VOS_STATUS(wstatus);
10470 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10471 vos_mem_free(pWdaParams->wdaMsgParam);
10472 vos_mem_free(pWdaParams);
10473 }
10474 return status;
10475}
10476
Sachin Ahuja715aafc2015-07-21 23:35:10 +053010477
10478/*
10479 * FUNCTION: WDA_FatalEventLogsRspCallback
10480 * recieves Flush Logs response from FW
10481 */
10482
10483void WDA_FatalEventLogsRspCallback(WDI_FatalEventLogsRspParamType* wdiRsp,
10484 void* pUserData)
10485{
10486 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10487
10488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10489 "<------ %s,wdiStatus:%d " ,
10490 __func__, wdiRsp->wdiStatus);
10491 if(NULL == pWdaParams)
10492 {
10493 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10494 "%s: pWdaParams received NULL", __func__);
10495 VOS_ASSERT(0);
10496 return ;
10497 }
10498
10499 if(NULL == pWdaParams->wdaMsgParam)
10500 {
10501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10502 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
10503 VOS_ASSERT(0);
10504 vos_mem_free(pWdaParams);
10505 return ;
10506 }
10507
10508 if(IS_WDI_STATUS_FAILURE(wdiRsp->wdiStatus))
10509 {
10510 /*
10511 * If it is failure, it means JOb is already posted by FW
10512 * for logging, so for failure scenario also we will get the
10513 * done indication
10514 */
10515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10516 "%s: Fatal Event Rsp Failure,wdiStatus : %d ",
10517 __func__, wdiRsp->wdiStatus);
10518 }
10519
10520 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10521 vos_mem_free(pWdaParams->wdaMsgParam);
10522 vos_mem_free(pWdaParams);
10523
10524 return;
10525
10526}
10527
10528/*
10529 * FUNCTION: WDA_ProcessFatalEventLogsReq
10530 * Request to WDI to send the fatal Event Logs Req.
10531 */
10532
10533VOS_STATUS WDA_ProcessFatalEventLogsReq(tWDA_CbContext *pWDA,
10534 tSirFatalEventLogsReqParam *pFatalEventLogsReqParam)
10535{
10536 VOS_STATUS status = VOS_STATUS_SUCCESS;
10537 WDI_FatalEventLogsReqInfoType *wdiFatalEventLogsReqInfo;
10538 tWDA_ReqParams *pWdaParams ;
10539 WDI_Status wstatus;
10540
10541
10542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10543 "------> %s " ,__func__);
10544 if (NULL == pFatalEventLogsReqParam)
10545 {
10546 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10547 "%s: pMgmtLoggingInitParam received NULL", __func__);
10548 VOS_ASSERT(0) ;
10549 return VOS_STATUS_E_FAULT;
10550 }
10551 wdiFatalEventLogsReqInfo = (WDI_FatalEventLogsReqInfoType *)vos_mem_malloc(
10552 sizeof(WDI_FatalEventLogsReqInfoType));
10553 if(NULL == wdiFatalEventLogsReqInfo)
10554 {
10555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10556 "%s: VOS MEM Alloc Failure", __func__);
10557 VOS_ASSERT(0);
10558 vos_mem_free(pFatalEventLogsReqParam);
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,
10565 "%s: VOS MEM Alloc Failure", __func__);
10566 VOS_ASSERT(0);
10567 vos_mem_free(wdiFatalEventLogsReqInfo);
10568 vos_mem_free(pFatalEventLogsReqParam);
10569 return VOS_STATUS_E_NOMEM;
10570 }
10571 wdiFatalEventLogsReqInfo->reason_code = pFatalEventLogsReqParam->reason_code;
10572 pWdaParams->pWdaContext = pWDA;
10573 pWdaParams->wdaMsgParam = pFatalEventLogsReqParam;
10574 pWdaParams->wdaWdiApiMsgParam = (void *)wdiFatalEventLogsReqInfo;
10575
10576 wstatus = WDI_FatalEventLogsReq(wdiFatalEventLogsReqInfo,
10577 (WDI_FatalEventLogsRspCb)WDA_FatalEventLogsRspCallback,
10578 pWdaParams);
10579 if(IS_WDI_STATUS_FAILURE(wstatus))
10580 {
10581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10582 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
10583 status = CONVERT_WDI2VOS_STATUS(wstatus);
10584 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10585 vos_mem_free(pWdaParams->wdaMsgParam);
10586 vos_mem_free(pWdaParams);
10587 }
10588
10589 return status;
10590
10591}
10592
Siddharth Bhal64246172015-02-27 01:04:37 +053010593/*
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010594 * FUNCTION: WDA_ProcessFWLoggingInitReq
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010595 *
10596 */
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010597VOS_STATUS WDA_ProcessFWLoggingInitReq(tWDA_CbContext *pWDA,
10598 tSirFWLoggingInitParam *pFWLoggingInitParam)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010599{
10600 VOS_STATUS status = VOS_STATUS_SUCCESS;
10601 WDI_Status wstatus;
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010602 WDI_FWLoggingInitReqInfoType *wdiFWLoggingInitInfo;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010603 tWDA_ReqParams *pWdaParams ;
10604
10605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10606 "------> %s " ,__func__);
10607
10608 /* Sanity Check*/
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010609 if(NULL == pFWLoggingInitParam)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010610 {
10611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010612 "%s: pFWLoggingInitParam received NULL", __func__);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010613 VOS_ASSERT(0) ;
10614 return VOS_STATUS_E_FAULT;
10615 }
10616
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010617 wdiFWLoggingInitInfo = (WDI_FWLoggingInitReqInfoType *)vos_mem_malloc(
10618 sizeof(WDI_FWLoggingInitReqInfoType));
10619 if(NULL == wdiFWLoggingInitInfo)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010620 {
10621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10622 "%s: VOS MEM Alloc Failure", __func__);
10623 VOS_ASSERT(0);
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010624 vos_mem_free(pFWLoggingInitParam);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010625 return VOS_STATUS_E_NOMEM;
10626 }
10627
10628 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10629 if(NULL == pWdaParams)
10630 {
10631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10632 "%s: VOS MEM Alloc Failure", __func__);
10633 VOS_ASSERT(0);
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010634 vos_mem_free(wdiFWLoggingInitInfo);
10635 vos_mem_free(pFWLoggingInitParam);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010636 return VOS_STATUS_E_NOMEM;
10637 }
10638
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010639 wdiFWLoggingInitInfo->enableFlag = pFWLoggingInitParam->enableFlag;
10640 wdiFWLoggingInitInfo->frameType = pFWLoggingInitParam->frameType;
10641 wdiFWLoggingInitInfo->frameSize = pFWLoggingInitParam->frameSize;
10642 wdiFWLoggingInitInfo->bufferMode = pFWLoggingInitParam->bufferMode;
10643 wdiFWLoggingInitInfo->continuousFrameLogging =
10644 pFWLoggingInitParam->continuousFrameLogging;
10645 wdiFWLoggingInitInfo->minLogBufferSize=
10646 pFWLoggingInitParam->minLogBufferSize;
10647 wdiFWLoggingInitInfo->maxLogBufferSize=
10648 pFWLoggingInitParam->maxLogBufferSize;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010649
10650 pWdaParams->pWdaContext = pWDA;
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010651 pWdaParams->wdaMsgParam = pFWLoggingInitParam;
10652 pWdaParams->wdaWdiApiMsgParam = (void *)wdiFWLoggingInitInfo;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010653
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010654 wstatus = WDI_FWLoggingInitReq(wdiFWLoggingInitInfo,
10655 (WDI_FWLoggingInitRspCb)WDA_FWLoggingInitRspCallback,
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010656 pWdaParams);
10657 if(IS_WDI_STATUS_FAILURE(wstatus))
10658 {
10659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10660 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
10661 status = CONVERT_WDI2VOS_STATUS(wstatus);
10662 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10663 vos_mem_free(pWdaParams->wdaMsgParam);
10664 vos_mem_free(pWdaParams);
10665 }
10666
10667 return status;
10668}
10669
Jeff Johnson295189b2012-06-20 16:38:30 -070010670/*
Gupta, Kapil7c34b322015-09-30 13:12:35 +053010671 * FUNCTION: WDA_ProcessStartRssiMonitorReq
10672 *
10673 */
10674VOS_STATUS WDA_ProcessStartRssiMonitorReq(tWDA_CbContext *pWDA,
10675 tSirRssiMonitorReq *pRssiMonitorReqParam)
10676{
10677 VOS_STATUS status = VOS_STATUS_SUCCESS;
10678 WDI_Status wstatus;
10679 WDI_RssiMonitorReqInfoType *wdiRssiMonitorInfo;
10680 tWDA_ReqParams *pWdaParams ;
10681
10682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10683 "------> %s " ,__func__);
10684
10685 /* Sanity Check*/
10686 if(NULL == pRssiMonitorReqParam)
10687 {
10688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10689 "%s: pRssiMonitorReqParam received NULL", __func__);
10690 VOS_ASSERT(0) ;
10691 return VOS_STATUS_E_FAULT;
10692 }
10693
10694 wdiRssiMonitorInfo = (WDI_RssiMonitorReqInfoType *)vos_mem_malloc(
10695 sizeof(WDI_RssiMonitorReqInfoType));
10696 if(NULL == wdiRssiMonitorInfo)
10697 {
10698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10699 "%s: VOS MEM Alloc Failure", __func__);
10700 VOS_ASSERT(0);
10701 vos_mem_free(pRssiMonitorReqParam);
10702 return VOS_STATUS_E_NOMEM;
10703 }
10704
10705 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10706 if(NULL == pWdaParams)
10707 {
10708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10709 "%s: VOS MEM Alloc Failure", __func__);
10710 VOS_ASSERT(0);
10711 vos_mem_free(wdiRssiMonitorInfo);
10712 vos_mem_free(pRssiMonitorReqParam);
10713 return VOS_STATUS_E_NOMEM;
10714 }
10715
10716 wdiRssiMonitorInfo->requestId = pRssiMonitorReqParam->requestId;
10717 wdiRssiMonitorInfo->minRssi = pRssiMonitorReqParam->minRssi;
10718 wdiRssiMonitorInfo->maxRssi = pRssiMonitorReqParam->maxRssi;
10719 vos_mem_copy(wdiRssiMonitorInfo->currentBssId,
10720 &(pRssiMonitorReqParam->currentBssId), sizeof(tSirMacAddr));
10721
10722 pWdaParams->pWdaContext = pWDA;
10723 pWdaParams->wdaMsgParam = pRssiMonitorReqParam;
10724 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRssiMonitorInfo;
10725
10726 wstatus = WDI_StartRssiMonitorReq(wdiRssiMonitorInfo,
10727 (WDI_RssiMonitorStartRspCb)WDA_RssiMonitorStartRspCallback,
10728 pWdaParams);
10729 if(IS_WDI_STATUS_FAILURE(wstatus))
10730 {
10731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10732 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
10733 status = CONVERT_WDI2VOS_STATUS(wstatus);
10734 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10735 vos_mem_free(pWdaParams->wdaMsgParam);
10736 vos_mem_free(pWdaParams);
10737 }
10738
10739 return status;
10740}
10741
10742/*
10743 * FUNCTION: WDA_ProcessStopRssiMonitorReq
10744 *
10745 */
10746VOS_STATUS WDA_ProcessStopRssiMonitorReq(tWDA_CbContext *pWDA,
10747 tSirRssiMonitorReq *pRssiMonitorReqParam)
10748{
10749 VOS_STATUS status = VOS_STATUS_SUCCESS;
10750 WDI_Status wstatus;
10751 WDI_RssiMonitorReqInfoType *wdiRssiMonitorInfo;
10752 tWDA_ReqParams *pWdaParams ;
10753
10754 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10755 "------> %s " ,__func__);
10756
10757 /* Sanity Check*/
10758 if(NULL == pRssiMonitorReqParam)
10759 {
10760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10761 "%s: pRssiMonitorReqParam received NULL", __func__);
10762 VOS_ASSERT(0) ;
10763 return VOS_STATUS_E_FAULT;
10764 }
10765
10766 wdiRssiMonitorInfo = (WDI_RssiMonitorReqInfoType *)vos_mem_malloc(
10767 sizeof(WDI_RssiMonitorReqInfoType));
10768 if(NULL == wdiRssiMonitorInfo)
10769 {
10770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10771 "%s: VOS MEM Alloc Failure", __func__);
10772 VOS_ASSERT(0);
10773 vos_mem_free(pRssiMonitorReqParam);
10774 return VOS_STATUS_E_NOMEM;
10775 }
10776
10777 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10778 if(NULL == pWdaParams)
10779 {
10780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10781 "%s: VOS MEM Alloc Failure", __func__);
10782 VOS_ASSERT(0);
10783 vos_mem_free(wdiRssiMonitorInfo);
10784 vos_mem_free(pRssiMonitorReqParam);
10785 return VOS_STATUS_E_NOMEM;
10786 }
10787
10788 wdiRssiMonitorInfo->requestId = pRssiMonitorReqParam->requestId;
10789 vos_mem_copy(wdiRssiMonitorInfo->currentBssId,
10790 &(pRssiMonitorReqParam->currentBssId), sizeof(tSirMacAddr));
10791
10792 pWdaParams->pWdaContext = pWDA;
10793 pWdaParams->wdaMsgParam = pRssiMonitorReqParam;
10794 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRssiMonitorInfo;
10795
10796 wstatus = WDI_StopRssiMonitorReq(wdiRssiMonitorInfo,
10797 (WDI_RssiMonitorStopRspCb)WDA_RssiMonitorStopRspCallback,
10798 pWdaParams);
10799 if(IS_WDI_STATUS_FAILURE(wstatus))
10800 {
10801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10802 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
10803 status = CONVERT_WDI2VOS_STATUS(wstatus);
10804 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10805 vos_mem_free(pWdaParams->wdaMsgParam);
10806 vos_mem_free(pWdaParams);
10807 }
10808
10809 return status;
10810}
10811
10812
10813/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010814 * FUNCTION: WDA_WdiIndicationCallback
10815 *
10816 */
10817void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
10818 void* pUserData)
10819{
10820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010821 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010822}
Jeff Johnson295189b2012-06-20 16:38:30 -070010823/*
10824 * FUNCTION: WDA_ProcessWlanSuspendInd
10825 *
10826 */
10827VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
10828 tSirWlanSuspendParam *pWlanSuspendParam)
10829{
10830 WDI_Status wdiStatus;
10831 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010833 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010834 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
10835 pWlanSuspendParam->configuredMcstBcstFilterSetting;
10836 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
10837 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -070010839 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
10840 if(WDI_STATUS_PENDING == wdiStatus)
10841 {
10842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010843 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070010844 }
10845 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
10846 {
10847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010848 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070010849 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010850 vos_mem_free(pWlanSuspendParam);
10851 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
10852}
10853
Chet Lanctot186b5732013-03-18 10:26:30 -070010854#ifdef WLAN_FEATURE_11W
10855/*
10856 * FUNCTION: WDA_ProcessExcludeUnecryptInd
10857 *
10858 */
10859VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
10860 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
10861{
10862 WDI_Status wdiStatus;
10863 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
10864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10865 "------> %s ", __func__);
10866
10867 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
10868 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
10869 sizeof(tSirMacAddr));
10870
10871 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
10872 wdiExclUnencryptParams.pUserData = pWDA;
10873
10874 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
10875 if(WDI_STATUS_PENDING == wdiStatus)
10876 {
10877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10878 "Pending received for %s:%d ", __func__, __LINE__ );
10879 }
10880 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
10881 {
10882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10883 "Failure in %s:%d ", __func__, __LINE__ );
10884 }
10885 vos_mem_free(pExclUnencryptParam);
10886 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
10887}
10888#endif
10889
Jeff Johnson295189b2012-06-20 16:38:30 -070010890/*
10891 * FUNCTION: WDA_ProcessWlanResumeCallback
10892 *
10893 */
10894void WDA_ProcessWlanResumeCallback(
10895 WDI_SuspendResumeRspParamsType *resumeRspParams,
10896 void* pUserData)
10897{
10898 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010900 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010901 if(NULL == pWdaParams)
10902 {
10903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010904 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010905 VOS_ASSERT(0) ;
10906 return ;
10907 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010908 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
10909 {
10910 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080010911 "%s: Process Wlan Resume failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070010912 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010913 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10914 vos_mem_free(pWdaParams->wdaMsgParam);
10915 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010916 return ;
10917}
Jeff Johnson295189b2012-06-20 16:38:30 -070010918/*
10919 * FUNCTION: WDA_ProcessWlanResumeReq
10920 *
10921 */
10922VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
10923 tSirWlanResumeParam *pWlanResumeParam)
10924{
10925 WDI_Status wdiStatus;
10926 WDI_ResumeParamsType *wdiResumeParams =
10927 (WDI_ResumeParamsType *)vos_mem_malloc(
10928 sizeof(WDI_ResumeParamsType) ) ;
10929 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010931 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010932 if(NULL == wdiResumeParams)
10933 {
10934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010935 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010936 VOS_ASSERT(0);
10937 return VOS_STATUS_E_NOMEM;
10938 }
10939 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10940 if(NULL == pWdaParams)
10941 {
10942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010943 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010944 VOS_ASSERT(0);
10945 vos_mem_free(wdiResumeParams);
10946 return VOS_STATUS_E_NOMEM;
10947 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010948 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
10949 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -070010951 wdiResumeParams->wdiReqStatusCB = NULL;
10952 pWdaParams->wdaMsgParam = pWlanResumeParam;
10953 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
10954 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070010955 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
10956 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
10957 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010958 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10959 {
10960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10961 "Failure in Host Resume REQ WDI API, free all the memory " );
10962 VOS_ASSERT(0);
10963 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10964 vos_mem_free(pWdaParams->wdaMsgParam);
10965 vos_mem_free(pWdaParams);
10966 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010967 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
10968}
10969
Jeff Johnson295189b2012-06-20 16:38:30 -070010970/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010971 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010972 *
10973 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010974void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010975{
10976 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010978 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010979 if(NULL == pWdaParams)
10980 {
10981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010982 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010983 VOS_ASSERT(0) ;
10984 return ;
10985 }
10986
10987 vos_mem_free(pWdaParams->wdaMsgParam) ;
10988 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10989 vos_mem_free(pWdaParams) ;
10990 /*
10991 * No respone required for SetBeaconFilter req so just free the request
10992 * param here
10993 */
10994
Jeff Johnson295189b2012-06-20 16:38:30 -070010995 return ;
10996}
Jeff Johnson295189b2012-06-20 16:38:30 -070010997/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010998 * FUNCTION: WDA_SetBeaconFilterReqCallback
10999 * Free memory.
11000 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
11001 */
11002void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
11003{
11004 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11005
11006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11007 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11008
11009 if(NULL == pWdaParams)
11010 {
11011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11012 "%s: pWdaParams received NULL", __func__);
11013 VOS_ASSERT(0);
11014 return;
11015 }
11016
11017 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11018 {
11019 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11020 vos_mem_free(pWdaParams->wdaMsgParam);
11021 vos_mem_free(pWdaParams);
11022 }
11023
11024 return;
11025}
11026/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011027 * FUNCTION: WDA_SetBeaconFilterReq
11028 * Request to WDI to send the beacon filtering related information.
11029 */
11030VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
11031 tBeaconFilterMsg* pBeaconFilterInfo)
11032{
11033 WDI_Status status = WDI_STATUS_SUCCESS;
11034 tANI_U8 *dstPtr, *srcPtr;
11035 tANI_U8 filterLength;
11036 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
11037 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
11038 sizeof(WDI_BeaconFilterReqParamsType) ) ;
11039 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011041 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011042 if(NULL == wdiBeaconFilterInfo)
11043 {
11044 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011045 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011046 VOS_ASSERT(0);
11047 return VOS_STATUS_E_NOMEM;
11048 }
11049 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11050 if(NULL == pWdaParams)
11051 {
11052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011053 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011054 VOS_ASSERT(0);
11055 vos_mem_free(wdiBeaconFilterInfo);
11056 return VOS_STATUS_E_NOMEM;
11057 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011058 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
11059 pBeaconFilterInfo->beaconInterval;
11060 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
11061 pBeaconFilterInfo->capabilityInfo;
11062 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
11063 pBeaconFilterInfo->capabilityMask;
11064 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -070011065
11066 //Fill the BssIdx
11067 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
11068
Jeff Johnson295189b2012-06-20 16:38:30 -070011069 //Fill structure with info contained in the beaconFilterTable
11070 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
11071 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
11072 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
11073 if(WDI_BEACON_FILTER_LEN < filterLength)
11074 {
11075 filterLength = WDI_BEACON_FILTER_LEN;
11076 }
11077 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -070011078 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
11079 wdiBeaconFilterInfo->pUserData = pWdaParams;
11080
Jeff Johnson295189b2012-06-20 16:38:30 -070011081 /* Store param pointer as passed in by caller */
11082 /* store Params pass it to WDI */
11083 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
11084 pWdaParams->pWdaContext = pWDA;
11085 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
11086
Jeff Johnson295189b2012-06-20 16:38:30 -070011087 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011088 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011089 if(IS_WDI_STATUS_FAILURE(status))
11090 {
11091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11092 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
11093 vos_mem_free(pWdaParams->wdaMsgParam) ;
11094 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11095 vos_mem_free(pWdaParams) ;
11096 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011097 return CONVERT_WDI2VOS_STATUS(status) ;
11098}
Jeff Johnson295189b2012-06-20 16:38:30 -070011099/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011100 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011101 *
11102 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011103void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011104{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011105 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
11106
Jeff Johnson295189b2012-06-20 16:38:30 -070011107 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011108 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011109
11110 if(NULL == pWdaParams)
11111 {
11112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011113 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011114 VOS_ASSERT(0) ;
11115 return ;
11116 }
11117
11118 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11119 vos_mem_free(pWdaParams->wdaMsgParam);
11120 vos_mem_free(pWdaParams);
11121
Jeff Johnson295189b2012-06-20 16:38:30 -070011122 //print a msg, nothing else to do
11123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011124 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011125 return ;
11126}
Yue Ma7f44bbe2013-04-12 11:47:39 -070011127/*
11128 * FUNCTION: WDA_RemBeaconFilterReqCallback
11129 * Free memory.
11130 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
11131 */
11132void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
11133{
11134 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11135
11136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11137 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11138
11139 if(NULL == pWdaParams)
11140 {
11141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11142 "%s: pWdaParams received NULL", __func__);
11143 VOS_ASSERT(0);
11144 return;
11145 }
11146
11147 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11148 {
11149 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11150 vos_mem_free(pWdaParams->wdaMsgParam);
11151 vos_mem_free(pWdaParams);
11152 }
11153
11154 return;
11155}
Jeff Johnson295189b2012-06-20 16:38:30 -070011156 // TODO: PE does not have this feature for now implemented,
11157 // but the support for removing beacon filter exists between
11158 // HAL and FW. This function can be called whenever PE defines
11159 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -070011160/*
11161 * FUNCTION: WDA_RemBeaconFilterReq
11162 * Request to WDI to send the removal of beacon filtering related information.
11163 */
11164VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
11165 tRemBeaconFilterMsg* pBeaconFilterInfo)
11166{
11167 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011168 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011169 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
11170 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
11171 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011172 tWDA_ReqParams *pWdaParams ;
11173
Jeff Johnson295189b2012-06-20 16:38:30 -070011174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011175 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011176 if(NULL == wdiBeaconFilterInfo)
11177 {
11178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011179 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011180 VOS_ASSERT(0);
11181 return VOS_STATUS_E_NOMEM;
11182 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011183 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11184 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070011185 {
11186 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011187 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011188 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011189 vos_mem_free(wdiBeaconFilterInfo);
11190 vos_mem_free(pBeaconFilterInfo);
11191 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -070011192 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011193
11194 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
11195 pBeaconFilterInfo->ucIeCount;
11196 //Fill structure with info contained in the ucRemIeId
11197 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
11198 pBeaconFilterInfo->ucRemIeId,
11199 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
11200 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
11201 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011202
11203 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011204 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -070011205 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011206 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
11207
11208 pWdaParams->pWdaContext = pWDA;
11209
Jeff Johnson43971f52012-07-17 12:26:56 -070011210 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011211 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011212 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011213 {
11214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11215 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011216 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011217 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11218 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070011219 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011220 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011221 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011222}
Jeff Johnson295189b2012-06-20 16:38:30 -070011223/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011224 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011225 *
11226 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011227void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011228{
11229 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011231 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011232 if(NULL == pWdaParams)
11233 {
11234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011235 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011236 VOS_ASSERT(0) ;
11237 return ;
11238 }
11239
11240 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11241 vos_mem_free(pWdaParams) ;
11242
Jeff Johnson295189b2012-06-20 16:38:30 -070011243 return ;
11244}
Jeff Johnson295189b2012-06-20 16:38:30 -070011245/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011246 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
11247 * Free memory.
11248 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
11249 */
11250void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
11251{
11252 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11253
11254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11255 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11256
11257 if(NULL == pWdaParams)
11258 {
11259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11260 "%s: pWdaParams received NULL", __func__);
11261 VOS_ASSERT(0);
11262 return;
11263 }
11264
11265 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11266 {
11267 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11268 vos_mem_free(pWdaParams);
11269 }
11270
11271 return;
11272}
11273/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011274 * FUNCTION: WDA_SetRSSIThresholdsReq
11275 * Request to WDI to set the RSSI thresholds (sta mode).
11276 */
11277VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
11278{
11279 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011280 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011281 tWDA_CbContext *pWDA = NULL ;
11282 v_PVOID_t pVosContext = NULL;
11283 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
11284 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
11285 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
11286 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011288 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011289 if(NULL == wdiRSSIThresholdsInfo)
11290 {
11291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011292 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011293 VOS_ASSERT(0);
11294 return VOS_STATUS_E_NOMEM;
11295 }
11296 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11297 if(NULL == pWdaParams)
11298 {
11299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011300 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011301 VOS_ASSERT(0);
11302 vos_mem_free(wdiRSSIThresholdsInfo);
11303 return VOS_STATUS_E_NOMEM;
11304 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011305 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -070011306 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
11307 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
11308 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -070011309 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
11310 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
11311 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -070011312 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
11313 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
11314 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011315 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
11316 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011317 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
11318 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
11319
Jeff Johnson295189b2012-06-20 16:38:30 -070011320 /* Store param pointer as passed in by caller */
11321 /* store Params pass it to WDI */
11322 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
11323 pWdaParams->pWdaContext = pWDA;
11324 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -070011325 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011326 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011327 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011328 {
11329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11330 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011331 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011332 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11333 vos_mem_free(pWdaParams) ;
11334 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011335 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011336
11337}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011338/*
Yue Madb90ac12013-04-04 13:39:13 -070011339 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011340 *
11341 */
Yue Madb90ac12013-04-04 13:39:13 -070011342void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011343{
11344 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
11345
11346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011347 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011348 if(NULL == pWdaParams)
11349 {
11350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011351 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011352 VOS_ASSERT(0) ;
11353 return ;
11354 }
11355
11356 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11357 vos_mem_free(pWdaParams->wdaMsgParam);
11358 vos_mem_free(pWdaParams) ;
11359
11360 //print a msg, nothing else to do
11361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -070011362 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011363 return ;
11364}
Jeff Johnson295189b2012-06-20 16:38:30 -070011365/*
Yue Madb90ac12013-04-04 13:39:13 -070011366 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -070011367 * Free memory.
11368 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -070011369 */
11370void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
11371{
11372 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11373
11374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11375 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11376
11377 if(NULL == pWdaParams)
11378 {
11379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11380 "%s: Invalid pWdaParams pointer", __func__);
11381 VOS_ASSERT(0);
11382 return;
11383 }
11384
11385 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11386 {
11387 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11388 vos_mem_free(pWdaParams->wdaMsgParam);
11389 vos_mem_free(pWdaParams);
11390 }
11391
11392 return;
11393}
11394/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011395 * FUNCTION: WDA_ProcessHostOffloadReq
11396 * Request to WDI to set the filter to minimize unnecessary host wakeup due
11397 * to broadcast traffic (sta mode).
11398 */
11399VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
11400 tSirHostOffloadReq *pHostOffloadParams)
11401{
11402 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011403 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011404 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
11405 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
11406 sizeof(WDI_HostOffloadReqParamsType)) ;
11407 tWDA_ReqParams *pWdaParams ;
11408
11409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011410 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -070011411
11412 if(NULL == wdiHostOffloadInfo)
11413 {
11414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011415 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011416 VOS_ASSERT(0);
11417 return VOS_STATUS_E_NOMEM;
11418 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011419 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11420 if(NULL == pWdaParams)
11421 {
11422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011423 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011424 VOS_ASSERT(0);
11425 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011426 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011427 return VOS_STATUS_E_NOMEM;
11428 }
11429
11430 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
11431 pHostOffloadParams->offloadType;
11432 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
11433 pHostOffloadParams->enableOrDisable;
11434
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011435 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
11436 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
11437
Jeff Johnson295189b2012-06-20 16:38:30 -070011438 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
11439 {
11440 case SIR_IPV4_ARP_REPLY_OFFLOAD:
11441 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
11442 pHostOffloadParams->params.hostIpv4Addr,
11443 4);
11444 break;
11445 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
11446 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
11447 pHostOffloadParams->params.hostIpv6Addr,
11448 16);
11449 break;
11450 case SIR_IPV6_NS_OFFLOAD:
11451 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
11452 pHostOffloadParams->params.hostIpv6Addr,
11453 16);
11454
11455#ifdef WLAN_NS_OFFLOAD
11456 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
11457 {
11458 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
11459 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
11460 16);
11461 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
11462 }
11463 else
11464 {
11465 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
11466 }
11467
11468 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
11469 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
11470 16);
11471 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
11472 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
11473 6);
11474
11475 //Only two are supported so let's go through them without a loop
11476 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
11477 {
11478 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
11479 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
11480 16);
11481 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
11482 }
11483 else
11484 {
11485 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
11486 }
11487
11488 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
11489 {
11490 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
11491 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
11492 16);
11493 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
11494 }
11495 else
11496 {
11497 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
11498 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +053011499 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
11500 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070011501 break;
11502#endif //WLAN_NS_OFFLOAD
11503 default:
11504 {
11505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11506 "No Handling for Offload Type %x in WDA "
11507 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
11508 //WDA_VOS_ASSERT(0) ;
11509 }
11510 }
Yue Madb90ac12013-04-04 13:39:13 -070011511 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
11512 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011513
Jeff Johnson295189b2012-06-20 16:38:30 -070011514 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011515 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011516 /* store Params pass it to WDI */
11517 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
11518 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011519
Jeff Johnson295189b2012-06-20 16:38:30 -070011520
Jeff Johnson43971f52012-07-17 12:26:56 -070011521 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -070011522 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011523
Jeff Johnson43971f52012-07-17 12:26:56 -070011524 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011525 {
11526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
c_hpothu86feba52014-10-28 15:51:18 +053011527 "Failure in host offload REQ WDI API, free all the memory %d",
11528 wstatus);
Jeff Johnson43971f52012-07-17 12:26:56 -070011529 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011530 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11531 vos_mem_free(pWdaParams->wdaMsgParam);
11532 vos_mem_free(pWdaParams) ;
11533 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011534 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011535
11536}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011537/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011538 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011539 *
11540 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011541void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011542{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011543 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
11544
Jeff Johnson295189b2012-06-20 16:38:30 -070011545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011546 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011547
11548 if(NULL == pWdaParams)
11549 {
11550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011551 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011552 VOS_ASSERT(0) ;
11553 return ;
11554 }
11555
11556 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11557 vos_mem_free(pWdaParams->wdaMsgParam);
11558 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -070011559
Jeff Johnson295189b2012-06-20 16:38:30 -070011560 //print a msg, nothing else to do
11561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011562 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011563 return ;
11564}
Jeff Johnson295189b2012-06-20 16:38:30 -070011565/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011566 * FUNCTION: WDA_KeepAliveReqCallback
11567 * Free memory.
11568 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
11569 */
11570void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
11571{
11572 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11573
11574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11575 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11576
11577 if(NULL == pWdaParams)
11578 {
11579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11580 "%s: pWdaParams received NULL", __func__);
11581 VOS_ASSERT(0);
11582 return;
11583 }
11584
11585 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11586 {
11587 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11588 vos_mem_free(pWdaParams->wdaMsgParam);
11589 vos_mem_free(pWdaParams);
11590 }
11591
11592 return;
11593}
11594/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011595 * FUNCTION: WDA_ProcessKeepAliveReq
11596 * Request to WDI to send Keep Alive packets to minimize unnecessary host
11597 * wakeup due to broadcast traffic (sta mode).
11598 */
11599VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
11600 tSirKeepAliveReq *pKeepAliveParams)
11601{
11602 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011603 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011604 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
11605 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
11606 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011607 tWDA_ReqParams *pWdaParams;
11608
Jeff Johnson295189b2012-06-20 16:38:30 -070011609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011610 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011611 if(NULL == wdiKeepAliveInfo)
11612 {
11613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011614 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011615 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011616 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011617 return VOS_STATUS_E_NOMEM;
11618 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011619
11620 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11621 if(NULL == pWdaParams)
11622 {
11623 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011624 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011625 VOS_ASSERT(0);
11626 vos_mem_free(wdiKeepAliveInfo);
11627 vos_mem_free(pKeepAliveParams);
11628 return VOS_STATUS_E_NOMEM;
11629 }
11630
Jeff Johnson295189b2012-06-20 16:38:30 -070011631 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
11632 pKeepAliveParams->packetType;
11633 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
11634 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011635
11636 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
11637 pKeepAliveParams->bssId,
11638 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011639
11640 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
11641 {
11642 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
11643 pKeepAliveParams->hostIpv4Addr,
11644 SIR_IPV4_ADDR_LEN);
11645 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
11646 pKeepAliveParams->destIpv4Addr,
11647 SIR_IPV4_ADDR_LEN);
11648 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
11649 pKeepAliveParams->destMacAddr,
11650 SIR_MAC_ADDR_LEN);
11651 }
11652 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
11653 {
11654 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
11655 SIR_IPV4_ADDR_LEN,
11656 0);
11657 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
11658 SIR_IPV4_ADDR_LEN,
11659 0);
11660 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
11661 SIR_MAC_ADDR_LEN,
11662 0);
11663 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011664 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
11665 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011666
Jeff Johnson295189b2012-06-20 16:38:30 -070011667 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011668 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011669 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011670 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
11671 pWdaParams->pWdaContext = pWDA;
11672
Jeff Johnson295189b2012-06-20 16:38:30 -070011673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
11674 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
11675 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
11676 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
11677 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
11678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
11679 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
11680 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
11681 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
11682 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
11683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11684 "WDA DMAC : %d:%d:%d:%d:%d:%d",
11685 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
11686 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
11687 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
11688 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
11689 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
11690 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
11691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11692 "TimePeriod %d PacketType %d",
11693 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
11694 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -070011695 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011696 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011697
Jeff Johnson43971f52012-07-17 12:26:56 -070011698 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011699 {
11700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11701 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011702 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011703 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11704 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070011705 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011706 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011707 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011708
11709}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011710/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011711 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011712 *
11713 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011714void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011715 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
11716 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011717{
11718 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011720 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011721 if(NULL == pWdaParams)
11722 {
11723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011724 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011725 VOS_ASSERT(0) ;
11726 return ;
11727 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011728 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11729 vos_mem_free(pWdaParams->wdaMsgParam);
11730 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011731 return ;
11732}
Jeff Johnson295189b2012-06-20 16:38:30 -070011733/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011734 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
11735 * Free memory.
11736 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
11737 */
11738void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
11739{
11740 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11741
11742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11743 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11744
11745 if(NULL == pWdaParams)
11746 {
11747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11748 "%s: pWdaParams received NULL", __func__);
11749 VOS_ASSERT(0);
11750 return;
11751 }
11752
11753 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11754 {
11755 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11756 vos_mem_free(pWdaParams->wdaMsgParam);
11757 vos_mem_free(pWdaParams);
11758 }
11759
11760 return;
11761}
11762
11763/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011764 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
11765 * Request to WDI to add WOWL Bcast pattern
11766 */
11767VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
11768 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
11769{
11770 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011771 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011772 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
11773 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
11774 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
11775 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011776 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011777 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011778 if(NULL == wdiWowlAddBcPtrnInfo)
11779 {
11780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011781 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011782 VOS_ASSERT(0);
11783 return VOS_STATUS_E_NOMEM;
11784 }
11785 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11786 if(NULL == pWdaParams)
11787 {
11788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011789 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011790 VOS_ASSERT(0);
11791 vos_mem_free(wdiWowlAddBcPtrnInfo);
11792 return VOS_STATUS_E_NOMEM;
11793 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011794 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
11795 pWowlAddBcPtrnParams->ucPatternId;
11796 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
11797 pWowlAddBcPtrnParams->ucPatternByteOffset;
11798 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
11799 pWowlAddBcPtrnParams->ucPatternMaskSize;
11800 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
11801 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -070011802 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
11803 {
11804 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
11805 pWowlAddBcPtrnParams->ucPattern,
11806 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
11807 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
11808 pWowlAddBcPtrnParams->ucPatternMask,
11809 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
11810 }
11811 else
11812 {
11813 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
11814 pWowlAddBcPtrnParams->ucPattern,
11815 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
11816 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
11817 pWowlAddBcPtrnParams->ucPatternMask,
11818 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
11819
11820 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
11821 pWowlAddBcPtrnParams->ucPatternExt,
11822 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
11823 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
11824 pWowlAddBcPtrnParams->ucPatternMaskExt,
11825 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
11826 }
11827
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011828 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
11829 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
11830
Yue Ma7f44bbe2013-04-12 11:47:39 -070011831 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
11832 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011833 /* Store param pointer as passed in by caller */
11834 /* store Params pass it to WDI */
11835 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
11836 pWdaParams->pWdaContext = pWDA;
11837 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070011838 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011839 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011840 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011841 {
11842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11843 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011844 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011845 vos_mem_free(pWdaParams->wdaMsgParam) ;
11846 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11847 vos_mem_free(pWdaParams) ;
11848 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011849 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011850
11851}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011852/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011853 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011854 *
11855 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011856void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011857 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
11858 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011859{
11860 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011862 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011863 if(NULL == pWdaParams)
11864 {
11865 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011866 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011867 VOS_ASSERT(0) ;
11868 return ;
11869 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011870 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11871 vos_mem_free(pWdaParams->wdaMsgParam);
11872 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011873 return ;
11874}
Jeff Johnson295189b2012-06-20 16:38:30 -070011875/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011876 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
11877 * Free memory.
11878 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
11879 */
11880void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
11881{
11882 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11883
11884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11885 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11886
11887 if(NULL == pWdaParams)
11888 {
11889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11890 "%s: pWdaParams received NULL", __func__);
11891 VOS_ASSERT(0);
11892 return;
11893 }
11894
11895 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11896 {
11897 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11898 vos_mem_free(pWdaParams->wdaMsgParam);
11899 vos_mem_free(pWdaParams);
11900 }
11901
11902 return;
11903}
11904/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011905 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
11906 * Request to WDI to delete WOWL Bcast pattern
11907 */
11908VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
11909 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
11910{
11911 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011912 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011913 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
11914 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
11915 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
11916 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011917 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011918 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011919 if(NULL == wdiWowlDelBcPtrnInfo)
11920 {
11921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011922 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011923 VOS_ASSERT(0);
11924 return VOS_STATUS_E_NOMEM;
11925 }
11926 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11927 if(NULL == pWdaParams)
11928 {
11929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011930 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011931 VOS_ASSERT(0);
11932 vos_mem_free(wdiWowlDelBcPtrnInfo);
11933 return VOS_STATUS_E_NOMEM;
11934 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011935 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
11936 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011937
11938 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
11939 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
11940
Yue Ma7f44bbe2013-04-12 11:47:39 -070011941 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
11942 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011943 /* Store param pointer as passed in by caller */
11944 /* store Params pass it to WDI */
11945 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
11946 pWdaParams->pWdaContext = pWDA;
11947 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070011948 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011949 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011950 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011951 {
11952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11953 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011954 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011955 vos_mem_free(pWdaParams->wdaMsgParam) ;
11956 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11957 vos_mem_free(pWdaParams) ;
11958 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011959 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011960
11961}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011962/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011963 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011964 *
11965 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011966void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011967{
11968 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011969 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011970 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011972 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011973 if(NULL == pWdaParams)
11974 {
11975 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011976 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011977 VOS_ASSERT(0) ;
11978 return ;
11979 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011980 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011981 if (NULL == pWDA)
11982 {
11983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11984 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053011985
11986 if(pWdaParams->wdaWdiApiMsgParam)
11987 {
11988 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11989 }
11990 vos_mem_free(pWdaParams);
11991
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011992 VOS_ASSERT(0);
11993 return ;
11994 }
11995
Jeff Johnson295189b2012-06-20 16:38:30 -070011996 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
11997
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011998 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
11999
Jeff Johnson295189b2012-06-20 16:38:30 -070012000 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12001 vos_mem_free(pWdaParams) ;
12002
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012003 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070012004 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012005 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012006 return ;
12007}
Jeff Johnson295189b2012-06-20 16:38:30 -070012008/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012009 * FUNCTION: WDA_WowlEnterReqCallback
12010 * Free memory and send WOWL Enter RSP back to PE.
12011 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
12012 */
12013void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
12014{
12015 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012016 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012017 tSirHalWowlEnterParams *pWowlEnterParams;
12018
12019 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12020 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12021
12022 if(NULL == pWdaParams)
12023 {
12024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12025 "%s: pWdaParams received NULL", __func__);
12026 VOS_ASSERT(0);
12027 return;
12028 }
12029
12030 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012031 if (NULL == pWDA)
12032 {
12033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12034 "%s:pWDA is NULL", __func__);
12035 VOS_ASSERT(0);
12036 return ;
12037 }
12038
Yue Ma7f44bbe2013-04-12 11:47:39 -070012039 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
12040 pWowlEnterParams->status = wdiStatus;
12041
12042 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12043 {
12044 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12045 vos_mem_free(pWdaParams);
12046 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
12047 }
12048
12049 return;
12050}
12051/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012052 * FUNCTION: WDA_ProcessWowlEnterReq
12053 * Request to WDI to enter WOWL
12054 */
12055VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
12056 tSirHalWowlEnterParams *pWowlEnterParams)
12057{
12058 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012059 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012060 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
12061 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
12062 sizeof(WDI_WowlEnterReqParamsType)) ;
12063 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012065 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012066 if(NULL == wdiWowlEnterInfo)
12067 {
12068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012069 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012070 VOS_ASSERT(0);
12071 return VOS_STATUS_E_NOMEM;
12072 }
12073 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12074 if(NULL == pWdaParams)
12075 {
12076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012077 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012078 VOS_ASSERT(0);
12079 vos_mem_free(wdiWowlEnterInfo);
12080 return VOS_STATUS_E_NOMEM;
12081 }
Kumar Anandaca924e2013-07-22 14:35:34 -070012082
12083 vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
12084
Jeff Johnson295189b2012-06-20 16:38:30 -070012085 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
12086 pWowlEnterParams->magicPtrn,
12087 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012088 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
12089 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070012090 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
12091 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070012092 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
12093 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070012094 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
12095 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070012096 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
12097 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070012098 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
12099 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070012100 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
12101 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -070012102 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
12103 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -070012104#ifdef WLAN_WAKEUP_EVENTS
12105 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
12106 pWowlEnterParams->ucWoWEAPIDRequestEnable;
12107
12108 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
12109 pWowlEnterParams->ucWoWEAPOL4WayEnable;
12110
12111 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
12112 pWowlEnterParams->ucWowNetScanOffloadMatch;
12113
12114 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
12115 pWowlEnterParams->ucWowGTKRekeyError;
12116
12117 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
12118 pWowlEnterParams->ucWoWBSSConnLoss;
12119#endif // WLAN_WAKEUP_EVENTS
12120
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012121 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
12122 pWowlEnterParams->bssIdx;
12123
Yue Ma7f44bbe2013-04-12 11:47:39 -070012124 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
12125 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012126 /* Store param pointer as passed in by caller */
12127 /* store Params pass it to WDI */
12128 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
12129 pWdaParams->pWdaContext = pWDA;
12130 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070012131 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012132 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070012133 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012134 {
12135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12136 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012137 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070012138 vos_mem_free(pWdaParams->wdaMsgParam) ;
12139 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12140 vos_mem_free(pWdaParams) ;
12141 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012142 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012143
12144}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012145/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012146 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012147 *
12148 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012149void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012150{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012151 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012152 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012153 tSirHalWowlExitParams *pWowlExitParams;
12154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012155 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012156 if(NULL == pWdaParams)
12157 {
12158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012159 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012160 VOS_ASSERT(0) ;
12161 return ;
12162 }
12163 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012164 if (NULL == pWDA)
12165 {
12166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12167 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053012168
12169 if(pWdaParams->wdaWdiApiMsgParam)
12170 {
12171 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12172 }
12173 vos_mem_free(pWdaParams);
12174
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012175 VOS_ASSERT(0);
12176 return ;
12177 }
12178
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012179 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
12180
12181 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070012182 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012183
12184 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12185 vos_mem_free(pWdaParams) ;
12186
Jeff Johnson295189b2012-06-20 16:38:30 -070012187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012188 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012189 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012190 return ;
12191}
Jeff Johnson295189b2012-06-20 16:38:30 -070012192/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012193 * FUNCTION: WDA_WowlExitReqCallback
12194 * Free memory and send WOWL Exit RSP back to PE.
12195 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
12196 */
12197void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
12198{
12199 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012200 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012201 tSirHalWowlExitParams *pWowlExitParams;
12202
12203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12204 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12205
12206 if(NULL == pWdaParams)
12207 {
12208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12209 "%s: pWdaParams received NULL", __func__);
12210 VOS_ASSERT(0);
12211 return;
12212 }
12213
12214 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012215 if (NULL == pWDA)
12216 {
12217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12218 "%s:pWDA is NULL", __func__);
12219 VOS_ASSERT(0);
12220 return ;
12221 }
12222
Yue Ma7f44bbe2013-04-12 11:47:39 -070012223 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
12224 pWowlExitParams->status = wdiStatus;
12225
12226 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12227 {
12228 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12229 vos_mem_free(pWdaParams);
12230 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
12231 }
12232
12233 return;
12234}
12235/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012236 * FUNCTION: WDA_ProcessWowlExitReq
12237 * Request to WDI to add WOWL Bcast pattern
12238 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012239VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
12240 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070012241{
12242 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012243 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012244 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
12245 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
12246 sizeof(WDI_WowlExitReqParamsType)) ;
12247 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012249 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012250 if(NULL == wdiWowlExitInfo)
12251 {
12252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012253 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012254 VOS_ASSERT(0);
12255 return VOS_STATUS_E_NOMEM;
12256 }
12257 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12258 if(NULL == pWdaParams)
12259 {
12260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012261 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012262 VOS_ASSERT(0);
12263 vos_mem_free(wdiWowlExitInfo);
12264 return VOS_STATUS_E_NOMEM;
12265 }
12266
12267 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
12268 pWowlExitParams->bssIdx;
12269
Yue Ma7f44bbe2013-04-12 11:47:39 -070012270 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
12271 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012272
12273 /* Store param pointer as passed in by caller */
12274 /* store Params pass it to WDI */
12275 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
12276 pWdaParams->pWdaContext = pWDA;
12277 pWdaParams->wdaMsgParam = pWowlExitParams;
12278
12279 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012280 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012281
Jeff Johnson43971f52012-07-17 12:26:56 -070012282 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012283 {
12284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12285 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012286 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012287 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12288 vos_mem_free(pWdaParams->wdaMsgParam);
12289 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012290 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012291 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012292}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012293/*
12294 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
12295 * Request to WDI to determine whether a given station is capable of
12296 * using HW-based frame translation
12297 */
12298v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
12299 tANI_U8 staIdx)
12300{
12301 return WDI_IsHwFrameTxTranslationCapable(staIdx);
12302}
Katya Nigam6201c3e2014-05-27 17:51:42 +053012303
12304/*
12305 * FUNCTION: WDA_IsSelfSTA
12306 * Request to WDI to determine whether a given STAID is self station
12307 * index.
12308 */
12309v_BOOL_t WDA_IsSelfSTA(v_PVOID_t pVosContext, tANI_U8 ucSTAIdx)
12310{
12311
12312 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
12313
Girish Gowli05cf44e2014-06-12 21:53:37 +053012314 if (NULL != pWDA)
12315 return WDI_IsSelfSTA(pWDA->pWdiContext,ucSTAIdx);
12316 else
12317 return VOS_TRUE;
Katya Nigam6201c3e2014-05-27 17:51:42 +053012318}
Jeff Johnson295189b2012-06-20 16:38:30 -070012319/*
12320 * FUNCTION: WDA_NvDownloadReqCallback
12321 * send NV Download RSP back to PE
12322 */
12323void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
12324 void* pUserData)
12325{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012326
12327 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012328 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012329
Jeff Johnson295189b2012-06-20 16:38:30 -070012330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012331 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012332
12333 if(NULL == pWdaParams)
12334 {
12335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012336 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012337 VOS_ASSERT(0) ;
12338 return ;
12339 }
12340
12341 pWDA = pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012342 if (NULL == pWDA)
12343 {
12344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12345 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053012346
12347 if(pWdaParams->wdaWdiApiMsgParam)
12348 {
12349 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12350 }
12351 vos_mem_free(pWdaParams);
12352
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012353 VOS_ASSERT(0);
12354 return ;
12355 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012356
Jeff Johnson295189b2012-06-20 16:38:30 -070012357 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012358 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12359 vos_mem_free(pWdaParams);
12360
Jeff Johnson295189b2012-06-20 16:38:30 -070012361 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070012362 return ;
12363}
Jeff Johnson295189b2012-06-20 16:38:30 -070012364/*
12365 * FUNCTION: WDA_ProcessNvDownloadReq
12366 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
12367 */
12368VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
12369{
12370 /* Initialize the local Variables*/
12371 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
12372 v_VOID_t *pNvBuffer=NULL;
12373 v_SIZE_t bufferSize = 0;
12374 WDI_Status status = WDI_STATUS_E_FAILURE;
12375 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012376 tWDA_ReqParams *pWdaParams ;
12377
Jeff Johnson295189b2012-06-20 16:38:30 -070012378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012379 "------> %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012380 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070012381 {
12382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012383 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012384 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070012385 return VOS_STATUS_E_FAILURE;
12386 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012387
Jeff Johnson295189b2012-06-20 16:38:30 -070012388 /* Get the NV structure base address and size from VOS */
Prasanna Kumarf6c94ae2013-04-11 20:05:21 -070012389 vos_nv_getNVEncodedBuffer(&pNvBuffer,&bufferSize);
12390
Jeff Johnson295189b2012-06-20 16:38:30 -070012391 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
12392 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012393 if(NULL == wdiNvDownloadReqParam)
12394 {
12395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012396 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012397 VOS_ASSERT(0);
12398 return VOS_STATUS_E_NOMEM;
12399 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012400 /* Copy Params to wdiNvDownloadReqParam*/
12401 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
12402 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012403
12404 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12405 if(NULL == pWdaParams)
12406 {
12407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012408 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012409 VOS_ASSERT(0);
12410 vos_mem_free(wdiNvDownloadReqParam);
12411 return VOS_STATUS_E_NOMEM;
12412 }
12413
Jeff Johnson295189b2012-06-20 16:38:30 -070012414 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012415 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
12416 pWdaParams->wdaMsgParam = NULL;
12417 pWdaParams->pWdaContext = pWDA;
12418
12419
Jeff Johnson295189b2012-06-20 16:38:30 -070012420 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012421
Jeff Johnson295189b2012-06-20 16:38:30 -070012422 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012423 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
12424
Jeff Johnson295189b2012-06-20 16:38:30 -070012425 if(IS_WDI_STATUS_FAILURE(status))
12426 {
12427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12428 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012429 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12430 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012431 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012432 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012433}
12434/*
12435 * FUNCTION: WDA_FlushAcReqCallback
12436 * send Flush AC RSP back to TL
12437 */
12438void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
12439{
12440 vos_msg_t wdaMsg = {0} ;
12441 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12442 tFlushACReq *pFlushACReqParams;
12443 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012445 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012446 if(NULL == pWdaParams)
12447 {
12448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012449 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012450 VOS_ASSERT(0) ;
12451 return ;
12452 }
12453
12454 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
12455 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
12456 if(NULL == pFlushACRspParams)
12457 {
12458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012459 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012460 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070012461 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012462 return ;
12463 }
12464 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
12465 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
12466 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
12467 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
12468 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070012469 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012470 vos_mem_free(pWdaParams->wdaMsgParam) ;
12471 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12472 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012473 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
12474 wdaMsg.bodyptr = (void *)pFlushACRspParams;
12475 // POST message to TL
12476 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
12477
Jeff Johnson295189b2012-06-20 16:38:30 -070012478 return ;
12479}
Jeff Johnson295189b2012-06-20 16:38:30 -070012480/*
12481 * FUNCTION: WDA_ProcessFlushAcReq
12482 * Request to WDI to Update the DELBA REQ params.
12483 */
12484VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
12485 tFlushACReq *pFlushAcReqParams)
12486{
12487 WDI_Status status = WDI_STATUS_SUCCESS ;
12488 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
12489 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
12490 sizeof(WDI_FlushAcReqParamsType)) ;
12491 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012492 if(NULL == wdiFlushAcReqParam)
12493 {
12494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012495 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012496 VOS_ASSERT(0);
12497 return VOS_STATUS_E_NOMEM;
12498 }
12499 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12500 if(NULL == pWdaParams)
12501 {
12502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012503 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012504 VOS_ASSERT(0);
12505 vos_mem_free(wdiFlushAcReqParam);
12506 return VOS_STATUS_E_NOMEM;
12507 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012509 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012510 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
12511 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
12512 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
12513 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -070012514 /* Store Flush AC pointer, as this will be used for response */
12515 /* store Params pass it to WDI */
12516 pWdaParams->pWdaContext = pWDA;
12517 pWdaParams->wdaMsgParam = pFlushAcReqParams;
12518 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012519 status = WDI_FlushAcReq(wdiFlushAcReqParam,
12520 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012521 if(IS_WDI_STATUS_FAILURE(status))
12522 {
12523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12524 "Failure in Flush AC REQ Params WDI API, free all the memory " );
12525 vos_mem_free(pWdaParams->wdaMsgParam) ;
12526 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12527 vos_mem_free(pWdaParams) ;
12528 //TODO: respond to TL with failure
12529 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012530 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012531}
Jeff Johnson295189b2012-06-20 16:38:30 -070012532/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012533 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012534 *
12535 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012536void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012537{
12538 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012539 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070012540 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012541
12542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012543 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012544 if(NULL == pWdaParams)
12545 {
12546 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012547 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012548 VOS_ASSERT(0) ;
12549 return ;
12550 }
12551 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012552 if (NULL == pWDA)
12553 {
12554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12555 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +053012556 vos_mem_free(pWdaParams->wdaMsgParam) ;
12557 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12558 vos_mem_free(pWdaParams) ;
12559
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012560 VOS_ASSERT(0);
12561 return ;
12562 }
12563
Jeff Johnson295189b2012-06-20 16:38:30 -070012564 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
12565 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
12566 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
12567 {
12568 pWDA->wdaAmpSessionOn = VOS_FALSE;
12569 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012570 vos_mem_free(pWdaParams->wdaMsgParam) ;
12571 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12572 vos_mem_free(pWdaParams) ;
12573 /*
12574 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
12575 * param here
12576 */
Jeff Johnson295189b2012-06-20 16:38:30 -070012577 return ;
12578}
Yue Ma7f44bbe2013-04-12 11:47:39 -070012579/*
12580 * FUNCTION: WDA_BtAmpEventReqCallback
12581 * Free memory.
12582 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
12583 */
12584void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
12585{
12586 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012587 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012588 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012589
Yue Ma7f44bbe2013-04-12 11:47:39 -070012590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12591 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12592
12593 if(NULL == pWdaParams)
12594 {
12595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12596 "%s: pWdaParams received NULL", __func__);
12597 VOS_ASSERT(0);
12598 return;
12599 }
12600
12601 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012602 if (NULL == pWDA)
12603 {
12604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12605 "%s:pWDA is NULL", __func__);
12606 VOS_ASSERT(0);
12607 return ;
12608 }
12609
Yue Ma7f44bbe2013-04-12 11:47:39 -070012610 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
12611
12612 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
12613 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
12614 {
12615 pWDA->wdaAmpSessionOn = VOS_FALSE;
12616 }
12617
12618 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12619 {
12620 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12621 vos_mem_free(pWdaParams->wdaMsgParam);
12622 vos_mem_free(pWdaParams);
12623 }
12624
12625 return;
12626}
Jeff Johnson295189b2012-06-20 16:38:30 -070012627/*
12628 * FUNCTION: WDA_ProcessBtAmpEventReq
12629 * Request to WDI to Update with BT AMP events.
12630 */
12631VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
12632 tSmeBtAmpEvent *pBtAmpEventParams)
12633{
12634 WDI_Status status = WDI_STATUS_SUCCESS ;
12635 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
12636 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
12637 sizeof(WDI_BtAmpEventParamsType)) ;
12638 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012640 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012641 if(NULL == wdiBtAmpEventParam)
12642 {
12643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012644 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012645 VOS_ASSERT(0);
12646 return VOS_STATUS_E_NOMEM;
12647 }
12648 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12649 if(NULL == pWdaParams)
12650 {
12651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012652 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012653 VOS_ASSERT(0);
12654 vos_mem_free(wdiBtAmpEventParam);
12655 return VOS_STATUS_E_NOMEM;
12656 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012657 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
12658 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012659 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
12660 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012661 /* Store BT AMP event pointer, as this will be used for response */
12662 /* store Params pass it to WDI */
12663 pWdaParams->pWdaContext = pWDA;
12664 pWdaParams->wdaMsgParam = pBtAmpEventParams;
12665 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012666 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012667 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012668 if(IS_WDI_STATUS_FAILURE(status))
12669 {
12670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12671 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
12672 vos_mem_free(pWdaParams->wdaMsgParam) ;
12673 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12674 vos_mem_free(pWdaParams) ;
12675 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012676 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
12677 {
12678 pWDA->wdaAmpSessionOn = VOS_TRUE;
12679 }
12680 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012681}
12682
Jeff Johnson295189b2012-06-20 16:38:30 -070012683/*
12684 * FUNCTION: WDA_FTMCommandReqCallback
12685 * Handle FTM CMD response came from HAL
12686 * Route responce to HDD FTM
12687 */
12688void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
12689 void *usrData)
12690{
12691 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012692 if((NULL == pWDA) || (NULL == ftmCmdRspData))
12693 {
12694 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053012695 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070012696 return;
12697 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012698 /* Release Current FTM Command Request */
12699 vos_mem_free(pWDA->wdaFTMCmdReq);
12700 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012701 /* Post FTM Responce to HDD FTM */
12702 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070012703 return;
12704}
Jeff Johnson295189b2012-06-20 16:38:30 -070012705/*
12706 * FUNCTION: WDA_ProcessFTMCommand
12707 * Send FTM command to WDI
12708 */
12709VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
12710 tPttMsgbuffer *pPTTFtmCmd)
12711{
12712 WDI_Status status = WDI_STATUS_SUCCESS;
12713 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012714 ftmCMDReq = (WDI_FTMCommandReqType *)
12715 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
12716 if(NULL == ftmCMDReq)
12717 {
12718 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12719 "WDA FTM Command buffer alloc fail");
12720 return VOS_STATUS_E_NOMEM;
12721 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012722 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
12723 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -070012724 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -070012725 /* Send command to WDI */
12726 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070012727 return status;
12728}
Jeff Johnsone7245742012-09-05 17:12:55 -070012729#ifdef FEATURE_OEM_DATA_SUPPORT
12730/*
12731 * FUNCTION: WDA_StartOemDataReqCallback
12732 *
12733 */
12734void WDA_StartOemDataReqCallback(
12735 WDI_oemDataRspParamsType *wdiOemDataRspParams,
12736 void* pUserData)
12737{
12738 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012739 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012740 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070012741 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012742
Jeff Johnsone7245742012-09-05 17:12:55 -070012743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012744 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012745
12746 if(NULL == pWdaParams)
12747 {
12748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012749 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012750 VOS_ASSERT(0) ;
12751 return ;
12752 }
12753 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
12754
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012755 if (NULL == pWDA)
Jeff Johnsone7245742012-09-05 17:12:55 -070012756 {
12757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012758 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070012759 VOS_ASSERT(0);
12760 return ;
12761 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012762
Jeff Johnsone7245742012-09-05 17:12:55 -070012763 /*
12764 * Allocate memory for response params sent to PE
12765 */
12766 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
12767
12768 // Check if memory is allocated for OemdataMeasRsp Params.
12769 if(NULL == pOemDataRspParams)
12770 {
12771 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12772 "OEM DATA WDA callback alloc fail");
12773 VOS_ASSERT(0) ;
12774 return;
12775 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012776
Jeff Johnsone7245742012-09-05 17:12:55 -070012777 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012778 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12779 vos_mem_free(pWdaParams->wdaMsgParam);
12780 vos_mem_free(pWdaParams) ;
12781
Jeff Johnsone7245742012-09-05 17:12:55 -070012782 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080012783 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -070012784 * Also, here success always means that we have atleast one BSSID.
12785 */
12786 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
12787
12788 //enable Tx
12789 status = WDA_ResumeDataTx(pWDA);
12790 if(status != VOS_STATUS_SUCCESS)
12791 {
12792 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
12793 }
12794 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
12795 return ;
12796}
12797/*
12798 * FUNCTION: WDA_ProcessStartOemDataReq
12799 * Send Start Oem Data Req to WDI
12800 */
12801VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
12802 tStartOemDataReq *pOemDataReqParams)
12803{
12804 WDI_Status status = WDI_STATUS_SUCCESS;
12805 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012806 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -070012807
12808 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
12809
12810 if(NULL == wdiOemDataReqParams)
12811 {
12812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012813 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070012814 VOS_ASSERT(0);
12815 return VOS_STATUS_E_NOMEM;
12816 }
12817
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012818 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
12819 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
12820 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
12821 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -070012822
12823 wdiOemDataReqParams->wdiReqStatusCB = NULL;
12824
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012825 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12826 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -070012827 {
12828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012829 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070012830 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012831 vos_mem_free(pOemDataReqParams);
12832 VOS_ASSERT(0);
12833 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -070012834 }
Jeff Johnsone7245742012-09-05 17:12:55 -070012835
Bernald44a1ae2013-01-09 08:30:39 -080012836 pWdaParams->pWdaContext = (void*)pWDA;
12837 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
12838 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012839
12840 status = WDI_StartOemDataReq(wdiOemDataReqParams,
12841 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070012842
12843 if(IS_WDI_STATUS_FAILURE(status))
12844 {
12845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12846 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012847 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12848 vos_mem_free(pWdaParams->wdaMsgParam);
12849 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070012850 }
12851 return CONVERT_WDI2VOS_STATUS(status) ;
12852}
12853#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070012854/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012855 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012856 *
12857 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012858void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012859{
12860 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012862 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012863 if(NULL == pWdaParams)
12864 {
12865 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012866 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012867 VOS_ASSERT(0) ;
12868 return ;
12869 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012870
12871 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12872 vos_mem_free(pWdaParams->wdaMsgParam);
12873 vos_mem_free(pWdaParams);
12874
12875 return ;
12876}
12877/*
12878 * FUNCTION: WDA_SetTxPerTrackingReqCallback
12879 * Free memory.
12880 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
12881 */
12882void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
12883{
12884 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12885
12886 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12887 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12888
12889 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070012890 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070012891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12892 "%s: pWdaParams received NULL", __func__);
12893 VOS_ASSERT(0);
12894 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070012895 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012896
12897 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012898 {
12899 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -070012900 vos_mem_free(pWdaParams->wdaMsgParam);
12901 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012902 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012903
12904 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070012905}
Jeff Johnson295189b2012-06-20 16:38:30 -070012906#ifdef WLAN_FEATURE_GTK_OFFLOAD
12907/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012908 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012909 *
12910 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012911void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012912 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012913{
12914 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12915
12916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012917 "<------ %s " ,__func__);
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080012918 if(NULL == pWdaParams)
12919 {
12920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12921 "%s: pWdaParams received NULL", __func__);
12922 VOS_ASSERT(0);
12923 return;
12924 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012925
Jeff Johnson295189b2012-06-20 16:38:30 -070012926 vos_mem_free(pWdaParams->wdaMsgParam) ;
12927 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12928 vos_mem_free(pWdaParams) ;
12929
12930 //print a msg, nothing else to do
12931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012932 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070012933
12934 return ;
12935}
Yue Ma7f44bbe2013-04-12 11:47:39 -070012936/*
12937 * FUNCTION: WDA_GTKOffloadReqCallback
12938 * Free memory.
12939 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
12940 */
12941void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
12942{
12943 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012944
Yue Ma7f44bbe2013-04-12 11:47:39 -070012945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12946 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12947
12948 if(NULL == pWdaParams)
12949 {
12950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12951 "%s: pWdaParams received NULL", __func__);
12952 VOS_ASSERT(0);
12953 return;
12954 }
12955
12956 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12957 {
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053012958 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
12959 sizeof(WDI_GtkOffloadReqMsg));
12960 vos_mem_zero(pWdaParams->wdaMsgParam,
12961 sizeof(tSirGtkOffloadParams));
Yue Ma7f44bbe2013-04-12 11:47:39 -070012962 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12963 vos_mem_free(pWdaParams->wdaMsgParam);
12964 vos_mem_free(pWdaParams);
12965 }
12966
12967 return;
12968}
Jeff Johnson295189b2012-06-20 16:38:30 -070012969/*
12970 * FUNCTION: WDA_ProcessGTKOffloadReq
12971 * Request to WDI to set the filter to minimize unnecessary host wakeup due
12972 * to broadcast traffic (sta mode).
12973 */
12974VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
12975 tpSirGtkOffloadParams pGtkOffloadParams)
12976{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053012977 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012978 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
12979 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
12980 sizeof(WDI_GtkOffloadReqMsg)) ;
12981 tWDA_ReqParams *pWdaParams ;
12982
12983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012984 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012985
12986 if(NULL == wdiGtkOffloadReqMsg)
12987 {
12988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012989 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012990 VOS_ASSERT(0);
12991 return VOS_STATUS_E_NOMEM;
12992 }
12993
12994 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12995 if(NULL == pWdaParams)
12996 {
12997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012998 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012999 VOS_ASSERT(0);
13000 vos_mem_free(wdiGtkOffloadReqMsg);
13001 return VOS_STATUS_E_NOMEM;
13002 }
13003
13004 //
13005 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
13006 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013007
13008 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013009 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013010
Jeff Johnson295189b2012-06-20 16:38:30 -070013011 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
13012 // Copy KCK
13013 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
13014 // Copy KEK
13015 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
13016 // Copy KeyReplayCounter
13017 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
13018 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
13019
Yue Ma7f44bbe2013-04-12 11:47:39 -070013020 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
13021 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013022
Jeff Johnson295189b2012-06-20 16:38:30 -070013023
13024 /* Store Params pass it to WDI */
13025 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
13026 pWdaParams->pWdaContext = pWDA;
13027 /* Store param pointer as passed in by caller */
13028 pWdaParams->wdaMsgParam = pGtkOffloadParams;
13029
Yue Ma7f44bbe2013-04-12 11:47:39 -070013030 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013031
13032 if(IS_WDI_STATUS_FAILURE(status))
13033 {
13034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13035 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053013036 vos_mem_zero(wdiGtkOffloadReqMsg, sizeof(WDI_GtkOffloadReqMsg));
13037 vos_mem_zero(pGtkOffloadParams, sizeof(tSirGtkOffloadParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070013038 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13039 vos_mem_free(pWdaParams->wdaMsgParam);
13040 vos_mem_free(pWdaParams);
13041 }
13042
13043 return CONVERT_WDI2VOS_STATUS(status) ;
13044}
13045
13046/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013047 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013048 *
13049 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013050void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013051 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013052{
13053 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13054 tWDA_CbContext *pWDA;
13055 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Nirav Shah374de6e2014-02-13 16:40:01 +053013056 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070013057 vos_msg_t vosMsg;
13058
13059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013060 "<------ %s " ,__func__);
Nirav Shah374de6e2014-02-13 16:40:01 +053013061
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080013062 if(NULL == pWdaParams)
13063 {
13064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13065 "%s: pWdaParams received NULL", __func__);
13066 VOS_ASSERT(0);
13067 return;
13068 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013069
Nirav Shah374de6e2014-02-13 16:40:01 +053013070 pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams));
13071 if(NULL == pGtkOffloadGetInfoRsp)
13072 {
13073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13074 "%s: vos_mem_malloc failed ", __func__);
13075 VOS_ASSERT(0);
13076 return;
13077 }
13078
Jeff Johnson295189b2012-06-20 16:38:30 -070013079 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
13080 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
13081
13082 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
13083 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
13084
13085 /* Message Header */
13086 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
Kiran Kumar Lokerefdf42412013-07-17 17:40:58 -070013087 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013088
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013089 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
13090 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
13091 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
13092 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
13093 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070013094
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013095 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
13096 pwdiGtkOffloadGetInfoRsparams->bssId,
13097 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013098 /* VOS message wrapper */
13099 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
13100 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
13101 vosMsg.bodyval = 0;
13102
13103 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13104 {
13105 /* free the mem and return */
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053013106 vos_mem_zero(pGtkOffloadGetInfoRsp,
13107 sizeof(tSirGtkOffloadGetInfoRspParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070013108 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
13109 }
13110
13111 vos_mem_free(pWdaParams->wdaMsgParam) ;
13112 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13113 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013114
13115 return;
13116}
13117/*
13118 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
13119 * Free memory and send RSP back to SME.
13120 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
13121 */
13122void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
13123{
13124 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13125 vos_msg_t vosMsg;
13126
13127 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13128 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13129
13130 if(NULL == pWdaParams)
13131 {
13132 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13133 "%s: pWdaParams received NULL", __func__);
13134 VOS_ASSERT(0);
13135 return;
13136 }
13137
13138 /* VOS message wrapper */
13139 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
13140 vosMsg.bodyptr = NULL;
13141 vosMsg.bodyval = 0;
13142
13143 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13144 {
13145 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13146 vos_mem_free(pWdaParams->wdaMsgParam);
13147 vos_mem_free(pWdaParams);
13148 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
13149 }
13150
13151 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070013152}
13153#endif
13154
13155/*
13156 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
13157 * Request to WDI to set Tx Per Tracking configurations
13158 */
13159VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
13160{
13161 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070013162 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070013163 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
13164 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
13165 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
13166 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013168 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013169 if(NULL == pwdiSetTxPerTrackingReqParams)
13170 {
13171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013172 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013173 vos_mem_free(pTxPerTrackingParams);
13174 VOS_ASSERT(0);
13175 return VOS_STATUS_E_NOMEM;
13176 }
13177 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13178 if(NULL == pWdaParams)
13179 {
13180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013181 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013182 vos_mem_free(pwdiSetTxPerTrackingReqParams);
13183 vos_mem_free(pTxPerTrackingParams);
13184 VOS_ASSERT(0);
13185 return VOS_STATUS_E_NOMEM;
13186 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013187 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
13188 pTxPerTrackingParams->ucTxPerTrackingEnable;
13189 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
13190 pTxPerTrackingParams->ucTxPerTrackingPeriod;
13191 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
13192 pTxPerTrackingParams->ucTxPerTrackingRatio;
13193 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
13194 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013195 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
13196 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013197 /* Store param pointer as passed in by caller */
13198 /* store Params pass it to WDI
13199 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
13200 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
13201 pWdaParams->pWdaContext = pWDA;
13202 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070013203 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013204 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070013205 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070013206 {
13207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13208 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070013209 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070013210 vos_mem_free(pWdaParams->wdaMsgParam) ;
13211 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13212 vos_mem_free(pWdaParams) ;
13213 }
Jeff Johnson43971f52012-07-17 12:26:56 -070013214 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013215
13216}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070013217/*
13218 * FUNCTION: WDA_HALDumpCmdCallback
13219 * Send the VOS complete .
13220 */
13221void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
13222 void* pUserData)
13223{
13224 tANI_U8 *buffer = NULL;
13225 tWDA_CbContext *pWDA = NULL;
Siddharth Bhal68115602015-01-18 20:44:55 +053013226 tWDA_HalDumpReqParams *pWdaParams = (tWDA_HalDumpReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013227 if(NULL == pWdaParams)
13228 {
13229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013230 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013231 VOS_ASSERT(0) ;
13232 return ;
13233 }
Bhargav Shah1a2cceb2016-03-28 11:56:10 +053013234
13235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13236 "%s: WDA HAL DUMP Resp Received",__func__);
13237
Jeff Johnson295189b2012-06-20 16:38:30 -070013238 pWDA = pWdaParams->pWdaContext;
13239 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070013240 if(wdiRspParams->usBufferLen > 0)
13241 {
13242 /*Copy the Resp data to UMAC supplied buffer*/
13243 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
13244 }
Siddharth Bhal68115602015-01-18 20:44:55 +053013245
13246 if (!pWdaParams->wdaHALDumpAsync)
13247 {/* Indicate VOSS about the start complete */
13248 vos_WDAComplete_cback(pWDA->pVosContext);
13249 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013250 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13251 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013252 return ;
13253}
13254
Jeff Johnson295189b2012-06-20 16:38:30 -070013255/*
13256 * FUNCTION: WDA_ProcessHALDumpCmdReq
13257 * Send Dump command to WDI
13258 */
13259VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
13260 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
Siddharth Bhal68115602015-01-18 20:44:55 +053013261 tANI_U32 arg4, tANI_U8 *pBuffer, wpt_boolean async)
Jeff Johnson295189b2012-06-20 16:38:30 -070013262{
13263 WDI_Status status = WDI_STATUS_SUCCESS;
13264 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
13265 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
Siddharth Bhal68115602015-01-18 20:44:55 +053013266 tWDA_HalDumpReqParams *pWdaParams ;
13267
Jeff Johnson295189b2012-06-20 16:38:30 -070013268 pVosContextType pVosContext = NULL;
13269 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070013270 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
13271 (void *)pMac);
Katya Nigame4bafe02014-02-28 15:37:57 +053013272 if(pVosContext)
13273 {
13274 if (pVosContext->isLogpInProgress)
13275 {
13276 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
13277 "%s:LOGP in Progress. Ignore!!!", __func__);
13278 return VOS_STATUS_E_BUSY;
13279 }
13280 }
13281 else
13282 {
13283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13284 "%s: VOS Context Null", __func__);
13285 return VOS_STATUS_E_RESOURCES;
13286 }
13287
Siddharth Bhal68115602015-01-18 20:44:55 +053013288 if (NULL == pVosContext->pWDAContext)
13289 {
13290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13291 "%s: WDA Context Null", __func__);
13292 return VOS_STATUS_E_RESOURCES;
13293 }
13294 pWdaParams = (tWDA_HalDumpReqParams *)vos_mem_malloc(sizeof(tWDA_HalDumpReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013295 if(NULL == pWdaParams)
13296 {
13297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013298 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013299 return VOS_STATUS_E_NOMEM;
13300 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013301 /* Allocate memory WDI request structure*/
13302 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
13303 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
13304 if(NULL == wdiHALDumpCmdReqParam)
13305 {
13306 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13307 "WDA HAL DUMP Command buffer alloc fail");
13308 vos_mem_free(pWdaParams);
13309 return WDI_STATUS_E_FAILURE;
13310 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013311 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070013312 /* Extract the arguments */
13313 wdiHalDumpCmdInfo->command = cmd;
13314 wdiHalDumpCmdInfo->argument1 = arg1;
13315 wdiHalDumpCmdInfo->argument2 = arg2;
13316 wdiHalDumpCmdInfo->argument3 = arg3;
13317 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070013318 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013319 pWdaParams->pWdaContext = pVosContext->pWDAContext;
Siddharth Bhal68115602015-01-18 20:44:55 +053013320 pWdaParams->wdaHALDumpAsync = async;
Jeff Johnson295189b2012-06-20 16:38:30 -070013321
13322 /* Response message will be passed through the buffer */
13323 pWdaParams->wdaMsgParam = (void *)pBuffer;
13324
13325 /* store Params pass it to WDI */
13326 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Bhargav Shah1a2cceb2016-03-28 11:56:10 +053013327
13328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13329 "%s: WDA HAL DUMP Command sent",__func__);
13330
Jeff Johnson295189b2012-06-20 16:38:30 -070013331 /* Send command to WDI */
Siddharth Bhal68115602015-01-18 20:44:55 +053013332 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback,
13333 pWdaParams);
13334 /* For Sync event only wait for rsp until completion of wdaCompleteEvent*/
13335 if (!async)
Jeff Johnson295189b2012-06-20 16:38:30 -070013336 {
Siddharth Bhal68115602015-01-18 20:44:55 +053013337 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent),
13338 WDA_DUMPCMD_WAIT_TIMEOUT );
13339 if ( vStatus != VOS_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -070013340 {
Siddharth Bhal68115602015-01-18 20:44:55 +053013341 if ( vStatus == VOS_STATUS_E_TIMEOUT )
13342 {
13343 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
13344 "%s: Timeout occurred before WDA_HALDUMP complete",__func__);
13345 }
13346 else
13347 {
13348 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
13349 "%s: WDA_HALDUMP reporting other error",__func__);
13350 }
Bhargav Shah1a2cceb2016-03-28 11:56:10 +053013351 VOS_BUG(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070013352 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013353 }
13354 return status;
13355}
Jeff Johnson295189b2012-06-20 16:38:30 -070013356#ifdef WLAN_FEATURE_GTK_OFFLOAD
13357/*
13358 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
13359 * Request to WDI to get GTK Offload Information
13360 */
13361VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
13362 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
13363{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013364 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013365 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
13366 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
13367 tWDA_ReqParams *pWdaParams ;
13368
13369 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
13370 {
13371 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013372 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013373 VOS_ASSERT(0);
13374 return VOS_STATUS_E_NOMEM;
13375 }
13376
13377 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13378 if(NULL == pWdaParams)
13379 {
13380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013381 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013382 VOS_ASSERT(0);
13383 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
13384 return VOS_STATUS_E_NOMEM;
13385 }
13386
Yue Ma7f44bbe2013-04-12 11:47:39 -070013387 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
13388 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013389
Jeff Johnson295189b2012-06-20 16:38:30 -070013390 /* Store Params pass it to WDI */
13391 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
13392 pWdaParams->pWdaContext = pWDA;
13393 /* Store param pointer as passed in by caller */
13394 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
13395
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013396 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013397 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013398
Yue Ma7f44bbe2013-04-12 11:47:39 -070013399 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013400
13401 if(IS_WDI_STATUS_FAILURE(status))
13402 {
13403 /* failure returned by WDI API */
13404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13405 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
13406 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13407 vos_mem_free(pWdaParams) ;
13408 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
13409 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
13410 }
13411
13412 return CONVERT_WDI2VOS_STATUS(status) ;
13413}
13414#endif // WLAN_FEATURE_GTK_OFFLOAD
13415
13416/*
Yue Mab9c86f42013-08-14 15:59:08 -070013417 * FUNCTION: WDA_ProcessAddPeriodicTxPtrnInd
13418 *
13419 */
13420VOS_STATUS WDA_ProcessAddPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
13421 tSirAddPeriodicTxPtrn *pAddPeriodicTxPtrnParams)
13422{
13423 WDI_Status wdiStatus;
13424 WDI_AddPeriodicTxPtrnParamsType *addPeriodicTxPtrnParams;
13425
13426 addPeriodicTxPtrnParams =
13427 vos_mem_malloc(sizeof(WDI_AddPeriodicTxPtrnParamsType));
13428
13429 if (NULL == addPeriodicTxPtrnParams)
13430 {
13431 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13432 "%s: Not able to allocate memory for addPeriodicTxPtrnParams!",
13433 __func__);
13434
13435 return VOS_STATUS_E_NOMEM;
13436 }
13437
13438 vos_mem_copy(&(addPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams),
13439 pAddPeriodicTxPtrnParams, sizeof(tSirAddPeriodicTxPtrn));
13440
13441 addPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
13442 addPeriodicTxPtrnParams->pUserData = pWDA;
13443
13444 wdiStatus = WDI_AddPeriodicTxPtrnInd(addPeriodicTxPtrnParams);
13445
13446 if (WDI_STATUS_PENDING == wdiStatus)
13447 {
13448 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13449 "Pending received for %s:%d", __func__, __LINE__ );
13450 }
13451 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13452 {
13453 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13454 "Failure in %s:%d", __func__, __LINE__ );
13455 }
13456
13457 vos_mem_free(addPeriodicTxPtrnParams);
13458
13459 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13460}
13461
13462/*
13463 * FUNCTION: WDA_ProcessDelPeriodicTxPtrnInd
13464 *
13465 */
13466VOS_STATUS WDA_ProcessDelPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
13467 tSirDelPeriodicTxPtrn *pDelPeriodicTxPtrnParams)
13468{
13469 WDI_Status wdiStatus;
13470 WDI_DelPeriodicTxPtrnParamsType *delPeriodicTxPtrnParams;
13471
13472 delPeriodicTxPtrnParams =
13473 vos_mem_malloc(sizeof(WDI_DelPeriodicTxPtrnParamsType));
13474
13475 if (NULL == delPeriodicTxPtrnParams)
13476 {
13477 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13478 "%s: Not able to allocate memory for delPeriodicTxPtrnParams!",
13479 __func__);
13480
13481 return VOS_STATUS_E_NOMEM;
13482 }
13483
13484 vos_mem_copy(&(delPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams),
13485 pDelPeriodicTxPtrnParams, sizeof(tSirDelPeriodicTxPtrn));
13486
13487 delPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
13488 delPeriodicTxPtrnParams->pUserData = pWDA;
13489
13490 wdiStatus = WDI_DelPeriodicTxPtrnInd(delPeriodicTxPtrnParams);
13491
13492 if (WDI_STATUS_PENDING == wdiStatus)
13493 {
13494 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13495 "Pending received for %s:%d", __func__, __LINE__ );
13496 }
13497 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13498 {
13499 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13500 "Failure in %s:%d", __func__, __LINE__ );
13501 }
13502
13503 vos_mem_free(delPeriodicTxPtrnParams);
13504
13505 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13506}
13507
Abhishek Singh00b71972016-01-07 10:51:04 +053013508/*
13509 * FUNCTION: WDA_ProcessRateUpdateInd
13510 *
13511 */
13512VOS_STATUS WDA_ProcessRateUpdateInd(tWDA_CbContext *pWDA,
13513 tSirRateUpdateInd *pRateUpdateParams)
13514{
13515 WDI_Status wdiStatus;
13516 WDI_RateUpdateIndParams rateUpdateParams;
13517
13518 vos_mem_copy(rateUpdateParams.bssid,
13519 pRateUpdateParams->bssid, sizeof(tSirMacAddr));
13520
13521 rateUpdateParams.ucastDataRateTxFlag =
13522 pRateUpdateParams->ucastDataRateTxFlag;
13523 rateUpdateParams.rmcDataRateTxFlag =
13524 pRateUpdateParams->rmcDataRateTxFlag;
13525 rateUpdateParams.mcastDataRate24GHzTxFlag =
13526 pRateUpdateParams->mcastDataRate24GHzTxFlag;
13527 rateUpdateParams.mcastDataRate5GHzTxFlag =
13528 pRateUpdateParams->mcastDataRate5GHzTxFlag;
13529
13530 rateUpdateParams.ucastDataRate = pRateUpdateParams->ucastDataRate;
13531 rateUpdateParams.rmcDataRate =
13532 pRateUpdateParams->rmcDataRate;
13533 rateUpdateParams.mcastDataRate24GHz = pRateUpdateParams->mcastDataRate24GHz;
13534 rateUpdateParams.mcastDataRate5GHz = pRateUpdateParams->mcastDataRate5GHz;
13535
13536 rateUpdateParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
13537 rateUpdateParams.pUserData = pWDA;
13538
13539 wdiStatus = WDI_RateUpdateInd(&rateUpdateParams);
13540
13541 if (WDI_STATUS_PENDING == wdiStatus)
13542 {
13543 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13544 "Pending received for %s:%d", __func__, __LINE__ );
13545 }
13546 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13547 {
13548 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13549 "Failure in %s:%d", __func__, __LINE__ );
13550 }
13551
13552 vos_mem_free(pRateUpdateParams);
13553
13554 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13555}
13556
13557
Rajeev79dbe4c2013-10-05 11:03:42 +053013558#ifdef FEATURE_WLAN_BATCH_SCAN
13559/*
13560 * FUNCTION: WDA_ProcessStopBatchScanInd
13561 *
13562 * DESCRIPTION: This function sends stop batch scan inidcation message to WDI
13563 *
13564 * PARAM:
13565 * pWDA: pointer to WDA context
13566 * pReq: pointer to stop batch scan request
13567 */
13568VOS_STATUS WDA_ProcessStopBatchScanInd(tWDA_CbContext *pWDA,
13569 tSirStopBatchScanInd *pReq)
13570{
13571 WDI_Status wdiStatus;
13572 WDI_StopBatchScanIndType wdiReq;
13573
13574 wdiReq.param = pReq->param;
13575
13576 wdiStatus = WDI_StopBatchScanInd(&wdiReq);
13577
13578 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13579 {
13580 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13581 "Stop batch scan ind failed %s:%d", __func__, wdiStatus);
13582 }
13583
13584 vos_mem_free(pReq);
13585
13586 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13587}
13588/*==========================================================================
13589 FUNCTION WDA_ProcessTriggerBatchScanResultInd
13590
13591 DESCRIPTION
13592 API to pull batch scan result from FW
13593
13594 PARAMETERS
13595 pWDA: Pointer to WDA context
13596 pGetBatchScanReq: Pointer to get batch scan result indication
13597
13598 RETURN VALUE
13599 NONE
13600
13601===========================================================================*/
13602VOS_STATUS WDA_ProcessTriggerBatchScanResultInd(tWDA_CbContext *pWDA,
13603 tSirTriggerBatchScanResultInd *pReq)
13604{
13605 WDI_Status wdiStatus;
13606 WDI_TriggerBatchScanResultIndType wdiReq;
13607
13608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13609 "------> %s " ,__func__);
13610
13611 wdiReq.param = pReq->param;
13612
13613 wdiStatus = WDI_TriggerBatchScanResultInd(&wdiReq);
13614
13615 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13616 {
13617 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13618 "Trigger batch scan result ind failed %s:%d",
13619 __func__, wdiStatus);
13620 }
13621
13622 vos_mem_free(pReq);
13623
13624 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13625}
13626
13627/*==========================================================================
13628 FUNCTION WDA_SetBatchScanRespCallback
13629
13630 DESCRIPTION
13631 API to process set batch scan response from FW
13632
13633 PARAMETERS
13634 pRsp: Pointer to set batch scan response
13635 pUserData: Pointer to user data
13636
13637 RETURN VALUE
13638 NONE
13639
13640===========================================================================*/
13641void WDA_SetBatchScanRespCallback
13642(
13643 WDI_SetBatchScanRspType *pRsp,
13644 void* pUserData
13645)
13646{
13647 tSirSetBatchScanRsp *pHddSetBatchScanRsp;
13648 tpAniSirGlobal pMac;
13649 void *pCallbackContext;
13650 tWDA_CbContext *pWDA = NULL ;
13651 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13652
13653
13654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13655 "<------ %s " ,__func__);
13656 if (NULL == pWdaParams)
13657 {
13658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13659 "%s: pWdaParams received NULL", __func__);
13660 VOS_ASSERT(0) ;
13661 return ;
13662 }
13663
13664 /*extract WDA context*/
13665 pWDA = pWdaParams->pWdaContext;
13666 if (NULL == pWDA)
13667 {
13668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13669 "%s:pWDA is NULL can't invole HDD callback",
13670 __func__);
13671 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13672 vos_mem_free(pWdaParams->wdaMsgParam);
13673 vos_mem_free(pWdaParams);
13674 VOS_ASSERT(0);
13675 return;
13676 }
13677
13678 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13679 vos_mem_free(pWdaParams->wdaMsgParam);
13680 vos_mem_free(pWdaParams);
13681
13682 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13683 if (NULL == pMac)
13684 {
13685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13686 "%s:pMac is NULL", __func__);
13687 VOS_ASSERT(0);
13688 return;
13689 }
13690
13691 pHddSetBatchScanRsp =
13692 (tSirSetBatchScanRsp *)vos_mem_malloc(sizeof(tSirSetBatchScanRsp));
13693 if (NULL == pHddSetBatchScanRsp)
13694 {
13695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13696 "%s: VOS MEM Alloc Failure can't invoke HDD callback", __func__);
13697 VOS_ASSERT(0);
13698 return;
13699 }
13700
13701 pHddSetBatchScanRsp->nScansToBatch = pRsp->nScansToBatch;
13702
13703 pCallbackContext = pMac->pmc.setBatchScanReqCallbackContext;
13704 /*call hdd callback with set batch scan response data*/
13705 if(pMac->pmc.setBatchScanReqCallback)
13706 {
13707 pMac->pmc.setBatchScanReqCallback(pCallbackContext, pHddSetBatchScanRsp);
13708 }
13709 else
13710 {
13711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13712 "%s:HDD callback is null", __func__);
13713 VOS_ASSERT(0);
13714 }
13715
13716 vos_mem_free(pHddSetBatchScanRsp);
13717 return ;
13718}
13719
13720/*==========================================================================
13721 FUNCTION WDA_ProcessSetBatchScanReq
13722
13723 DESCRIPTION
13724 API to send set batch scan request to WDI
13725
13726 PARAMETERS
13727 pWDA: Pointer to WDA context
13728 pSetBatchScanReq: Pointer to set batch scan req
13729
13730 RETURN VALUE
13731 NONE
13732
13733===========================================================================*/
13734VOS_STATUS WDA_ProcessSetBatchScanReq(tWDA_CbContext *pWDA,
13735 tSirSetBatchScanReq *pSetBatchScanReq)
13736{
13737 WDI_Status status;
13738 tWDA_ReqParams *pWdaParams ;
13739 WDI_SetBatchScanReqType *pWdiSetBatchScanReq;
13740
13741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13742 "------> %s " ,__func__);
13743
13744 pWdiSetBatchScanReq =
13745 (WDI_SetBatchScanReqType *)vos_mem_malloc(sizeof(WDI_SetBatchScanReqType));
13746 if (NULL == pWdiSetBatchScanReq)
13747 {
13748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13749 "%s: VOS MEM Alloc Failure", __func__);
13750 vos_mem_free(pSetBatchScanReq);
13751 VOS_ASSERT(0);
13752 return VOS_STATUS_E_NOMEM;
13753 }
13754
13755 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
13756 if (NULL == pWdaParams)
13757 {
13758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13759 "%s: VOS MEM Alloc Failure", __func__);
13760 VOS_ASSERT(0);
13761 vos_mem_free(pSetBatchScanReq);
13762 vos_mem_free(pWdiSetBatchScanReq);
13763 return VOS_STATUS_E_NOMEM;
13764 }
13765
13766 pWdiSetBatchScanReq->scanFrequency = pSetBatchScanReq->scanFrequency;
13767 pWdiSetBatchScanReq->numberOfScansToBatch =
13768 pSetBatchScanReq->numberOfScansToBatch;
13769 pWdiSetBatchScanReq->bestNetwork = pSetBatchScanReq->bestNetwork;
13770 pWdiSetBatchScanReq->rfBand = pSetBatchScanReq->rfBand;
13771 pWdiSetBatchScanReq->rtt = pSetBatchScanReq->rtt;
13772
13773 pWdaParams->wdaWdiApiMsgParam = pWdiSetBatchScanReq;
13774 pWdaParams->pWdaContext = pWDA;
13775 pWdaParams->wdaMsgParam = pSetBatchScanReq;
13776
13777 status = WDI_SetBatchScanReq(pWdiSetBatchScanReq, pWdaParams,
13778 (WDI_SetBatchScanCb)WDA_SetBatchScanRespCallback);
13779 if (IS_WDI_STATUS_FAILURE(status))
13780 {
13781 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13782 "Failure in Set Batch Scan REQ WDI API, free all the memory " );
13783 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13784 vos_mem_free(pWdaParams->wdaMsgParam);
13785 vos_mem_free(pWdaParams);
13786 }
13787 return CONVERT_WDI2VOS_STATUS(status);
13788}
13789
13790#endif
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053013791/*
13792 * FUNCTION: WDA_ProcessHT40OBSSScanInd
13793 *
13794 * DESCRIPTION: This function sends start/update OBSS scan
13795 * inidcation message to WDI
13796 *
13797 * PARAM:
13798 * pWDA: pointer to WDA context
13799 * pReq: pointer to start OBSS scan request
13800 */
13801VOS_STATUS WDA_ProcessHT40OBSSScanInd(tWDA_CbContext *pWDA,
13802 tSirHT40OBSSScanInd *pReq)
13803{
13804 WDI_Status status;
13805 WDI_HT40ObssScanParamsType wdiOBSSScanParams;
13806 WDI_HT40ObssScanIndType *pWdiOBSSScanInd;
Rajeev79dbe4c2013-10-05 11:03:42 +053013807
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053013808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13809 "------> %s " ,__func__);
13810 wdiOBSSScanParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
13811 wdiOBSSScanParams.pUserData = pWDA;
13812
13813 pWdiOBSSScanInd = &(wdiOBSSScanParams.wdiHT40ObssScanParam);
13814 pWdiOBSSScanInd->cmdType = pReq->cmdType;
13815 pWdiOBSSScanInd->scanType = pReq->scanType;
13816 pWdiOBSSScanInd->OBSSScanActiveDwellTime =
13817 pReq->OBSSScanActiveDwellTime;
13818 pWdiOBSSScanInd->OBSSScanPassiveDwellTime =
13819 pReq->OBSSScanPassiveDwellTime;
13820 pWdiOBSSScanInd->BSSChannelWidthTriggerScanInterval =
13821 pReq->BSSChannelWidthTriggerScanInterval;
13822 pWdiOBSSScanInd->BSSWidthChannelTransitionDelayFactor =
13823 pReq->BSSWidthChannelTransitionDelayFactor;
13824 pWdiOBSSScanInd->OBSSScanActiveTotalPerChannel =
13825 pReq->OBSSScanActiveTotalPerChannel;
13826 pWdiOBSSScanInd->OBSSScanPassiveTotalPerChannel =
13827 pReq->OBSSScanPassiveTotalPerChannel;
13828 pWdiOBSSScanInd->OBSSScanActivityThreshold =
13829 pReq->OBSSScanActivityThreshold;
13830 pWdiOBSSScanInd->channelCount = pReq->channelCount;
13831 vos_mem_copy(pWdiOBSSScanInd->channels,
13832 pReq->channels,
13833 pReq->channelCount);
13834 pWdiOBSSScanInd->selfStaIdx = pReq->selfStaIdx;
13835 pWdiOBSSScanInd->fortyMHZIntolerent = pReq->fortyMHZIntolerent;
13836 pWdiOBSSScanInd->bssIdx = pReq->bssIdx;
13837 pWdiOBSSScanInd->currentOperatingClass = pReq->currentOperatingClass;
13838 pWdiOBSSScanInd->ieFieldLen = pReq->ieFieldLen;
13839
13840 vos_mem_copy(pWdiOBSSScanInd->ieField,
13841 pReq->ieField,
13842 pReq->ieFieldLen);
13843
13844 status = WDI_HT40OBSSScanInd(&wdiOBSSScanParams);
13845 if (WDI_STATUS_PENDING == status)
13846 {
13847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13848 "Pending received for %s:%d ",__func__,__LINE__ );
13849 }
13850 else if (WDI_STATUS_SUCCESS_SYNC != status)
13851 {
13852 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13853 "Failure in %s:%d ",__func__,__LINE__ );
13854 }
13855 return CONVERT_WDI2VOS_STATUS(status) ;
13856}
13857/*
13858 * FUNCTION: WDA_ProcessHT40OBSSStopScanInd
13859 *
13860 * DESCRIPTION: This function sends stop OBSS scan inidcation message to WDI
13861 *
13862 * PARAM:
13863 * pWDA: pointer to WDA context
13864 * pReq: pointer to stop batch scan request
13865 */
13866VOS_STATUS WDA_ProcessHT40OBSSStopScanInd(tWDA_CbContext *pWDA,
13867 tANI_U8 *bssIdx)
13868{
13869 WDI_Status status;
13870
13871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13872 "------> %s " ,__func__);
13873
13874 status = WDI_HT40OBSSStopScanInd(*bssIdx);
13875 if (WDI_STATUS_PENDING == status)
13876 {
13877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13878 "Pending received for %s:%d ",__func__,__LINE__ );
13879 }
13880 else if (WDI_STATUS_SUCCESS_SYNC != status)
13881 {
13882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13883 "Failure in %s:%d ",__func__,__LINE__ );
13884 }
13885 return CONVERT_WDI2VOS_STATUS(status) ;
13886}
Yue Mab9c86f42013-08-14 15:59:08 -070013887/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013888 * -------------------------------------------------------------------------
13889 * DATA interface with WDI for Mgmt Frames
13890 * -------------------------------------------------------------------------
13891 */
Jeff Johnson295189b2012-06-20 16:38:30 -070013892/*
13893 * FUNCTION: WDA_TxComplete
13894 * Callback function for the WDA_TxPacket
13895 */
13896VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
13897 VOS_STATUS status )
13898{
13899
13900 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
13901 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Anjaneedevi Kapparapuf4883a72015-11-12 18:18:35 +053013902 tANI_U64 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013903
Mihir Shete63341222015-03-24 15:39:18 +053013904 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Enter:%s", __func__);
13905
Jeff Johnson295189b2012-06-20 16:38:30 -070013906 if(NULL == wdaContext)
13907 {
13908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13909 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013910 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013911 VOS_ASSERT(0);
Sushant Kaushik8355d202014-12-17 16:48:10 +053013912 vos_pkt_return_packet(pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070013913 return VOS_STATUS_E_FAILURE;
13914 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070013915
13916 /*Check if frame was timed out or not*/
13917 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
13918 (v_PVOID_t)&uUserData);
13919
13920 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
13921 {
13922 /*Discard frame - no further processing is needed*/
Mihir Shete63341222015-03-24 15:39:18 +053013923 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
13924 "%s: MGMT Frame Tx timed out",
13925 __func__);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070013926 vos_pkt_return_packet(pData);
13927 return VOS_STATUS_SUCCESS;
13928 }
13929
Jeff Johnson295189b2012-06-20 16:38:30 -070013930 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
13931 if( NULL!=wdaContext->pTxCbFunc)
13932 {
13933 /*check if packet is freed already*/
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053013934 if(vos_atomic_set((uintptr_t*)&wdaContext->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED) == (uintptr_t)pData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013935 {
13936 wdaContext->pTxCbFunc(pMac, pData);
13937 }
13938 else
13939 {
13940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053013941 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013942 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070013943 //Return from here since we reaching here because the packet already timeout
13944 return status;
13945 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013946 }
13947
13948 /*
13949 * Trigger the event to bring the HAL TL Tx complete function to come
13950 * out of wait
13951 * Let the coe above to complete the packet first. When this event is set,
13952 * the thread waiting for the event may run and set Vospacket_freed causing the original
13953 * packet not being freed.
13954 */
13955 status = vos_event_set(&wdaContext->txFrameEvent);
13956 if(!VOS_IS_STATUS_SUCCESS(status))
13957 {
13958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013959 "NEW VOS Event Set failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070013960 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013961 return status;
13962}
Jeff Johnson295189b2012-06-20 16:38:30 -070013963/*
13964 * FUNCTION: WDA_TxPacket
13965 * Forward TX management frame to WDI
13966 */
13967VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
13968 void *pFrmBuf,
13969 tANI_U16 frmLen,
13970 eFrameType frmType,
13971 eFrameTxDir txDir,
13972 tANI_U8 tid,
13973 pWDATxRxCompFunc pCompFunc,
13974 void *pData,
13975 pWDAAckFnTxComp pAckTxComp,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053013976 tANI_U32 txFlag,
13977 tANI_U32 txBdToken
13978 )
Jeff Johnson295189b2012-06-20 16:38:30 -070013979{
13980 VOS_STATUS status = VOS_STATUS_SUCCESS ;
13981 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
13982 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
13983 tANI_U8 eventIdx = 0;
13984 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
13985 tpAniSirGlobal pMac;
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053013986 tpSirTxBdStatus txBdStatus = {0};
Abhishek Singhe721fb42015-11-30 14:22:10 +053013987 v_TIME_t time_snapshot;
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053013988
Jeff Johnson295189b2012-06-20 16:38:30 -070013989 if((NULL == pWDA)||(NULL == pFrmBuf))
13990 {
13991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053013992 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013993 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070013994 VOS_ASSERT(0);
13995 return VOS_STATUS_E_FAILURE;
13996 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013997
Jeff Johnson295189b2012-06-20 16:38:30 -070013998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053013999 "Tx Mgmt Frame Subtype: %d alloc(%p) txBdToken = %u",
14000 pFc->subType, pFrmBuf, txBdToken);
Jeff Johnson295189b2012-06-20 16:38:30 -070014001 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14002 if(NULL == pMac)
14003 {
14004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014005 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014006 VOS_ASSERT(0);
14007 return VOS_STATUS_E_FAILURE;
14008 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014009
Jeff Johnson295189b2012-06-20 16:38:30 -070014010 /* store the call back function in WDA context */
14011 pWDA->pTxCbFunc = pCompFunc;
14012 /* store the call back for the function of ackTxComplete */
14013 if( pAckTxComp )
14014 {
Jeff Johnsone7245742012-09-05 17:12:55 -070014015 if( NULL != pWDA->pAckTxCbFunc )
14016 {
14017 /* Already TxComp is active no need to active again */
Agarwal Ashish3b3f3cb2015-07-02 16:43:47 +053014018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014019 "There is already one request pending for tx complete");
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053014020 pWDA->pAckTxCbFunc( pMac, &txBdStatus);
Jeff Johnsone7245742012-09-05 17:12:55 -070014021 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070014022
Jeff Johnsone7245742012-09-05 17:12:55 -070014023 if( VOS_STATUS_SUCCESS !=
14024 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14025 {
14026 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14027 "Tx Complete timeout Timer Stop Failed ");
14028 }
14029 else
14030 {
Agarwal Ashish3b3f3cb2015-07-02 16:43:47 +053014031 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080014032 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070014033 }
14034 }
14035
14036 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
14037 pWDA->pAckTxCbFunc = pAckTxComp;
14038 if( VOS_STATUS_SUCCESS !=
14039 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
14040 {
14041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14042 "Tx Complete Timer Start Failed ");
14043 pWDA->pAckTxCbFunc = NULL;
14044 return eHAL_STATUS_FAILURE;
14045 }
14046 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014047 /* Reset the event to be not signalled */
14048 status = vos_event_reset(&pWDA->txFrameEvent);
14049 if(!VOS_IS_STATUS_SUCCESS(status))
14050 {
14051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014052 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014053 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
14054 if( pAckTxComp )
14055 {
14056 pWDA->pAckTxCbFunc = NULL;
14057 if( VOS_STATUS_SUCCESS !=
14058 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14059 {
14060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14061 "Tx Complete timeout Timer Stop Failed ");
14062 }
14063 }
14064 return VOS_STATUS_E_FAILURE;
14065 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014066
14067 /* If Peer Sta mask is set don't overwrite to self sta */
14068 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070014069 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014070 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070014071 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014072 else
14073 {
Ganesh K08bce952012-12-13 15:04:41 -080014074 /* Get system role, use the self station if in unknown role or STA role */
14075 systemRole = wdaGetGlobalSystemRole(pMac);
14076 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
14077 (( eSYSTEM_STA_ROLE == systemRole )
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080014078#if defined FEATURE_WLAN_ESE || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080014079 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014080#endif
Ganesh K08bce952012-12-13 15:04:41 -080014081 ))
14082 {
14083 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
14084 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080014085 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014086
Jeff Johnsone7245742012-09-05 17:12:55 -070014087 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
14088 disassoc frame reaches the HW, HAL has already deleted the peer station */
14089 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070014090 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080014091 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070014092 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070014093 {
Jeff Johnson295189b2012-06-20 16:38:30 -070014094 /*Send Probe request frames on self sta idx*/
14095 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070014096 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014097 /* Since we donot want probe responses to be retried, send probe responses
14098 through the NO_ACK queues */
14099 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
14100 {
14101 //probe response is sent out using self station and no retries options.
14102 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
14103 }
14104 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
14105 {
14106 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
14107 }
14108 }
Pradeep Reddy POTTETI01710062015-06-29 13:35:53 +053014109#ifdef FEATURE_WLAN_TDLS
14110 /* TDLS Management frames are sent using Peer Sta mask */
14111 else if ((pFc->type == SIR_MAC_DATA_FRAME) &&
14112 (txFlag & HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME))
14113 {
14114 txFlag |= HAL_USE_PEER_STA_REQUESTED_MASK;
14115
14116 }
14117#endif
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053014118 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
Jeff Johnson295189b2012-06-20 16:38:30 -070014119
14120 /*Set frame tag to 0
14121 We will use the WDA user data in order to tag a frame as expired*/
14122 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
14123 (v_PVOID_t)0);
14124
14125
14126 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053014127 frmLen, ucTypeSubType, tid, WDA_TxComplete, NULL, txFlag,
14128 txBdToken))!= VOS_STATUS_SUCCESS)
Jeff Johnson295189b2012-06-20 16:38:30 -070014129 {
14130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014131 "Sending Mgmt Frame failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014132 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053014133 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 -070014134 if( pAckTxComp )
14135 {
14136 pWDA->pAckTxCbFunc = NULL;
14137 if( VOS_STATUS_SUCCESS !=
14138 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14139 {
14140 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14141 "Tx Complete timeout Timer Stop Failed ");
14142 }
14143 }
14144 return VOS_STATUS_E_FAILURE;
14145 }
Abhishek Singhe721fb42015-11-30 14:22:10 +053014146 time_snapshot = vos_timer_get_system_time();
Jeff Johnson295189b2012-06-20 16:38:30 -070014147 /*
14148 * Wait for the event to be set by the TL, to get the response of TX
14149 * complete, this event should be set by the Callback function called by TL
14150 */
14151 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
14152 &eventIdx);
14153 if(!VOS_IS_STATUS_SUCCESS(status))
14154 {
14155 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14156 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014157 __func__, status);
Sushant Kaushik8355d202014-12-17 16:48:10 +053014158
14159 /*Tag Frame as timed out for later deletion*/
14160 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
14161 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
Jeff Johnson295189b2012-06-20 16:38:30 -070014162 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
14163 after the packet gets completed(packet freed once)*/
14164
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070014165 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
Katya Nigam53677462014-08-04 11:37:28 +053014166 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070014167
Jeff Johnson295189b2012-06-20 16:38:30 -070014168 /* check whether the packet was freed already,so need not free again when
14169 * TL calls the WDA_Txcomplete routine
14170 */
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053014171 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED);
14172 /*if(vos_atomic_set(uintptr_t *)&pWDA->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED) == (v_U32_t)pFrmBuf)
Jeff Johnson295189b2012-06-20 16:38:30 -070014173 {
14174 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070014175 } */
Abhishek Singh849366d2015-11-26 16:53:47 +053014176
Bhargav Shahcc1315d2016-06-01 16:28:36 +053014177 /* Send Flush command to FW */
14178 vos_fwDumpReq(274, 0, 0, 0, 0, 1);
Abhishek Singh849366d2015-11-26 16:53:47 +053014179
Abhishek Singh837adf22015-10-01 17:37:37 +053014180 if (vos_isFatalEventEnabled())
14181 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
14182 WLAN_LOG_INDICATOR_HOST_DRIVER,
14183 WLAN_LOG_REASON_MGMT_FRAME_TIMEOUT,
14184 FALSE, TRUE);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070014185
Jeff Johnson295189b2012-06-20 16:38:30 -070014186 if( pAckTxComp )
14187 {
14188 pWDA->pAckTxCbFunc = NULL;
14189 if( VOS_STATUS_SUCCESS !=
14190 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14191 {
14192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14193 "Tx Complete timeout Timer Stop Failed ");
14194 }
14195 }
Abhishek Singhe721fb42015-11-30 14:22:10 +053014196 pWDA->mgmtTxfailureCnt++;
14197
14198 /* SSR if timeout continously for
14199 * WDA_TX_FAILURE_RECOVERY_THRESHOLD times.
14200 */
14201 if (WDA_TX_FAILURE_RECOVERY_THRESHOLD ==
14202 pWDA->mgmtTxfailureCnt)
14203 {
14204 vos_wlanRestart();
14205 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014206 status = VOS_STATUS_E_FAILURE;
14207 }
Abhishek Singhe721fb42015-11-30 14:22:10 +053014208
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +053014209#ifdef WLAN_DUMP_MGMTFRAMES
14210 if (VOS_IS_STATUS_SUCCESS(status))
14211 {
14212 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14213 "%s() TX packet : SubType %d", __func__,pFc->subType);
14214 VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14215 pData, frmLen);
14216 }
14217#endif
14218
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080014219 if (VOS_IS_STATUS_SUCCESS(status))
14220 {
Abhishek Singhe721fb42015-11-30 14:22:10 +053014221 pWDA->mgmtTxfailureCnt = 0;
14222 if ((vos_timer_get_system_time() - time_snapshot) >=
14223 WDA_TX_TIME_THRESHOLD)
14224 {
14225 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14226 "Tx Complete took %lu ms",
14227 vos_timer_get_system_time() - time_snapshot);
14228 }
14229
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080014230 if (pMac->fEnableDebugLog & 0x1)
14231 {
14232 if ((pFc->type == SIR_MAC_MGMT_FRAME) &&
14233 (pFc->subType != SIR_MAC_MGMT_PROBE_REQ) &&
14234 (pFc->subType != SIR_MAC_MGMT_PROBE_RSP))
14235 {
14236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "TX MGMT - Type %hu, SubType %hu",
14237 pFc->type, pFc->subType);
14238 }
14239 }
14240 }
14241
14242
Jeff Johnson295189b2012-06-20 16:38:30 -070014243 return status;
14244}
Jeff Johnson295189b2012-06-20 16:38:30 -070014245/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014246 * FUNCTION: WDA_ProcessDHCPStartInd
14247 * Forward DHCP Start to WDI
14248 */
14249static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
14250 tAniDHCPInd *dhcpStartInd)
14251{
14252 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053014253 WDI_DHCPInd wdiDHCPInd;
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014254
c_hpothu0b0cab72014-02-13 21:52:40 +053014255 wdiDHCPInd.device_mode = dhcpStartInd->device_mode;
14256 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStartInd->macAddr,
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014257 sizeof(tSirMacAddr));
14258
c_hpothu0b0cab72014-02-13 21:52:40 +053014259 status = WDI_dhcpStartInd(&wdiDHCPInd);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014260
c_hpothu0b0cab72014-02-13 21:52:40 +053014261 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014262 {
c_hpothu0b0cab72014-02-13 21:52:40 +053014263 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14264 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014265 }
c_hpothu0b0cab72014-02-13 21:52:40 +053014266 else if (WDI_STATUS_SUCCESS_SYNC != status)
14267 {
14268 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14269 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
14270 }
14271
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014272 vos_mem_free(dhcpStartInd);
14273 return CONVERT_WDI2VOS_STATUS(status) ;
14274}
14275
14276 /*
14277 * FUNCTION: WDA_ProcessDHCPStopInd
14278 * Forward DHCP Stop to WDI
14279 */
14280 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
14281 tAniDHCPInd *dhcpStopInd)
14282 {
14283 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053014284 WDI_DHCPInd wdiDHCPInd;
14285
14286 wdiDHCPInd.device_mode = dhcpStopInd->device_mode;
14287 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
14288
14289 status = WDI_dhcpStopInd(&wdiDHCPInd);
14290
14291 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014292 {
c_hpothu0b0cab72014-02-13 21:52:40 +053014293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14294 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014295 }
c_hpothu0b0cab72014-02-13 21:52:40 +053014296 else if (WDI_STATUS_SUCCESS_SYNC != status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014297 {
c_hpothu0b0cab72014-02-13 21:52:40 +053014298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14299 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014300 }
c_hpothu0b0cab72014-02-13 21:52:40 +053014301
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014302 vos_mem_free(dhcpStopInd);
c_hpothu0b0cab72014-02-13 21:52:40 +053014303
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014304 return CONVERT_WDI2VOS_STATUS(status) ;
14305 }
14306
Abhishek Singh00b71972016-01-07 10:51:04 +053014307#ifdef WLAN_FEATURE_RMC
14308
14309void
14310WDA_RMCRulerRspCallback(WDI_RmcRspParamsType *wdiRmcResponse, void *pUserData)
14311{
14312 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14313 tWDA_CbContext *pWDA = pWdaParams->pWdaContext;
14314
14315 switch (wdiRmcResponse->cmd)
14316 {
14317 case eWDI_BECOME_RULER_CMD :
14318 {
14319 tSirRmcBecomeRulerInd *pRmcBecomeRulerInd;
14320
14321 pRmcBecomeRulerInd = (tSirRmcBecomeRulerInd *)
14322 vos_mem_malloc(sizeof(*pRmcBecomeRulerInd));
14323
14324 if (NULL == pRmcBecomeRulerInd)
14325 {
14326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14327 "%s: unable to allocate pRmcBecomeRulerInd", __func__);
14328 break;
14329 }
14330
14331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14332 "Received eWDI_BECOME_RULER_CMD from WDI");
14333
14334 pRmcBecomeRulerInd->status = wdiRmcResponse->status;
14335
14336 vos_mem_copy(pRmcBecomeRulerInd->mcastTransmitter,
14337 wdiRmcResponse->mcastTransmitter,
14338 sizeof(tSirMacAddr));
14339 vos_mem_copy(pRmcBecomeRulerInd->mcastGroup,
14340 wdiRmcResponse->mcastGroup,
14341 sizeof(tSirMacAddr));
14342
14343 WDA_SendMsg(pWDA, WDA_RMC_BECOME_RULER,
14344 (void *)pRmcBecomeRulerInd, 0) ;
14345 break;
14346 }
14347 case eWDI_SUGGEST_RULER_CMD :
14348 {
14349 tSirRmcRulerSelectInd *pRmcRulerSelectInd;
14350
14351 pRmcRulerSelectInd = (tSirRmcRulerSelectInd *)
14352 vos_mem_malloc(sizeof(tSirRmcRulerSelectInd));
14353
14354 if (NULL == pRmcRulerSelectInd)
14355 {
14356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14357 "%s: unable to allocate pRmcRulerSelectInd", __func__);
14358 break;
14359 }
14360
14361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14362 "Received eWDI_SUGGEST_RULER_CMD from WDI");
14363
14364 pRmcRulerSelectInd->status = wdiRmcResponse->status;
14365
14366 vos_mem_copy(pRmcRulerSelectInd->mcastTransmitter,
14367 wdiRmcResponse->mcastTransmitter,
14368 sizeof(tSirMacAddr));
14369 vos_mem_copy(pRmcRulerSelectInd->mcastGroup,
14370 wdiRmcResponse->mcastGroup,
14371 sizeof(tSirMacAddr));
14372 vos_mem_copy(pRmcRulerSelectInd->ruler,
14373 wdiRmcResponse->ruler,
14374 sizeof(pRmcRulerSelectInd->ruler));
14375
14376 WDA_SendMsg(pWDA, WDA_RMC_RULER_SELECT_RESP,
14377 (void *)pRmcRulerSelectInd, 0) ;
14378 break;
14379 }
14380 }
14381
14382 /* free the config structure */
14383 if (pWdaParams->wdaWdiApiMsgParam != NULL)
14384 {
14385 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14386 }
14387 vos_mem_free(pWdaParams->wdaMsgParam);
14388 vos_mem_free(pWdaParams);
14389
14390}
14391
14392void WDA_RMCRulerReqCallback(WDI_Status wdiStatus, void* pUserData)
14393{
14394 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14395
14396 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14397 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14398
14399 if (NULL == pWdaParams)
14400 {
14401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14402 "%s: pWdaParams received NULL", __func__);
14403 VOS_ASSERT(0);
14404 return;
14405 }
14406
14407 if (IS_WDI_STATUS_FAILURE(wdiStatus))
14408 {
14409 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14410 vos_mem_free(pWdaParams->wdaMsgParam);
14411 vos_mem_free(pWdaParams);
14412 }
14413
14414 return;
14415}
14416
14417static VOS_STATUS
14418WDA_ProcessRMCRulerReq(tWDA_CbContext *pWDA,
14419 tSirRmcRulerReq *rmcRulerReq)
14420{
14421 WDI_Status status;
14422 WDI_RmcRulerReqParams *wdiRulerReq;
14423 tWDA_ReqParams *pWdaParams;
14424
14425 wdiRulerReq = (WDI_RmcRulerReqParams *)
14426 vos_mem_malloc(sizeof(*wdiRulerReq));
14427
14428 if (NULL == wdiRulerReq)
14429 {
14430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14431 "%s: VOS MEM Alloc Failure", __func__);
14432 VOS_ASSERT(0);
14433 vos_mem_free(rmcRulerReq);
14434 return VOS_STATUS_E_NOMEM;
14435 }
14436
14437 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
14438 if (NULL == pWdaParams)
14439 {
14440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14441 "%s: VOS MEM Alloc Failure", __func__);
14442 VOS_ASSERT(0);
14443 vos_mem_free(rmcRulerReq);
14444 vos_mem_free(wdiRulerReq);
14445 return VOS_STATUS_E_NOMEM;
14446 }
14447
14448 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiRulerReq;
14449 /* Store param pointer as passed in by caller */
14450 pWdaParams->wdaMsgParam = rmcRulerReq;
14451 pWdaParams->pWdaContext = pWDA;
14452
14453 wdiRulerReq->cmd = rmcRulerReq->cmd;
14454
14455 vos_mem_copy(wdiRulerReq->mcastTransmitter,
14456 rmcRulerReq->mcastTransmitter, sizeof(tSirMacAddr));
14457 vos_mem_copy(wdiRulerReq->mcastGroup,
14458 rmcRulerReq->mcastGroup, sizeof(tSirMacAddr));
14459 vos_mem_copy(wdiRulerReq->blacklist,
14460 rmcRulerReq->blacklist, sizeof(wdiRulerReq->blacklist));
14461
14462 wdiRulerReq->wdiReqStatusCB = WDA_RMCRulerReqCallback;
14463
14464 status = WDI_RmcRulerReq(wdiRulerReq,
14465 (WDI_RmcRulerRspCb)WDA_RMCRulerRspCallback,
14466 (void *)pWdaParams);
14467 if (IS_WDI_STATUS_FAILURE(status))
14468 {
14469 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14470 vos_mem_free(pWdaParams->wdaMsgParam);
14471 vos_mem_free(pWdaParams) ;
14472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14473 "Ruler Request failed");
14474 }
14475 return CONVERT_WDI2VOS_STATUS(status) ;
14476}
14477
14478/*
14479 * FUNCTION: WDA_ProcessRMCUpdateInd
14480 * Forward Update Indication to WDI
14481*/
14482static VOS_STATUS
14483WDA_ProcessRMCUpdateInd(tWDA_CbContext *pWDA,
14484 tSirRmcUpdateInd *rmcUpdateInd)
14485{
14486 WDI_Status status;
14487 WDI_RmcUpdateIndParams wdiUpdateInd;
14488
14489 /* Copy the paramters for Update_Ind */
14490
14491 wdiUpdateInd.indication = rmcUpdateInd->indication;
14492 wdiUpdateInd.role = rmcUpdateInd->role;
14493
14494 vos_mem_copy(wdiUpdateInd.mcastTransmitter,
14495 rmcUpdateInd->mcastTransmitter, sizeof(tSirMacAddr));
14496
14497 vos_mem_copy(wdiUpdateInd.mcastGroup,
14498 rmcUpdateInd->mcastGroup, sizeof(tSirMacAddr));
14499
14500 vos_mem_copy(wdiUpdateInd.mcastRuler,
14501 rmcUpdateInd->mcastRuler, sizeof(tSirMacAddr));
14502
14503 wdiUpdateInd.wdiReqStatusCB = WDA_WdiIndicationCallback;
14504 wdiUpdateInd.pUserData = pWDA;
14505 status = WDI_RmcUpdateInd(&wdiUpdateInd);
14506
14507 if (WDI_STATUS_PENDING == status)
14508 {
14509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14510 "Pending received for %s:%d ",__func__,__LINE__ );
14511 }
14512 else if (WDI_STATUS_SUCCESS_SYNC != status)
14513 {
14514 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14515 "Failure in %s:%d ",__func__,__LINE__ );
14516 }
14517
14518 vos_mem_free(rmcUpdateInd);
14519
14520 return CONVERT_WDI2VOS_STATUS(status) ;
14521}
14522
14523void WDA_GetIbssPeerInfoRspCallback(WDI_IbssPeerInfoRspParams *peerInfoRspParams
14524 ,void* pUserData)
14525{
14526
14527 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14528 WDI_IbssPeerInfoParams *pIbssPeerInfoParams;
14529 tWDA_CbContext *pWDA;
14530 tpSirIbssGetPeerInfoRspParams pIbssGetPeerInfoRsp;
14531 vos_msg_t vosMsg;
14532 v_U32_t wdaCnt = 0;
14533
14534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14535 "<------ %s " ,__func__);
14536 if (NULL == pWdaParams)
14537 {
14538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14539 "%s: pWdaParams received NULL", __func__);
14540 VOS_ASSERT(0);
14541 return;
14542 }
14543
14544 if (NULL == peerInfoRspParams)
14545 {
14546 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14547 "%s: peerInfoRspParams received NULL", __func__);
14548 if(pWdaParams->wdaMsgParam)
14549 vos_mem_free(pWdaParams->wdaMsgParam);
14550 if(pWdaParams->wdaWdiApiMsgParam)
14551 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14552 vos_mem_free(pWdaParams);
14553
14554 VOS_ASSERT(0);
14555 return;
14556 }
14557
14558 pIbssPeerInfoParams =
14559 (WDI_IbssPeerInfoParams *)peerInfoRspParams->wdiPeerInfoParams;
14560
14561 pIbssGetPeerInfoRsp =
14562 vos_mem_malloc(sizeof(tSirIbssGetPeerInfoRspParams));
14563
14564 if(NULL == pIbssGetPeerInfoRsp)
14565 {
14566 if(pWdaParams->wdaMsgParam)
14567 vos_mem_free(pWdaParams->wdaMsgParam);
14568 if(pWdaParams->wdaWdiApiMsgParam)
14569 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14570 vos_mem_free(pWdaParams);
14571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14572 "%s: Memory allocation failed for pIbssGetPeerInfoRsp",
14573 __func__);
14574 VOS_ASSERT(0);
14575 return;
14576
14577 }
14578
14579 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
14580
14581
14582 if (peerInfoRspParams->wdiNumPeers > 32)
14583 {
14584 pr_info("%s] Number of peers is more than 32, returning\n", __func__);
14585 /* free the mem and return */
14586 vos_mem_free((v_VOID_t *) pIbssGetPeerInfoRsp);
14587 if(pWdaParams->wdaMsgParam)
14588 vos_mem_free(pWdaParams->wdaMsgParam);
14589 if(pWdaParams->wdaWdiApiMsgParam)
14590 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14591 vos_mem_free(pWdaParams);
14592
14593 return;
14594 }
14595
14596 /* Message Header */
14597 pIbssGetPeerInfoRsp->mesgType = eWNI_SME_IBSS_PEER_INFO_RSP;
14598 pIbssGetPeerInfoRsp->mesgLen = sizeof(tSirIbssGetPeerInfoRspParams);
14599 pIbssGetPeerInfoRsp->ibssPeerInfoRspParams.status = peerInfoRspParams->wdiStatus;
14600 pIbssGetPeerInfoRsp->ibssPeerInfoRspParams.numPeers = peerInfoRspParams->wdiNumPeers;
14601
14602 for (wdaCnt = 0; wdaCnt < peerInfoRspParams->wdiNumPeers; wdaCnt++)
14603 {
14604 WDI_IbssPeerInfoParams *pWdiTmp = &pIbssPeerInfoParams[wdaCnt];
14605 tSirIbssPeerInfoParams *pSmeTmp =
14606 &pIbssGetPeerInfoRsp->ibssPeerInfoRspParams.peerInfoParams[wdaCnt];
14607
14608 pSmeTmp->staIdx = pWdiTmp->wdiStaIdx;
14609 pSmeTmp->mcsIndex = pWdiTmp->wdiMcsIndex;
14610 pSmeTmp->rssi = pWdiTmp->wdiRssi;
14611 pSmeTmp->txRate = pWdiTmp->wdiTxRate;
14612 pSmeTmp->txRateFlags = pWdiTmp->wdiTxRateFlags;
14613 }
14614
14615 /* VOS message wrapper */
14616 vosMsg.type = eWNI_SME_IBSS_PEER_INFO_RSP;
14617 vosMsg.bodyptr = (void *)pIbssGetPeerInfoRsp;
14618 vosMsg.bodyval = 0;
14619
14620 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14621 {
14622 /* free the mem and return */
14623 vos_mem_free((v_VOID_t *) pIbssGetPeerInfoRsp);
14624 }
14625
14626 if(NULL != pWdaParams)
14627 {
14628 if(pWdaParams->wdaMsgParam)
14629 vos_mem_free(pWdaParams->wdaMsgParam);
14630 if(pWdaParams->wdaWdiApiMsgParam)
14631 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14632 vos_mem_free(pWdaParams);
14633 }
14634
14635 return;
14636}
14637
14638static VOS_STATUS
14639WDA_ProcessIbssPeerInfoReq(tWDA_CbContext *pWDA,
14640 tSirIbssGetPeerInfoReqParams *ibssPeerInfoReqParams)
14641{
14642 WDI_Status status;
14643 WDI_IbssPeerInfoReqType *wdiPeerInfoReq;
14644 tWDA_ReqParams *pWdaParams;
14645
14646 wdiPeerInfoReq = (WDI_IbssPeerInfoReqType *)
14647 vos_mem_malloc(sizeof(WDI_IbssPeerInfoReqType));
14648 if (NULL == wdiPeerInfoReq)
14649 {
14650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14651 "%s: VOS MEM Alloc Failure", __func__);
14652 VOS_ASSERT(0);
14653 vos_mem_free(ibssPeerInfoReqParams);
14654 return VOS_STATUS_E_NOMEM;
14655 }
14656
14657 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
14658 if (NULL == pWdaParams)
14659 {
14660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14661 "%s: VOS MEM Alloc Failure", __func__);
14662 VOS_ASSERT(0);
14663 vos_mem_free(wdiPeerInfoReq);
14664 vos_mem_free(ibssPeerInfoReqParams);
14665 return VOS_STATUS_E_NOMEM;
14666 }
14667
14668 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiPeerInfoReq;
14669 /* Store param pointer as passed in by caller */
14670 pWdaParams->wdaMsgParam = ibssPeerInfoReqParams;
14671 pWdaParams->pWdaContext = pWDA;
14672
14673 wdiPeerInfoReq->wdiAllPeerInfoReqd =
14674 ibssPeerInfoReqParams->allPeerInfoReqd;
14675 wdiPeerInfoReq->wdiStaIdx =
14676 ibssPeerInfoReqParams->staIdx;
14677
14678 status = WDI_IbssPeerInfoReq(wdiPeerInfoReq,
14679 (WDI_IbssPeerInfoReqCb)WDA_GetIbssPeerInfoRspCallback,
14680 (void *)pWdaParams);
14681 if (IS_WDI_STATUS_FAILURE(status))
14682 {
14683 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14684 vos_mem_free(pWdaParams->wdaMsgParam);
14685 vos_mem_free(pWdaParams) ;
14686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14687 "IBSS Peer Info Request failed");
14688 }
14689 return CONVERT_WDI2VOS_STATUS(status) ;
14690
14691}
14692
14693/*
14694 * FUNCTION: WDA_ProcessTXFailMonitorInd
14695 * Forward TX Fail Monitor to WDI
14696 */
14697static VOS_STATUS WDA_ProcessTXFailMonitorInd(
14698 tWDA_CbContext *pWDA,
14699 tAniTXFailMonitorInd *txFailMonitorInd)
14700{
14701 WDI_Status status;
14702 WDI_TXFailMonitorInd *wdiTXFailMonitorInd =
14703 (WDI_TXFailMonitorInd *)vos_mem_malloc(sizeof(WDI_TXFailMonitorInd));
14704
14705 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14706 "<------ %s " ,__func__);
14707
14708 if (NULL == wdiTXFailMonitorInd)
14709 {
14710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14711 "%s: VOS MEM Alloc Failure", __func__);
14712 VOS_ASSERT(0);
14713 vos_mem_free(txFailMonitorInd);
14714 return VOS_STATUS_E_NOMEM;
14715 }
14716
14717 wdiTXFailMonitorInd->tx_fail_count = txFailMonitorInd->tx_fail_count;
14718
14719 wdiTXFailMonitorInd->wdiReqStatusCB = WDA_WdiIndicationCallback;
14720 wdiTXFailMonitorInd->pUserData = pWDA;
14721
14722 status = WDI_TXFailMonitorStartStopInd(wdiTXFailMonitorInd);
14723
14724 if (WDI_STATUS_PENDING == status)
14725 {
14726 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14727 "TX Fail Monitor Indication Pending");
14728 }
14729 else if (WDI_STATUS_SUCCESS_SYNC == status)
14730 {
14731 if (0 == txFailMonitorInd->tx_fail_count)
14732 pWDA->txFailIndCallback = NULL;
14733 else
14734 pWDA->txFailIndCallback = txFailMonitorInd->txFailIndCallback;
14735 }
14736 else
14737 {
14738 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14739 "TX Fail Monitor Indication Failed");
14740 }
14741
14742 vos_mem_free(wdiTXFailMonitorInd);
14743 vos_mem_free(txFailMonitorInd);
14744
14745 return CONVERT_WDI2VOS_STATUS(status) ;
14746}
14747#endif /* WLAN_FEATURE_RMC */
14748
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014749/*
Siddharth Bhal171788a2014-09-29 21:02:40 +053014750 * FUNCTION: WDA_ProcessSetSpoofMacAddrReq
14751 *
14752 * DESCRIPTION: This function sends Spoof Mac Addr Req to WDI
14753 *
14754 * PARAM:
14755 * pWDA: pointer to WDA context
14756 * pReq: pointer to stop batch scan request
14757 */
14758VOS_STATUS WDA_ProcessSetSpoofMacAddrReq(tWDA_CbContext *pWDA,
14759 tpSpoofMacAddrReqParams pReq)
14760{
14761 WDI_Status wdiStatus;
14762 WDI_SpoofMacAddrInfoType *WDI_SpoofMacAddrInfoParams;
14763 tWDA_ReqParams *pWdaParams;
14764
14765 WDI_SpoofMacAddrInfoParams = (WDI_SpoofMacAddrInfoType *)vos_mem_malloc(
14766 sizeof(WDI_SpoofMacAddrInfoType));
14767 if(NULL == WDI_SpoofMacAddrInfoParams) {
14768 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14769 "%s: VOS MEM Alloc Failure in Spoof Req", __func__);
14770 VOS_ASSERT(0);
14771 return VOS_STATUS_E_NOMEM;
14772 }
14773 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14774 if(NULL == pWdaParams) {
14775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14776 "%s: VOS MEM Alloc Failure", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +053014777 vos_mem_free(WDI_SpoofMacAddrInfoParams);
Siddharth Bhal171788a2014-09-29 21:02:40 +053014778 VOS_ASSERT(0);
14779 return VOS_STATUS_E_NOMEM;
14780 }
14781
14782 vos_mem_copy(WDI_SpoofMacAddrInfoParams->macAddr,
14783 pReq->macAddr, VOS_MAC_ADDRESS_LEN);
14784
14785 pWdaParams->pWdaContext = pWDA;
14786 /* Store Upper layer req pointer, as this will be used for response */
Siddharth Bhal029d6732014-10-09 21:31:23 +053014787 pWdaParams->wdaMsgParam = (void *)pReq;
14788
14789 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, WDA_MAC_ADDRESS_STR,
14790 WDA_MAC_ADDR_ARRAY(WDI_SpoofMacAddrInfoParams->macAddr));
14791
Siddharth Bhal171788a2014-09-29 21:02:40 +053014792 /* store Params pass it to WDI */
14793 pWdaParams->wdaWdiApiMsgParam = (void *)WDI_SpoofMacAddrInfoParams ;
14794
14795 wdiStatus = WDI_SetSpoofMacAddrReq(WDI_SpoofMacAddrInfoParams,
Siddharth Bhal029d6732014-10-09 21:31:23 +053014796 (WDI_SetSpoofMacAddrRspCb) WDA_SpoofMacAddrRspCallback,
14797 pWdaParams );
Siddharth Bhal171788a2014-09-29 21:02:40 +053014798
14799 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14800 {
14801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14802 "Failure in SetSpoofMacAddrReq Params WDI API, free all the memory " );
14803 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14804 vos_mem_free(pWdaParams->wdaMsgParam);
14805 vos_mem_free(pWdaParams);
14806 }
14807
14808 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
14809}
14810
c_manjeecfd1efb2015-09-25 19:32:34 +053014811
14812/*
14813 * FUNCTION: WDA_FwrMemDumpRespCallback
14814 * recieves Mgmt Logging init response from FW
14815 */
14816 void WDA_FwrMemDumpRespCallback(WDI_FwrMemDumpRsp* wdiRsp,
14817 void* pUserData)
14818{
14819 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14820 tAniFwrDumpReq *pFwrMemDumpReq;
14821 tAniFwrDumpRsp *pFwrMemDumpRsp;
14822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14823 "<------ %s " ,__func__);
14824
14825 if(NULL == pWdaParams)
14826 {
14827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14828 "%s: pWdaParams received NULL", __func__);
14829 VOS_ASSERT(0);
14830 return ;
14831 }
14832
14833 if(NULL == pWdaParams->wdaMsgParam)
14834 {
14835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14836 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
14837 VOS_ASSERT(0);
14838 vos_mem_free(pWdaParams);
14839 return ;
14840 }
14841
14842 pFwrMemDumpRsp = (tAniFwrDumpRsp *)vos_mem_malloc(sizeof(tAniFwrDumpRsp));
14843 if(pFwrMemDumpRsp == NULL)
14844 {
14845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14846 "%s: pFwrMemDumpRsp is NULL", __func__);
14847 VOS_ASSERT(0);
14848 vos_mem_free(pWdaParams);
14849 return ;
14850 }
14851
14852 pFwrMemDumpRsp->dump_status = wdiRsp->dump_status;
14853 pFwrMemDumpReq = (tAniFwrDumpReq *)pWdaParams->wdaMsgParam;
14854
14855 if(pFwrMemDumpReq->fwMemDumpReqCallback)
14856 {
14857 pFwrMemDumpReq->fwMemDumpReqCallback(
14858 pFwrMemDumpReq->fwMemDumpReqContext,
14859 pFwrMemDumpRsp);
14860 }
14861 else
14862 {
14863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14864 "%s: FwrMemDump callback is NULL", __func__);
14865 }
14866
14867 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14868 vos_mem_free(pWdaParams->wdaMsgParam);
14869 vos_mem_free(pWdaParams);
14870 vos_mem_free(pFwrMemDumpRsp);
14871
14872 return ;
14873}
14874
14875VOS_STATUS WDA_ProcessFwrMemDumpReq(tWDA_CbContext * pWDA,
14876 tAniFwrDumpReq* pFwrMemDumpReq)
14877{
14878 VOS_STATUS status = VOS_STATUS_SUCCESS;
14879 WDI_Status wstatus;
14880 WDI_FwrMemDumpReqType * pWdiFwrMemDumpReq;
14881 tWDA_ReqParams *pWdaParams ;
14882
14883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14884 "------> %s " ,__func__);
14885 /* Sanity Check*/
14886 if(NULL == pFwrMemDumpReq)
14887 {
14888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14889 "%s: pFwrMemDumpReq received NULL", __func__);
14890 VOS_ASSERT(0) ;
14891 return VOS_STATUS_E_FAULT;
14892 }
14893
14894 pWdiFwrMemDumpReq = (WDI_FwrMemDumpReqType *)vos_mem_malloc(sizeof(WDI_FwrMemDumpReqType));
14895 if(NULL == pWdiFwrMemDumpReq)
14896 {
14897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14898 "%s: pWdiFwrMemDumpReq Alloc Failure", __func__);
14899 VOS_ASSERT(0);
14900 return VOS_STATUS_E_NOMEM;
14901 }
14902
14903 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14904 if(NULL == pWdaParams)
14905 {
14906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14907 "%s: pWdaParams Alloc Failure", __func__);
14908 VOS_ASSERT(0);
14909 vos_mem_free(pWdiFwrMemDumpReq);
14910 return VOS_STATUS_E_NOMEM;
14911 }
14912
14913 /* Store Params pass it to WDI */
14914 pWdaParams->wdaWdiApiMsgParam = (void *)pWdiFwrMemDumpReq;
14915 pWdaParams->pWdaContext = pWDA;
14916 /* Store param pointer as passed in by caller */
14917 pWdaParams->wdaMsgParam = pFwrMemDumpReq;
14918
14919 status = WDI_FwrMemDumpReq(pWdiFwrMemDumpReq,
14920 (WDI_FwrMemDumpCb)WDA_FwrMemDumpRespCallback,
14921 pWdaParams);
14922
14923 if(IS_WDI_STATUS_FAILURE(wstatus))
14924 {
14925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14926 FL("Fwr Mem Dump Req failed, free all the memory"));
14927 status = CONVERT_WDI2VOS_STATUS(wstatus);
14928 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14929 vos_mem_free(pWdaParams->wdaMsgParam);
14930 vos_mem_free(pWdaParams);
14931 pWdaParams->wdaWdiApiMsgParam = NULL;
14932 pWdaParams->wdaMsgParam = NULL;
14933 }
14934
14935 return status;
14936
14937}
14938
Selvaraj, Sridharc045b8b2016-04-06 12:22:35 +053014939/**
14940 * wda_process_set_allowed_action_frames_ind() - Set allowed action frames to FW
14941 *
14942 * @pWDA: WDA Call back context
14943 * @allowed_action_frames: Pointer to struct sir_allowed_action_frames
14944 * that holds allowed action frames bitmask
14945 *
14946 * This function sets the allowed action frames that the FW needs to
14947 * handover to host.The Action frames other than the requested ones
14948 * can be dropped in FW
14949 *
14950 * Return: VOS_STATUS enumeration
14951 */
14952VOS_STATUS wda_process_set_allowed_action_frames_ind(tWDA_CbContext *pWDA,
14953 struct sir_allowed_action_frames *allowed_action_frames)
14954{
14955 WDI_Status status;
14956 struct WDI_AllowedActionFramesInd *wdi_allowed_action_frames;
14957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14958 FL("---> %s"), __func__);
c_manjeecfd1efb2015-09-25 19:32:34 +053014959
Selvaraj, Sridharc045b8b2016-04-06 12:22:35 +053014960 wdi_allowed_action_frames = (struct WDI_AllowedActionFramesInd*)
14961 vos_mem_malloc(sizeof
14962 (*wdi_allowed_action_frames));
14963 if (!wdi_allowed_action_frames) {
14964 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14965 "%s: VOS MEM Alloc Failure", __func__);
14966 vos_mem_free(allowed_action_frames);
14967 return VOS_STATUS_E_NOMEM;
14968 }
14969
14970 wdi_allowed_action_frames->bitmask = allowed_action_frames->bitmask;
14971 wdi_allowed_action_frames->reserved = allowed_action_frames->reserved;
14972
14973 status = WDI_SetAllowedActionFramesInd(wdi_allowed_action_frames);
14974 if (WDI_STATUS_PENDING == status) {
14975 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14976 FL("pending status received"));
14977 } else if (WDI_STATUS_SUCCESS_SYNC != status &&
14978 (WDI_STATUS_SUCCESS != status)) {
14979 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14980 FL("Failure in allowed_action_frames API %d"), status);
14981 }
14982
14983 vos_mem_free(wdi_allowed_action_frames);
14984 vos_mem_free(allowed_action_frames);
14985 return CONVERT_WDI2VOS_STATUS(status) ;
14986}
c_manjeecfd1efb2015-09-25 19:32:34 +053014987
Siddharth Bhal171788a2014-09-29 21:02:40 +053014988/*
Bhargav Shahe3a6ff02016-04-11 16:31:49 +053014989 * FUNCTION: WDA_ProcessBcnMissPenaltyCount
14990 * Request to WDI.
14991 */
14992VOS_STATUS WDA_ProcessTLPauseInd(tWDA_CbContext *pWDA, v_U32_t params)
14993{
14994 v_U8_t staId;
14995
14996 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, FL("---> %s"), __func__);
14997
14998 staId = (v_U8_t)params;
14999
15000 /* Pause TL for Sta ID */
15001 return WLANTL_SuspendDataTx(pWDA->pVosContext, &staId, NULL);
15002}
15003
15004/*
Jeff Johnson295189b2012-06-20 16:38:30 -070015005 * FUNCTION: WDA_McProcessMsg
15006 * Trigger DAL-AL to start CFG download
15007 */
15008VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
15009{
15010 VOS_STATUS status = VOS_STATUS_SUCCESS;
15011 tWDA_CbContext *pWDA = NULL ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053015012 if(NULL == pMsg)
Jeff Johnson295189b2012-06-20 16:38:30 -070015013 {
15014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015015 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015016 VOS_ASSERT(0);
15017 return VOS_STATUS_E_FAILURE;
15018 }
15019
15020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015021 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070015022
15023 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
15024 if(NULL == pWDA )
15025 {
15026 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053015027 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015028 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070015029 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070015030 return VOS_STATUS_E_FAILURE;
15031 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015032 /* Process all the WDA messages.. */
15033 switch( pMsg->type )
15034 {
15035 case WNI_CFG_DNLD_REQ:
15036 {
15037 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070015038 /* call WDA complete event if config download success */
15039 if( VOS_IS_STATUS_SUCCESS(status) )
15040 {
15041 vos_WDAComplete_cback(pVosContext);
15042 }
15043 else
15044 {
15045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15046 "WDA Config Download failure" );
15047 }
15048 break ;
15049 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015050 /*
15051 * Init SCAN request from PE, convert it into DAL format
15052 * and send it to DAL
15053 */
15054 case WDA_INIT_SCAN_REQ:
15055 {
15056 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
15057 break ;
15058 }
15059 /* start SCAN request from PE */
15060 case WDA_START_SCAN_REQ:
15061 {
15062 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
15063 break ;
15064 }
15065 /* end SCAN request from PE */
15066 case WDA_END_SCAN_REQ:
15067 {
15068 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
15069 break ;
15070 }
15071 /* end SCAN request from PE */
15072 case WDA_FINISH_SCAN_REQ:
15073 {
15074 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
15075 break ;
15076 }
15077 /* join request from PE */
15078 case WDA_CHNL_SWITCH_REQ:
15079 {
15080 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
15081 {
15082 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
15083 }
15084 else
15085 {
Kalikinkar dhara1e83b772014-02-06 12:59:22 -080015086 if (IS_FEATURE_SUPPORTED_BY_FW(CH_SWITCH_V1) &&
15087 eHAL_CHANNEL_SWITCH_SOURCE_CSA ==
15088 ((tSwitchChannelParams*)pMsg->bodyptr)->channelSwitchSrc )
15089 {
15090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15091 "call ProcessChannelSwitchReq_V1" );
15092 WDA_ProcessChannelSwitchReq_V1(pWDA,
15093 (tSwitchChannelParams*)pMsg->bodyptr) ;
15094 }
15095 else
15096 {
15097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15098 "call ProcessChannelSwitchReq" );
15099 WDA_ProcessChannelSwitchReq(pWDA,
15100 (tSwitchChannelParams*)pMsg->bodyptr) ;
15101 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015102 }
15103 break ;
15104 }
15105 /* ADD BSS request from PE */
15106 case WDA_ADD_BSS_REQ:
15107 {
15108 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
15109 break ;
15110 }
15111 case WDA_ADD_STA_REQ:
15112 {
15113 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
15114 break ;
15115 }
15116 case WDA_DELETE_BSS_REQ:
15117 {
Jeff Johnson295189b2012-06-20 16:38:30 -070015118 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
15119 break ;
15120 }
15121 case WDA_DELETE_STA_REQ:
15122 {
Jeff Johnson295189b2012-06-20 16:38:30 -070015123 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
15124 break ;
15125 }
15126 case WDA_CONFIG_PARAM_UPDATE_REQ:
15127 {
15128 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
15129 break ;
15130 }
15131 case WDA_SET_BSSKEY_REQ:
15132 {
15133 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
15134 break ;
15135 }
15136 case WDA_SET_STAKEY_REQ:
15137 {
15138 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
15139 break ;
15140 }
15141 case WDA_SET_STA_BCASTKEY_REQ:
15142 {
15143 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
15144 break ;
15145 }
15146 case WDA_REMOVE_BSSKEY_REQ:
15147 {
15148 WDA_ProcessRemoveBssKeyReq(pWDA,
15149 (tRemoveBssKeyParams *)pMsg->bodyptr);
15150 break ;
15151 }
15152 case WDA_REMOVE_STAKEY_REQ:
15153 {
15154 WDA_ProcessRemoveStaKeyReq(pWDA,
15155 (tRemoveStaKeyParams *)pMsg->bodyptr);
15156 break ;
15157 }
15158 case WDA_REMOVE_STA_BCASTKEY_REQ:
15159 {
15160 /* TODO: currently UMAC is not sending this request, Add the code for
15161 handling this request when UMAC supports */
15162 break;
15163 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015164#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -070015165 case WDA_TSM_STATS_REQ:
15166 {
Srinivas Girigowda5cecb202013-10-08 09:13:25 -070015167 WDA_ProcessTsmStatsReq(pWDA, (tpAniGetTsmStatsReq)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070015168 break;
15169 }
15170#endif
15171 case WDA_UPDATE_EDCA_PROFILE_IND:
15172 {
15173 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
15174 break;
15175 }
15176 case WDA_ADD_TS_REQ:
15177 {
15178 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
15179 break;
15180 }
15181 case WDA_DEL_TS_REQ:
15182 {
15183 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
15184 break;
15185 }
15186 case WDA_ADDBA_REQ:
15187 {
15188 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
15189 break;
15190 }
15191 case WDA_DELBA_IND:
15192 {
15193 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
15194 break;
15195 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080015196 case WDA_UPDATE_CHAN_LIST_REQ:
15197 {
15198 WDA_ProcessUpdateChannelList(pWDA,
15199 (tSirUpdateChanList *)pMsg->bodyptr);
15200 break;
15201 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015202 case WDA_SET_LINK_STATE:
15203 {
15204 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
15205 break;
15206 }
15207 case WDA_GET_STATISTICS_REQ:
15208 {
15209 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
15210 break;
15211 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015212#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080015213 case WDA_GET_ROAM_RSSI_REQ:
15214 {
15215 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
15216 break;
15217 }
15218#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070015219 case WDA_PWR_SAVE_CFG:
15220 {
15221 if(pWDA->wdaState == WDA_READY_STATE)
15222 {
15223 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
15224 }
15225 else
15226 {
15227 if(NULL != pMsg->bodyptr)
15228 {
15229 vos_mem_free(pMsg->bodyptr);
15230 }
15231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15232 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
15233 }
15234 break;
15235 }
15236 case WDA_ENTER_IMPS_REQ:
15237 {
15238 if(pWDA->wdaState == WDA_READY_STATE)
15239 {
15240 WDA_ProcessEnterImpsReq(pWDA);
15241 }
15242 else
15243 {
15244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15245 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
15246 }
15247 break;
15248 }
15249 case WDA_EXIT_IMPS_REQ:
15250 {
15251 if(pWDA->wdaState == WDA_READY_STATE)
15252 {
15253 WDA_ProcessExitImpsReq(pWDA);
15254 }
15255 else
15256 {
15257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15258 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
15259 }
15260 break;
15261 }
15262 case WDA_ENTER_BMPS_REQ:
15263 {
15264 if(pWDA->wdaState == WDA_READY_STATE)
15265 {
15266 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
15267 }
15268 else
15269 {
15270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15271 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
15272 }
15273 break;
15274 }
15275 case WDA_EXIT_BMPS_REQ:
15276 {
15277 if(pWDA->wdaState == WDA_READY_STATE)
15278 {
15279 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
15280 }
15281 else
15282 {
15283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15284 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
15285 }
15286 break;
15287 }
15288 case WDA_ENTER_UAPSD_REQ:
15289 {
15290 if(pWDA->wdaState == WDA_READY_STATE)
15291 {
15292 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
15293 }
15294 else
15295 {
15296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15297 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
15298 }
15299 break;
15300 }
15301 case WDA_EXIT_UAPSD_REQ:
15302 {
15303 if(pWDA->wdaState == WDA_READY_STATE)
15304 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015305 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070015306 }
15307 else
15308 {
15309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15310 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
15311 }
15312 break;
15313 }
15314 case WDA_UPDATE_UAPSD_IND:
15315 {
15316 if(pWDA->wdaState == WDA_READY_STATE)
15317 {
15318 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
15319 }
15320 else
15321 {
15322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15323 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
15324 }
15325 break;
15326 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015327 case WDA_REGISTER_PE_CALLBACK :
15328 {
15329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
15330 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
15331 /*TODO: store the PE callback */
15332 /* Do Nothing? MSG Body should be freed at here */
15333 if(NULL != pMsg->bodyptr)
15334 {
15335 vos_mem_free(pMsg->bodyptr);
15336 }
15337 break;
15338 }
15339 case WDA_SYS_READY_IND :
15340 {
15341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
15342 "Handling msg type WDA_SYS_READY_IND " );
15343 pWDA->wdaState = WDA_READY_STATE;
15344 if(NULL != pMsg->bodyptr)
15345 {
15346 vos_mem_free(pMsg->bodyptr);
15347 }
15348 break;
15349 }
15350 case WDA_BEACON_FILTER_IND :
15351 {
15352 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
15353 break;
15354 }
15355 case WDA_BTC_SET_CFG:
15356 {
15357 /*TODO: handle this while dealing with BTC */
15358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
15359 "Handling msg type WDA_BTC_SET_CFG " );
15360 /* Do Nothing? MSG Body should be freed at here */
15361 if(NULL != pMsg->bodyptr)
15362 {
15363 vos_mem_free(pMsg->bodyptr);
15364 }
15365 break;
15366 }
15367 case WDA_SIGNAL_BT_EVENT:
15368 {
15369 /*TODO: handle this while dealing with BTC */
15370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
15371 "Handling msg type WDA_SIGNAL_BT_EVENT " );
15372 /* Do Nothing? MSG Body should be freed at here */
15373 if(NULL != pMsg->bodyptr)
15374 {
15375 vos_mem_free(pMsg->bodyptr);
15376 }
15377 break;
15378 }
15379 case WDA_CFG_RXP_FILTER_REQ:
15380 {
15381 WDA_ProcessConfigureRxpFilterReq(pWDA,
15382 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
15383 break;
15384 }
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053015385 case WDA_MGMT_LOGGING_INIT_REQ:
15386 {
Siddharth Bhald1be97f2015-05-27 22:39:59 +053015387 WDA_ProcessFWLoggingInitReq(pWDA,
15388 (tSirFWLoggingInitParam *)pMsg->bodyptr);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053015389 break;
15390 }
Siddharth Bhal64246172015-02-27 01:04:37 +053015391 case WDA_GET_FRAME_LOG_REQ:
15392 {
15393 WDA_ProcessGetFrameLogReq(pWDA,
15394 (tAniGetFrameLogReq *)pMsg->bodyptr);
15395 break;
15396 }
Gupta, Kapil7c34b322015-09-30 13:12:35 +053015397 case WDA_START_RSSI_MONITOR_REQ:
15398 {
15399 WDA_ProcessStartRssiMonitorReq(pWDA,(tSirRssiMonitorReq *)pMsg->bodyptr);
15400 break;
15401 }
15402 case WDA_STOP_RSSI_MONITOR_REQ:
15403 {
15404 WDA_ProcessStopRssiMonitorReq(pWDA,(tSirRssiMonitorReq *)pMsg->bodyptr);
15405 break;
15406 }
Karthick Sa35b0692015-08-21 15:57:05 +053015407 case WDA_SEND_LOG_DONE_IND:
15408 {
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053015409 WDA_FWLoggingDXEdoneInd(pMsg->bodyval);
Karthick Sa35b0692015-08-21 15:57:05 +053015410 break;
15411 }
Sachin Ahuja715aafc2015-07-21 23:35:10 +053015412 case WDA_FATAL_EVENT_LOGS_REQ:
15413 {
15414 WDA_ProcessFatalEventLogsReq(pWDA,
15415 (tSirFatalEventLogsReqParam *)pMsg->bodyptr);
15416 break;
15417 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015418 case WDA_SET_HOST_OFFLOAD:
15419 {
15420 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
15421 break;
15422 }
15423 case WDA_SET_KEEP_ALIVE:
15424 {
15425 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
15426 break;
15427 }
15428#ifdef WLAN_NS_OFFLOAD
15429 case WDA_SET_NS_OFFLOAD:
15430 {
15431 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
15432 break;
15433 }
15434#endif //WLAN_NS_OFFLOAD
15435 case WDA_ADD_STA_SELF_REQ:
15436 {
15437 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
15438 break;
15439 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015440 case WDA_DEL_STA_SELF_REQ:
15441 {
15442 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
15443 break;
15444 }
15445 case WDA_WOWL_ADD_BCAST_PTRN:
15446 {
15447 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
15448 break;
15449 }
15450 case WDA_WOWL_DEL_BCAST_PTRN:
15451 {
15452 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
15453 break;
15454 }
15455 case WDA_WOWL_ENTER_REQ:
15456 {
15457 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
15458 break;
15459 }
15460 case WDA_WOWL_EXIT_REQ:
15461 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015462 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070015463 break;
15464 }
15465 case WDA_TL_FLUSH_AC_REQ:
15466 {
15467 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
15468 break;
15469 }
15470 case WDA_SIGNAL_BTAMP_EVENT:
15471 {
15472 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
15473 break;
15474 }
Abhishek Singh85b74712014-10-08 11:38:19 +053015475 case WDA_FW_STATS_GET_REQ:
15476 {
15477 WDA_ProcessFWStatsGetReq(pWDA,
15478 (tSirFWStatsGetReq *)pMsg->bodyptr);
15479 break;
15480 }
Sunil Duttbd736ed2014-05-26 21:19:41 +053015481#ifdef WLAN_FEATURE_LINK_LAYER_STATS
15482 case WDA_LINK_LAYER_STATS_SET_REQ:
15483 {
15484 WDA_ProcessLLStatsSetReq(pWDA, (tSirLLStatsSetReq *)pMsg->bodyptr);
15485 break;
15486 }
15487 case WDA_LINK_LAYER_STATS_GET_REQ:
15488 {
15489 WDA_ProcessLLStatsGetReq(pWDA, (tSirLLStatsGetReq *)pMsg->bodyptr);
15490 break;
15491 }
15492 case WDA_LINK_LAYER_STATS_CLEAR_REQ:
15493 {
15494 WDA_ProcessLLStatsClearReq(pWDA, (tSirLLStatsClearReq *)pMsg->bodyptr);
15495 break;
15496 }
15497#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Dino Mycle41bdc942014-06-10 11:30:24 +053015498#ifdef WLAN_FEATURE_EXTSCAN
15499 case WDA_EXTSCAN_GET_CAPABILITIES_REQ:
15500 {
15501 WDA_ProcessEXTScanGetCapabilitiesReq(pWDA,
15502 (tSirGetEXTScanCapabilitiesReqParams *)pMsg->bodyptr);
15503 break;
15504 }
15505 case WDA_EXTSCAN_START_REQ:
15506 {
15507 WDA_ProcessEXTScanStartReq(pWDA,
15508 (tSirEXTScanStartReqParams *)pMsg->bodyptr);
15509 break;
15510 }
15511 case WDA_EXTSCAN_STOP_REQ:
15512 {
15513 WDA_ProcessEXTScanStopReq(pWDA,
15514 (tSirEXTScanStopReqParams *)pMsg->bodyptr);
15515 break;
15516 }
15517 case WDA_EXTSCAN_GET_CACHED_RESULTS_REQ:
15518 {
15519 WDA_ProcessEXTScanGetCachedResultsReq(pWDA,
15520 (tSirEXTScanGetCachedResultsReqParams *)pMsg->bodyptr);
15521 break;
15522 }
15523 case WDA_EXTSCAN_SET_BSSID_HOTLIST_REQ:
15524 {
15525 WDA_ProcessEXTScanSetBSSIDHotlistReq(pWDA,
15526 (tSirEXTScanSetBssidHotListReqParams *)pMsg->bodyptr);
15527 break;
15528 }
15529 case WDA_EXTSCAN_RESET_BSSID_HOTLIST_REQ:
15530 {
15531 WDA_ProcessEXTScanResetBSSIDHotlistReq(pWDA,
15532 (tSirEXTScanResetBssidHotlistReqParams *)pMsg->bodyptr);
15533 break;
15534 }
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053015535 case WDA_EXTSCAN_SET_SSID_HOTLIST_REQ:
15536 {
15537 WDA_ProcessEXTScanSetSSIDHotlistReq(pWDA,
15538 (tSirEXTScanSetSsidHotListReqParams *)pMsg->bodyptr);
15539 break;
15540 }
15541 case WDA_EXTSCAN_RESET_SSID_HOTLIST_REQ:
15542 {
15543 WDA_ProcessEXTScanResetSSIDHotlistReq(pWDA,
15544 (tSirEXTScanResetSsidHotlistReqParams *)pMsg->bodyptr);
15545 break;
15546 }
Padma, Santhosh Kumarc1f7f052015-08-26 12:29:01 +053015547 case WDA_HIGH_PRIORITY_DATA_INFO_IND:
15548 {
15549 WDA_ProcessHighPriorityDataInfoInd(pWDA,
15550 (tSirHighPriorityDataInfoInd *)pMsg->bodyptr);
15551 break;
15552 }
Dino Mycle41bdc942014-06-10 11:30:24 +053015553#endif /* WLAN_FEATURE_EXTSCAN */
Jeff Johnson295189b2012-06-20 16:38:30 -070015554#ifdef WDA_UT
15555 case WDA_WDI_EVENT_MSG:
15556 {
15557 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
15558 break ;
15559 }
15560#endif
15561 case WDA_UPDATE_BEACON_IND:
15562 {
15563 WDA_ProcessUpdateBeaconParams(pWDA,
15564 (tUpdateBeaconParams *)pMsg->bodyptr);
15565 break;
15566 }
15567 case WDA_SEND_BEACON_REQ:
15568 {
15569 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
15570 break;
15571 }
15572 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
15573 {
15574 WDA_ProcessUpdateProbeRspTemplate(pWDA,
15575 (tSendProbeRespParams *)pMsg->bodyptr);
15576 break;
15577 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015578#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -070015579 case WDA_SET_MAX_TX_POWER_REQ:
15580 {
15581 WDA_ProcessSetMaxTxPowerReq(pWDA,
15582 (tMaxTxPowerParams *)pMsg->bodyptr);
15583 break;
15584 }
15585#endif
Arif Hussaina5ebce02013-08-09 15:09:58 -070015586 case WDA_SET_MAX_TX_POWER_PER_BAND_REQ:
15587 {
15588 WDA_ProcessSetMaxTxPowerPerBandReq(pWDA, (tMaxTxPowerPerBandParams *)
15589 pMsg->bodyptr);
15590 break;
15591 }
schang86c22c42013-03-13 18:41:24 -070015592 case WDA_SET_TX_POWER_REQ:
15593 {
15594 WDA_ProcessSetTxPowerReq(pWDA,
15595 (tSirSetTxPowerReq *)pMsg->bodyptr);
15596 break;
15597 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015598 case WDA_SET_P2P_GO_NOA_REQ:
15599 {
15600 WDA_ProcessSetP2PGONOAReq(pWDA,
15601 (tP2pPsParams *)pMsg->bodyptr);
15602 break;
15603 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015604 /* timer related messages */
15605 case WDA_TIMER_BA_ACTIVITY_REQ:
15606 {
15607 WDA_BaCheckActivity(pWDA) ;
15608 break ;
15609 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015610
15611 /* timer related messages */
15612 case WDA_TIMER_TRAFFIC_STATS_IND:
15613 {
15614 WDA_TimerTrafficStatsInd(pWDA);
15615 break;
15616 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015617#ifdef WLAN_FEATURE_VOWIFI_11R
15618 case WDA_AGGR_QOS_REQ:
15619 {
15620 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
15621 break;
15622 }
15623#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070015624 case WDA_FTM_CMD_REQ:
15625 {
15626 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
15627 break ;
15628 }
Jeff Johnsone7245742012-09-05 17:12:55 -070015629#ifdef FEATURE_OEM_DATA_SUPPORT
15630 case WDA_START_OEM_DATA_REQ:
15631 {
15632 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
15633 break;
15634 }
15635#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070015636 /* Tx Complete Time out Indication */
15637 case WDA_TX_COMPLETE_TIMEOUT_IND:
15638 {
15639 WDA_ProcessTxCompleteTimeOutInd(pWDA);
15640 break;
15641 }
15642 case WDA_WLAN_SUSPEND_IND:
15643 {
15644 WDA_ProcessWlanSuspendInd(pWDA,
15645 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
15646 break;
15647 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015648 case WDA_WLAN_RESUME_REQ:
15649 {
15650 WDA_ProcessWlanResumeReq(pWDA,
15651 (tSirWlanResumeParam *)pMsg->bodyptr) ;
15652 break;
15653 }
15654
15655 case WDA_UPDATE_CF_IND:
15656 {
15657 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
15658 pMsg->bodyptr = NULL;
15659 break;
15660 }
15661#ifdef FEATURE_WLAN_SCAN_PNO
15662 case WDA_SET_PNO_REQ:
15663 {
15664 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
15665 break;
15666 }
15667 case WDA_UPDATE_SCAN_PARAMS_REQ:
15668 {
15669 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
15670 break;
15671 }
15672 case WDA_SET_RSSI_FILTER_REQ:
15673 {
15674 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
15675 break;
15676 }
15677#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015678#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015679 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015680 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015681 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015682 break;
15683 }
15684#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070015685 case WDA_SET_TX_PER_TRACKING_REQ:
15686 {
15687 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
15688 break;
15689 }
15690
15691#ifdef WLAN_FEATURE_PACKET_FILTERING
15692 case WDA_8023_MULTICAST_LIST_REQ:
15693 {
15694 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
15695 break;
15696 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015697 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
15698 {
15699 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
15700 break;
15701 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015702 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
15703 {
15704 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
15705 break;
15706 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015707 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
15708 {
15709 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
15710 break;
15711 }
15712#endif // WLAN_FEATURE_PACKET_FILTERING
15713
15714
15715 case WDA_TRANSMISSION_CONTROL_IND:
15716 {
15717 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
15718 break;
15719 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015720 case WDA_SET_POWER_PARAMS_REQ:
15721 {
15722 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
15723 break;
15724 }
c_manjeecfd1efb2015-09-25 19:32:34 +053015725 case WDA_FW_MEM_DUMP_REQ:
15726 {
15727 WDA_ProcessFwrMemDumpReq(pWDA, (tAniFwrDumpReq*)pMsg->bodyptr);
15728 break;
15729 }
15730
Jeff Johnson295189b2012-06-20 16:38:30 -070015731#ifdef WLAN_FEATURE_GTK_OFFLOAD
15732 case WDA_GTK_OFFLOAD_REQ:
15733 {
15734 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
15735 break;
15736 }
15737
15738 case WDA_GTK_OFFLOAD_GETINFO_REQ:
15739 {
15740 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
15741 break;
15742 }
15743#endif //WLAN_FEATURE_GTK_OFFLOAD
15744
15745 case WDA_SET_TM_LEVEL_REQ:
15746 {
15747 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
15748 break;
15749 }
Sandeep Puligilla60342762014-01-30 21:05:37 +053015750
Mohit Khanna4a70d262012-09-11 16:30:12 -070015751 case WDA_UPDATE_OP_MODE:
15752 {
Sandeep Puligilla60342762014-01-30 21:05:37 +053015753 if(WDA_getHostWlanFeatCaps(HT40_OBSS_SCAN) &&
15754 WDA_getFwWlanFeatCaps(HT40_OBSS_SCAN))
15755 {
15756 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
15757 }
15758 else if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
Mohit Khanna4a70d262012-09-11 16:30:12 -070015759 {
15760 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
15761 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
15762 else
15763 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015764 " VHT OpMode Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070015765 }
15766 else
15767 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015768 " 11AC Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070015769 break;
15770 }
Chet Lanctot186b5732013-03-18 10:26:30 -070015771#ifdef WLAN_FEATURE_11W
15772 case WDA_EXCLUDE_UNENCRYPTED_IND:
15773 {
15774 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
15775 break;
15776 }
15777#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053015778#ifdef FEATURE_WLAN_TDLS
15779 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
15780 {
15781 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
15782 break;
15783 }
15784#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015785 case WDA_DHCP_START_IND:
15786 {
15787 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
15788 break;
15789 }
15790 case WDA_DHCP_STOP_IND:
15791 {
15792 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
15793 break;
15794 }
Leo Chang9056f462013-08-01 19:21:11 -070015795#ifdef FEATURE_WLAN_LPHB
15796 case WDA_LPHB_CONF_REQ:
15797 {
15798 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
15799 break;
15800 }
15801#endif
Yue Mab9c86f42013-08-14 15:59:08 -070015802 case WDA_ADD_PERIODIC_TX_PTRN_IND:
15803 {
15804 WDA_ProcessAddPeriodicTxPtrnInd(pWDA,
15805 (tSirAddPeriodicTxPtrn *)pMsg->bodyptr);
15806 break;
15807 }
15808 case WDA_DEL_PERIODIC_TX_PTRN_IND:
15809 {
15810 WDA_ProcessDelPeriodicTxPtrnInd(pWDA,
15811 (tSirDelPeriodicTxPtrn *)pMsg->bodyptr);
15812 break;
15813 }
Abhishek Singh00b71972016-01-07 10:51:04 +053015814 case WDA_RATE_UPDATE_IND:
15815 {
15816 WDA_ProcessRateUpdateInd(pWDA, (tSirRateUpdateInd *)pMsg->bodyptr);
15817 break;
15818 }
15819#ifdef WLAN_FEATURE_RMC
15820 case WDA_RMC_RULER_REQ:
15821 {
15822 WDA_ProcessRMCRulerReq(pWDA, (tSirRmcRulerReq *)pMsg->bodyptr);
15823 break;
15824 }
15825 case WDA_RMC_UPDATE_IND:
15826 {
15827 WDA_ProcessRMCUpdateInd(pWDA, (tSirRmcUpdateInd *)pMsg->bodyptr);
15828 break;
15829 }
15830 case WDA_GET_IBSS_PEER_INFO_REQ:
15831 {
15832 WDA_ProcessIbssPeerInfoReq(pWDA,
15833 (tSirIbssGetPeerInfoReqParams *)pMsg->bodyptr);
15834 break;
15835 }
15836 case WDA_TX_FAIL_MONITOR_IND:
15837 {
15838 WDA_ProcessTXFailMonitorInd(pWDA, (tAniTXFailMonitorInd *)pMsg->bodyptr);
15839 break;
15840 }
15841#endif /* WLAN_FEATURE_RMC */
Yue Mab9c86f42013-08-14 15:59:08 -070015842
Rajeev79dbe4c2013-10-05 11:03:42 +053015843#ifdef FEATURE_WLAN_BATCH_SCAN
15844 case WDA_SET_BATCH_SCAN_REQ:
15845 {
15846 WDA_ProcessSetBatchScanReq(pWDA,
15847 (tSirSetBatchScanReq *)pMsg->bodyptr);
15848 break;
15849 }
15850 case WDA_TRIGGER_BATCH_SCAN_RESULT_IND:
15851 {
15852 WDA_ProcessTriggerBatchScanResultInd(pWDA,
15853 (tSirTriggerBatchScanResultInd *)pMsg->bodyptr);
15854 break;
15855 }
15856 case WDA_STOP_BATCH_SCAN_IND:
15857 {
15858 WDA_ProcessStopBatchScanInd(pWDA,
15859 (tSirStopBatchScanInd *)pMsg->bodyptr);
15860 break;
15861 }
c_hpothu92367912014-05-01 15:18:17 +053015862 case WDA_GET_BCN_MISS_RATE_REQ:
15863 WDA_ProcessGetBcnMissRateReq(pWDA,
15864 (tSirBcnMissRateReq *)pMsg->bodyptr);
15865 break;
Rajeev79dbe4c2013-10-05 11:03:42 +053015866#endif
15867
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053015868 case WDA_HT40_OBSS_SCAN_IND:
15869 {
15870 WDA_ProcessHT40OBSSScanInd(pWDA,
15871 (tSirHT40OBSSScanInd *)pMsg->bodyptr);
15872 break;
15873 }
15874 case WDA_HT40_OBSS_STOP_SCAN_IND:
15875 {
15876 WDA_ProcessHT40OBSSStopScanInd(pWDA,
15877 (tANI_U8*)pMsg->bodyptr);
15878 break;
15879 }
Atul Mittalc0f739f2014-07-31 13:47:47 +053015880// tdlsoffchan
15881#ifdef FEATURE_WLAN_TDLS
15882 case WDA_SET_TDLS_CHAN_SWITCH_REQ:
15883 {
15884 WDA_ProcessSetTdlsChanSwitchReq(pWDA, (tTdlsChanSwitchParams *)pMsg->bodyptr);
15885 break;
15886 }
15887#endif
Siddharth Bhal171788a2014-09-29 21:02:40 +053015888 case WDA_SPOOF_MAC_ADDR_REQ:
15889 {
15890 WDA_ProcessSetSpoofMacAddrReq(pWDA, (tpSpoofMacAddrReqParams)pMsg->bodyptr);
15891 break;
15892 }
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053015893 case WDA_ENCRYPT_MSG_REQ:
15894 {
15895 WDA_ProcessEncryptMsgReq(pWDA, (u8 *)pMsg->bodyptr);
15896 break;
15897 }
Srinivas Dasari32a79262015-02-19 13:04:49 +053015898
15899 case WDA_NAN_REQUEST:
15900 {
15901 WDA_ProcessNanRequest( pWDA, (tNanRequest *)pMsg->bodyptr);
15902 break;
15903 }
Abhishek Singh41988ba2015-05-25 19:42:29 +053015904 case WDA_SET_RTS_CTS_HTVHT:
15905 {
15906 WDA_ProcessSetRtsCtsHTVhtInd( pWDA, pMsg->bodyval);
15907 break;
15908 }
Katya Nigamf0511f62015-05-05 16:40:57 +053015909
15910 case WDA_MON_START_REQ:
15911 {
15912 WDA_ProcessMonStartReq(pWDA,(v_PVOID_t)pMsg->bodyptr);
15913 break;
15914 }
15915 case WDA_MON_STOP_REQ:
15916 {
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053015917 WDA_ProcessMonStopReq(pWDA, (v_PVOID_t)pMsg->bodyptr);
Katya Nigamf0511f62015-05-05 16:40:57 +053015918 break;
15919 }
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +053015920 case WDA_SEND_FREQ_RANGE_CONTROL_IND:
15921 {
15922 WDA_ProcessEnableDisableCAEventInd(pWDA, pMsg->bodyval);
15923 break;
15924 }
Arun Khandavalli7eeb1592015-10-19 21:36:57 +053015925 case WDA_WIFI_CONFIG_REQ:
15926 {
15927 WDA_ProcessWifiConfigReq(pWDA,(tSetWifiConfigParams *)pMsg->bodyptr);
15928 break;
15929 }
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053015930#ifdef FEATURE_OEM_DATA_SUPPORT
15931 case WDA_START_OEM_DATA_REQ_IND_NEW:
15932 {
15933 WDA_ProcessStartOemDataReqIndNew(pWDA,
15934 (tOemDataReqNewConfig *)pMsg->bodyptr);
15935 break;
15936 }
15937#endif
Mahesh A Saptasagarcfc65ae2015-12-22 15:06:10 +053015938 case WDA_ANTENNA_DIVERSITY_SELECTION_REQ:
15939 {
15940 WDA_ProcessAntennaDiversitySelectionReq(pWDA,
15941 (tSirAntennaDiversitySelectionReq *)pMsg->bodyptr);
15942 break;
15943 }
Mahesh A Saptasagar7d432952016-02-09 14:01:03 +053015944 case WDA_MODIFY_ROAM_PARAMS_IND:
15945 {
15946 WDA_ProcessBcnMissPenaltyCount(pWDA,
15947 (tModifyRoamParamsReqParams *)pMsg->bodyptr);
15948 break;
15949 }
Selvaraj, Sridharc045b8b2016-04-06 12:22:35 +053015950
15951 case WDA_SET_ALLOWED_ACTION_FRAMES_IND:
15952 wda_process_set_allowed_action_frames_ind(pWDA,
15953 (struct sir_allowed_action_frames*)pMsg->bodyptr);
15954 break;
15955
Bhargav Shahe3a6ff02016-04-11 16:31:49 +053015956 case WDA_PAUSE_TL_IND:
15957 {
15958 WDA_ProcessTLPauseInd(pWDA, pMsg->bodyval);
15959 break;
15960 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015961 default:
15962 {
Agarwal Ashishbf98caf2014-03-25 13:29:11 +053015963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070015964 "No Handling for msg type %x in WDA "
15965 ,pMsg->type);
15966 /* Do Nothing? MSG Body should be freed at here */
15967 if(NULL != pMsg->bodyptr)
15968 {
15969 vos_mem_free(pMsg->bodyptr);
15970 }
15971 //WDA_VOS_ASSERT(0) ;
15972 }
15973 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015974 return status ;
15975}
15976
Jeff Johnson295189b2012-06-20 16:38:30 -070015977/*
15978 * FUNCTION: WDA_LowLevelIndCallback
15979 * IND API callback from WDI, send Ind to PE
15980 */
15981void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
15982 void* pUserData )
15983{
15984 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
15985#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
15986 tSirRSSINotification rssiNotification;
15987#endif
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053015988 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070015989 {
15990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053015991 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015992 VOS_ASSERT(0);
15993 return ;
15994 }
15995
15996 switch(wdiLowLevelInd->wdiIndicationType)
15997 {
15998 case WDI_RSSI_NOTIFICATION_IND:
15999 {
16000 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16001 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070016002#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
16003 rssiNotification.bReserved =
16004 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
16005 rssiNotification.bRssiThres1NegCross =
16006 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
16007 rssiNotification.bRssiThres1PosCross =
16008 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
16009 rssiNotification.bRssiThres2NegCross =
16010 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
16011 rssiNotification.bRssiThres2PosCross =
16012 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
16013 rssiNotification.bRssiThres3NegCross =
16014 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
16015 rssiNotification.bRssiThres3PosCross =
16016 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080016017 rssiNotification.avgRssi = (v_S7_t)
16018 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070016019 WLANTL_BMPSRSSIRegionChangedNotification(
16020 pWDA->pVosContext,
16021 &rssiNotification);
16022#endif
16023 break ;
16024 }
16025 case WDI_MISSED_BEACON_IND:
16026 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080016027 tpSirSmeMissedBeaconInd pMissBeacInd =
16028 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070016029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16030 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070016031 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080016032 if(NULL == pMissBeacInd)
16033 {
16034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16035 "%s: VOS MEM Alloc Failure", __func__);
16036 break;
16037 }
16038 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
16039 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
16040 pMissBeacInd->bssIdx =
16041 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
16042 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016043 break ;
16044 }
16045 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
16046 {
16047 /* TODO: Decode Ind and send Ind to PE */
16048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16049 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
16050 break ;
16051 }
16052
16053 case WDI_MIC_FAILURE_IND:
16054 {
16055 tpSirSmeMicFailureInd pMicInd =
16056 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
16057
16058 if(NULL == pMicInd)
16059 {
16060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016061 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016062 break;
16063 }
16064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16065 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070016066 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
16067 pMicInd->length = sizeof(tSirSmeMicFailureInd);
16068 vos_mem_copy(pMicInd->bssId,
16069 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
16070 sizeof(tSirMacAddr));
16071 vos_mem_copy(pMicInd->info.srcMacAddr,
16072 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
16073 sizeof(tSirMacAddr));
16074 vos_mem_copy(pMicInd->info.taMacAddr,
16075 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
16076 sizeof(tSirMacAddr));
16077 vos_mem_copy(pMicInd->info.dstMacAddr,
16078 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
16079 sizeof(tSirMacAddr));
16080 vos_mem_copy(pMicInd->info.rxMacAddr,
16081 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
16082 sizeof(tSirMacAddr));
16083 pMicInd->info.multicast =
16084 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
16085 pMicInd->info.keyId=
16086 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
16087 pMicInd->info.IV1=
16088 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
16089 vos_mem_copy(pMicInd->info.TSC,
16090 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070016091 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
16092 (void *)pMicInd , 0) ;
16093 break ;
16094 }
16095 case WDI_FATAL_ERROR_IND:
16096 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070016097 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070016098 /* TODO: Decode Ind and send Ind to PE */
16099 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16100 "Received WDI_FATAL_ERROR_IND from WDI ");
16101 break ;
16102 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016103 case WDI_DEL_STA_IND:
16104 {
Jeff Johnson295189b2012-06-20 16:38:30 -070016105 tpDeleteStaContext pDelSTACtx =
16106 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
16107
16108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16109 "Received WDI_DEL_STA_IND from WDI ");
16110 if(NULL == pDelSTACtx)
16111 {
16112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016113 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016114 break;
16115 }
16116 vos_mem_copy(pDelSTACtx->addr2,
16117 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
16118 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070016119 vos_mem_copy(pDelSTACtx->bssId,
16120 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
16121 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070016122 pDelSTACtx->assocId =
16123 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
16124 pDelSTACtx->reasonCode =
16125 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
16126 pDelSTACtx->staId =
16127 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070016128 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
16129 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016130 break ;
16131 }
16132 case WDI_COEX_IND:
16133 {
16134 tANI_U32 index;
16135 vos_msg_t vosMsg;
c_hpothub3458992014-09-19 19:58:57 +053016136 tSirSmeCoexInd *pSmeCoexInd;
16137
16138 if (SIR_COEX_IND_TYPE_CXM_FEATURES_NOTIFICATION ==
16139 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType)
16140 {
16141 if(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData)
16142 {
16143 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16144 FL("Coex state: 0x%x coex feature: 0x%x"),
16145 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[0],
16146 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[1]);
16147
16148 if (wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2] << 16)
16149 {
16150 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, FL("power limit: 0x%x"),
16151 (tANI_U16)(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2]));
16152 }
16153 }
16154 break;
16155 }
16156
16157 pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070016158 if(NULL == pSmeCoexInd)
16159 {
16160 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016161 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016162 break;
16163 }
16164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16165 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070016166 /* Message Header */
16167 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
16168 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070016169 /* Info from WDI Indication */
16170 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
16171 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
16172 {
16173 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
16174 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016175 /* VOS message wrapper */
16176 vosMsg.type = eWNI_SME_COEX_IND;
16177 vosMsg.bodyptr = (void *)pSmeCoexInd;
16178 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070016179 /* Send message to SME */
16180 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16181 {
16182 /* free the mem and return */
16183 vos_mem_free((v_VOID_t *)pSmeCoexInd);
16184 }
16185 else
16186 {
16187 /* DEBUG */
16188 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16189 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
16190 pSmeCoexInd->coexIndType,
16191 pSmeCoexInd->coexIndData[0],
16192 pSmeCoexInd->coexIndData[1],
16193 pSmeCoexInd->coexIndData[2],
16194 pSmeCoexInd->coexIndData[3]);
16195 }
16196 break;
16197 }
16198 case WDI_TX_COMPLETE_IND:
16199 {
16200 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
16201 /* Calling TxCompleteAck Indication from wda context*/
16202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16203 "Complete Indication received from HAL");
16204 if( pWDA->pAckTxCbFunc )
16205 {
16206 if( VOS_STATUS_SUCCESS !=
16207 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
16208 {
16209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16210 "Tx Complete timeout Timer Stop Failed ");
Ganesh Kondabattinib18b3292015-03-16 16:59:26 +053016211 }
Ganesh Kondabattinie1accae2015-06-11 17:18:00 +053016212 if (!IS_FEATURE_SUPPORTED_BY_FW(ENHANCED_TXBD_COMPLETION))
Ganesh Kondabattinib18b3292015-03-16 16:59:26 +053016213 pWDA->pAckTxCbFunc( pMac, &wdiLowLevelInd->wdiIndicationData.tx_complete_status);
16214 else
16215 pWDA->pAckTxCbFunc( pMac, &wdiLowLevelInd->wdiIndicationData.wdiTxBdInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070016216 pWDA->pAckTxCbFunc = NULL;
16217 }
16218 else
16219 {
Ratheesh S P36dbc932015-08-07 14:28:57 +053016220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070016221 "Tx Complete Indication is received after timeout ");
16222 }
16223 break;
16224 }
Viral Modid86bde22012-12-10 13:09:21 -080016225 case WDI_P2P_NOA_START_IND :
16226 {
16227 tSirP2PNoaStart *pP2pNoaStart =
16228 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
16229
16230 if (NULL == pP2pNoaStart)
16231 {
16232 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16233 "Memory allocation failure, "
16234 "WDI_P2P_NOA_START_IND not forwarded");
16235 break;
16236 }
16237 pP2pNoaStart->status =
16238 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
16239 pP2pNoaStart->bssIdx =
16240 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
16241 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
16242 (void *)pP2pNoaStart , 0) ;
16243 break;
16244 }
16245
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053016246#ifdef FEATURE_WLAN_TDLS
16247 case WDI_TDLS_IND :
16248 {
16249 tSirTdlsInd *pTdlsInd =
16250 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
16251
16252 if (NULL == pTdlsInd)
16253 {
16254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16255 "Memory allocation failure, "
16256 "WDI_TDLS_IND not forwarded");
16257 break;
16258 }
16259 pTdlsInd->status =
16260 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
16261 pTdlsInd->assocId =
16262 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
16263 pTdlsInd->staIdx =
16264 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
16265 pTdlsInd->reasonCode =
16266 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
16267 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
16268 (void *)pTdlsInd , 0) ;
16269 break;
16270 }
16271#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070016272 case WDI_P2P_NOA_ATTR_IND :
16273 {
16274 tSirP2PNoaAttr *pP2pNoaAttr =
16275 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070016276 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16277 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070016278 if (NULL == pP2pNoaAttr)
16279 {
16280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16281 "Memory allocation failure, "
16282 "WDI_P2P_NOA_ATTR_IND not forwarded");
16283 break;
16284 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016285 pP2pNoaAttr->index =
16286 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
16287 pP2pNoaAttr->oppPsFlag =
16288 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
16289 pP2pNoaAttr->ctWin =
16290 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
16291
16292 pP2pNoaAttr->uNoa1IntervalCnt =
16293 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
16294 pP2pNoaAttr->uNoa1Duration =
16295 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
16296 pP2pNoaAttr->uNoa1Interval =
16297 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
16298 pP2pNoaAttr->uNoa1StartTime =
16299 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070016300 pP2pNoaAttr->uNoa2IntervalCnt =
16301 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
16302 pP2pNoaAttr->uNoa2Duration =
16303 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
16304 pP2pNoaAttr->uNoa2Interval =
16305 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
16306 pP2pNoaAttr->uNoa2StartTime =
16307 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070016308 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
16309 (void *)pP2pNoaAttr , 0) ;
16310 break;
16311 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016312#ifdef FEATURE_WLAN_SCAN_PNO
16313 case WDI_PREF_NETWORK_FOUND_IND:
16314 {
16315 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070016316 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
16317 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
16318 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
16319 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
16320
Jeff Johnson295189b2012-06-20 16:38:30 -070016321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16322 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070016323 if (NULL == pPrefNetworkFoundInd)
16324 {
16325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16326 "Memory allocation failure, "
16327 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
Kiet Lamb537cfb2013-11-07 12:56:49 +053016328 if (NULL !=
16329 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
16330 {
16331 wpalMemoryFree(
16332 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData
16333 );
16334 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
16335 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016336 break;
16337 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016338 /* Message Header */
16339 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070016340 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070016341
16342 /* Info from WDI Indication */
16343 pPrefNetworkFoundInd->ssId.length =
16344 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070016345 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070016346 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
16347 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
16348 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070016349 if (NULL !=
16350 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
16351 {
16352 pPrefNetworkFoundInd->frameLength =
16353 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
16354 vos_mem_copy( pPrefNetworkFoundInd->data,
16355 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
16356 pPrefNetworkFoundInd->frameLength);
16357 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
16358 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
16359 }
16360 else
16361 {
16362 pPrefNetworkFoundInd->frameLength = 0;
16363 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016364 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070016365 /* VOS message wrapper */
16366 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
16367 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
16368 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070016369 /* Send message to SME */
16370 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16371 {
16372 /* free the mem and return */
16373 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
16374 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016375 break;
16376 }
16377#endif // FEATURE_WLAN_SCAN_PNO
16378
16379#ifdef WLAN_WAKEUP_EVENTS
16380 case WDI_WAKE_REASON_IND:
16381 {
16382 vos_msg_t vosMsg;
16383 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
16384 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
16385 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
16386
16387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Sushant Kaushik1b645382014-10-13 16:39:36 +053016388 "[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 -070016389 wdiLowLevelInd->wdiIndicationType,
16390 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
16391 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
16392 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
16393
16394 if (NULL == pWakeReasonInd)
16395 {
16396 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16397 "Memory allocation failure, "
16398 "WDI_WAKE_REASON_IND not forwarded");
16399 break;
16400 }
16401
16402 vos_mem_zero(pWakeReasonInd, allocSize);
16403
16404 /* Message Header */
16405 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
16406 pWakeReasonInd->mesgLen = allocSize;
16407
16408 /* Info from WDI Indication */
16409 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
16410 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
16411 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
16412 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
16413 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
16414 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
16415 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
16416 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
16417
16418 /* VOS message wrapper */
16419 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
16420 vosMsg.bodyptr = (void *) pWakeReasonInd;
16421 vosMsg.bodyval = 0;
16422
16423 /* Send message to SME */
16424 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16425 {
16426 /* free the mem and return */
16427 vos_mem_free((v_VOID_t *) pWakeReasonInd);
16428 }
16429
16430 break;
16431 }
16432#endif // WLAN_WAKEUP_EVENTS
16433
16434 case WDI_TX_PER_HIT_IND:
16435 {
16436 vos_msg_t vosMsg;
16437 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
16438 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
16439 /* VOS message wrapper */
16440 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
16441 vosMsg.bodyptr = NULL;
16442 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070016443 /* Send message to SME */
16444 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16445 {
16446 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
16447 }
16448 break;
16449 }
Abhishek Singh00b71972016-01-07 10:51:04 +053016450#ifdef WLAN_FEATURE_RMC
16451 case WDI_TX_FAIL_IND:
16452 {
16453 if (pWDA->txFailIndCallback)
16454 {
16455 pWDA->txFailIndCallback(
16456 wdiLowLevelInd->wdiIndicationData.wdiTXFailInd.macAddr,
16457 wdiLowLevelInd->wdiIndicationData.wdiTXFailInd.seqNo);
16458 }
16459 break;
16460 }
16461#endif /* WLAN_FEATURE_RMC */
Jeff Johnson295189b2012-06-20 16:38:30 -070016462
Leo Chang9056f462013-08-01 19:21:11 -070016463#ifdef FEATURE_WLAN_LPHB
Leo Changd9df8aa2013-09-26 13:32:26 -070016464 case WDI_LPHB_IND:
Leo Chang9056f462013-08-01 19:21:11 -070016465 {
Leo Changd9df8aa2013-09-26 13:32:26 -070016466 vos_msg_t vosMsg;
16467 tSirLPHBInd *lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070016468
Leo Changd9df8aa2013-09-26 13:32:26 -070016469 lphbInd =
16470 (tSirLPHBInd *)vos_mem_malloc(sizeof(tSirLPHBInd));
16471 if (NULL == lphbInd)
Leo Chang9056f462013-08-01 19:21:11 -070016472 {
16473 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16474 "%s: LPHB IND buffer alloc Fail", __func__);
16475 return ;
16476 }
16477
Leo Changd9df8aa2013-09-26 13:32:26 -070016478 lphbInd->sessionIdx =
Leo Chang9056f462013-08-01 19:21:11 -070016479 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
Leo Changd9df8aa2013-09-26 13:32:26 -070016480 lphbInd->protocolType =
Leo Chang9056f462013-08-01 19:21:11 -070016481 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
Leo Changd9df8aa2013-09-26 13:32:26 -070016482 lphbInd->eventReason =
Leo Chang9056f462013-08-01 19:21:11 -070016483 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
16484
16485 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Leo Changd9df8aa2013-09-26 13:32:26 -070016486 "Get WDI_LPHB_IND bssIdx %d",
Leo Chang9056f462013-08-01 19:21:11 -070016487 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
16488
Leo Changd9df8aa2013-09-26 13:32:26 -070016489 vosMsg.type = eWNI_SME_LPHB_IND;
16490 vosMsg.bodyptr = lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070016491 vosMsg.bodyval = 0;
16492 /* Send message to SME */
16493 if (VOS_STATUS_SUCCESS !=
16494 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16495 {
16496 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
16497 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
Leo Changd9df8aa2013-09-26 13:32:26 -070016498 vos_mem_free(lphbInd);
Leo Chang9056f462013-08-01 19:21:11 -070016499 }
16500 break;
16501 }
16502#endif /* FEATURE_WLAN_LPHB */
Yue Mab9c86f42013-08-14 15:59:08 -070016503 case WDI_PERIODIC_TX_PTRN_FW_IND:
16504 {
16505 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16506 "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, "
16507 "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__,
16508 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx,
16509 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx,
16510 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status,
16511 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap);
16512
16513 break;
16514 }
Leo Chang9056f462013-08-01 19:21:11 -070016515
Ravi Joshid2ca7c42013-07-23 08:37:49 -070016516 case WDI_IBSS_PEER_INACTIVITY_IND:
16517 {
16518 tSirIbssPeerInactivityInd *pIbssInd =
16519 (tSirIbssPeerInactivityInd *)
16520 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
16521
16522 if (NULL == pIbssInd)
16523 {
16524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16525 "Memory allocation failure, "
16526 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
16527 break;
16528 }
16529
16530 pIbssInd->bssIdx =
16531 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
16532 pIbssInd->staIdx =
16533 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
16534 vos_mem_copy(pIbssInd->peerAddr,
16535 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
16536 sizeof(tSirMacAddr));
16537 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
16538 break;
16539 }
16540
Abhishek Singh00b71972016-01-07 10:51:04 +053016541#ifdef WLAN_FEATURE_RMC
16542 case WDI_RMC_RULER_PICK_NEW :
16543 {
16544 tSirRmcUpdateInd *pRmcUpdateInd =
16545 (tSirRmcUpdateInd *)vos_mem_malloc(sizeof(tSirRmcUpdateInd));
16546
16547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16548 "Received WDI_RMC_UPDATE_IND from WDI");
16549 if (NULL == pRmcUpdateInd)
16550 {
16551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16552 "Memory allocation failure, "
16553 "WDI_RMC_UPDATE_IND not forwarded");
16554 break;
16555 }
16556
16557 pRmcUpdateInd->indication =
16558 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.indication;
16559 pRmcUpdateInd->role =
16560 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.role;
16561
16562 /* Copy the mcast transmitter which should be us */
16563 vos_mem_copy(pRmcUpdateInd->mcastTransmitter,
16564 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd. \
16565 mcastTransmitter,
16566 sizeof(tSirMacAddr));
16567 /* Copy the mcast group address */
16568 vos_mem_copy(pRmcUpdateInd->mcastGroup,
16569 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.mcastGroup,
16570 sizeof(tSirMacAddr));
16571 vos_mem_copy(pRmcUpdateInd->mcastRuler,
16572 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.mcastRuler,
16573 sizeof(tSirMacAddr));
16574 vos_mem_copy(pRmcUpdateInd->ruler,
16575 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.ruler,
16576 sizeof(pRmcUpdateInd->ruler));
16577
16578 WDA_SendMsg(pWDA, WDA_RMC_UPDATE_IND, (void *)pRmcUpdateInd, 0) ;
16579 break;
16580 }
16581#endif /* WLAN_FEATURE_RMC */
16582
Rajeev79dbe4c2013-10-05 11:03:42 +053016583#ifdef FEATURE_WLAN_BATCH_SCAN
16584 case WDI_BATCH_SCAN_RESULT_IND:
16585 {
16586 void *pBatchScanResult;
16587 void *pCallbackContext;
16588 tpAniSirGlobal pMac;
16589
16590 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
16591 "Received WDI_BATCHSCAN_RESULT_IND from FW");
16592
16593 /*sanity check*/
Sunil Duttbd736ed2014-05-26 21:19:41 +053016594 if (NULL == pWDA)
Rajeev79dbe4c2013-10-05 11:03:42 +053016595 {
16596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16597 "%s:pWDA is NULL", __func__);
16598 VOS_ASSERT(0);
16599 return;
16600 }
16601
16602 pBatchScanResult =
16603 (void *)wdiLowLevelInd->wdiIndicationData.pBatchScanResult;
16604 if (NULL == pBatchScanResult)
16605 {
16606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16607 "%s:Batch scan result from FW is null can't invoke HDD callback",
16608 __func__);
16609 VOS_ASSERT(0);
16610 return;
16611 }
16612
16613 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16614 if (NULL == pMac)
16615 {
16616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16617 "%s:pMac is NULL", __func__);
16618 VOS_ASSERT(0);
16619 return;
16620 }
16621
16622 pCallbackContext = pMac->pmc.batchScanResultCallbackContext;
16623 /*call hdd callback with set batch scan response data*/
16624 if(pMac->pmc.batchScanResultCallback)
16625 {
16626 pMac->pmc.batchScanResultCallback(pCallbackContext,
16627 pBatchScanResult);
16628 }
16629 else
16630 {
16631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16632 "%s:HDD callback is null", __func__);
16633 VOS_ASSERT(0);
16634 }
16635 break;
16636 }
16637#endif
16638
Leo Chang0b0e45a2013-12-15 15:18:55 -080016639#ifdef FEATURE_WLAN_CH_AVOID
16640 case WDI_CH_AVOID_IND:
16641 {
16642 vos_msg_t vosMsg;
16643 tSirChAvoidIndType *chAvoidInd;
16644
16645 chAvoidInd =
16646 (tSirChAvoidIndType *)vos_mem_malloc(sizeof(tSirChAvoidIndType));
16647 if (NULL == chAvoidInd)
16648 {
16649 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16650 "%s: CH_AVOID IND buffer alloc Fail", __func__);
16651 return ;
16652 }
16653
16654 chAvoidInd->avoidRangeCount =
16655 wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidRangeCount;
16656 wpalMemoryCopy((void *)chAvoidInd->avoidFreqRange,
16657 (void *)wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidFreqRange,
16658 chAvoidInd->avoidRangeCount * sizeof(tSirChAvoidFreqType));
16659
16660 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16661 "%s : WDA CH avoid notification", __func__);
16662
16663 vosMsg.type = eWNI_SME_CH_AVOID_IND;
16664 vosMsg.bodyptr = chAvoidInd;
16665 vosMsg.bodyval = 0;
16666 /* Send message to SME */
16667 if (VOS_STATUS_SUCCESS !=
16668 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16669 {
16670 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16671 "post eWNI_SME_CH_AVOID_IND to SME Failed");
16672 vos_mem_free(chAvoidInd);
16673 }
16674 break;
16675 }
16676#endif /* FEATURE_WLAN_CH_AVOID */
16677
Sunil Duttbd736ed2014-05-26 21:19:41 +053016678#ifdef WLAN_FEATURE_LINK_LAYER_STATS
16679 case WDI_LL_STATS_RESULTS_IND:
16680 {
16681 void *pLinkLayerStatsInd;
Sunil Duttbd736ed2014-05-26 21:19:41 +053016682 tpAniSirGlobal pMac;
16683
16684 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16685 "Received WDI_LL_STATS_RESULTS_IND from FW");
16686
16687 /*sanity check*/
16688 if (NULL == pWDA)
16689 {
16690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16691 "%s:pWDA is NULL", __func__);
16692 VOS_ASSERT(0);
16693 return;
16694 }
16695
16696 pLinkLayerStatsInd =
Dino Mycled3d50022014-07-07 12:58:25 +053016697 (void *)wdiLowLevelInd->
16698 wdiIndicationData.wdiLinkLayerStatsResults.pLinkLayerStatsResults;
Sunil Duttbd736ed2014-05-26 21:19:41 +053016699 if (NULL == pLinkLayerStatsInd)
16700 {
16701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16702 "%s:Link Layer Statistics from FW is null can't invoke HDD callback",
16703 __func__);
16704 VOS_ASSERT(0);
16705 return;
16706 }
16707
16708 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16709 if (NULL == pMac)
16710 {
16711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16712 "%s:pMac is NULL", __func__);
16713 VOS_ASSERT(0);
16714 return;
16715 }
16716
Dino Mycled3d50022014-07-07 12:58:25 +053016717 /* call hdd callback with Link Layer Statistics.
16718 * vdev_id/ifacId in link_stats_results will be
16719 * used to retrieve the correct HDD context
16720 */
Sunil Duttbd736ed2014-05-26 21:19:41 +053016721 if (pMac->sme.pLinkLayerStatsIndCallback)
16722 {
Dino Mycled3d50022014-07-07 12:58:25 +053016723 pMac->sme.pLinkLayerStatsIndCallback(pMac->pAdapter,
Sunil Duttbd736ed2014-05-26 21:19:41 +053016724 WDA_LINK_LAYER_STATS_RESULTS_RSP,
Dino Mycled3d50022014-07-07 12:58:25 +053016725 pLinkLayerStatsInd,
16726 wdiLowLevelInd->
16727 wdiIndicationData.wdiLinkLayerStatsResults.macAddr);
Sunil Duttbd736ed2014-05-26 21:19:41 +053016728 }
16729 else
16730 {
16731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16732 "%s:HDD callback is null", __func__);
16733 }
16734 break;
16735 }
16736#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
16737
Dino Mycle41bdc942014-06-10 11:30:24 +053016738#ifdef WLAN_FEATURE_EXTSCAN
16739 case WDI_EXTSCAN_PROGRESS_IND:
16740 case WDI_EXTSCAN_SCAN_AVAILABLE_IND:
16741 case WDI_EXTSCAN_SCAN_RESULT_IND:
16742 case WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND:
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053016743 case WDI_EXTSCAN_SSID_HOTLIST_RESULT_IND:
Dino Mycle41bdc942014-06-10 11:30:24 +053016744 {
16745 void *pEXTScanData;
16746 void *pCallbackContext;
16747 tpAniSirGlobal pMac;
16748 tANI_U16 indType;
16749
16750 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16751 "Received WDI_EXTSCAN Indications from FW");
16752 /*sanity check*/
16753 if (NULL == pWDA)
16754 {
16755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16756 "%s:pWDA is NULL", __func__);
16757 VOS_ASSERT(0);
16758 return;
16759 }
16760 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_PROGRESS_IND)
16761 {
16762 indType = WDA_EXTSCAN_PROGRESS_IND;
16763
16764 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16765 "WDI_EXTSCAN Indication is WDI_EXTSCAN_PROGRESS_IND");
16766 }
16767 if (wdiLowLevelInd->wdiIndicationType ==
16768 WDI_EXTSCAN_SCAN_AVAILABLE_IND)
16769 {
16770 indType = WDA_EXTSCAN_SCAN_AVAILABLE_IND;
16771
16772 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16773 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_AVAILABLE_IND");
16774 }
16775 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_SCAN_RESULT_IND)
16776 {
16777 indType = WDA_EXTSCAN_SCAN_RESULT_IND;
16778
16779 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16780 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_RESULT_IND");
16781 }
16782 if (wdiLowLevelInd->wdiIndicationType ==
16783 WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND)
16784 {
16785 indType = WDA_EXTSCAN_BSSID_HOTLIST_RESULT_IND;
16786
16787 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16788 "WDI_EXTSCAN Indication is WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND");
16789 }
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053016790 if (wdiLowLevelInd->wdiIndicationType ==
16791 WDI_EXTSCAN_SSID_HOTLIST_RESULT_IND)
16792 {
16793 indType = WDA_EXTSCAN_SSID_HOTLIST_RESULT_IND;
16794
16795 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16796 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SSID_HOTLIST_RESULT_IND");
16797 }
Dino Mycle41bdc942014-06-10 11:30:24 +053016798
16799 pEXTScanData =
16800 (void *)wdiLowLevelInd->wdiIndicationData.pEXTScanIndData;
16801 if (NULL == pEXTScanData)
16802 {
16803 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16804 "%s: EXTSCAN Indication Data is null, can't invoke HDD callback",
16805 __func__);
16806 VOS_ASSERT(0);
16807 return;
16808 }
16809
16810 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16811 if (NULL == pMac)
16812 {
16813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16814 "%s:pMac is NULL", __func__);
16815 VOS_ASSERT(0);
16816 return;
16817 }
16818
16819 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
16820
16821 if(pMac->sme.pEXTScanIndCb)
16822 {
16823 pMac->sme.pEXTScanIndCb(pCallbackContext,
16824 indType,
16825 pEXTScanData);
16826 }
16827 else
16828 {
16829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16830 "%s:HDD callback is null", __func__);
16831 }
16832 break;
16833 }
16834#endif /* WLAN_FEATURE_EXTSCAN */
Abhishek Singh66c16762014-08-14 19:13:19 +053016835 case WDI_DEL_BA_IND:
16836 {
16837 tpBADeleteParams pDelBAInd =
Sunkad, Anand Ningappa5c529e42016-02-05 15:32:22 +053016838 (tpBADeleteParams)vos_mem_malloc(sizeof(*pDelBAInd));
Abhishek Singh66c16762014-08-14 19:13:19 +053016839
16840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16841 "Received WDI_DEL_BA_IND from WDI ");
16842 if(NULL == pDelBAInd)
16843 {
16844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16845 "%s: VOS MEM Alloc Failure", __func__);
16846 break;
16847 }
16848 vos_mem_copy(pDelBAInd->peerMacAddr,
16849 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.peerMacAddr,
16850 sizeof(tSirMacAddr));
16851 vos_mem_copy(pDelBAInd->bssId,
16852 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.bssId,
16853 sizeof(tSirMacAddr));
16854 pDelBAInd->staIdx =
16855 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.staIdx;
16856 pDelBAInd->baTID =
16857 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baTID;
16858 pDelBAInd->baDirection =
16859 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baDirection;
16860 pDelBAInd->reasonCode =
16861 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.reasonCode;
16862
16863 WDA_SendMsg(pWDA, SIR_LIM_DEL_BA_IND,
16864 (void *)pDelBAInd , 0) ;
16865 break;
16866 }
Srinivas Dasari32a79262015-02-19 13:04:49 +053016867 case WDI_NAN_EVENT_IND:
16868 {
16869 vos_msg_t vosMsg;
16870 tpSirNanEvent pSirNanEvent = NULL;
16871
16872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16873 "Received WDI_NAN_EVENT");
16874
16875 pSirNanEvent = (tpSirNanEvent)vos_mem_malloc( sizeof( tSirNanEvent )
16876 - sizeof( pSirNanEvent->event_data)
16877 + wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len);
16878
16879 if (NULL == pSirNanEvent)
16880 {
16881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16882 "%s: VOS MEM Alloc Failure", __func__);
16883 VOS_ASSERT(0) ;
16884 break;
16885 }
16886
16887 pSirNanEvent->event_data_len =
16888 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len;
16889
16890 if (wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len)
16891 {
16892 vos_mem_copy( pSirNanEvent->event_data,
16893 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data,
16894 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len);
16895 }
16896
16897 /* VOS message wrapper */
16898 vosMsg.type = eWNI_SME_NAN_EVENT;
16899 vosMsg.bodyptr = pSirNanEvent;
16900 vosMsg.bodyval = 0;
16901
16902 /* Send message to SME */
16903 if (VOS_STATUS_SUCCESS
16904 != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16905 {
16906 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
16907 "post eWNI_SME_NAN_EVENT to SME Failed");
16908 vos_mem_free(pSirNanEvent);
16909 }
16910 break;
16911 }
Sachin Ahuja3d47fcd2015-08-28 16:02:06 +053016912 case WDI_LOST_LINK_PARAMS_IND:
16913 {
16914 tpSirSmeLostLinkParamsInd pLostLinkParamInd =
16915 (tpSirSmeLostLinkParamsInd)vos_mem_malloc(sizeof(tSirSmeLostLinkParamsInd));
Dino Mycle41bdc942014-06-10 11:30:24 +053016916
Sachin Ahuja3d47fcd2015-08-28 16:02:06 +053016917 if (NULL == pLostLinkParamInd)
16918 {
16919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16920 "%s: VOS MEM Alloc Failure", __func__);
16921 break;
16922 }
16923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16924 "Received WDI_LOST_LINK_PARAMS_IND from WDI ");
16925
16926 pLostLinkParamInd->messageType = eWNI_SME_LOST_LINK_PARAMS_IND;
16927 pLostLinkParamInd->length = sizeof(tSirSmeMicFailureInd);
16928 pLostLinkParamInd->info.bssIdx =
16929 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.bssIdx;
16930 pLostLinkParamInd->info.rssi =
16931 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.rssi;
16932 vos_mem_copy(pLostLinkParamInd->info.selfMacAddr,
16933 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.selfMacAddr,
16934 sizeof(tSirMacAddr));
16935 pLostLinkParamInd->info.linkFlCnt =
16936 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.linkFlCnt;
16937 pLostLinkParamInd->info.linkFlTx =
16938 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.linkFlTx;
16939 pLostLinkParamInd->info.lastDataRate =
16940 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.lastDataRate;
16941 pLostLinkParamInd->info.rsvd1 =
16942 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.rsvd1;
16943 pLostLinkParamInd->info.rsvd2 =
16944 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.rsvd2;
16945 WDA_SendMsg(pWDA, SIR_HAL_LOST_LINK_PARAMS_IND,
16946 (void *)pLostLinkParamInd , 0) ;
16947 break;
16948 }
Gupta, Kapil7c34b322015-09-30 13:12:35 +053016949 case WDI_RSSI_BREACHED_IND:
16950 {
16951 WDI_RssiBreachedIndType *pRssiBreachedInd;
16952 tpAniSirGlobal pMac;
16953
16954 pRssiBreachedInd =
16955 (WDI_RssiBreachedIndType *)vos_mem_malloc(sizeof(WDI_RssiBreachedIndType));
16956 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16957 "Received WDI_RSSI_BREACHED_IND from FW");
16958
16959 vos_mem_copy(pRssiBreachedInd,
16960 &wdiLowLevelInd->wdiIndicationData.wdiRssiBreachedInd,
16961 sizeof(WDI_RssiBreachedIndType));
16962
16963 /*sanity check*/
16964 if (NULL == pWDA)
16965 {
16966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16967 "%s:pWDA is NULL", __func__);
16968 vos_mem_free(pRssiBreachedInd);
16969 VOS_ASSERT(0);
16970 return;
16971 }
16972
16973 if (NULL == pRssiBreachedInd)
16974 {
16975 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16976 "%s:Breach indication from FW is null can't invoke HDD callback",
16977 __func__);
16978 VOS_ASSERT(0);
16979 return;
16980 }
16981
16982 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16983 if (NULL == pMac)
16984 {
16985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16986 "%s:pMac is NULL", __func__);
16987 VOS_ASSERT(0);
16988 vos_mem_free(pRssiBreachedInd);
16989 return;
16990 }
16991
16992 if (pMac->sme.rssiThresholdBreachedCb)
16993 {
16994 pMac->sme.rssiThresholdBreachedCb(pMac->pAdapter, (void *)pRssiBreachedInd);
16995 }
16996 else
16997 {
16998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16999 "%s:HDD callback is null", __func__);
17000 }
17001 vos_mem_free(pRssiBreachedInd);
17002 break;
17003 }
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053017004#ifdef FEATURE_OEM_DATA_SUPPORT
17005 case WDI_START_OEM_DATA_RSP_IND_NEW:
17006 {
17007 void *pCallbackContext;
17008 tpAniSirGlobal pMac;
17009 tANI_U16 indType;
17010 void *pOemRspNewIndData;
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053017011 tANI_U32 OemRspNewLen;
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053017012
17013 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17014 "Received WDI_START_OEM_DATA_RSP_IND_NEW Indications from FW");
17015
17016 /*sanity check*/
17017 if (NULL == pWDA)
17018 {
17019 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17020 "%s:pWDA is NULL", __func__);
17021 VOS_ASSERT(0);
17022 return;
17023 }
17024
17025 indType = WDA_START_OEM_DATA_RSP_IND_NEW;
17026 pOemRspNewIndData =
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053017027 (void *)wdiLowLevelInd->wdiIndicationData.wdiOemDataRspNew.
17028 pOemRspNewIndData;
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053017029 if (NULL == pOemRspNewIndData)
17030 {
17031 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17032 "%s: OEM_DATA_RSP_IND_NEW Indication Data is null, can't invoke HDD callback",
17033 __func__);
17034 VOS_ASSERT(0);
17035 return;
17036 }
17037
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053017038 OemRspNewLen = wdiLowLevelInd->wdiIndicationData.wdiOemDataRspNew.
17039 OemRspNewLen;
17040
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053017041 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17042 if (NULL == pMac)
17043 {
17044 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17045 "%s:pMac is NULL", __func__);
17046 VOS_ASSERT(0);
17047 return;
17048 }
17049
17050 pCallbackContext = pMac->sme.pOemDataCallbackContext;
17051
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053017052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17053 "%s: OemRspNewLen: %d", __func__, OemRspNewLen);
17054
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053017055 if(pMac->sme.pOemDataIndCb)
17056 {
17057 pMac->sme.pOemDataIndCb(pCallbackContext,
17058 indType,
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053017059 pOemRspNewIndData,
17060 OemRspNewLen);
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053017061 }
17062 else
17063 {
17064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17065 "%s:HDD callback is null", __func__);
17066 }
17067 break;
17068 }
17069#endif /* FEATURE_OEM_DATA_SUPPORT */
17070
Jeff Johnson295189b2012-06-20 16:38:30 -070017071 default:
17072 {
17073 /* TODO error */
17074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17075 "Received UNKNOWN Indication from WDI ");
17076 }
17077 }
17078 return ;
17079}
17080
Jeff Johnson295189b2012-06-20 16:38:30 -070017081/*
17082 * BA related processing in WDA.
17083 */
Jeff Johnson295189b2012-06-20 16:38:30 -070017084void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
17085 void* pUserData)
17086{
17087 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17088 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070017089 if(NULL == pWdaParams)
17090 {
17091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017092 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017093 VOS_ASSERT(0) ;
17094 return ;
17095 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017096 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070017097 vos_mem_free(pWdaParams->wdaMsgParam) ;
17098 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17099 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017101 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017102 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
17103 {
17104 tANI_U8 i = 0 ;
17105 tBaActivityInd *baActivityInd = NULL ;
17106 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
17107 tANI_U8 allocSize = sizeof(tBaActivityInd)
17108 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
17109 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
17110 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017111 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017112 if(NULL == baActivityInd)
17113 {
17114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017115 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017116 VOS_ASSERT(0) ;
17117 return;
17118 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017119 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
17120 sizeof(tSirMacAddr)) ;
17121 baActivityInd->baCandidateCnt = baCandidateCount ;
17122
17123 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
17124 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
17125
17126 for(i = 0 ; i < baCandidateCount ; i++)
17127 {
17128 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017129 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
17130 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017131 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
17132 {
17133 baCandidate->baInfo[tid].fBaEnable =
17134 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
17135 baCandidate->baInfo[tid].startingSeqNum =
17136 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
17137 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070017138 wdiBaCandidate++ ;
17139 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017140 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017141 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
17142 }
17143 else
17144 {
17145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17146 "BA Trigger RSP with Failure received ");
17147 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017148 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017149}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080017150
17151
17152/*
17153 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
17154 * during MCC
17155 */
17156void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
17157{
17158 wpt_uint32 enabled;
17159 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
17160 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
17161 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
17162
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053017163 if (NULL == pMac )
17164 {
17165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17166 "%s: Invoked with invalid MAC context ", __func__ );
17167 VOS_ASSERT(0);
17168 return;
17169 }
17170
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080017171 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
17172 != eSIR_SUCCESS)
17173 {
17174 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17175 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
17176 return;
17177 }
17178
17179 if(!enabled)
17180 {
17181 return;
17182 }
17183
17184 if(NULL == pWDA)
17185 {
17186 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17187 "%s:WDA context is NULL", __func__);
17188 VOS_ASSERT(0);
17189 return;
17190 }
17191
17192 if(activate)
17193 {
17194 if( VOS_STATUS_SUCCESS !=
17195 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
17196 {
17197 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17198 "Traffic Stats Timer Start Failed ");
17199 return;
17200 }
17201 WDI_DS_ActivateTrafficStats();
17202 }
17203 else
17204 {
17205 WDI_DS_DeactivateTrafficStats();
17206 WDI_DS_ClearTrafficStats();
17207
17208 if( VOS_STATUS_SUCCESS !=
17209 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
17210 {
17211 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17212 "Traffic Stats Timer Stop Failed ");
17213 return;
17214 }
17215 }
17216}
17217
17218/*
17219 * Traffic Stats Timer handler
17220 */
17221void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
17222{
17223 WDI_Status wdiStatus;
17224 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
17225 WDI_TrafficStatsIndType trafficStatsIndParams;
17226 wpt_uint32 length, enabled;
17227 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17228
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053017229 if (NULL == pMac )
17230 {
17231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17232 "%s: Invoked with invalid MAC context ", __func__ );
17233 VOS_ASSERT(0);
17234 return;
17235 }
17236
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080017237 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
17238 != eSIR_SUCCESS)
17239 {
17240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17241 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
17242 return;
17243 }
17244
17245 if(!enabled)
17246 {
17247 WDI_DS_DeactivateTrafficStats();
17248 return;
17249 }
17250
17251 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
17252
17253 if(pWdiTrafficStats != NULL)
17254 {
17255 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
17256 trafficStatsIndParams.length = length;
17257 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080017258 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080017259 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
17260 trafficStatsIndParams.pUserData = pWDA;
17261
17262 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
17263
17264 if(WDI_STATUS_PENDING == wdiStatus)
17265 {
17266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17267 "Pending received for %s:%d ",__func__,__LINE__ );
17268 }
17269 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
17270 {
17271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17272 "Failure in %s:%d ",__func__,__LINE__ );
17273 }
17274
17275 WDI_DS_ClearTrafficStats();
17276 }
17277 else
17278 {
17279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
17280 "pWdiTrafficStats is Null");
17281 }
17282
17283 if( VOS_STATUS_SUCCESS !=
17284 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
17285 {
17286 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
17287 "Traffic Stats Timer Start Failed ");
17288 return;
17289 }
17290}
17291
Jeff Johnson295189b2012-06-20 16:38:30 -070017292/*
17293 * BA Activity check timer handler
17294 */
17295void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
17296{
17297 tANI_U8 curSta = 0 ;
17298 tANI_U8 tid = 0 ;
17299 tANI_U8 size = 0 ;
17300 tANI_U8 baCandidateCount = 0 ;
17301 tANI_U8 newBaCandidate = 0 ;
Abhishek Singh0644e482014-10-06 18:38:23 +053017302 tANI_U32 val;
Jeff Johnson295189b2012-06-20 16:38:30 -070017303 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
Abhishek Singh0644e482014-10-06 18:38:23 +053017304 tpAniSirGlobal pMac;
17305
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053017306 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070017307 {
17308 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053017309 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017310 VOS_ASSERT(0);
17311 return ;
17312 }
17313 if(WDA_MAX_STA < pWDA->wdaMaxSta)
17314 {
17315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17316 "Inconsistent STA entries in WDA");
17317 VOS_ASSERT(0) ;
Abhishek Singh0644e482014-10-06 18:38:23 +053017318 }
17319 if(NULL == pWDA->pVosContext)
17320 {
17321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17322 "%s: pVosContext is NULL",__func__);
17323 VOS_ASSERT(0);
17324 return ;
17325 }
17326 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Abhishek Singh68883952014-10-14 11:59:05 +053017327 if(NULL == pMac)
17328 {
17329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17330 "%s: pMac is NULL",__func__);
17331 VOS_ASSERT(0);
17332 return ;
17333 }
17334
Abhishek Singh0644e482014-10-06 18:38:23 +053017335 if (wlan_cfgGetInt(pMac,
17336 WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC, &val) !=
17337 eSIR_SUCCESS)
17338 {
17339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17340 "Unable to get WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC");
17341 val = 0;
17342 }
17343
Jeff Johnson295189b2012-06-20 16:38:30 -070017344 /* walk through all STA entries and find out TX packet count */
17345 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
17346 {
Abhishek Singh0644e482014-10-06 18:38:23 +053017347 tANI_U32 currentOperChan = pWDA->wdaStaInfo[curSta].currentOperChan;
Gopichand Nakkala976e3252013-01-03 15:45:56 -080017348#ifdef WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053017349 // We can only do BA on "hard" STAs.
17350 if (!(IS_HWSTA_IDX(curSta)))
17351 {
17352 continue;
17353 }
Gopichand Nakkala976e3252013-01-03 15:45:56 -080017354#endif //WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053017355 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
17356 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070017357 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017358 tANI_U32 txPktCount = 0 ;
17359 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017360 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070017361 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
17362 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070017363 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
17364 curSta, tid, &txPktCount)))
17365 {
17366#if 0
17367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
17368 "************* %d:%d, %d ",curSta, txPktCount,
17369 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
17370#endif
Abhishek Singh0644e482014-10-06 18:38:23 +053017371 if(val && ( (currentOperChan >= SIR_11B_CHANNEL_BEGIN) &&
17372 (currentOperChan <= SIR_11B_CHANNEL_END)))
17373 {
17374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17375 "%s: BTC disabled aggregation - dont start "
17376 "TX ADDBA req",__func__);
17377 }
17378 else if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070017379 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Abhishek Singh424ae432014-12-05 11:54:54 +053017380 && (((eSYSTEM_STA_IN_IBSS_ROLE ==
17381 pWDA->wdaGlobalSystemRole) && txPktCount )
17382 || (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
17383 curSta, tid))))
Jeff Johnson295189b2012-06-20 16:38:30 -070017384 {
17385 /* get prepare for sending message to HAL */
17386 //baCandidate[baCandidateCount].staIdx = curSta ;
17387 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
17388 newBaCandidate = WDA_ENABLE_BA ;
17389 }
17390 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
17391 }
17392 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017393 /* fill the entry for all the sta with given TID's */
17394 if(WDA_ENABLE_BA == newBaCandidate)
17395 {
17396 /* move to next BA candidate */
17397 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
17398 size += sizeof(WDI_TriggerBAReqCandidateType) ;
17399 baCandidateCount++ ;
17400 newBaCandidate = WDA_DISABLE_BA ;
17401 }
17402 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017403 /* prepare and send message to hal */
17404 if( 0 < baCandidateCount)
17405 {
17406 WDI_Status status = WDI_STATUS_SUCCESS ;
17407 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
17408 tWDA_ReqParams *pWdaParams =
17409 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017410 if(NULL == pWdaParams)
17411 {
17412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017413 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017414 VOS_ASSERT(0) ;
17415 return;
17416 }
17417 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
17418 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
17419 if(NULL == wdiTriggerBaReq)
17420 {
17421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017422 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017423 VOS_ASSERT(0) ;
17424 vos_mem_free(pWdaParams);
17425 return;
17426 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017427 do
17428 {
17429 WDI_TriggerBAReqinfoType *triggerBaInfo =
17430 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
17431 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
17432 /* TEMP_FIX: Need to see if WDI need check for assoc session for
17433 * for each request */
17434 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
17435 triggerBaInfo->ucBASessionID = 0;
17436 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
17437 } while(0) ;
17438 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
17439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017440 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017441 pWdaParams->pWdaContext = pWDA;
17442 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
17443 pWdaParams->wdaMsgParam = NULL;
Abhishek Singhac9abe62016-02-05 18:07:41 +053017444 status = WDI_TriggerBAReq(wdiTriggerBaReq, size,
Jeff Johnson295189b2012-06-20 16:38:30 -070017445 WDA_TriggerBaReqCallback, pWdaParams) ;
17446 if(IS_WDI_STATUS_FAILURE(status))
17447 {
17448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17449 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
17450 vos_mem_free(pWdaParams->wdaMsgParam) ;
17451 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17452 vos_mem_free(pWdaParams) ;
17453 }
17454 }
17455 else
17456 {
17457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
17458 "There is no TID for initiating BA");
17459 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017460 if( VOS_STATUS_SUCCESS !=
17461 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
17462 {
17463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17464 "BA Activity Timer Stop Failed ");
17465 return ;
17466 }
17467 if( VOS_STATUS_SUCCESS !=
17468 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
17469 {
17470 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17471 "BA Activity Timer Start Failed ");
17472 return;
17473 }
17474 return ;
17475}
Jeff Johnson295189b2012-06-20 16:38:30 -070017476/*
17477 * WDA common routine to create timer used by WDA.
17478 */
17479static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
17480{
Jeff Johnson295189b2012-06-20 16:38:30 -070017481 VOS_STATUS status = VOS_STATUS_SUCCESS ;
17482 tANI_U32 val = 0 ;
17483 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17484
17485 if(NULL == pMac)
17486 {
17487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017488 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017489 VOS_ASSERT(0);
17490 return VOS_STATUS_E_FAILURE;
17491 }
17492 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
17493 != eSIR_SUCCESS)
17494 {
17495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17496 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
17497 return VOS_STATUS_E_FAILURE;
17498 }
17499 val = SYS_MS_TO_TICKS(val) ;
17500
17501 /* BA activity check timer */
17502 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
17503 "BA Activity Check timer", WDA_TimerHandler,
17504 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
17505 if(status != TX_SUCCESS)
17506 {
17507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17508 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080017509 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017510 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017511 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017512 /* Tx Complete Timeout timer */
17513 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
17514 "Tx Complete Check timer", WDA_TimerHandler,
17515 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017516 if(status != TX_SUCCESS)
17517 {
17518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17519 "Unable to create Tx Complete Timeout timer");
17520 /* Destroy timer of BA activity check timer */
17521 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
17522 if(status != TX_SUCCESS)
17523 {
17524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17525 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080017526 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017527 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080017528 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017529 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080017530
17531 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
17532
17533 /* Traffic Stats timer */
17534 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
17535 "Traffic Stats timer", WDA_TimerHandler,
17536 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
17537 if(status != TX_SUCCESS)
17538 {
17539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17540 "Unable to create traffic stats timer");
17541 /* Destroy timer of BA activity check timer */
17542 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
17543 if(status != TX_SUCCESS)
17544 {
17545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17546 "Unable to Destroy BA activity timer");
17547 }
17548 /* Destroy timer of tx complete timer */
17549 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
17550 if(status != TX_SUCCESS)
17551 {
17552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17553 "Unable to Tx complete timer");
17554 }
17555 return VOS_STATUS_E_FAILURE ;
17556 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080017557 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017558}
Jeff Johnson295189b2012-06-20 16:38:30 -070017559/*
17560 * WDA common routine to destroy timer used by WDA.
17561 */
17562static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
17563{
17564 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017565 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
17566 if(status != TX_SUCCESS)
17567 {
17568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17569 "Unable to Destroy Tx Complete Timeout timer");
17570 return eSIR_FAILURE ;
17571 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017572 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
17573 if(status != TX_SUCCESS)
17574 {
17575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17576 "Unable to Destroy BA activity timer");
17577 return eSIR_FAILURE ;
17578 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080017579 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
17580 if(status != TX_SUCCESS)
17581 {
17582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17583 "Unable to Destroy traffic stats timer");
17584 return eSIR_FAILURE ;
17585 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017586 return eSIR_SUCCESS ;
17587}
Jeff Johnson295189b2012-06-20 16:38:30 -070017588/*
17589 * WDA timer handler.
17590 */
17591void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
17592{
17593 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
17594 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017595 /*
17596 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
17597 */
17598 wdaMsg.type = timerInfo ;
17599 wdaMsg.bodyptr = NULL;
17600 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070017601 /* post the message.. */
17602 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
17603 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
17604 {
17605 vosStatus = VOS_STATUS_E_BADMSG;
17606 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017607}
Jeff Johnson295189b2012-06-20 16:38:30 -070017608/*
17609 * WDA Tx Complete timeout Indication.
17610 */
17611void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
17612{
17613 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053017614 tpSirTxBdStatus txBdStatus = {0};
17615
Jeff Johnson295189b2012-06-20 16:38:30 -070017616 if( pWDA->pAckTxCbFunc )
17617 {
17618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017619 "TxComplete timer expired");
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053017620 /*Indicate failure*/
17621 pWDA->pAckTxCbFunc( pMac, &txBdStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070017622 pWDA->pAckTxCbFunc = NULL;
17623 }
17624 else
17625 {
17626 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017627 "There is no request pending for TxComplete and wait timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070017628 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017629}
Jeff Johnson295189b2012-06-20 16:38:30 -070017630/*
17631 * WDA Set REG Domain to VOS NV
17632 */
Abhishek Singha306a442013-11-07 18:39:01 +053017633eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId,
17634 tAniBool sendRegHint)
Jeff Johnson295189b2012-06-20 16:38:30 -070017635{
Abhishek Singha306a442013-11-07 18:39:01 +053017636 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId, sendRegHint))
Jeff Johnson295189b2012-06-20 16:38:30 -070017637 {
17638 return eHAL_STATUS_INVALID_PARAMETER;
17639 }
17640 return eHAL_STATUS_SUCCESS;
17641}
Jeff Johnson295189b2012-06-20 16:38:30 -070017642
Jeff Johnson295189b2012-06-20 16:38:30 -070017643#ifdef FEATURE_WLAN_SCAN_PNO
17644/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017645 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070017646 *
17647 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070017648void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070017649{
17650 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053017651 tSirPNOScanReq *pPNOScanReqParams;
17652
Jeff Johnson295189b2012-06-20 16:38:30 -070017653 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053017654 "<------ %s, wdiStatus: %d",__func__, status);
Yue Ma7f44bbe2013-04-12 11:47:39 -070017655 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070017656 {
17657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017658 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017659 VOS_ASSERT(0) ;
17660 return ;
17661 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017662
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053017663 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
17664 if(pPNOScanReqParams->statusCallback)
17665 {
17666 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
17667 (status == WDI_STATUS_SUCCESS) ?
17668 VOS_STATUS_SUCCESS : VOS_STATUS_E_FAILURE);
17669 }
17670
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053017671 if (pPNOScanReqParams->enable == 1)
17672 {
17673 if (pPNOScanReqParams->aNetworks)
17674 vos_mem_free(pPNOScanReqParams->aNetworks);
17675 if (pPNOScanReqParams->p24GProbeTemplate)
17676 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
17677 if (pPNOScanReqParams->p5GProbeTemplate)
17678 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
17679 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070017680 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17681 vos_mem_free(pWdaParams->wdaMsgParam);
17682 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070017683
17684 return ;
17685}
Jeff Johnson295189b2012-06-20 16:38:30 -070017686/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017687 * FUNCTION: WDA_PNOScanReqCallback
17688 * Free memory.
17689 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
17690 */
17691void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070017692{
Yue Ma7f44bbe2013-04-12 11:47:39 -070017693 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053017694 tSirPNOScanReq *pPNOScanReqParams;
Yue Ma7f44bbe2013-04-12 11:47:39 -070017695
17696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17697 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
17698
17699 if(NULL == pWdaParams)
17700 {
17701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17702 "%s: pWdaParams received NULL", __func__);
17703 VOS_ASSERT(0);
17704 return;
17705 }
17706
17707 if(IS_WDI_STATUS_FAILURE(wdiStatus))
17708 {
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053017709 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
17710 if(pPNOScanReqParams->statusCallback)
17711 {
17712 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
17713 VOS_STATUS_E_FAILURE);
17714 }
17715
Hanumantha Reddy Pothula06e87b22015-03-02 18:02:23 +053017716 if (pPNOScanReqParams->enable == 1)
17717 {
17718 if (pPNOScanReqParams->aNetworks)
17719 vos_mem_free(pPNOScanReqParams->aNetworks);
17720 if (pPNOScanReqParams->p24GProbeTemplate)
17721 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
17722 if (pPNOScanReqParams->p5GProbeTemplate)
17723 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
17724 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070017725 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17726 vos_mem_free(pWdaParams->wdaMsgParam);
17727 vos_mem_free(pWdaParams);
17728 }
17729
17730 return;
17731}
17732/*
17733 * FUNCTION: WDA_UpdateScanParamsRespCallback
17734 *
17735 */
17736void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
17737{
17738 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070017739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017740 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070017741 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070017742 {
17743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017744 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017745 VOS_ASSERT(0) ;
17746 return ;
17747 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070017748
17749 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17750 vos_mem_free(pWdaParams->wdaMsgParam);
17751 vos_mem_free(pWdaParams);
17752
Jeff Johnson295189b2012-06-20 16:38:30 -070017753 return ;
17754}
Jeff Johnson295189b2012-06-20 16:38:30 -070017755/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017756 * FUNCTION: WDA_UpdateScanParamsReqCallback
17757 * Free memory.
17758 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
17759 */
17760void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
17761{
17762 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17763
17764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17765 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
17766
17767 if(NULL == pWdaParams)
17768 {
17769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17770 "%s: pWdaParams received NULL", __func__);
17771 VOS_ASSERT(0);
17772 return;
17773 }
17774
17775 if(IS_WDI_STATUS_FAILURE(wdiStatus))
17776 {
17777 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17778 vos_mem_free(pWdaParams->wdaMsgParam);
17779 vos_mem_free(pWdaParams);
17780 }
17781
17782 return;
17783}
17784/*
Jeff Johnson295189b2012-06-20 16:38:30 -070017785 * FUNCTION: WDA_ProcessSetPreferredNetworkList
17786 * Request to WDI to set Preferred Network List.Offload
17787 */
17788VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
17789 tSirPNOScanReq *pPNOScanReqParams)
17790{
Jeff Johnson43971f52012-07-17 12:26:56 -070017791 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070017792 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
17793 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
17794 tWDA_ReqParams *pWdaParams ;
17795 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070017796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017797 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017798 if(NULL == pwdiPNOScanReqInfo)
17799 {
17800 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017801 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017802 VOS_ASSERT(0);
17803 return VOS_STATUS_E_NOMEM;
17804 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017805 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17806 if(NULL == pWdaParams)
17807 {
17808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017809 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017810 VOS_ASSERT(0);
17811 vos_mem_free(pwdiPNOScanReqInfo);
17812 return VOS_STATUS_E_NOMEM;
17813 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017814 //
17815 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
17816 //
17817 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
17818 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070017819 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
17820 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
17821 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017822 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
17823 {
17824 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
17825 &pPNOScanReqParams->aNetworks[i],
17826 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
17827 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017828 /*Scan timer intervals*/
17829 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
17830 &pPNOScanReqParams->scanTimers,
17831 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070017832 /*Probe template for 2.4GHz band*/
17833 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
17834 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
17835 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070017836 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
17837 pPNOScanReqParams->p24GProbeTemplate,
17838 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070017839 /*Probe template for 5GHz band*/
17840 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
17841 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
17842 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070017843 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
17844 pPNOScanReqParams->p5GProbeTemplate,
17845 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070017846 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
17847 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070017848
Jeff Johnson295189b2012-06-20 16:38:30 -070017849 /* Store Params pass it to WDI */
17850 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
17851 pWdaParams->pWdaContext = pWDA;
17852 /* Store param pointer as passed in by caller */
17853 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070017854 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070017855 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070017856 if(IS_WDI_STATUS_FAILURE(status))
17857 {
17858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17859 "Failure in Set PNO REQ WDI API, free all the memory " );
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053017860 if(pPNOScanReqParams->statusCallback)
17861 {
17862 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
17863 VOS_STATUS_E_FAILURE);
17864 }
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053017865 if (pPNOScanReqParams->enable == 1)
17866 {
17867 if (pPNOScanReqParams->aNetworks)
17868 vos_mem_free(pPNOScanReqParams->aNetworks);
17869 if (pPNOScanReqParams->p24GProbeTemplate)
17870 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
17871 if (pPNOScanReqParams->p5GProbeTemplate)
17872 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
17873 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017874 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
17875 vos_mem_free(pWdaParams->wdaMsgParam);
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053017876
Jeff Johnson295189b2012-06-20 16:38:30 -070017877 pWdaParams->wdaWdiApiMsgParam = NULL;
17878 pWdaParams->wdaMsgParam = NULL;
17879 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017880 return CONVERT_WDI2VOS_STATUS(status) ;
17881}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017882
17883#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
17884
17885void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
17886{
17887 /*Convert the CSR Auth types to WDI Auth types */
17888 switch (csrAuthType)
17889 {
17890 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
17891 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
17892 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080017893#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017894 case eCSR_AUTH_TYPE_CCKM_WPA:
17895 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
17896 break;
17897#endif
17898 case eCSR_AUTH_TYPE_WPA:
17899 *AuthType = eWDA_AUTH_TYPE_WPA;
17900 break;
17901 case eCSR_AUTH_TYPE_WPA_PSK:
17902 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
17903 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080017904#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017905 case eCSR_AUTH_TYPE_CCKM_RSN:
17906 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
17907 break;
17908#endif
17909 case eCSR_AUTH_TYPE_RSN:
17910 *AuthType = eWDA_AUTH_TYPE_RSN;
17911 break;
17912 case eCSR_AUTH_TYPE_RSN_PSK:
17913 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
17914 break;
17915#if defined WLAN_FEATURE_VOWIFI_11R
17916 case eCSR_AUTH_TYPE_FT_RSN:
17917 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
17918 break;
17919 case eCSR_AUTH_TYPE_FT_RSN_PSK:
17920 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
17921 break;
17922#endif
17923#ifdef FEATURE_WLAN_WAPI
17924 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
17925 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
17926 break;
17927 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
17928 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
17929 break;
17930#endif /* FEATURE_WLAN_WAPI */
17931 case eCSR_AUTH_TYPE_SHARED_KEY:
17932 case eCSR_AUTH_TYPE_AUTOSWITCH:
17933 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
17934 break;
Kanchanapally, Vidyullatha3355dd32015-06-09 14:56:56 +053017935#ifdef WLAN_FEATURE_11W
17936 case eCSR_AUTH_TYPE_RSN_PSK_SHA256:
17937 *AuthType = eWDA_AUTH_TYPE_RSN_PSK_SHA256;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017938 break;
Kanchanapally, Vidyullatha3355dd32015-06-09 14:56:56 +053017939 case eCSR_AUTH_TYPE_RSN_8021X_SHA256:
17940 *AuthType = eWDA_AUTH_TYPE_RSN_8021X_SHA256;
17941 break;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017942#endif
17943 default:
Deepthi Gowribfd17132014-11-14 17:59:04 +053017944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017945 "%s: Unknown Auth Type", __func__);
17946 break;
17947 }
17948}
17949void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
17950{
17951 switch (csrEncrType)
17952 {
17953 case eCSR_ENCRYPT_TYPE_NONE:
17954 *EncrType = WDI_ED_NONE;
17955 break;
17956 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
17957 case eCSR_ENCRYPT_TYPE_WEP40:
17958 *EncrType = WDI_ED_WEP40;
17959 break;
17960 case eCSR_ENCRYPT_TYPE_WEP104:
17961 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
17962 *EncrType = WDI_ED_WEP104;
17963 break;
17964 case eCSR_ENCRYPT_TYPE_TKIP:
17965 *EncrType = WDI_ED_TKIP;
17966 break;
17967 case eCSR_ENCRYPT_TYPE_AES:
17968 *EncrType = WDI_ED_CCMP;
17969 break;
17970#ifdef WLAN_FEATURE_11W
17971 case eCSR_ENCRYPT_TYPE_AES_CMAC:
17972 *EncrType = WDI_ED_AES_128_CMAC;
17973 break;
17974#endif
17975#ifdef FEATURE_WLAN_WAPI
17976 case eCSR_ENCRYPT_TYPE_WPI:
17977 *EncrType = WDI_ED_WPI;
17978 break;
17979#endif
17980 case eCSR_ENCRYPT_TYPE_ANY:
17981 *EncrType = WDI_ED_ANY;
17982 break;
17983
17984 default:
17985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17986 "%s: Unknown Encryption Type", __func__);
17987 break;
17988 }
17989}
17990
17991/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017992 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017993 * Request to WDI to set Roam Offload Scan
17994 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017995VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017996 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
17997{
17998 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017999 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
18000 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018001 tWDA_ReqParams *pWdaParams ;
18002 v_U8_t csrAuthType;
18003 WDI_RoamNetworkType *pwdiRoamNetworkType;
18004 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
18005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18006 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018007 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018008 {
18009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18010 "%s: VOS MEM Alloc Failure", __func__);
18011 VOS_ASSERT(0);
18012 return VOS_STATUS_E_NOMEM;
18013 }
18014 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18015 if (NULL == pWdaParams)
18016 {
18017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18018 "%s: VOS MEM Alloc Failure", __func__);
18019 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018020 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018021 return VOS_STATUS_E_NOMEM;
18022 }
18023
18024 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018025 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018026 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018027 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
18028 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018029 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
18030 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
18031 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
18032 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
18033 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
18034 sizeof(pwdiRoamNetworkType->currAPbssid));
18035 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
18036 csrAuthType);
18037 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
18038 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
18039 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
18040 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
18041 pwdiRoamOffloadScanInfo->LookupThreshold =
18042 pRoamOffloadScanReqParams->LookupThreshold ;
Varun Reddy Yeturu6c5e25c2014-01-09 21:55:37 -080018043 pwdiRoamOffloadScanInfo->RxSensitivityThreshold =
18044 pRoamOffloadScanReqParams->RxSensitivityThreshold;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018045 pwdiRoamOffloadScanInfo->RoamRssiDiff =
18046 pRoamOffloadScanReqParams->RoamRssiDiff ;
Sameer Thalappil4ae66ec2013-11-05 14:17:35 -080018047 pwdiRoamOffloadScanInfo->MAWCEnabled =
18048 pRoamOffloadScanReqParams->MAWCEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018049 pwdiRoamOffloadScanInfo->Command =
18050 pRoamOffloadScanReqParams->Command ;
18051 pwdiRoamOffloadScanInfo->StartScanReason =
18052 pRoamOffloadScanReqParams->StartScanReason ;
18053 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
18054 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
18055 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
18056 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
18057 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
18058 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
18059 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
18060 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
18061 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
18062 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080018063 pwdiRoamOffloadScanInfo->IsESEEnabled =
18064 pRoamOffloadScanReqParams->IsESEEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018065 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
18066 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
18067 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
18068 pwdiRoamNetworkType->ssId.ucLength =
18069 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
18070 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
18071 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
18072 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
18073 pwdiRoamNetworkType->ChannelCount =
18074 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
18075 pwdiRoamOffloadScanInfo->ChannelCacheType =
18076 pRoamOffloadScanReqParams->ChannelCacheType;
18077 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
18078 pRoamOffloadScanReqParams->ValidChannelList,
18079 pRoamOffloadScanReqParams->ValidChannelCount);
18080 pwdiRoamOffloadScanInfo->ValidChannelCount =
18081 pRoamOffloadScanReqParams->ValidChannelCount;
18082 pwdiRoamOffloadScanInfo->us24GProbeSize =
18083 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
18084 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
18085 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
18086 pRoamOffloadScanReqParams->p24GProbeTemplate,
18087 pwdiRoamOffloadScanInfo->us24GProbeSize);
18088 pwdiRoamOffloadScanInfo->us5GProbeSize =
18089 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
18090 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
18091 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
18092 pRoamOffloadScanReqParams->p5GProbeTemplate,
18093 pwdiRoamOffloadScanInfo->us5GProbeSize);
18094 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
18095 pRoamOffloadScanReqParams->MDID.mdiePresent;
18096 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
18097 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018098 pwdiRoamOffloadScanInfo->nProbes =
18099 pRoamOffloadScanReqParams->nProbes;
18100 pwdiRoamOffloadScanInfo->HomeAwayTime =
18101 pRoamOffloadScanReqParams->HomeAwayTime;
18102 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018103 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018104 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018105 pWdaParams->pWdaContext = pWDA;
18106 /* Store param pointer as passed in by caller */
18107 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018108 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018109 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
18110 if(IS_WDI_STATUS_FAILURE(status))
18111 {
18112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18113 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
18114 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
18115 vos_mem_free(pWdaParams->wdaMsgParam);
18116 pWdaParams->wdaWdiApiMsgParam = NULL;
18117 pWdaParams->wdaMsgParam = NULL;
18118 }
18119 return CONVERT_WDI2VOS_STATUS(status) ;
18120}
18121#endif
18122
Jeff Johnson295189b2012-06-20 16:38:30 -070018123/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018124 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070018125 *
18126 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070018127void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070018128{
18129 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18130
18131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018132 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018133
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053018134 if(NULL == pWdaParams)
18135 {
18136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070018137 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053018138 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070018139 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053018140 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070018141
Jeff Johnson295189b2012-06-20 16:38:30 -070018142 vos_mem_free(pWdaParams->wdaMsgParam) ;
18143 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18144 vos_mem_free(pWdaParams) ;
18145
18146 return ;
18147}
18148/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018149 * FUNCTION: WDA_RssiFilterReqCallback
18150 * Free memory.
18151 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
18152 */
18153void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
18154{
18155 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18156
18157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18158 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
18159
18160 if(NULL == pWdaParams)
18161 {
18162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18163 "%s: pWdaParams received NULL", __func__);
18164 VOS_ASSERT(0);
18165 return;
18166 }
18167
18168 if(IS_WDI_STATUS_FAILURE(wdiStatus))
18169 {
18170 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18171 vos_mem_free(pWdaParams->wdaMsgParam);
18172 vos_mem_free(pWdaParams);
18173 }
18174
18175 return;
18176}
18177/*
Hanumantha Reddy Pothula1e687da2015-03-31 13:44:31 +053018178 * FUNCTION: WDA_ProcessSetRssiFilterReq
Jeff Johnson295189b2012-06-20 16:38:30 -070018179 * Request to WDI to set Preferred Network List.Offload
18180 */
18181VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
18182 tSirSetRSSIFilterReq* pRssiFilterParams)
18183{
Jeff Johnson43971f52012-07-17 12:26:56 -070018184 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070018185 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
18186 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
18187 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018189 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018190 if(NULL == pwdiSetRssiFilterReqInfo)
18191 {
18192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018193 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018194 VOS_ASSERT(0);
18195 return VOS_STATUS_E_NOMEM;
18196 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018197 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18198 if(NULL == pWdaParams)
18199 {
18200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018201 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018202 VOS_ASSERT(0);
18203 vos_mem_free(pwdiSetRssiFilterReqInfo);
18204 return VOS_STATUS_E_NOMEM;
18205 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018206 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070018207 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
18208 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070018209
Jeff Johnson295189b2012-06-20 16:38:30 -070018210 /* Store Params pass it to WDI */
18211 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
18212 pWdaParams->pWdaContext = pWDA;
18213 /* Store param pointer as passed in by caller */
18214 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070018215 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070018216 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070018217 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070018218 if(IS_WDI_STATUS_FAILURE(status))
18219 {
18220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18221 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
18222 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
18223 vos_mem_free(pWdaParams->wdaMsgParam);
18224 pWdaParams->wdaWdiApiMsgParam = NULL;
18225 pWdaParams->wdaMsgParam = NULL;
18226 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018227 return CONVERT_WDI2VOS_STATUS(status) ;
18228}
18229
Jeff Johnson295189b2012-06-20 16:38:30 -070018230/*
18231 * FUNCTION: WDA_ProcessUpdateScanParams
18232 * Request to WDI to update Scan Parameters
18233 */
18234VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
18235 tSirUpdateScanParams *pUpdateScanParams)
18236{
Jeff Johnson43971f52012-07-17 12:26:56 -070018237 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070018238 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
18239 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
18240 sizeof(WDI_UpdateScanParamsInfoType)) ;
18241 tWDA_ReqParams *pWdaParams ;
18242 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070018243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018244 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018245 if(NULL == wdiUpdateScanParamsInfoType)
18246 {
18247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018248 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018249 VOS_ASSERT(0);
18250 return VOS_STATUS_E_NOMEM;
18251 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018252 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18253 if ( NULL == pWdaParams )
18254 {
18255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018256 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018257 VOS_ASSERT(0);
18258 vos_mem_free(wdiUpdateScanParamsInfoType);
18259 return VOS_STATUS_E_NOMEM;
18260 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018261 //
18262 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
18263 //
Jeff Johnson295189b2012-06-20 16:38:30 -070018264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18265 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
18266 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
18267 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
Jeff Johnson9a9ed0d2013-11-26 13:36:52 -080018268 "sir struct %zu wdi struct %zu",
Jeff Johnson295189b2012-06-20 16:38:30 -070018269 pUpdateScanParams->b11dEnabled,
18270 pUpdateScanParams->b11dResolved,
18271 pUpdateScanParams->ucChannelCount,
18272 pUpdateScanParams->usPassiveMinChTime,
18273 pUpdateScanParams->usPassiveMaxChTime,
18274 pUpdateScanParams->usActiveMinChTime,
18275 pUpdateScanParams->usActiveMaxChTime,
18276 sizeof(tSirUpdateScanParams),
18277 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
18278
Jeff Johnson295189b2012-06-20 16:38:30 -070018279 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
18280 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070018281 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
18282 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070018283 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
18284 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070018285 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
18286 pUpdateScanParams->usActiveMaxChTime;
18287 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
18288 pUpdateScanParams->usActiveMinChTime;
18289 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
18290 pUpdateScanParams->usPassiveMaxChTime;
18291 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
18292 pUpdateScanParams->usPassiveMinChTime;
18293
Jeff Johnson295189b2012-06-20 16:38:30 -070018294 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053018295 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
18296 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070018297
Jeff Johnson295189b2012-06-20 16:38:30 -070018298 for ( i = 0; i <
18299 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
18300 i++)
18301 {
18302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18303 "Update Scan Parameters channel: %d",
18304 pUpdateScanParams->aChannels[i]);
18305
18306 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
18307 pUpdateScanParams->aChannels[i];
18308 }
18309
Yue Ma7f44bbe2013-04-12 11:47:39 -070018310 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
18311 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070018312
Jeff Johnson295189b2012-06-20 16:38:30 -070018313 /* Store Params pass it to WDI */
18314 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
18315 pWdaParams->pWdaContext = pWDA;
18316 /* Store param pointer as passed in by caller */
18317 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070018318
Jeff Johnson295189b2012-06-20 16:38:30 -070018319
18320
18321 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070018322 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070018323 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070018324 if(IS_WDI_STATUS_FAILURE(status))
18325 {
18326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18327 "Failure in Update Scan Params EQ WDI API, free all the memory " );
18328 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
18329 vos_mem_free(pWdaParams->wdaMsgParam);
18330 vos_mem_free(pWdaParams);
18331 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018332 return CONVERT_WDI2VOS_STATUS(status) ;
18333}
18334#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018335
18336#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
18337/*
18338 * FUNCTION: WDA_RoamOffloadScanReqCallback
18339 *
18340 */
18341void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
18342{
18343 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070018344 vos_msg_t vosMsg;
18345 wpt_uint8 reason = 0;
18346
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070018347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018348 "<------ %s " ,__func__);
18349 if (NULL == pWdaParams)
18350 {
18351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18352 "%s: pWdaParams received NULL", __func__);
18353 VOS_ASSERT(0) ;
18354 return ;
18355 }
18356 if ( pWdaParams != NULL )
18357 {
18358 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
18359 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070018360 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018361 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18362 }
18363 if ( pWdaParams->wdaMsgParam != NULL)
18364 {
18365 vos_mem_free(pWdaParams->wdaMsgParam);
18366 }
18367
18368 vos_mem_free(pWdaParams) ;
18369 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070018370 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
18371 vosMsg.bodyptr = NULL;
18372 if (WDI_STATUS_SUCCESS != status)
18373 {
18374 reason = 0;
18375 }
18376 vosMsg.bodyval = reason;
18377 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
18378 {
18379 /* free the mem and return */
18380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsone384c822013-10-30 12:21:17 -070018381 "%s: Failed to post the rsp to UMAC", __func__);
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070018382 }
18383
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018384 return ;
18385}
18386#endif
18387
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080018388/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018389 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080018390 *
18391 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070018392void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080018393{
18394 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18395
18396 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18397 "<------ %s " ,__func__);
18398
18399 if(NULL == pWdaParams)
18400 {
18401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18402 "%s: pWdaParams received NULL", __func__);
18403 VOS_ASSERT(0);
18404 return;
18405 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070018406
18407 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18408 vos_mem_free(pWdaParams->wdaMsgParam);
18409 vos_mem_free(pWdaParams);
18410
18411 return;
18412}
18413/*
18414 * FUNCTION: WDA_SetPowerParamsReqCallback
18415 * Free memory.
18416 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
18417 */
18418void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
18419{
18420 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18421
18422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18423 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
18424
18425 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080018426 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070018427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18428 "%s: pWdaParams received NULL", __func__);
18429 VOS_ASSERT(0);
18430 return;
18431 }
18432
18433 if(IS_WDI_STATUS_FAILURE(wdiStatus))
18434 {
18435 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18436 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080018437 vos_mem_free(pWdaParams);
18438 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070018439
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080018440 return;
18441}
18442
Jeff Johnson295189b2012-06-20 16:38:30 -070018443#ifdef WLAN_FEATURE_PACKET_FILTERING
18444/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018445 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070018446 *
18447 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070018448void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070018449 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
18450 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070018451{
18452 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070018453 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018454 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018455 if(NULL == pWdaParams)
18456 {
18457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018458 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018459 VOS_ASSERT(0) ;
18460 return ;
18461 }
18462
18463 vos_mem_free(pWdaParams->wdaMsgParam) ;
18464 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18465 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018466 //print a msg, nothing else to do
18467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070018468 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070018469 return ;
18470}
Jeff Johnson295189b2012-06-20 16:38:30 -070018471/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018472 * FUNCTION: WDA_8023MulticastListReqCallback
18473 * Free memory.
18474 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
18475 */
18476void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
18477{
18478 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18479
18480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18481 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
18482
18483 if(NULL == pWdaParams)
18484 {
18485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18486 "%s: pWdaParams received NULL", __func__);
18487 VOS_ASSERT(0);
18488 return;
18489 }
18490
18491 if(IS_WDI_STATUS_FAILURE(wdiStatus))
18492 {
18493 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18494 vos_mem_free(pWdaParams->wdaMsgParam);
18495 vos_mem_free(pWdaParams);
18496 }
18497
18498 return;
18499}
18500/*
Jeff Johnson295189b2012-06-20 16:38:30 -070018501 * FUNCTION: WDA_Process8023MulticastListReq
18502 * Request to WDI to add 8023 Multicast List
18503 */
18504VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
18505 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
18506{
Jeff Johnson43971f52012-07-17 12:26:56 -070018507 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070018508 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
18509 tWDA_ReqParams *pWdaParams ;
18510 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070018511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018512 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018513 pwdiFltPktSetMcListReqParamsType =
18514 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
18515 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
18516 ) ;
18517 if(NULL == pwdiFltPktSetMcListReqParamsType)
18518 {
18519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018520 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018521 return VOS_STATUS_E_NOMEM;
18522 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018523 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18524 if(NULL == pWdaParams)
18525 {
18526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018527 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018528 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
18529 return VOS_STATUS_E_NOMEM;
18530 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070018531
Jeff Johnson295189b2012-06-20 16:38:30 -070018532 //
18533 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
18534 //
18535 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070018536 pRcvFltMcAddrList->ulMulticastAddrCnt;
18537
18538 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
18539 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
18540 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
18541 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
18542
Jeff Johnson295189b2012-06-20 16:38:30 -070018543 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
18544 {
18545 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
18546 &(pRcvFltMcAddrList->multicastAddr[i]),
18547 sizeof(tSirMacAddr));
18548 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070018549 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
18550 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070018551
Jeff Johnson295189b2012-06-20 16:38:30 -070018552 /* Store Params pass it to WDI */
18553 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
18554 pWdaParams->pWdaContext = pWDA;
18555 /* Store param pointer as passed in by caller */
18556 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070018557 status = WDI_8023MulticastListReq(
18558 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070018559 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070018560 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070018561 if(IS_WDI_STATUS_FAILURE(status))
18562 {
18563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18564 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
18565 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
18566 vos_mem_free(pWdaParams->wdaMsgParam);
18567 vos_mem_free(pWdaParams);
18568 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018569 return CONVERT_WDI2VOS_STATUS(status) ;
18570}
Jeff Johnson295189b2012-06-20 16:38:30 -070018571/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018572 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070018573 *
18574 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018575void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070018576 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
18577 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070018578{
18579 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070018580 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018581 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018582 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070018583 if(NULL == pWdaParams)
18584 {
18585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018586 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018587 VOS_ASSERT(0) ;
18588 return ;
18589 }
18590
18591 vos_mem_free(pWdaParams->wdaMsgParam) ;
18592 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18593 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018594 //print a msg, nothing else to do
18595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018596 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070018597 return ;
18598}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018599
18600/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018601 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
18602 * Free memory.
18603 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018604 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070018605void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018606 void* pUserData)
18607{
18608 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18609
18610 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18611 "<------ %s, wdiStatus: %d",
18612 __func__, wdiStatus);
18613
18614 if (NULL == pWdaParams)
18615 {
18616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18617 "%s: Invalid pWdaParams pointer", __func__);
18618 VOS_ASSERT(0);
18619 return;
18620 }
18621
18622 if (IS_WDI_STATUS_FAILURE(wdiStatus))
18623 {
18624 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18625 vos_mem_free(pWdaParams->wdaMsgParam);
18626 vos_mem_free(pWdaParams);
18627 }
18628
18629 return;
18630}
18631
Jeff Johnson295189b2012-06-20 16:38:30 -070018632/*
18633 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
18634 * Request to WDI to set Receive Filters
18635 */
18636VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
18637 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
18638{
Jeff Johnson43971f52012-07-17 12:26:56 -070018639 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070018640 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
18641 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
18642 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
18643 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
18644 tWDA_ReqParams *pWdaParams ;
18645 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070018646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018647 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018648 if(NULL == pwdiSetRcvPktFilterReqParamsType)
18649 {
18650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018651 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018652 VOS_ASSERT(0);
18653 return VOS_STATUS_E_NOMEM;
18654 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018655 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18656 if(NULL == pWdaParams)
18657 {
18658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018659 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018660 VOS_ASSERT(0);
18661 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
18662 return VOS_STATUS_E_NOMEM;
18663 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018664 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
18665 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
18666 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
18667 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070018668 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
18669 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
18670
18671 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
18672 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070018673
18674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18675 "FID %d FT %d NParams %d CT %d",
18676 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
18677 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
18678 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
18679 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070018680 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
18681 {
18682 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
18683 &pRcvPktFilterCfg->paramsData[i],
18684 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070018685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080018686 "Proto %d Comp Flag %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070018687 pwdiSetRcvPktFilterReqParamsType->
18688 wdiPktFilterCfg.paramsData[i].protocolLayer,
18689 pwdiSetRcvPktFilterReqParamsType->
18690 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070018691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080018692 "Data Offset %d Data Len %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070018693 pwdiSetRcvPktFilterReqParamsType->
18694 wdiPktFilterCfg.paramsData[i].dataOffset,
18695 pwdiSetRcvPktFilterReqParamsType->
18696 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070018697 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080018698 "CData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070018699 pwdiSetRcvPktFilterReqParamsType->
18700 wdiPktFilterCfg.paramsData[i].compareData[0],
18701 pwdiSetRcvPktFilterReqParamsType->
18702 wdiPktFilterCfg.paramsData[i].compareData[1],
18703 pwdiSetRcvPktFilterReqParamsType->
18704 wdiPktFilterCfg.paramsData[i].compareData[2],
18705 pwdiSetRcvPktFilterReqParamsType->
18706 wdiPktFilterCfg.paramsData[i].compareData[3],
18707 pwdiSetRcvPktFilterReqParamsType->
18708 wdiPktFilterCfg.paramsData[i].compareData[4],
18709 pwdiSetRcvPktFilterReqParamsType->
18710 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070018711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080018712 "MData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070018713 pwdiSetRcvPktFilterReqParamsType->
18714 wdiPktFilterCfg.paramsData[i].dataMask[0],
18715 pwdiSetRcvPktFilterReqParamsType->
18716 wdiPktFilterCfg.paramsData[i].dataMask[1],
18717 pwdiSetRcvPktFilterReqParamsType->
18718 wdiPktFilterCfg.paramsData[i].dataMask[2],
18719 pwdiSetRcvPktFilterReqParamsType->
18720 wdiPktFilterCfg.paramsData[i].dataMask[3],
18721 pwdiSetRcvPktFilterReqParamsType->
18722 wdiPktFilterCfg.paramsData[i].dataMask[4],
18723 pwdiSetRcvPktFilterReqParamsType->
18724 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070018725 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070018726 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018727 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070018728 /* Store Params pass it to WDI */
18729 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
18730 pWdaParams->pWdaContext = pWDA;
18731 /* Store param pointer as passed in by caller */
18732 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070018733 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018734 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070018735 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070018736 if(IS_WDI_STATUS_FAILURE(status))
18737 {
18738 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18739 "Failure in SetFilter(),free all the memory,status %d ",status);
18740 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
18741 vos_mem_free(pWdaParams->wdaMsgParam);
18742 vos_mem_free(pWdaParams);
18743 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018744 return CONVERT_WDI2VOS_STATUS(status) ;
18745}
Jeff Johnson295189b2012-06-20 16:38:30 -070018746/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018747 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070018748 *
18749 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070018750void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070018751 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
18752 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070018753{
18754 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18755 tWDA_CbContext *pWDA;
18756 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
18757 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
18758 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
18759 tANI_U8 i;
18760 vos_msg_t vosMsg;
18761
18762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018763 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018764 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
18765
Jeff Johnsone7245742012-09-05 17:12:55 -070018766 if(NULL == pRcvFltPktMatchCntRsp)
18767 {
18768 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018769 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070018770 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070018771 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070018772 return ;
18773 }
18774
Jeff Johnson295189b2012-06-20 16:38:30 -070018775 if(NULL == pWdaParams)
18776 {
18777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018778 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018779 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070018780 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070018781 return ;
18782 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018783 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
18784 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070018785 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
18786 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
18787
18788 /* Message Header */
18789 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
18790 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
18791
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070018792 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070018793
18794 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
18795 {
18796 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
18797 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
18798 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018799 /* VOS message wrapper */
18800 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
18801 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
18802 vosMsg.bodyval = 0;
18803 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
18804 {
18805 /* free the mem and return */
18806 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
18807 }
18808
18809 vos_mem_free(pWdaParams->wdaMsgParam) ;
18810 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18811 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070018812
18813 return;
18814}
18815/*
18816 * FUNCTION: WDA_FilterMatchCountReqCallback
18817 * Free memory and send RSP back to SME.
18818 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
18819 */
18820void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
18821{
18822 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18823 vos_msg_t vosMsg;
18824
18825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18826 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
18827
18828 if(NULL == pWdaParams)
18829 {
18830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18831 "%s: pWdaParams received NULL", __func__);
18832 VOS_ASSERT(0);
18833 return;
18834 }
18835
18836 /* VOS message wrapper */
18837 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
18838 vosMsg.bodyptr = NULL;
18839 vosMsg.bodyval = 0;
18840
18841 if(IS_WDI_STATUS_FAILURE(wdiStatus))
18842 {
18843 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18844 vos_mem_free(pWdaParams->wdaMsgParam);
18845 vos_mem_free(pWdaParams);
18846 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
18847 }
18848
18849 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070018850}
Jeff Johnson295189b2012-06-20 16:38:30 -070018851/*
18852 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
18853 * Request to WDI to get PC Filter Match Count
18854 */
18855VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
18856{
Jeff Johnson43971f52012-07-17 12:26:56 -070018857 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070018858 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
18859 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
18860 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018862 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018863 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
18864 {
18865 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018866 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018867 VOS_ASSERT(0);
18868 return VOS_STATUS_E_NOMEM;
18869 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018870 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18871 if(NULL == pWdaParams)
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 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
18877 return VOS_STATUS_E_NOMEM;
18878 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070018879
Yue Ma7f44bbe2013-04-12 11:47:39 -070018880 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
18881 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070018882
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070018883 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
18884 pRcvFltPktMatchRsp->bssId,
18885 sizeof(wpt_macAddr));
18886
Jeff Johnson295189b2012-06-20 16:38:30 -070018887 /* Store Params pass it to WDI */
18888 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
18889 pWdaParams->pWdaContext = pWDA;
18890 /* Store param pointer as passed in by caller */
18891 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070018892 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070018893 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070018894 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070018895 if(IS_WDI_STATUS_FAILURE(status))
18896 {
18897 /* failure returned by WDI API */
18898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18899 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
18900 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18901 vos_mem_free(pWdaParams) ;
18902 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
18903 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
18904 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018905 return CONVERT_WDI2VOS_STATUS(status) ;
18906}
Jeff Johnson295189b2012-06-20 16:38:30 -070018907/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018908 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070018909 *
18910 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018911void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070018912 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
18913 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070018914{
18915 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070018916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018917 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018918/* WDA_VOS_ASSERT(NULL != pWdaParams); */
18919 if(NULL == pWdaParams)
18920 {
18921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018922 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018923 VOS_ASSERT(0) ;
18924 return ;
18925 }
18926
18927 vos_mem_free(pWdaParams->wdaMsgParam) ;
18928 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18929 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018930 //print a msg, nothing else to do
18931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018932 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070018933 return ;
18934}
Jeff Johnson295189b2012-06-20 16:38:30 -070018935/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018936 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
18937 * Free memory.
18938 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
18939 */
18940void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
18941{
18942 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18943
18944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18945 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
18946
18947 if(NULL == pWdaParams)
18948 {
18949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18950 "%s: Invalid pWdaParams pointer", __func__);
18951 VOS_ASSERT(0);
18952 return;
18953 }
18954
18955 if(IS_WDI_STATUS_FAILURE(wdiStatus))
18956 {
18957 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18958 vos_mem_free(pWdaParams->wdaMsgParam);
18959 vos_mem_free(pWdaParams);
18960 }
18961
18962 return;
18963}
18964/*
Jeff Johnson295189b2012-06-20 16:38:30 -070018965 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
18966 * Request to WDI to clear Receive Filters
18967 */
18968VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
18969 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
18970{
Jeff Johnson43971f52012-07-17 12:26:56 -070018971 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070018972 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
18973 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
18974 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018975 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018976 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018977 if(NULL == pwdiRcvFltPktClearReqParamsType)
18978 {
18979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018980 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018981 VOS_ASSERT(0);
18982 return VOS_STATUS_E_NOMEM;
18983 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018984 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18985 if(NULL == pWdaParams)
18986 {
18987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018988 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018989 VOS_ASSERT(0);
18990 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
18991 return VOS_STATUS_E_NOMEM;
18992 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018993 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
18994 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070018995 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
18996 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
18997 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
18998 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070018999
Yue Ma7f44bbe2013-04-12 11:47:39 -070019000 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019001 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070019002 /* Store Params pass it to WDI */
19003 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
19004 pWdaParams->pWdaContext = pWDA;
19005 /* Store param pointer as passed in by caller */
19006 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070019007 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080019008 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070019009 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070019010 if(IS_WDI_STATUS_FAILURE(status))
19011 {
19012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19013 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
19014 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080019015 vos_mem_free(pWdaParams->wdaMsgParam);
19016 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070019017 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019018 return CONVERT_WDI2VOS_STATUS(status) ;
19019}
19020#endif // WLAN_FEATURE_PACKET_FILTERING
19021
Jeff Johnson295189b2012-06-20 16:38:30 -070019022/*
19023 * FUNCTION: WDA_ProcessSetPowerParamsReq
19024 * Request to WDI to set power params
19025 */
19026VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
19027 tSirSetPowerParamsReq *pPowerParams)
19028{
Jeff Johnson43971f52012-07-17 12:26:56 -070019029 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070019030 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
19031 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019032 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019034 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019035 if(NULL == pwdiSetPowerParamsReqInfo)
19036 {
19037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019038 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019039 VOS_ASSERT(0);
19040 return VOS_STATUS_E_NOMEM;
19041 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019042 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19043 if(NULL == pWdaParams)
19044 {
19045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019046 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019047 VOS_ASSERT(0);
19048 vos_mem_free(pwdiSetPowerParamsReqInfo);
19049 return VOS_STATUS_E_NOMEM;
19050 }
Jeff Johnsone7245742012-09-05 17:12:55 -070019051
Jeff Johnson295189b2012-06-20 16:38:30 -070019052
19053 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
19054 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070019055 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
19056 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070019057 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
19058 pPowerParams->uListenInterval;
19059 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
19060 pPowerParams->uBcastMcastFilter;
19061 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
19062 pPowerParams->uEnableBET;
19063 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
19064 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070019065 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
19066 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070019067 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
19068 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070019069
Jeff Johnson295189b2012-06-20 16:38:30 -070019070 /* Store Params pass it to WDI */
19071 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
19072 pWdaParams->pWdaContext = pWDA;
19073 /* Store param pointer as passed in by caller */
19074 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070019075 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070019076 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070019077 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070019078 if(IS_WDI_STATUS_FAILURE(status))
19079 {
19080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19081 "Failure in Set power params REQ WDI API, free all the memory " );
19082 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
19083 vos_mem_free(pWdaParams->wdaMsgParam);
19084 pWdaParams->wdaWdiApiMsgParam = NULL;
19085 pWdaParams->wdaMsgParam = NULL;
19086 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019087 return CONVERT_WDI2VOS_STATUS(status) ;
19088}
19089
19090/*
19091 * FUNCTION: WDA_SetTmLevelRspCallback
19092 * Set TM Level response
19093 */
19094void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
19095{
19096 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19097
19098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019099 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019100
19101 if(NULL == pWdaParams)
19102 {
19103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019104 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019105 VOS_ASSERT(0) ;
19106 return ;
19107 }
19108
19109 /* Dose not need to send notification to upper layer
19110 * Just free allocated resources */
19111 if( pWdaParams != NULL )
19112 {
19113 if( pWdaParams->wdaWdiApiMsgParam != NULL )
19114 {
19115 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19116 }
19117 vos_mem_free(pWdaParams->wdaMsgParam) ;
19118 vos_mem_free(pWdaParams) ;
19119 }
19120}
19121
19122/*
19123 * FUNCTION: WDA_ProcessSetTmLevelReq
19124 * Set TM Level request
19125 */
19126VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
19127 tAniSetTmLevelReq *setTmLevelReq)
19128{
19129 WDI_Status status = WDI_STATUS_SUCCESS ;
19130 tWDA_ReqParams *pWdaParams ;
19131 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
19132 (WDI_SetTmLevelReqType *)vos_mem_malloc(
19133 sizeof(WDI_SetTmLevelReqType)) ;
19134 if(NULL == wdiSetTmLevelReq)
19135 {
19136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019137 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019138 VOS_ASSERT(0);
19139 return VOS_STATUS_E_NOMEM;
19140 }
19141
19142 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19143 if(NULL == pWdaParams)
19144 {
19145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019146 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019147 VOS_ASSERT(0);
19148 vos_mem_free(wdiSetTmLevelReq);
19149 return VOS_STATUS_E_NOMEM;
19150 }
19151
19152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019153 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019154
19155 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
19156 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
19157
19158 pWdaParams->pWdaContext = pWDA;
19159 pWdaParams->wdaMsgParam = setTmLevelReq;
19160 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
19161
19162 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
19163 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
19164
19165 if(IS_WDI_STATUS_FAILURE(status))
19166 {
19167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080019168 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070019169 vos_mem_free(pWdaParams->wdaMsgParam) ;
19170 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19171 vos_mem_free(pWdaParams) ;
19172 }
19173
19174 return CONVERT_WDI2VOS_STATUS(status) ;
19175}
19176
19177VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
19178 tpTxControlParams pTxCtrlParam)
19179{
19180 VOS_STATUS wdaStatus;
19181
19182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019183 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019184 if( pTxCtrlParam == NULL )
19185 {
19186 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019187 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019188 return VOS_STATUS_E_FAILURE;
19189 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019190 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
19191 {
19192 wdaStatus = WDA_SuspendDataTx(pWDA);
19193 }
19194 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
19195 {
19196 wdaStatus = WDA_ResumeDataTx(pWDA);
19197 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019198 return wdaStatus;
19199}
19200
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053019201void WDA_FWLoggingDXEdoneInd(v_U32_t logType)
Mihir Shete5affadc2015-05-29 20:54:57 +053019202{
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053019203 WDI_Status status;
19204 status = WDI_FWLoggingDXEdoneInd(logType);
19205
Hanumantha Reddy Pothula5e509402015-09-23 09:45:57 +053019206 if (!(WDI_STATUS_SUCCESS_SYNC == status || WDI_STATUS_PENDING == status))
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053019207 {
19208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19209 FL("Failure status %d"), status);
19210 }
Mihir Shete5affadc2015-05-29 20:54:57 +053019211}
19212
Jeff Johnson295189b2012-06-20 16:38:30 -070019213 /* FUNCTION WDA_featureCapsExchange
19214 * WDA API to invoke capability exchange between host and FW.
19215 */
19216void WDA_featureCapsExchange(v_PVOID_t pVosContext)
19217{
19218 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019219 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070019220 WDI_featureCapsExchangeReq( NULL, pVosContext);
19221}
19222
Yathish9f22e662012-12-10 14:21:35 -080019223/* FUNCTION WDA_disableCapablityFeature
19224 * WDA API to diable Active mode offload in host.
19225 */
19226void WDA_disableCapablityFeature(tANI_U8 feature_index)
19227{
19228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19229 "%s:enter", __func__ );
19230 WDI_disableCapablityFeature(feature_index);
19231}
19232
Jeff Johnson295189b2012-06-20 16:38:30 -070019233 /* FUNCTION WDA_getHostWlanFeatCaps
19234 * Wrapper for WDI API, that will return if the feature (enum value).passed
19235 * to this API is supported or not in Host
19236 * return value
19237 * 0 - implies feature is NOT Supported
19238 * any non zero value - implies feature is SUPPORTED
19239 */
19240tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
19241{
19242 return WDI_getHostWlanFeatCaps(featEnumValue);
19243}
19244
19245 /* FUNCTION WDA_getFwWlanFeatCaps
19246 * Wrapper for WDI API, that will return if the feature (enum value).passed
19247 * to this API is supported or not in FW
19248 * return value
19249 * 0 - implies feature is NOT Supported
19250 * any non zero value - implies feature is SUPPORTED
19251 */
19252tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
19253{
19254 return WDI_getFwWlanFeatCaps(featEnumValue);
19255}
19256
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053019257
Jeff Johnson295189b2012-06-20 16:38:30 -070019258/*
19259 * FUNCTION: WDA_shutdown
19260 * Shutdown WDA/WDI without handshaking with Riva.
19261 * Synchronous function.
19262 */
19263VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
19264{
19265 WDI_Status wdiStatus;
19266 //tANI_U8 eventIdx = 0;
19267 VOS_STATUS status = VOS_STATUS_SUCCESS;
19268 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070019269 if (NULL == pWDA)
19270 {
19271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019272 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070019273 VOS_ASSERT(0);
19274 return VOS_STATUS_E_FAILURE;
19275 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019276 /* FTM mode stay START_STATE */
19277 if( (WDA_READY_STATE != pWDA->wdaState) &&
19278 (WDA_INIT_STATE != pWDA->wdaState) &&
19279 (WDA_START_STATE != pWDA->wdaState) )
19280 {
19281 VOS_ASSERT(0);
19282 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070019283
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053019284 if (eDRIVER_TYPE_MFG != pWDA->driverMode)
Jeff Johnson295189b2012-06-20 16:38:30 -070019285 {
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053019286 if(VOS_TRUE == pWDA->wdaTimersCreated)
19287 {
19288 wdaDestroyTimers(pWDA);
19289 pWDA->wdaTimersCreated = VOS_FALSE;
19290 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019291 }
Leo Chang9d76f622013-08-23 16:34:52 -070019292 else
19293 {
19294 vos_event_destroy(&pWDA->ftmStopDoneEvent);
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053019295 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070019296
Jeff Johnson295189b2012-06-20 16:38:30 -070019297 /* call WDI shutdown */
19298 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070019299 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
19300 {
19301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19302 "error in WDA Stop" );
19303 status = VOS_STATUS_E_FAILURE;
19304 }
19305 /* WDI stop is synchrnous, shutdown is complete when it returns */
19306 pWDA->wdaState = WDA_STOP_STATE;
19307
Jeff Johnson295189b2012-06-20 16:38:30 -070019308 /* shutdown should perform the stop & close actions. */
19309 /* Destroy the event */
19310 status = vos_event_destroy(&pWDA->txFrameEvent);
19311 if(!VOS_IS_STATUS_SUCCESS(status))
19312 {
19313 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080019314 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070019315 status = VOS_STATUS_E_FAILURE;
19316 }
19317 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
19318 if(!VOS_IS_STATUS_SUCCESS(status))
19319 {
19320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080019321 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070019322 status = VOS_STATUS_E_FAILURE;
19323 }
19324 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
19325 if(!VOS_IS_STATUS_SUCCESS(status))
19326 {
19327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080019328 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070019329 status = VOS_STATUS_E_FAILURE;
19330 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019331 /* free WDA context */
19332 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
19333 if ( !VOS_IS_STATUS_SUCCESS(status) )
19334 {
19335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19336 "error in WDA close " );
19337 status = VOS_STATUS_E_FAILURE;
19338 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019339 return status;
19340}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080019341
Jeff Johnsone7245742012-09-05 17:12:55 -070019342/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080019343 * FUNCTION: WDA_setNeedShutdown
19344 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070019345 */
19346
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080019347void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070019348{
19349 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070019350 if(pWDA == NULL)
19351 {
19352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19353 "Could not get the WDA Context pointer" );
19354 return;
19355 }
Jeff Johnsone7245742012-09-05 17:12:55 -070019356 pWDA->needShutdown = TRUE;
19357}
19358/*
19359 * FUNCTION: WDA_needShutdown
19360 * WDA needs a shutdown
19361 */
19362
19363v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
19364{
19365 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070019366 if(pWDA == NULL)
19367 {
19368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19369 "Could not get the WDA Context pointer" );
19370 return 0;
19371 }
19372 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070019373}
19374
Mohit Khanna4a70d262012-09-11 16:30:12 -070019375#ifdef WLAN_FEATURE_11AC
19376/*
19377 * FUNCTION: WDA_SetBeaconFilterReqCallback
19378 *
19379 */
19380void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
19381{
19382 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019384 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070019385 if(NULL == pWdaParams)
19386 {
19387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019388 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070019389 VOS_ASSERT(0) ;
19390 return ;
19391 }
Jeff Johnsone7245742012-09-05 17:12:55 -070019392
Mohit Khanna4a70d262012-09-11 16:30:12 -070019393 vos_mem_free(pWdaParams->wdaMsgParam) ;
19394 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19395 vos_mem_free(pWdaParams) ;
19396 /*
19397 * No respone required for SetBeaconFilter req so just free the request
19398 * param here
19399 */
19400
19401 return ;
19402}
19403
19404VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
19405 tUpdateVHTOpMode *pData)
19406{
19407 WDI_Status status = WDI_STATUS_SUCCESS ;
19408 tWDA_ReqParams *pWdaParams ;
19409 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
19410 sizeof(WDI_UpdateVHTOpMode)) ;
19411 if(NULL == wdiTemp)
19412 {
19413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019414 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070019415 VOS_ASSERT(0);
19416 return VOS_STATUS_E_NOMEM;
19417 }
19418 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19419 if(NULL == pWdaParams)
19420 {
19421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019422 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070019423 VOS_ASSERT(0);
19424 vos_mem_free(wdiTemp);
19425 return VOS_STATUS_E_NOMEM;
19426 }
Abhishek Singhdf8eb312014-11-15 00:49:28 +053019427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19428 "------> %s Opmode = %d and staid = %d" ,
19429 __func__, pData->opMode, pData->staId);
Mohit Khanna4a70d262012-09-11 16:30:12 -070019430 wdiTemp->opMode = pData->opMode;
19431 wdiTemp->staId = pData->staId;
19432
19433 pWdaParams->pWdaContext = pWDA;
19434 /* Store Req pointer, as this will be used for response */
19435 pWdaParams->wdaMsgParam = (void *)pData;
19436 /* store Params pass it to WDI */
19437 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
19438
19439 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
19440
19441 if(IS_WDI_STATUS_FAILURE(status))
19442 {
19443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19444 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
19445 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
19446 vos_mem_free(pWdaParams->wdaMsgParam);
19447 vos_mem_free(pWdaParams);
19448 }
19449 return CONVERT_WDI2VOS_STATUS(status) ;
19450}
19451#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070019452
19453/*==========================================================================
19454 FUNCTION WDA_TransportChannelDebug
19455
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070019456 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070019457 Display Transport Channel debugging information
19458 User may request to display DXE channel snapshot
19459 Or if host driver detects any abnormal stcuk may display
19460
19461 PARAMETERS
schang6295e542013-03-12 15:31:23 -070019462 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080019463 displaySnapshot : Display DXE snapshot option
Mihir Shete40a55652014-03-02 14:14:47 +053019464 debugFlags : Enable stall detect features
19465 defined by WPAL_DeviceDebugFlags
19466 These features may effect
19467 data performance.
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070019468
19469 RETURN VALUE
19470 NONE
19471
19472===========================================================================*/
19473void WDA_TransportChannelDebug
19474(
schang6295e542013-03-12 15:31:23 -070019475 tpAniSirGlobal pMac,
19476 v_BOOL_t displaySnapshot,
Mihir Shete40a55652014-03-02 14:14:47 +053019477 v_U8_t debugFlags
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070019478)
19479{
Mihir Shete40a55652014-03-02 14:14:47 +053019480 WDI_TransportChannelDebug(displaySnapshot, debugFlags);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070019481 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070019482}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070019483
19484/*==========================================================================
Sravan Kumar Kairame9d186c2015-11-27 23:37:02 +053019485 FUNCTION WDA_TransportKickDxe
19486
19487 DESCRIPTION
19488 Request Kick Dxe when first hdd TX time out
19489 happens
19490
19491 PARAMETERS
19492 NONE
19493
19494 RETURN VALUE
19495 NONE
19496
19497===========================================================================*/
19498void WDA_TransportKickDxe()
19499{
19500 WDI_TransportKickDxe();
19501 return;
19502}
19503
19504
19505/*==========================================================================
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070019506 FUNCTION WDA_SetEnableSSR
19507
19508 DESCRIPTION
19509 API to enable/disable SSR on WDI timeout
19510
19511 PARAMETERS
19512 enableSSR : enable/disable SSR
19513
19514 RETURN VALUE
19515 NONE
19516
19517===========================================================================*/
19518void WDA_SetEnableSSR(v_BOOL_t enableSSR)
19519{
19520 WDI_SetEnableSSR(enableSSR);
19521}
Leo Chang9056f462013-08-01 19:21:11 -070019522
Agrawal Ashish0552be02016-03-02 18:03:43 +053019523/**
19524 * WDA_SetMgmtPktViaWQ5() - Set INI params sendMgmtPktViaWQ5 to WDI.
19525 * @sendMgmtPktViaWQ5: INI params to enable/disable sending mgmt pkt via WQ5.
19526 *
19527 * Return: void
19528 */
19529void WDA_SetMgmtPktViaWQ5(v_BOOL_t sendMgmtPktViaWQ5)
19530{
19531 WDI_SetMgmtPktViaWQ5(sendMgmtPktViaWQ5);
19532}
19533
Leo Chang9056f462013-08-01 19:21:11 -070019534#ifdef FEATURE_WLAN_LPHB
19535/*
19536 * FUNCTION: WDA_LPHBconfRspCallback
19537 *
19538 */
19539void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
19540{
19541 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19542
19543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19544 "<------ %s " ,__func__);
19545 if (NULL == pWdaParams)
19546 {
19547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19548 "%s: pWdaParams received NULL", __func__);
19549 VOS_ASSERT(0) ;
19550 return ;
19551 }
19552
19553 /* Do not need to send notification to upper layer
19554 * Just free allocated resources */
19555 if (pWdaParams != NULL)
19556 {
19557 if (pWdaParams->wdaWdiApiMsgParam != NULL)
19558 {
19559 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19560 }
19561 vos_mem_free(pWdaParams->wdaMsgParam) ;
19562 vos_mem_free(pWdaParams) ;
19563 }
19564
19565 return;
19566}
19567
19568/*
19569 * FUNCTION: WDA_ProcessLPHBConfReq
19570 *
19571 */
19572VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
19573 tSirLPHBReq *pData)
19574{
19575 WDI_Status wdiStatus;
19576 tWDA_ReqParams *pWdaParams ;
19577
19578 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19579 "------> %s " , __func__);
19580
19581 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19582 if (NULL == pWdaParams)
19583 {
19584 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19585 "%s: VOS MEM Alloc Failure", __func__);
19586 VOS_ASSERT(0);
19587 vos_mem_free(pData);
19588 return VOS_STATUS_E_NOMEM;
19589 }
19590
19591 pWdaParams->pWdaContext = pWDA;
19592 pWdaParams->wdaMsgParam = (void *)pData;
19593 pWdaParams->wdaWdiApiMsgParam = NULL;
19594
19595 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
19596 if (WDI_STATUS_PENDING == wdiStatus)
19597 {
19598 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19599 "Pending received for %s:%d ", __func__, __LINE__);
19600 }
19601 else if (WDI_STATUS_SUCCESS != wdiStatus)
19602 {
19603 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19604 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
19605 vos_mem_free(pWdaParams->wdaMsgParam);
19606 vos_mem_free(pWdaParams);
19607 }
19608
19609 return CONVERT_WDI2VOS_STATUS(wdiStatus);
19610}
19611#endif /* FEATURE_WLAN_LPHB */
19612
c_hpothu92367912014-05-01 15:18:17 +053019613void WDA_GetBcnMissRateCallback(tANI_U8 status, tANI_U32 bcnMissRate,
19614 void* pUserData)
19615{
19616 tSirBcnMissRateInfo *pBcnMissRateInfo = (tSirBcnMissRateInfo *)pUserData;
19617
19618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19619 "<------ %s " ,__func__);
19620 if (NULL == pBcnMissRateInfo)
19621 {
19622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19623 "%s: pWdaParams received NULL", __func__);
19624 VOS_ASSERT(0) ;
19625 return ;
19626 }
19627 if (pBcnMissRateInfo->callback)
19628 {
19629 pBcnMissRateInfo->callback(status, bcnMissRate,
19630 pBcnMissRateInfo->data);
19631 }
19632 vos_mem_free(pUserData);
19633
19634 return;
19635}
19636
19637v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
19638 tSirBcnMissRateReq *pData)
19639{
19640 WDI_Status wdiStatus;
19641 tSirBcnMissRateInfo *pBcnMissRateInfo;
19642
19643 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19644 "------> %s " , __func__);
19645
19646 pBcnMissRateInfo =
19647 (tSirBcnMissRateInfo *)vos_mem_malloc(sizeof(tSirBcnMissRateInfo));
19648 if (NULL == pBcnMissRateInfo)
19649 {
19650 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19651 "%s: VOS MEM Alloc Failure", __func__);
19652 VOS_ASSERT(0);
19653 vos_mem_free(pData);
19654 return;
19655 }
19656
19657 pBcnMissRateInfo->callback = (pGetBcnMissRateCB)(pData->callback);
19658 pBcnMissRateInfo->data = pData->data;
19659
19660 wdiStatus = WDI_GetBcnMissRate(pBcnMissRateInfo,
19661 WDA_GetBcnMissRateCallback,
19662 pData->bssid);
19663 if (WDI_STATUS_PENDING == wdiStatus)
19664 {
19665 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19666 "Pending received for %s:%d ", __func__, __LINE__);
19667 }
19668 else if (WDI_STATUS_SUCCESS != wdiStatus)
19669 {
19670 if (pBcnMissRateInfo->callback)
19671 {
19672 pBcnMissRateInfo->callback(VOS_STATUS_E_FAILURE,
19673 -1, pBcnMissRateInfo->data);
19674 }
19675 }
19676 vos_mem_free(pData);
19677}
Dino Mycle41bdc942014-06-10 11:30:24 +053019678
19679#ifdef WLAN_FEATURE_EXTSCAN
19680
19681/*==========================================================================
19682 FUNCTION WDA_EXTScanStartRspCallback
19683
19684 DESCRIPTION
19685 API to send EXTScan Start Response to HDD
19686
19687 PARAMETERS
19688 pEventData: Response from FW
19689 pUserData:
19690===========================================================================*/
19691void WDA_EXTScanStartRspCallback(void *pEventData, void* pUserData)
19692{
19693 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19694 tWDA_CbContext *pWDA = NULL;
19695 void *pCallbackContext;
19696 tpAniSirGlobal pMac;
19697
19698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19699 "%s:", __func__);
19700 if (NULL == pWdaParams)
19701 {
19702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19703 "%s: pWdaParams received NULL", __func__);
19704 VOS_ASSERT(0);
19705 return;
19706 }
19707
19708 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
19709
19710 if (NULL == pWDA)
19711 {
19712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19713 "%s: pWDA received NULL", __func__);
19714 VOS_ASSERT(0);
19715 goto error;
19716 }
19717
19718 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
19719 if (NULL == pMac)
19720 {
19721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19722 "%s:pMac is NULL", __func__);
19723 VOS_ASSERT(0);
19724 goto error;
19725 }
19726
19727 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
19728
19729 if (pMac->sme.pEXTScanIndCb)
19730 {
19731 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_START_RSP,
19732 pEventData);
19733 }
19734 else
19735 {
19736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19737 "%s:HDD callback is null", __func__);
19738 VOS_ASSERT(0);
19739 }
19740
19741error:
19742
19743 if (pWdaParams->wdaWdiApiMsgParam != NULL)
19744 {
19745 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19746 }
19747 if (pWdaParams->wdaMsgParam != NULL)
19748 {
19749 vos_mem_free(pWdaParams->wdaMsgParam);
19750 }
19751 vos_mem_free(pWdaParams) ;
19752
19753 return;
19754}
19755
19756/*==========================================================================
19757 FUNCTION WDA_EXTScanStopRspCallback
19758
19759 DESCRIPTION
19760 API to send EXTScan Stop Response to HDD
19761
19762 PARAMETERS
19763 pEventData: Response from FW
19764 pUserData:
19765===========================================================================*/
19766void WDA_EXTScanStopRspCallback(void *pEventData, void* pUserData)
19767{
19768 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19769 tWDA_CbContext *pWDA = NULL;
19770 void *pCallbackContext;
19771 tpAniSirGlobal pMac;
19772
19773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19774 "%s:", __func__);
19775 if (NULL == pWdaParams)
19776 {
19777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19778 "%s: pWdaParams received NULL", __func__);
19779 VOS_ASSERT(0);
19780 return;
19781 }
19782
19783 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
19784
19785 if (NULL == pWDA)
19786 {
19787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19788 "%s: pWDA received NULL", __func__);
19789 VOS_ASSERT(0);
19790 goto error;
19791 }
19792
19793 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
19794 if (NULL == pMac)
19795 {
19796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19797 "%s:pMac is NULL", __func__);
19798 VOS_ASSERT(0);
19799 goto error;
19800 }
19801 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
19802
19803 if (pMac->sme.pEXTScanIndCb)
19804 {
19805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19806 "%s:HDD call back function called", __func__);
19807 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_STOP_RSP,
19808 pEventData);
19809 }
19810 else
19811 {
19812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19813 "%s:HDD callback is null", __func__);
19814 VOS_ASSERT(0);
19815 }
19816
19817error:
19818
19819 if (pWdaParams->wdaWdiApiMsgParam != NULL)
19820 {
19821 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19822 }
19823 if (pWdaParams->wdaMsgParam != NULL)
19824 {
19825 vos_mem_free(pWdaParams->wdaMsgParam);
19826 }
19827 vos_mem_free(pWdaParams) ;
19828
19829
19830 return;
19831}
19832
19833/*==========================================================================
19834 FUNCTION WDA_EXTScanGetCachedResultsRspCallback
19835
19836 DESCRIPTION
19837 API to send EXTScan Get Cached Results Response to HDD
19838
19839 PARAMETERS
19840 pEventData: Response from FW
19841 pUserData:
19842===========================================================================*/
19843void WDA_EXTScanGetCachedResultsRspCallback(void *pEventData, void* pUserData)
19844{
19845 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19846 tWDA_CbContext *pWDA = NULL;
19847 void *pCallbackContext;
19848 tpAniSirGlobal pMac;
19849
19850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19851 "%s: ", __func__);
19852 if (NULL == pWdaParams)
19853 {
19854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19855 "%s: pWdaParams received NULL", __func__);
19856 VOS_ASSERT(0);
19857 return;
19858 }
19859
19860 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
19861
19862 if (NULL == pWDA)
19863 {
19864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19865 "%s: pWDA received NULL", __func__);
19866 VOS_ASSERT(0);
19867 goto error;
19868 }
19869
19870 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
19871 if (NULL == pMac)
19872 {
19873 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19874 "%s:pMac is NULL", __func__);
19875 VOS_ASSERT(0);
19876 goto error;
19877 }
19878
19879 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
19880
19881 if (pMac->sme.pEXTScanIndCb)
19882 {
19883 pMac->sme.pEXTScanIndCb(pCallbackContext,
19884 WDA_EXTSCAN_GET_CACHED_RESULTS_RSP,
19885 pEventData);
19886 }
19887 else
19888 {
19889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19890 "%s:HDD callback is null", __func__);
19891 VOS_ASSERT(0);
19892 }
19893
19894
19895error:
19896
19897 if (pWdaParams->wdaWdiApiMsgParam != NULL)
19898 {
19899 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19900 }
19901 if (pWdaParams->wdaMsgParam != NULL)
19902 {
19903 vos_mem_free(pWdaParams->wdaMsgParam);
19904 }
19905 vos_mem_free(pWdaParams) ;
19906
19907 return;
19908}
19909
19910/*==========================================================================
19911 FUNCTION WDA_EXTScanGetCapabilitiesRspCallback
19912
19913 DESCRIPTION
19914 API to send EXTScan Get Capabilities Response to HDD
19915
19916 PARAMETERS
19917 pEventData: Response from FW
19918 pUserData:
19919===========================================================================*/
19920void WDA_EXTScanGetCapabilitiesRspCallback(void *pEventData, void* pUserData)
19921{
19922 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19923 tWDA_CbContext *pWDA = NULL;
19924 void *pCallbackContext;
19925 tpAniSirGlobal pMac;
19926
19927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19928 "%s:", __func__);
19929 if (NULL == pWdaParams)
19930 {
19931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19932 "%s: pWdaParams received NULL", __func__);
19933 VOS_ASSERT(0);
19934 return;
19935 }
19936
19937 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
19938
19939 if (NULL == pWDA)
19940 {
19941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19942 "%s: pWDA received NULL", __func__);
19943 VOS_ASSERT(0);
19944 goto error;
19945 }
19946
19947 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
19948 if (NULL == pMac)
19949 {
19950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19951 "%s:pMac is NULL", __func__);
19952 VOS_ASSERT(0);
19953 goto error;
19954 }
19955
19956 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
19957
19958 if (pMac->sme.pEXTScanIndCb)
19959 {
19960 pMac->sme.pEXTScanIndCb(pCallbackContext,
19961 WDA_EXTSCAN_GET_CAPABILITIES_RSP,
19962 pEventData);
19963 }
19964 else
19965 {
19966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19967 "%s:HDD callback is null", __func__);
19968 VOS_ASSERT(0);
19969 }
19970
19971
19972error:
19973
19974 if (pWdaParams->wdaWdiApiMsgParam != NULL)
19975 {
19976 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19977 }
19978 if (pWdaParams->wdaMsgParam != NULL)
19979 {
19980 vos_mem_free(pWdaParams->wdaMsgParam);
19981 }
19982 vos_mem_free(pWdaParams) ;
19983
19984 return;
19985}
19986
19987/*==========================================================================
19988 FUNCTION WDA_EXTScanSetBSSIDHotlistRspCallback
19989
19990 DESCRIPTION
19991 API to send EXTScan Set BSSID Hotlist Response to HDD
19992
19993 PARAMETERS
19994 pEventData: Response from FW
19995 pUserData:
19996===========================================================================*/
19997void WDA_EXTScanSetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
19998{
19999 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20000 tWDA_CbContext *pWDA = NULL;
20001 void *pCallbackContext;
20002 tpAniSirGlobal pMac;
20003
20004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20005 "%s: ", __func__);
20006 if (NULL == pWdaParams)
20007 {
20008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20009 "%s: pWdaParams received NULL", __func__);
20010 VOS_ASSERT(0) ;
20011 return;
20012 }
20013
20014 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20015
20016 if (NULL == pWDA)
20017 {
20018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20019 "%s: pWDA received NULL", __func__);
20020 VOS_ASSERT(0);
20021 goto error;
20022 }
20023
20024 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20025 if (NULL == pMac)
20026 {
20027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20028 "%s:pMac is NULL", __func__);
20029 VOS_ASSERT(0);
20030 goto error;
20031 }
20032
20033 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
20034
20035 if (pMac->sme.pEXTScanIndCb)
20036 {
20037 pMac->sme.pEXTScanIndCb(pCallbackContext,
20038 WDA_EXTSCAN_SET_BSSID_HOTLIST_RSP,
20039 pEventData);
20040 }
20041 else
20042 {
20043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20044 "%s:HDD callback is null", __func__);
20045 VOS_ASSERT(0);
20046 }
20047
20048
20049error:
20050
20051 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20052 {
20053 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20054 }
20055 if (pWdaParams->wdaMsgParam != NULL)
20056 {
20057 vos_mem_free(pWdaParams->wdaMsgParam);
20058 }
20059 vos_mem_free(pWdaParams) ;
20060
20061 return;
20062}
20063
20064/*==========================================================================
20065 FUNCTION WDA_EXTScanResetBSSIDHotlistRspCallback
20066
20067 DESCRIPTION
20068 API to send EXTScan ReSet BSSID Hotlist Response to HDD
20069
20070 PARAMETERS
20071 pEventData: Response from FW
20072 pUserData:
20073===========================================================================*/
20074void WDA_EXTScanResetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
20075{
20076 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20077 tWDA_CbContext *pWDA = NULL;
20078 void *pCallbackContext;
20079 tpAniSirGlobal pMac;
20080
20081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20082 "%s:", __func__);
20083 if (NULL == pWdaParams)
20084 {
20085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20086 "%s: pWdaParams received NULL", __func__);
20087 VOS_ASSERT(0) ;
20088 return;
20089 }
20090
20091 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20092
20093 if (NULL == pWDA)
20094 {
20095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20096 "%s: pWDA received NULL", __func__);
20097 VOS_ASSERT(0);
20098 goto error;
20099 }
20100
20101 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20102 if (NULL == pMac)
20103 {
20104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20105 "%s:pMac is NULL", __func__);
20106 VOS_ASSERT(0);
20107 goto error;
20108 }
20109
20110 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
20111
20112 if (pMac->sme.pEXTScanIndCb)
20113 {
20114 pMac->sme.pEXTScanIndCb(pCallbackContext,
20115 WDA_EXTSCAN_RESET_BSSID_HOTLIST_RSP,
20116 pEventData);
20117 }
20118 else
20119 {
20120 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20121 "%s:HDD callback is null", __func__);
20122 VOS_ASSERT(0);
20123 }
20124
20125
20126error:
20127
20128 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20129 {
20130 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20131 }
20132 if (pWdaParams->wdaMsgParam != NULL)
20133 {
20134 vos_mem_free(pWdaParams->wdaMsgParam);
20135 }
20136 vos_mem_free(pWdaParams) ;
20137
20138 return;
20139}
20140
20141/*==========================================================================
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053020142 FUNCTION WDA_EXTScanSetSSIDHotlistRspCallback
20143
20144 DESCRIPTION
20145 API to send EXTScan Set SSID Hotlist Response to HDD
20146
20147 PARAMETERS
20148 pEventData: Response from FW
20149 pUserData:
20150===========================================================================*/
20151void WDA_EXTScanSetSSIDHotlistRspCallback(void *pEventData, void* pUserData)
20152{
20153 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20154 tWDA_CbContext *pWDA = NULL;
20155 void *pCallbackContext;
20156 tpAniSirGlobal pMac;
20157
20158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20159 "%s: ", __func__);
20160 if (NULL == pWdaParams)
20161 {
20162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20163 "%s: pWdaParams received NULL", __func__);
20164 VOS_ASSERT(0) ;
20165 return;
20166 }
20167
20168 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20169
20170 if (NULL == pWDA)
20171 {
20172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20173 "%s: pWDA received NULL", __func__);
20174 VOS_ASSERT(0);
20175 goto error;
20176 }
20177
20178 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20179 if (NULL == pMac)
20180 {
20181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20182 "%s:pMac is NULL", __func__);
20183 VOS_ASSERT(0);
20184 goto error;
20185 }
20186
20187 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
20188
20189 if (pMac->sme.pEXTScanIndCb)
20190 {
20191 pMac->sme.pEXTScanIndCb(pCallbackContext,
20192 WDA_EXTSCAN_SET_SSID_HOTLIST_RSP,
20193 pEventData);
20194 }
20195 else
20196 {
20197 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20198 "%s:HDD callback is null", __func__);
20199 VOS_ASSERT(0);
20200 }
20201
20202
20203error:
20204
20205 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20206 {
20207 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20208 }
20209 if (pWdaParams->wdaMsgParam != NULL)
20210 {
20211 vos_mem_free(pWdaParams->wdaMsgParam);
20212 }
20213 vos_mem_free(pWdaParams) ;
20214
20215 return;
20216}
20217
20218/*==========================================================================
20219 FUNCTION WDA_EXTScanResetSSIDHotlistRspCallback
20220
20221 DESCRIPTION
20222 API to send EXTScan ReSet SSID Hotlist Response to HDD
20223
20224 PARAMETERS
20225 pEventData: Response from FW
20226 pUserData:
20227===========================================================================*/
20228void WDA_EXTScanResetSSIDHotlistRspCallback(void *pEventData, void* pUserData)
20229{
20230 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20231 tWDA_CbContext *pWDA = NULL;
20232 void *pCallbackContext;
20233 tpAniSirGlobal pMac;
20234
20235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20236 "%s:", __func__);
20237 if (NULL == pWdaParams)
20238 {
20239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20240 "%s: pWdaParams received NULL", __func__);
20241 VOS_ASSERT(0) ;
20242 return;
20243 }
20244
20245 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20246
20247 if (NULL == pWDA)
20248 {
20249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20250 "%s: pWDA received NULL", __func__);
20251 VOS_ASSERT(0);
20252 goto error;
20253 }
20254
20255 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20256 if (NULL == pMac)
20257 {
20258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20259 "%s:pMac is NULL", __func__);
20260 VOS_ASSERT(0);
20261 goto error;
20262 }
20263
20264 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
20265
20266 if (pMac->sme.pEXTScanIndCb)
20267 {
20268 pMac->sme.pEXTScanIndCb(pCallbackContext,
20269 WDA_EXTSCAN_RESET_SSID_HOTLIST_RSP,
20270 pEventData);
20271 }
20272 else
20273 {
20274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20275 "%s:HDD callback is null", __func__);
20276 VOS_ASSERT(0);
20277 }
20278
20279
20280error:
20281
20282 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20283 {
20284 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20285 }
20286 if (pWdaParams->wdaMsgParam != NULL)
20287 {
20288 vos_mem_free(pWdaParams->wdaMsgParam);
20289 }
20290 vos_mem_free(pWdaParams) ;
20291
20292 return;
20293}
20294
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053020295/*==========================================================================
Dino Mycle41bdc942014-06-10 11:30:24 +053020296 FUNCTION WDA_ProcessEXTScanStartReq
20297
20298 DESCRIPTION
20299 API to send EXTScan Start Request to WDI
20300
20301 PARAMETERS
20302 pWDA: Pointer to WDA context
20303 wdaRequest: Pointer to EXTScan req parameters
20304===========================================================================*/
20305VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
20306 tSirEXTScanStartReqParams *wdaRequest)
20307{
20308 WDI_Status status = WDI_STATUS_SUCCESS;
20309 tWDA_ReqParams *pWdaParams;
20310
20311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20312 "%s: ", __func__);
20313 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20314 if (NULL == pWdaParams)
20315 {
20316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20317 "%s: VOS MEM Alloc Failure", __func__);
20318 VOS_ASSERT(0);
20319 return VOS_STATUS_E_NOMEM;
20320 }
20321 pWdaParams->pWdaContext = pWDA;
20322 pWdaParams->wdaMsgParam = wdaRequest;
20323 pWdaParams->wdaWdiApiMsgParam = NULL;
20324
20325 status = WDI_EXTScanStartReq((void *)wdaRequest,
20326 (WDI_EXTScanStartRspCb)WDA_EXTScanStartRspCallback,
20327 (void *)pWdaParams);
20328 if (IS_WDI_STATUS_FAILURE(status))
20329 {
20330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20331 "Failure to request. Free all the memory " );
20332 vos_mem_free(pWdaParams->wdaMsgParam);
20333 vos_mem_free(pWdaParams);
20334 }
20335 return CONVERT_WDI2VOS_STATUS(status);
20336}
20337
20338/*==========================================================================
20339 FUNCTION WDA_ProcessEXTScanStopReq
20340
20341 DESCRIPTION
20342 API to send EXTScan Start Request to WDI
20343
20344 PARAMETERS
20345 pWDA: Pointer to WDA context
20346 wdaRequest: Pointer to EXTScan req parameters
20347===========================================================================*/
20348VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
20349 tSirEXTScanStopReqParams *wdaRequest)
20350{
20351 WDI_Status status = WDI_STATUS_SUCCESS;
20352 tWDA_ReqParams *pWdaParams;
20353
20354 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20355 "%s:", __func__);
20356 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20357 if (NULL == pWdaParams)
20358 {
20359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20360 "%s: VOS MEM Alloc Failure", __func__);
20361 VOS_ASSERT(0);
20362 return VOS_STATUS_E_NOMEM;
20363 }
20364 pWdaParams->pWdaContext = pWDA;
20365 pWdaParams->wdaMsgParam = wdaRequest;
20366 pWdaParams->wdaWdiApiMsgParam = NULL;
20367
20368 status = WDI_EXTScanStopReq((void *)wdaRequest,
20369 (WDI_EXTScanStopRspCb)WDA_EXTScanStopRspCallback,
20370 (void *)pWdaParams);
20371 if (IS_WDI_STATUS_FAILURE(status))
20372 {
20373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20374 "Failure to request. Free all the memory " );
20375 vos_mem_free(pWdaParams->wdaMsgParam);
20376 vos_mem_free(pWdaParams);
20377 }
20378 return CONVERT_WDI2VOS_STATUS(status);
20379}
20380
20381/*==========================================================================
20382 FUNCTION WDA_ProcessEXTScanGetCachedResultsReq
20383
20384 DESCRIPTION
20385 API to send EXTScan Get Cached Results Request to WDI
20386
20387 PARAMETERS
20388 pWDA: Pointer to WDA context
20389 wdaRequest: Pointer to EXTScan req parameters
20390===========================================================================*/
20391VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
20392 tSirEXTScanGetCachedResultsReqParams *wdaRequest)
20393{
20394 WDI_Status status = WDI_STATUS_SUCCESS;
20395 tWDA_ReqParams *pWdaParams;
20396
20397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20398 "%s: ", __func__);
20399 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20400 if (NULL == pWdaParams)
20401 {
20402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20403 "%s: VOS MEM Alloc Failure", __func__);
20404 VOS_ASSERT(0);
20405 return VOS_STATUS_E_NOMEM;
20406 }
20407 pWdaParams->pWdaContext = pWDA;
20408 pWdaParams->wdaMsgParam = wdaRequest;
20409 pWdaParams->wdaWdiApiMsgParam = NULL;
20410
20411 status = WDI_EXTScanGetCachedResultsReq((void *)wdaRequest,
20412 (WDI_EXTScanGetCachedResultsRspCb)WDA_EXTScanGetCachedResultsRspCallback,
20413 (void *)pWdaParams);
20414 if (IS_WDI_STATUS_FAILURE(status))
20415 {
20416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20417 "Failure to request. Free all the memory " );
20418 vos_mem_free(pWdaParams->wdaMsgParam);
20419 vos_mem_free(pWdaParams);
20420 }
20421 return CONVERT_WDI2VOS_STATUS(status);
20422}
20423
20424/*==========================================================================
20425 FUNCTION WDA_ProcessEXTScanGetCapabilitiesReq
20426
20427 DESCRIPTION
20428 API to send EXTScan Get Capabilities Request to WDI
20429
20430 PARAMETERS
20431 pWDA: Pointer to WDA context
20432 wdaRequest: Pointer to EXTScan req parameters
20433===========================================================================*/
20434VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
20435 tSirGetEXTScanCapabilitiesReqParams *wdaRequest)
20436{
20437 WDI_Status status = WDI_STATUS_SUCCESS;
20438 tWDA_ReqParams *pWdaParams;
20439
20440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20441 "%s:", __func__);
20442 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20443 if (NULL == pWdaParams)
20444 {
20445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20446 "%s: VOS MEM Alloc Failure", __func__);
20447 VOS_ASSERT(0);
20448 return VOS_STATUS_E_NOMEM;
20449 }
20450 pWdaParams->pWdaContext = pWDA;
20451 pWdaParams->wdaMsgParam = wdaRequest;
20452 pWdaParams->wdaWdiApiMsgParam = NULL;
20453
20454 status = WDI_EXTScanGetCapabilitiesReq((void *)wdaRequest,
20455 (WDI_EXTScanGetCapabilitiesRspCb)WDA_EXTScanGetCapabilitiesRspCallback,
20456 (void *)pWdaParams);
20457 if (IS_WDI_STATUS_FAILURE(status))
20458 {
20459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20460 "Failure to request. Free all the memory " );
20461 vos_mem_free(pWdaParams->wdaMsgParam);
20462 vos_mem_free(pWdaParams);
20463 }
20464 return CONVERT_WDI2VOS_STATUS(status);
20465}
20466
20467/*==========================================================================
20468 FUNCTION WDA_ProcessEXTScanSetBSSIDHotlistReq
20469
20470 DESCRIPTION
20471 API to send Set BSSID Hotlist Request to WDI
20472
20473 PARAMETERS
20474 pWDA: Pointer to WDA context
20475 wdaRequest: Pointer to EXTScan req parameters
20476===========================================================================*/
20477VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
20478 tSirEXTScanSetBssidHotListReqParams *wdaRequest)
20479{
20480 WDI_Status status = WDI_STATUS_SUCCESS;
20481 tWDA_ReqParams *pWdaParams;
20482
20483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20484 "%s: ", __func__);
20485 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20486 if (NULL == pWdaParams)
20487 {
20488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20489 "%s: VOS MEM Alloc Failure", __func__);
20490 VOS_ASSERT(0);
20491 return VOS_STATUS_E_NOMEM;
20492 }
20493 pWdaParams->pWdaContext = pWDA;
20494 pWdaParams->wdaMsgParam = wdaRequest;
20495 pWdaParams->wdaWdiApiMsgParam = NULL;
20496
20497 status = WDI_EXTScanSetBSSIDHotlistReq((void *)wdaRequest,
20498 (WDI_EXTScanSetBSSIDHotlistRspCb)WDA_EXTScanSetBSSIDHotlistRspCallback,
20499 (void *)pWdaParams);
20500 if (IS_WDI_STATUS_FAILURE(status))
20501 {
20502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20503 "Failure to request. Free all the memory " );
20504 vos_mem_free(pWdaParams->wdaMsgParam);
20505 vos_mem_free(pWdaParams);
20506 }
20507 return CONVERT_WDI2VOS_STATUS(status);
20508}
20509
20510/*==========================================================================
20511 FUNCTION WDA_ProcessEXTScanReSetBSSIDHotlistReq
20512
20513 DESCRIPTION
20514 API to send Reset BSSID Hotlist Request to WDI
20515
20516 PARAMETERS
20517 pWDA: Pointer to WDA context
20518 wdaRequest: Pointer to EXTScan req parameters
20519===========================================================================*/
20520VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
20521 tSirEXTScanResetBssidHotlistReqParams *wdaRequest)
20522{
20523 WDI_Status status = WDI_STATUS_SUCCESS;
20524 tWDA_ReqParams *pWdaParams;
20525
20526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20527 "%s:", __func__);
20528 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20529 if (NULL == pWdaParams)
20530 {
20531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20532 "%s: VOS MEM Alloc Failure", __func__);
20533 VOS_ASSERT(0);
20534 return VOS_STATUS_E_NOMEM;
20535 }
20536 pWdaParams->pWdaContext = pWDA;
20537 pWdaParams->wdaMsgParam = wdaRequest;
20538 pWdaParams->wdaWdiApiMsgParam = NULL;
20539
20540 status = WDI_EXTScanResetBSSIDHotlistReq((void *)wdaRequest,
20541 (WDI_EXTScanResetBSSIDHotlistRspCb)WDA_EXTScanResetBSSIDHotlistRspCallback,
20542 (void *)pWdaParams);
20543 if (IS_WDI_STATUS_FAILURE(status))
20544 {
20545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20546 "Failure to request. Free all the memory " );
20547 vos_mem_free(pWdaParams->wdaMsgParam);
20548 vos_mem_free(pWdaParams);
20549 }
20550 return CONVERT_WDI2VOS_STATUS(status);
20551}
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053020552
20553/*==========================================================================
20554 FUNCTION WDA_ProcessEXTScanSetSSIDHotlistReq
20555
20556 DESCRIPTION
20557 API to send Set SSID Hotlist Request to WDI
20558
20559 PARAMETERS
20560 pWDA: Pointer to WDA context
20561 wdaRequest: Pointer to EXTScan req parameters
20562===========================================================================*/
20563VOS_STATUS WDA_ProcessEXTScanSetSSIDHotlistReq(tWDA_CbContext *pWDA,
20564 tSirEXTScanSetSsidHotListReqParams *wdaRequest)
20565{
20566 WDI_Status status = WDI_STATUS_SUCCESS;
20567 tWDA_ReqParams *pWdaParams;
20568
20569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20570 "%s: ", __func__);
20571 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20572 if (NULL == pWdaParams)
20573 {
20574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20575 "%s: VOS MEM Alloc Failure", __func__);
20576 VOS_ASSERT(0);
20577 return VOS_STATUS_E_NOMEM;
20578 }
20579 pWdaParams->pWdaContext = pWDA;
20580 pWdaParams->wdaMsgParam = wdaRequest;
20581 pWdaParams->wdaWdiApiMsgParam = NULL;
20582
20583 status = WDI_EXTScanSetSSIDHotlistReq((void *)wdaRequest,
20584 (WDI_EXTScanSetSSIDHotlistRspCb)WDA_EXTScanSetSSIDHotlistRspCallback,
20585 (void *)pWdaParams);
20586 if (IS_WDI_STATUS_FAILURE(status))
20587 {
20588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20589 "Failure to request. Free all the memory " );
20590 vos_mem_free(pWdaParams->wdaMsgParam);
20591 vos_mem_free(pWdaParams);
20592 }
20593 return CONVERT_WDI2VOS_STATUS(status);
20594}
20595
20596/*==========================================================================
20597 FUNCTION WDA_ProcessEXTScanReSetSSIDHotlistReq
20598
20599 DESCRIPTION
20600 API to send Reset SSID Hotlist Request to WDI
20601
20602 PARAMETERS
20603 pWDA: Pointer to WDA context
20604 wdaRequest: Pointer to EXTScan req parameters
20605===========================================================================*/
20606VOS_STATUS WDA_ProcessEXTScanResetSSIDHotlistReq(tWDA_CbContext *pWDA,
20607 tSirEXTScanResetSsidHotlistReqParams *wdaRequest)
20608{
20609 WDI_Status status = WDI_STATUS_SUCCESS;
20610 tWDA_ReqParams *pWdaParams;
20611
20612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20613 "%s:", __func__);
20614 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20615 if (NULL == pWdaParams)
20616 {
20617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20618 "%s: VOS MEM Alloc Failure", __func__);
20619 VOS_ASSERT(0);
20620 return VOS_STATUS_E_NOMEM;
20621 }
20622 pWdaParams->pWdaContext = pWDA;
20623 pWdaParams->wdaMsgParam = wdaRequest;
20624 pWdaParams->wdaWdiApiMsgParam = NULL;
20625
20626 status = WDI_EXTScanResetSSIDHotlistReq((void *)wdaRequest,
20627 (WDI_EXTScanResetSSIDHotlistRspCb)WDA_EXTScanResetSSIDHotlistRspCallback,
20628 (void *)pWdaParams);
20629 if (IS_WDI_STATUS_FAILURE(status))
20630 {
20631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20632 "Failure to request. Free all the memory " );
20633 vos_mem_free(pWdaParams->wdaMsgParam);
20634 vos_mem_free(pWdaParams);
20635 }
20636 return CONVERT_WDI2VOS_STATUS(status);
20637}
20638
Padma, Santhosh Kumarc1f7f052015-08-26 12:29:01 +053020639/*==========================================================================
20640 FUNCTION WDA_ProcessHighPriorityDataInfoInd
20641
20642 DESCRIPTION
20643 API to send Reset SSID Hotlist Request to WDI
20644
20645 PARAMETERS
20646 pWDA: Pointer to WDA context
20647 wdaRequest: Pointer to EXTScan req parameters
20648===========================================================================*/
20649VOS_STATUS WDA_ProcessHighPriorityDataInfoInd(tWDA_CbContext *pWDA,
20650 tSirHighPriorityDataInfoInd *wdaRequest)
20651{
20652 WDI_Status status = WDI_STATUS_SUCCESS;
20653
20654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20655 "%s:", __func__);
20656
20657 status = WDI_HighPriorityDataInfoInd((void *)wdaRequest);
20658 if (WDI_STATUS_PENDING == status)
20659 {
20660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20661 FL("pending status received "));
20662 }
20663 else if (WDI_STATUS_SUCCESS_SYNC != status)
20664 {
20665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20666 FL("Failure status %d"), status);
20667 }
20668 return CONVERT_WDI2VOS_STATUS(status);
20669}
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053020670
Dino Mycle41bdc942014-06-10 11:30:24 +053020671#endif /* WLAN_FEATURE_EXTSCAN */
20672
Sunil Duttbd736ed2014-05-26 21:19:41 +053020673#ifdef WLAN_FEATURE_LINK_LAYER_STATS
20674
20675/*==========================================================================
20676 FUNCTION WDA_LLStatsSetRspCallback
20677
20678 DESCRIPTION
20679 API to process set link layer statistics response from FW
20680
20681 PARAMETERS
20682 pRsp: Pointer to set link layer statistics response
20683 pUserData: Pointer to user data
20684
20685 RETURN VALUE
20686 NONE
20687
20688===========================================================================*/
20689void WDA_LLStatsSetRspCallback(void *pEventData, void* pUserData)
20690{
20691 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20692
20693
20694 if (NULL == pWdaParams)
20695 {
20696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20697 "%s: pWdaParams received NULL", __func__);
20698 VOS_ASSERT(0) ;
20699 return ;
20700 }
20701
20702 /* Do not need to send notification to upper layer
20703 * Just free allocated resources */
20704 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20705 {
20706 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20707 }
20708 if (pWdaParams->wdaMsgParam != NULL)
20709 {
20710 vos_mem_free(pWdaParams->wdaMsgParam);
20711 }
20712 vos_mem_free(pWdaParams) ;
20713
20714 return;
20715}
20716
20717/*==========================================================================
20718 FUNCTION WDA_ProcessLLStatsSetReq
20719
20720 DESCRIPTION
20721 API to send Set Link Layer Stats request to WDI
20722
20723 PARAMETERS
20724 pWDA: Pointer to WDA context
20725 wdaRequest: Pointer to set Link Layer Stats req parameters
20726===========================================================================*/
20727VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
20728 tSirLLStatsSetReq *wdaRequest)
20729{
20730 WDI_Status status = WDI_STATUS_SUCCESS;
20731 tWDA_ReqParams *pWdaParams;
20732
20733 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20734 if (NULL == pWdaParams)
20735 {
20736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20737 "%s: VOS MEM Alloc Failure", __func__);
20738 VOS_ASSERT(0);
20739 return VOS_STATUS_E_NOMEM;
20740 }
20741 pWdaParams->pWdaContext = pWDA;
20742 pWdaParams->wdaMsgParam = wdaRequest;
20743 pWdaParams->wdaWdiApiMsgParam = NULL;
20744
20745 status = WDI_LLStatsSetReq((void *)wdaRequest,
20746 (WDI_LLStatsSetRspCb)WDA_LLStatsSetRspCallback,
20747 (void *)pWdaParams);
20748 if (IS_WDI_STATUS_FAILURE(status))
20749 {
20750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20751 "Failure to request. Free all the memory " );
20752 vos_mem_free(pWdaParams->wdaMsgParam);
20753 vos_mem_free(pWdaParams);
20754 }
20755 return CONVERT_WDI2VOS_STATUS(status);
20756}
20757
20758/*==========================================================================
20759 FUNCTION WDA_LLStatsGetRspCallback
20760
20761 DESCRIPTION
20762 API to process get link layer statistics response from FW
20763
20764 PARAMETERS
20765 pRsp: Pointer to get link layer statistics response
20766 pUserData: Pointer to user data
20767
20768 RETURN VALUE
20769 NONE
20770
20771===========================================================================*/
20772void WDA_LLStatsGetRspCallback(void *pEventData, void* pUserData)
20773{
20774 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20775
20776 if (NULL == pWdaParams)
20777 {
20778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20779 "%s: pWdaParams received NULL", __func__);
20780 VOS_ASSERT(0) ;
20781 return ;
20782 }
20783
20784 /* Do not need to send notification to upper layer
20785 * Just free allocated resources */
20786 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20787 {
20788 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20789 }
20790 if (pWdaParams->wdaMsgParam != NULL)
20791 {
20792 vos_mem_free(pWdaParams->wdaMsgParam);
20793 }
20794 vos_mem_free(pWdaParams) ;
20795
20796 return;
20797}
20798
20799/*==========================================================================
20800 FUNCTION WDA_ProcessLLStatsGetReq
20801
20802 DESCRIPTION
20803 API to send Get Link Layer Stats request to WDI
20804
20805 PARAMETERS
20806 pWDA: Pointer to WDA context
20807 wdaRequest: Pointer to get Link Layer Stats req parameters
20808===========================================================================*/
20809VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
20810 tSirLLStatsGetReq *wdaRequest)
20811{
20812 WDI_Status status = WDI_STATUS_SUCCESS;
20813 tWDA_ReqParams *pWdaParams;
20814
20815 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20816 if (NULL == pWdaParams)
20817 {
20818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20819 "%s: VOS MEM Alloc Failure", __func__);
20820 VOS_ASSERT(0);
20821 return VOS_STATUS_E_NOMEM;
20822 }
20823 pWdaParams->pWdaContext = pWDA;
20824 pWdaParams->wdaMsgParam = wdaRequest;
20825 pWdaParams->wdaWdiApiMsgParam = NULL;
20826
20827 status = WDI_LLStatsGetReq((void *) wdaRequest,
20828 (WDI_LLStatsGetRspCb)WDA_LLStatsGetRspCallback,
20829 (void *)pWdaParams);
20830 if (IS_WDI_STATUS_FAILURE(status))
20831 {
20832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20833 "Failure to request. Free all the memory " );
20834 vos_mem_free(pWdaParams->wdaMsgParam);
20835 vos_mem_free(pWdaParams);
20836 }
20837 return CONVERT_WDI2VOS_STATUS(status);
20838}
20839
20840/*==========================================================================
20841 FUNCTION WDA_LLStatsClearRspCallback
20842
20843 DESCRIPTION
20844 API to process clear link layer statistics response from FW
20845
20846 PARAMETERS
20847 pRsp: Pointer to clear link layer statistics response
20848 pUserData: Pointer to user data
20849
20850 RETURN VALUE
20851 NONE
20852
20853===========================================================================*/
20854void WDA_LLStatsClearRspCallback(void *pEventData, void* pUserData)
20855{
20856 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20857
20858
20859 if (NULL == pWdaParams)
20860 {
20861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20862 "%s: pWdaParams received NULL", __func__);
20863 VOS_ASSERT(0) ;
20864 return ;
20865 }
20866 /* Do not need to send notification to upper layer
20867 * Just free allocated resources */
20868 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20869 {
20870 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20871 }
20872 if (pWdaParams->wdaMsgParam != NULL)
20873 {
20874 vos_mem_free(pWdaParams->wdaMsgParam);
20875 }
20876 vos_mem_free(pWdaParams) ;
20877 return;
20878}
20879
20880/*==========================================================================
20881 FUNCTION WDA_ProcessLLStatsClearReq
20882
20883 DESCRIPTION
20884 API to send Clear Link Layer Stats request to WDI
20885
20886 PARAMETERS
20887 pWDA: Pointer to WDA context
20888 wdaRequest: Pointer to earLink Layer Stats req
20889===========================================================================*/
20890VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
20891 tSirLLStatsClearReq *wdaRequest)
20892{
20893 WDI_Status status = WDI_STATUS_SUCCESS;
20894 tWDA_ReqParams *pWdaParams;
20895
20896 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20897 if (NULL == pWdaParams)
20898 {
20899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20900 "%s: VOS MEM Alloc Failure", __func__);
20901 VOS_ASSERT(0);
20902 return VOS_STATUS_E_NOMEM;
20903 }
20904 pWdaParams->pWdaContext = pWDA;
20905 pWdaParams->wdaMsgParam = wdaRequest;
20906 pWdaParams->wdaWdiApiMsgParam = NULL;
20907
20908 status = WDI_LLStatsClearReq((void *) wdaRequest,
20909 (WDI_LLStatsClearRspCb)WDA_LLStatsClearRspCallback,
20910 (void *)pWdaParams);
20911 if (IS_WDI_STATUS_FAILURE(status))
20912 {
20913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20914 "Failure to request. Free all the memory " );
20915 vos_mem_free(pWdaParams->wdaMsgParam);
20916 vos_mem_free(pWdaParams);
20917 }
20918 return CONVERT_WDI2VOS_STATUS(status);
20919}
20920
20921#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Abhishek Singh85b74712014-10-08 11:38:19 +053020922
Abhishek Singh85b74712014-10-08 11:38:19 +053020923void WDA_FWStatsGetRspCallback(WDI_Status status,void *fwStatsResp,void *pUserData)
20924{
20925 tSirFWStatsInfo *fwStatsinfo = (tSirFWStatsInfo *)pUserData;
20926
20927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20928 "<------ %s " ,__func__);
20929 if (NULL == fwStatsinfo)
20930 {
20931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20932 "%s: pWdaParams received NULL", __func__);
20933 VOS_ASSERT(0);
20934 return;
20935 }
20936
20937 if(fwStatsinfo->callback)
20938 fwStatsinfo->callback(status, fwStatsResp, fwStatsinfo->data);
20939
20940 vos_mem_free(pUserData);
20941 return;
20942}
20943
20944
20945v_VOID_t WDA_ProcessFWStatsGetReq(tWDA_CbContext *pWDA,
20946 tSirFWStatsGetReq *pData)
20947{
20948
20949 WDI_Status wdiStatus;
20950 tSirFWStatsInfo *fwStatsinfo;
20951
20952 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20953 "------> %s" , __func__);
20954
20955 fwStatsinfo =
20956 (tSirFWStatsInfo *)vos_mem_malloc(sizeof(tSirFWStatsInfo));
20957 if (NULL == fwStatsinfo)
20958 {
20959 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20960 "%s: VOS MEM Alloc Failure", __func__);
20961 VOS_ASSERT(0);
20962 vos_mem_free(pData);
20963 return;
20964 }
20965
20966 fwStatsinfo->callback = (tSirFWStatsCallback)(pData->callback);
20967 fwStatsinfo->data = pData->data;
20968
20969 wdiStatus = WDI_FWStatsGetReq(fwStatsinfo,
20970 WDA_FWStatsGetRspCallback,
20971 pData->stats);
20972 if (WDI_STATUS_PENDING == wdiStatus)
20973 {
20974 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20975 "Pending received for %s:%d ", __func__, __LINE__);
20976 }
20977 else if (WDI_STATUS_SUCCESS != wdiStatus)
20978 {
20979 if (fwStatsinfo->callback)
20980 {
20981 fwStatsinfo->callback(WDI_STATUS_E_FAILURE, NULL ,fwStatsinfo->data);
20982 }
20983 vos_mem_free(fwStatsinfo);
20984 }
20985 vos_mem_free(pData);
20986}
20987
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053020988/*==========================================================================
20989 FUNCTION WDA_EncryptMsgRspCallback
20990
20991 DESCRIPTION
20992 API to send Encrypt message response to HDD
20993
20994 PARAMETERS
20995 pEventData: Response from FW
20996 pUserData: Data sent to firmware as part of request
20997===========================================================================*/
20998void WDA_EncryptMsgRspCallback(WDI_Status status, void *pEventData,
20999 void* pUserData)
21000{
21001 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21002 tWDA_CbContext *pWDA = NULL;
21003 tpAniSirGlobal pMac;
21004 vos_msg_t vosMsg;
21005 tpSirEncryptedDataRspParams pEncRspParams;
21006 tpSetEncryptedDataRspParams pEncryptedDataRsp;
21007
21008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21009 FL("%s:"), __func__);
21010 if (NULL == pWdaParams)
21011 {
21012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21013 FL("%s: pWdaParams received NULL"), __func__);
21014 VOS_ASSERT(0);
21015 return;
21016 }
21017
21018 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
21019
21020 if (NULL == pWDA)
21021 {
21022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21023 FL("%s: pWDA received NULL"), __func__);
21024 VOS_ASSERT(0);
21025 goto error;
21026 }
21027
21028 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
21029 if (NULL == pMac)
21030 {
21031 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21032 FL("%s:pMac is NULL"), __func__);
21033 VOS_ASSERT(0);
21034 goto error;
21035 }
21036
21037 pEncryptedDataRsp = (tpSetEncryptedDataRspParams) pEventData;
21038
21039 pEncRspParams = vos_mem_malloc(sizeof(tSirEncryptedDataRspParams));
21040 if (NULL == pEncRspParams)
21041 {
21042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21043 FL("%s: VOS MEM Alloc Failure"), __func__);
21044 VOS_ASSERT(0);
21045 goto error;
21046 }
21047
21048 /* Message Header */
21049 pEncRspParams->mesgType = eWNI_SME_ENCRYPT_MSG_RSP;
21050 pEncRspParams->mesgLen = sizeof(tSirEncryptedDataRspParams);
21051 pEncRspParams->encryptedDataRsp.encryptedPayload.length =
21052 pEncryptedDataRsp->encryptedPayload.length;
21053 vos_mem_copy(pEncRspParams->encryptedDataRsp.encryptedPayload.data,
21054 pEncryptedDataRsp->encryptedPayload.data,
21055 pEncryptedDataRsp->encryptedPayload.length);
21056
21057 /* VOS message wrapper */
21058 vosMsg.type = eWNI_SME_ENCRYPT_MSG_RSP;
21059 vosMsg.bodyptr = (void *)pEncRspParams;
21060 vosMsg.bodyval = 0;
21061
21062 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
21063 {
21064 /* free the mem */
21065 vos_mem_free((v_VOID_t *) pEncRspParams);
21066 }
21067
21068error:
21069
21070 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21071 {
21072 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21073 }
21074 if (pWdaParams->wdaMsgParam != NULL)
21075 {
21076 vos_mem_free(pWdaParams->wdaMsgParam);
21077 }
21078 vos_mem_free(pWdaParams) ;
21079
21080 return;
21081}
21082/*==========================================================================
21083 FUNCTION WDA_ProcessEncryptMsgReq
21084
21085 DESCRIPTION
21086 API to send Encrypt message Request to WDI
21087
21088 PARAMETERS
21089 pWDA: Pointer to WDA context
21090 wdaRequest: Pointer to Encrypt_msg req parameters
21091===========================================================================*/
21092VOS_STATUS WDA_ProcessEncryptMsgReq(tWDA_CbContext *pWDA,
21093 u8 *wdaRequest)
21094{
21095 WDI_Status status = WDI_STATUS_SUCCESS;
21096 tWDA_ReqParams *pWdaParams;
21097
21098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21099 FL("%s: "), __func__);
21100 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21101 if (NULL == pWdaParams)
21102 {
21103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21104 FL("%s: VOS MEM Alloc Failure"), __func__);
21105 VOS_ASSERT(0);
21106 return VOS_STATUS_E_NOMEM;
21107 }
21108 pWdaParams->pWdaContext = pWDA;
21109 pWdaParams->wdaMsgParam = wdaRequest;
21110 pWdaParams->wdaWdiApiMsgParam = NULL;
21111
21112 status = WDI_EncryptMsgReq((void *)wdaRequest,
21113 (WDI_EncryptMsgRspCb)WDA_EncryptMsgRspCallback,
21114 (void *)pWdaParams);
21115 if (IS_WDI_STATUS_FAILURE(status))
21116 {
21117 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21118 FL("Failure to request. Free all the memory " ));
21119 vos_mem_free(pWdaParams->wdaMsgParam);
21120 vos_mem_free(pWdaParams);
21121 }
21122 return CONVERT_WDI2VOS_STATUS(status);
21123}
Abhishek Singh41988ba2015-05-25 19:42:29 +053021124/*==========================================================================
21125 FUNCTION WDA_ProcessSetRtsCtsHTVhtInd
21126
21127 DESCRIPTION
21128 API to enable/disable RTS/CTS for different modes.
21129
21130 PARAMETERS
21131 pWDA: Pointer to WDA context
21132 rtsCtsVal : Bit mask value to enable RTS/CTS for different modes
21133===========================================================================*/
21134
21135VOS_STATUS
21136WDA_ProcessSetRtsCtsHTVhtInd(tWDA_CbContext *pWDA,
21137 tANI_U32 rtsCtsVal)
21138{
21139 WDI_Status status;
21140 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21141 FL("---> %s"), __func__);
21142 status = WDI_SetRtsCtsHTVhtInd(rtsCtsVal);
21143 if (WDI_STATUS_PENDING == status)
21144 {
21145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21146 FL("pending status received "));
21147 }
21148 else if (WDI_STATUS_SUCCESS_SYNC != status)
21149 {
21150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21151 FL("Failure status %d"), status);
21152 }
21153 return CONVERT_WDI2VOS_STATUS(status) ;
21154}
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053021155
21156void WDA_MonModeRspCallback(void *pEventData, void* pUserData)
Katya Nigamf0511f62015-05-05 16:40:57 +053021157{
21158 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053021159 tSirMonModeReq *pData;
Katya Nigamf0511f62015-05-05 16:40:57 +053021160
21161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21162 "<------ %s " ,__func__);
21163 if (NULL == pWdaParams)
21164 {
21165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21166 "%s: pWdaParams received NULL", __func__);
21167 VOS_ASSERT(0) ;
21168 return ;
21169 }
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053021170 pData = (tSirMonModeReq *)pWdaParams->wdaMsgParam;
21171 if (pData != NULL) {
21172 pData->callback(pData->magic, pData->cmpVar);
21173 vos_mem_free(pWdaParams->wdaMsgParam);
21174 }
Katya Nigamf0511f62015-05-05 16:40:57 +053021175 vos_mem_free(pWdaParams) ;
21176
21177 return;
21178}
21179
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053021180VOS_STATUS WDA_ProcessMonStartReq( tWDA_CbContext *pWDA, void *wdaRequest)
Katya Nigamf0511f62015-05-05 16:40:57 +053021181{
21182
21183 WDI_Status status = WDI_STATUS_SUCCESS;
21184 tWDA_ReqParams *pWdaParams;
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053021185 tSirMonModeReq *pMonModeData = (tSirMonModeReq *)wdaRequest;
Katya Nigamf0511f62015-05-05 16:40:57 +053021186
21187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21188 FL("%s: "), __func__);
21189 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21190 if (NULL == pWdaParams)
21191 {
21192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21193 FL("%s: VOS MEM Alloc Failure"), __func__);
21194 VOS_ASSERT(0);
21195 return VOS_STATUS_E_NOMEM;
21196 }
21197 pWdaParams->pWdaContext = pWDA;
21198 pWdaParams->wdaMsgParam = wdaRequest;
21199 pWdaParams->wdaWdiApiMsgParam = NULL;
21200
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053021201 status = WDI_MonStartReq(pMonModeData->data,
21202 (WDI_MonModeRspCb)WDA_MonModeRspCallback,
Katya Nigamf0511f62015-05-05 16:40:57 +053021203 (void *)pWdaParams);
21204 if (IS_WDI_STATUS_FAILURE(status))
21205 {
21206 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21207 "Failure to request. Free all the memory " );
21208 vos_mem_free(pWdaParams->wdaMsgParam);
21209 vos_mem_free(pWdaParams);
21210 }
21211 return CONVERT_WDI2VOS_STATUS(status);
21212}
21213
Katya Nigamf0511f62015-05-05 16:40:57 +053021214VOS_STATUS WDA_ProcessMonStopReq( tWDA_CbContext *pWDA, void* wdaRequest)
21215{
21216
21217 WDI_Status status = WDI_STATUS_SUCCESS;
21218 tWDA_ReqParams *pWdaParams;
21219
21220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21221 FL("%s: "), __func__);
21222 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21223 if (NULL == pWdaParams)
21224 {
21225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21226 FL("%s: VOS MEM Alloc Failure"), __func__);
21227 VOS_ASSERT(0);
21228 return VOS_STATUS_E_NOMEM;
21229 }
21230 pWdaParams->pWdaContext = pWDA;
21231 pWdaParams->wdaMsgParam = wdaRequest;
21232 pWdaParams->wdaWdiApiMsgParam = NULL;
21233
Bhargav Shah1ae5de02015-07-20 13:32:31 +053021234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21235 "%s: Processing Mon stop request", __func__);
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053021236 status = WDI_MonStopReq((WDI_MonModeRspCb)WDA_MonModeRspCallback,
Katya Nigamf0511f62015-05-05 16:40:57 +053021237 (void *)pWdaParams);
21238
21239 if (IS_WDI_STATUS_FAILURE(status))
21240 {
21241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21242 "Failure to request. Free all the memory " );
21243 vos_mem_free(pWdaParams->wdaMsgParam);
21244 vos_mem_free(pWdaParams);
21245 }
21246 return CONVERT_WDI2VOS_STATUS(status);
21247}
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +053021248
21249VOS_STATUS WDA_ProcessEnableDisableCAEventInd(tWDA_CbContext *pWDA, tANI_U8 val)
21250{
21251 WDI_Status status;
21252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21253 FL("---> %s"), __func__);
21254 status = WDI_EnableDisableCAEventInd(val);
21255 if (WDI_STATUS_PENDING == status)
21256 {
21257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21258 FL("pending status received "));
21259 }
21260 else if (WDI_STATUS_SUCCESS_SYNC != status)
21261 {
21262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21263 FL("Failure status %d"), status);
21264 }
21265 return CONVERT_WDI2VOS_STATUS(status) ;
21266}
Arun Khandavalli7eeb1592015-10-19 21:36:57 +053021267
21268/*==========================================================================
21269 FUNCTION WDA_WifiConfigSetRspCallback
21270
21271 DESCRIPTION
21272 API to process set WifiConfig response from FW
21273
21274 PARAMETERS
21275 pRsp: Pointer to set WifiConfig response
21276 pUserData: Pointer to user data
21277
21278 RETURN VALUE
21279 NONE
21280
21281===========================================================================*/
21282void WDA_WifiConfigSetRspCallback(void *pEventData, void* pUserData)
21283{
21284 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21285
21286 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21287 "<------ %s " ,__func__);
21288
21289 if(NULL == pWdaParams)
21290 {
21291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21292 "%s: pWdaParams received NULL", __func__);
21293 VOS_ASSERT(0);
21294 return ;
21295 }
21296
21297 if(NULL == pWdaParams->wdaMsgParam)
21298 {
21299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21300 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
21301 VOS_ASSERT(0);
21302 vos_mem_free(pWdaParams);
21303 return ;
21304 }
21305
21306 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21307 vos_mem_free(pWdaParams->wdaMsgParam);
21308 vos_mem_free(pWdaParams);
21309
21310 return;
21311}
21312
21313/*==========================================================================
21314 FUNCTION WDA_ProcessWifiConfigReq
21315
21316 DESCRIPTION
21317 API to send Set WifiConfig params request to WDI
21318
21319 PARAMETERS
21320 pWDA: Pointer to WDA context
21321 wdaRequest: Pointer to set WifiConfig req parameters
21322===========================================================================*/
21323
21324VOS_STATUS WDA_ProcessWifiConfigReq(tWDA_CbContext *pWDA,
21325 tSetWifiConfigParams *pwdaWificonfig)
21326{
21327 WDI_Status status = WDI_STATUS_SUCCESS;
21328 WDI_WifiConfigSetReqType *pwdiWifConfigSetReqParams;
21329 tWDA_ReqParams *pWdaParams ;
21330 WDI_Status wstatus;
21331
21332 /* Sanity Check*/
21333 if(NULL == pwdaWificonfig)
21334 {
21335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21336 "%s: tSetWifiConfigParams received NULL", __func__);
21337 VOS_ASSERT(0) ;
21338 return VOS_STATUS_E_FAULT;
21339 }
21340
21341 pwdiWifConfigSetReqParams = (WDI_WifiConfigSetReqType *)vos_mem_malloc(
21342 sizeof(WDI_WifiConfigSetReqType));
21343 if(NULL == pwdiWifConfigSetReqParams)
21344 {
21345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21346 "%s: VOS MEM Alloc Failure", __func__);
21347 VOS_ASSERT(0);
21348 vos_mem_free(pwdaWificonfig);
21349 return VOS_STATUS_E_NOMEM;
21350 }
21351
21352 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
21353 if(NULL == pWdaParams)
21354 {
21355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21356 "%s: VOS MEM Alloc Failure", __func__);
21357 VOS_ASSERT(0);
21358 vos_mem_free(pwdiWifConfigSetReqParams);
21359 vos_mem_free(pwdaWificonfig);
21360 return VOS_STATUS_E_NOMEM;
21361 }
21362 pwdiWifConfigSetReqParams->paramType = pwdaWificonfig->paramType;
21363 pwdiWifConfigSetReqParams->paramValue = pwdaWificonfig->paramValue;
21364 vos_mem_copy(pwdiWifConfigSetReqParams->bssId,
21365 &(pwdaWificonfig->bssId), sizeof(tSirMacAddr));
21366
21367 pWdaParams->pWdaContext = pWDA;
Arun Khandavallic7ca4172015-10-21 10:42:42 +053021368 pWdaParams->wdaMsgParam = pwdaWificonfig;
Arun Khandavalli7eeb1592015-10-19 21:36:57 +053021369 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiWifConfigSetReqParams;
21370
21371 wstatus = WDI_WifiConfigSetReq(pwdiWifConfigSetReqParams,
21372 (WDI_WifiConfigSetRspCb)WDA_WifiConfigSetRspCallback,
21373 pWdaParams);
21374 if(IS_WDI_STATUS_FAILURE(wstatus))
21375 {
21376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21377 "Failure in sendind WifiConfigReq, free all the memory" );
21378 status = CONVERT_WDI2VOS_STATUS(wstatus);
21379 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
21380 vos_mem_free(pWdaParams->wdaMsgParam);
21381 vos_mem_free(pWdaParams);
21382 }
21383
21384 return status;
21385
21386}
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053021387
21388#ifdef FEATURE_OEM_DATA_SUPPORT
21389/*
21390 * FUNCTION: WDA_ProcessStartOemDataReqIndNew
21391 * Request to WDI.
21392 */
21393VOS_STATUS WDA_ProcessStartOemDataReqIndNew(tWDA_CbContext *pWDA,
21394 tOemDataReqNewConfig *pOemDataReqNewConfig)
21395{
21396 VOS_STATUS status = VOS_STATUS_SUCCESS;
21397 WDI_Status wstatus;
21398 WDI_OemDataReqNewConfig *wdiOemDataReqNewConfig;
21399
21400 /* Sanity Check*/
21401 if(NULL == pOemDataReqNewConfig)
21402 {
21403 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21404 "%s: pOemDataReqNewConfig received NULL", __func__);
21405 VOS_ASSERT(0) ;
21406 return VOS_STATUS_E_FAULT;
21407 }
21408
21409 wdiOemDataReqNewConfig = (WDI_OemDataReqNewConfig *)vos_mem_malloc(
21410 sizeof(WDI_OemDataReqNewConfig));
21411 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21412 "------> %s " ,__func__);
21413
21414 if(NULL == wdiOemDataReqNewConfig)
21415 {
21416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21417 "%s: VOS MEM Alloc Failure", __func__);
21418 VOS_ASSERT(0);
21419 vos_mem_free(pOemDataReqNewConfig);
21420 return VOS_STATUS_E_NOMEM;
21421 }
21422
21423 vos_mem_copy(wdiOemDataReqNewConfig, pOemDataReqNewConfig,
21424 sizeof(WDI_OemDataReqNewConfig));
21425
21426 wstatus = WDI_StartOemDataReqIndNew(wdiOemDataReqNewConfig);
21427
21428 if (WDI_STATUS_PENDING == wstatus)
21429 {
21430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21431 FL("pending status received "));
21432 }
21433 else if ((WDI_STATUS_SUCCESS_SYNC != wstatus) && (WDI_STATUS_SUCCESS != wstatus))
21434 {
21435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21436 FL("Failure in OemDataReqIndNew WDI API, free all memory %d"), wstatus);
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053021437 }
21438
Selvaraj, Sridhar2133b112016-04-13 14:45:00 +053021439 vos_mem_free(wdiOemDataReqNewConfig);
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053021440 vos_mem_free(pOemDataReqNewConfig);
21441
21442 return status;
21443}
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053021444
Mahesh A Saptasagarcfc65ae2015-12-22 15:06:10 +053021445void WDA_GetCurrentAntennaIndexCallback(WDI_Status status, void *params,
21446 void *pUserData)
21447{
21448 tSirAntennaDiversitySelectionInfo *pAntennaDivSelInfo =
21449 (tSirAntennaDiversitySelectionInfo *)pUserData;
21450
21451 tSirAntennaDivSelRsp *resParams = (tSirAntennaDivSelRsp *)params;
21452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21453 "<------ %s " ,__func__);
21454 if (NULL == pAntennaDivSelInfo)
21455 {
21456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21457 "%s: pWdaParams received NULL", __func__);
21458 VOS_ASSERT(0) ;
21459 return ;
21460 }
21461 if (NULL == resParams)
21462 {
21463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21464 "%s: resParams received NULL", __func__);
21465 VOS_ASSERT(0) ;
21466 return ;
21467 }
21468
21469 if (pAntennaDivSelInfo->callback)
21470 {
21471 if (WDI_STATUS_SUCCESS == status)
21472 {
21473 pAntennaDivSelInfo->callback(resParams->selectedAntennaId,
21474 pAntennaDivSelInfo->data);
21475 }
21476 else
21477 {
21478 pAntennaDivSelInfo->callback(-1,
21479 pAntennaDivSelInfo->data);
21480 }
21481 }
21482
21483 vos_mem_free(pUserData);
21484 return;
21485}
21486
21487/*
21488 * FUNCTION: WDA_ProcessAntennaDiversitySelectionReq
21489 * Request to WDI.
21490 */
21491v_VOID_t WDA_ProcessAntennaDiversitySelectionReq(tWDA_CbContext *pWDA,
21492 tSirAntennaDiversitySelectionReq *pData)
21493{
21494 WDI_Status wdiStatus;
21495 tSirAntennaDiversitySelectionInfo *pAntennaDivSelInfo;
21496
21497 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21498 "------> %s " , __func__);
21499
21500 pAntennaDivSelInfo = (tSirAntennaDiversitySelectionInfo *)
21501 vos_mem_malloc(sizeof(tSirAntennaDiversitySelectionInfo));
21502 if (NULL == pAntennaDivSelInfo)
21503 {
21504 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21505 "%s: VOS MEM Alloc Failure", __func__);
21506 VOS_ASSERT(0);
21507 vos_mem_free(pData);
21508 return;
21509 }
21510
21511 pAntennaDivSelInfo->callback = (tAntennaDivSelCB)(pData->callback);
21512 pAntennaDivSelInfo->data = pData->data;
21513
21514 wdiStatus = WDI_GetCurrentAntennaIndex(pAntennaDivSelInfo,
21515 WDA_GetCurrentAntennaIndexCallback, pData->reserved);
21516
21517 if (WDI_STATUS_PENDING == wdiStatus)
21518 {
21519 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21520 "Pending received for %s:%d ", __func__, __LINE__);
21521 }
21522 else if (WDI_STATUS_SUCCESS != wdiStatus)
21523 {
21524 if (pAntennaDivSelInfo->callback)
21525 {
21526 pAntennaDivSelInfo->callback(-1, pAntennaDivSelInfo->data);
21527 }
21528 }
21529
21530 vos_mem_free(pData);
21531 return;
21532}
21533
Mahesh A Saptasagar7d432952016-02-09 14:01:03 +053021534/*
21535 * FUNCTION: WDA_ProcessBcnMissPenaltyCount
21536 * Request to WDI.
21537 */
21538VOS_STATUS WDA_ProcessBcnMissPenaltyCount(tWDA_CbContext *pWDA,
21539 tModifyRoamParamsReqParams *params)
21540{
21541 WDI_Status status;
21542
21543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21544 FL("---> %s"), __func__);
21545
21546 if (NULL == params)
21547 {
21548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21549 FL("tModifyRoamParamsReqParams is received NULL"));
21550 return VOS_STATUS_E_NOMEM;
21551 }
21552
21553 status = WDI_SetBcnMissPenaltyCount((WDI_ModifyRoamParamsReqType *)params);
21554 if (WDI_STATUS_PENDING == status)
21555 {
21556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21557 FL("pending status received "));
21558 }
21559 else if (WDI_STATUS_SUCCESS_SYNC != status)
21560 {
21561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21562 FL("Failure status %d"), status);
21563 }
21564 vos_mem_free(params);
21565 return CONVERT_WDI2VOS_STATUS(status) ;
21566}
21567
Mahesh A Saptasagarcfc65ae2015-12-22 15:06:10 +053021568#endif