blob: d54811b4cfe1d6b1681c14935013fd5c47130ffd [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Padma, Santhosh Kumarf75c37b2016-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 Singh447839d2015-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) &&\
134 (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) && (mac_addr[3] == 0x00))
135
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
Dino Mycle41bdc942014-06-10 11:30:24 +0530230#ifdef WLAN_FEATURE_EXTSCAN
231VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
232 tSirEXTScanStartReqParams *wdaRequest);
233VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
234 tSirEXTScanStopReqParams *wdaRequest);
235VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
236 tSirEXTScanGetCachedResultsReqParams *wdaRequest);
237VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
238 tSirGetEXTScanCapabilitiesReqParams *wdaRequest);
239VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
240 tSirEXTScanSetBssidHotListReqParams *wdaRequest);
241VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
242 tSirEXTScanResetBssidHotlistReqParams *wdaRequest);
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +0530243VOS_STATUS WDA_ProcessEXTScanSetSSIDHotlistReq(tWDA_CbContext *pWDA,
244 tSirEXTScanSetSsidHotListReqParams *wdaRequest);
245VOS_STATUS WDA_ProcessEXTScanResetSSIDHotlistReq(tWDA_CbContext *pWDA,
246 tSirEXTScanResetSsidHotlistReqParams *wdaRequest);
Padma, Santhosh Kumarc1f7f052015-08-26 12:29:01 +0530247VOS_STATUS WDA_ProcessHighPriorityDataInfoInd(tWDA_CbContext *pWDA,
248 tSirHighPriorityDataInfoInd *wdaRequest);
Dino Mycle41bdc942014-06-10 11:30:24 +0530249#endif /* WLAN_FEATURE_EXTSCAN */
250
Sunil Duttbd736ed2014-05-26 21:19:41 +0530251#ifdef WLAN_FEATURE_LINK_LAYER_STATS
252VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
253 tSirLLStatsSetReq *wdaRequest);
254
255VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
256 tSirLLStatsGetReq *wdaRequest);
257
258VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
259 tSirLLStatsClearReq *wdaRequest);
260#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Abhishek Singh85b74712014-10-08 11:38:19 +0530261
262v_VOID_t WDA_ProcessFWStatsGetReq(tWDA_CbContext *pWDA,
263 tSirFWStatsGetReq *wdaRequest);
264
Srinivas Dasari4dae48f2014-11-26 21:14:16 +0530265VOS_STATUS WDA_ProcessEncryptMsgReq(tWDA_CbContext *pWDA,
266 u8 *wdaRequest);
Abhishek Singh41988ba2015-05-25 19:42:29 +0530267VOS_STATUS
268WDA_ProcessSetRtsCtsHTVhtInd(tWDA_CbContext *pWDA,
269 tANI_U32 val);
Srinivas Dasari4dae48f2014-11-26 21:14:16 +0530270
c_manjeecfd1efb2015-09-25 19:32:34 +0530271VOS_STATUS
272WDA_ProcessFwrMemDumpReq(tWDA_CbContext *pWDA,
273 tAniFwrDumpReq* pFwrMemDumpReq);
Srinivas Dasari32a79262015-02-19 13:04:49 +0530274
Katya Nigamf0511f62015-05-05 16:40:57 +0530275VOS_STATUS WDA_ProcessMonStartReq( tWDA_CbContext *pWDA, void* wdaRequest);
276VOS_STATUS WDA_ProcessMonStopReq( tWDA_CbContext *pWDA, void* wdaRequest);
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +0530277VOS_STATUS WDA_ProcessEnableDisableCAEventInd(tWDA_CbContext *pWDA, tANI_U8 val);
Arun Khandavalli7eeb1592015-10-19 21:36:57 +0530278
279VOS_STATUS WDA_ProcessWifiConfigReq(tWDA_CbContext *pWDA,
280 tSetWifiConfigParams *pwdaWificonfig);
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +0530281
282VOS_STATUS WDA_ProcessStartOemDataReqIndNew(tWDA_CbContext *pWDA,
283 tOemDataReqNewConfig *pOemDataReqNewConfig);
284
Mahesh A Saptasagarb63b3e22015-12-22 15:06:10 +0530285
286v_VOID_t WDA_ProcessAntennaDiversitySelectionReq(tWDA_CbContext *pWDA,
287 tSirAntennaDiversitySelectionReq *pData);
288
Mahesh A Saptasagar41f9ddd2016-02-09 14:01:03 +0530289VOS_STATUS WDA_ProcessBcnMissPenaltyCount(tWDA_CbContext *pWDA,
290 tModifyRoamParamsReqParams *params);
Srinivas Dasari32a79262015-02-19 13:04:49 +0530291/*
292 * FUNCTION: WDA_ProcessNanRequest
293 * Process NAN request
294 */
295VOS_STATUS WDA_ProcessNanRequest(tWDA_CbContext *pWDA,
296 tNanRequest *wdaRequest)
297{
298 WDI_Status status = WDI_STATUS_SUCCESS;
299 tWDA_ReqParams *pWdaParams;
300 WDI_NanRequestType *wdiRequest = NULL;
301 size_t wdiReqLength = sizeof(WDI_NanRequestType)
302 - sizeof(wdiRequest->request_data)
303 + wdaRequest->request_data_len;
304
305 wdiRequest = (WDI_NanRequestType *)vos_mem_malloc(wdiReqLength);
306
307 if (NULL == wdiRequest)
308 {
309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
310 "%s: VOS MEM Alloc Failure, size : %zu", __func__,
311 wdiReqLength);
312 vos_mem_free(wdaRequest);
313 return VOS_STATUS_E_NOMEM;
314 }
315
316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
317 "WDA: Process Nan Request length: %zu", wdiReqLength);
318
319 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
320 if (NULL == pWdaParams)
321 {
322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
323 "%s: VOS MEM Alloc Failure for tWDA_ReqParams", __func__);
324 VOS_ASSERT(0);
325 vos_mem_free(wdaRequest);
326 vos_mem_free(wdiRequest);
327 return VOS_STATUS_E_NOMEM;
328 }
329
330 wdiRequest->request_data_len = wdaRequest->request_data_len;
331
332 vos_mem_copy( wdiRequest->request_data,
333 wdaRequest->request_data,
334 wdaRequest->request_data_len);
335
336 vos_mem_free(wdaRequest);
337
338 pWdaParams->pWdaContext = pWDA;
339 pWdaParams->wdaMsgParam = NULL;
340 pWdaParams->wdaWdiApiMsgParam = wdiRequest;
341
342 status = WDI_NanRequest(wdiRequest, pWdaParams);
343
344 if (IS_WDI_STATUS_FAILURE(status))
345 {
346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
347 "Failure to request. Free all the memory " );
348 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
349 vos_mem_free(pWdaParams);
350 }
351
352 return CONVERT_WDI2VOS_STATUS(status) ;
353}
354
Padma, Santhosh Kumar9093b202015-07-21 15:37:38 +0530355/**
356 * wda_state_info_dump() - prints state information of wda layer
357 */
358static void wda_state_info_dump(void)
359{
360 v_CONTEXT_t vos_ctx_ptr = NULL;
361 tWDA_CbContext *wda = NULL ;
Srinivas Dasari32a79262015-02-19 13:04:49 +0530362
Padma, Santhosh Kumar9093b202015-07-21 15:37:38 +0530363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
364 "<------ %s " ,__func__);
365
366 /* Get the Global VOSS Context */
367 vos_ctx_ptr = vos_get_global_context(VOS_MODULE_ID_VOSS, NULL);
368
369 if (NULL != vos_ctx_ptr)
370 wda = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA,
371 vos_ctx_ptr );
372 else {
373 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
374 "%s: Invalid Global VOSS Context", __func__);
375 VOS_ASSERT(0);
376 return;
377 }
378
379 if (NULL != wda)
380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
381 "wdaState: %d linkState: %d", wda->wdaState,
382 wda->linkState);
383 else {
384 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
385 "%s: Invalid WDA Context", __func__);
386 VOS_ASSERT(0);
387 }
388}
389
390/**
391 * wda_register_debug_callback() - registration function for wda layer
392 * to print wda state information
393 */
394static void wda_register_debug_callback(void)
395{
396 vos_register_debug_callback(VOS_MODULE_ID_WDA, &wda_state_info_dump);
397}
Srinivas Dasari32a79262015-02-19 13:04:49 +0530398
Jeff Johnson295189b2012-06-20 16:38:30 -0700399/*
400 * FUNCTION: WDA_open
401 * Allocate the WDA context
402 */
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530403VOS_STATUS WDA_open(v_PVOID_t pVosContext, v_PVOID_t devHandle,
Jeff Johnson295189b2012-06-20 16:38:30 -0700404 tMacOpenParameters *pMacParams )
405{
406 tWDA_CbContext *wdaContext;
407 VOS_STATUS status;
408 WDI_DeviceCapabilityType wdiDevCapability = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700409 /* Allocate WDA context */
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +0530410 status = vos_alloc_context(pVosContext, VOS_MODULE_ID_WDA,
Jeff Johnson295189b2012-06-20 16:38:30 -0700411 (v_VOID_t **)&wdaContext, sizeof(tWDA_CbContext)) ;
412 if(!VOS_IS_STATUS_SUCCESS(status))
413 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +0530414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "%s: Failed to "
415 "allocate context for WDA - status = %d",__func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700416 return VOS_STATUS_E_NOMEM;
417 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700418 /*__asm int 3;*/
419 vos_mem_zero(wdaContext,sizeof(tWDA_CbContext));
420
421 /* Initialize data structures */
422 wdaContext->pVosContext = pVosContext;
423 wdaContext->wdaState = WDA_INIT_STATE;
424 wdaContext->uTxFlowMask = WDA_TXFLOWMASK;
425
426 /* Initialize WDA-WDI synchronization event */
427 status = vos_event_init(&wdaContext->wdaWdiEvent);
428 if(!VOS_IS_STATUS_SUCCESS(status))
429 {
430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800431 "WDI Sync Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800432 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700433 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700434 /* Init Frame transfer event */
435 status = vos_event_init(&wdaContext->txFrameEvent);
436 if(!VOS_IS_STATUS_SUCCESS(status))
437 {
438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800439 "VOS Mgmt Frame Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800440 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700441 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700442 status = vos_event_init(&wdaContext->suspendDataTxEvent);
443 if(!VOS_IS_STATUS_SUCCESS(status))
444 {
445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800446 "VOS suspend data tx Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800447 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700448 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700449 status = vos_event_init(&wdaContext->waitOnWdiIndicationCallBack);
450 if(!VOS_IS_STATUS_SUCCESS(status))
451 {
452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800453 "VOS wait On Wdi Ind Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800454 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700455 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700456 vos_trace_setLevel(VOS_MODULE_ID_WDA,VOS_TRACE_LEVEL_ERROR);
Jeff Johnson295189b2012-06-20 16:38:30 -0700457 wdaContext->driverMode = pMacParams->driverType;
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530458 if(WDI_STATUS_SUCCESS != WDI_Init(devHandle, &wdaContext->pWdiContext,
Jeff Johnson295189b2012-06-20 16:38:30 -0700459 &wdiDevCapability, pMacParams->driverType))
460 {
461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
462 "WDI Init failed" );
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800463 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700464 }
465 else
466 {
467 pMacParams->maxStation = wdiDevCapability.ucMaxSTASupported ;
468 pMacParams->maxBssId = wdiDevCapability.ucMaxBSSSupported;
469 pMacParams->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
Jeff Johnson295189b2012-06-20 16:38:30 -0700470 /* update max STA in WDA used for BA */
471 wdaContext->wdaMaxSta = pMacParams->maxStation;
472 /* store the frameTransRequired flag in wdaContext, to send this to HAL
473 * in WDA_Start
474 */
475 wdaContext->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
476 }
Padma, Santhosh Kumar9093b202015-07-21 15:37:38 +0530477
478 wda_register_debug_callback();
479
Jeff Johnson295189b2012-06-20 16:38:30 -0700480 return status;
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800481
482error:
483 vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
484 return VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -0700485}
486
Jeff Johnson295189b2012-06-20 16:38:30 -0700487/*
488 * FUNCTION: WDA_preStart
489 * Trigger DAL-AL to start CFG download
490 */
491VOS_STATUS WDA_preStart(v_PVOID_t pVosContext)
492{
493 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
494 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700495 /*
496 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
497 */
498 wdaMsg.type = WNI_CFG_DNLD_REQ ;
499 wdaMsg.bodyptr = NULL;
500 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700501 /* post the message.. */
502 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
503 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
504 {
505 vosStatus = VOS_STATUS_E_BADMSG;
506 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700507 return( vosStatus );
508}
Jeff Johnson295189b2012-06-20 16:38:30 -0700509/*
510 * FUNCTION: WDA_wdiStartCallback
511 * Once WDI_Start is finished, WDI start callback will be called by WDI
512 * to indicate completion of WDI_Start.
513 */
514void WDA_wdiStartCallback(WDI_StartRspParamsType *wdiRspParams,
515 void *pVosContext)
516{
517 tWDA_CbContext *wdaContext;
518 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700519 if (NULL == pVosContext)
520 {
521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700522 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700523 return;
524 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700525 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
526 if (NULL == wdaContext)
527 {
528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700529 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700530 return;
531 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700532 if (WDI_STATUS_SUCCESS != wdiRspParams->wdiStatus)
533 {
534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700535 "%s: WDI_Start() failure reported", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700536 }
537 else
538 {
539 wdaContext->wdaState = WDA_START_STATE;
540 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700541 /* extract and save version information from the Start Response */
542 wdaContext->wcnssWlanCompiledVersion.major =
543 wdiRspParams->wlanCompiledVersion.major;
544 wdaContext->wcnssWlanCompiledVersion.minor =
545 wdiRspParams->wlanCompiledVersion.minor;
546 wdaContext->wcnssWlanCompiledVersion.version =
547 wdiRspParams->wlanCompiledVersion.version;
548 wdaContext->wcnssWlanCompiledVersion.revision =
549 wdiRspParams->wlanCompiledVersion.revision;
550 wdaContext->wcnssWlanReportedVersion.major =
551 wdiRspParams->wlanReportedVersion.major;
552 wdaContext->wcnssWlanReportedVersion.minor =
553 wdiRspParams->wlanReportedVersion.minor;
554 wdaContext->wcnssWlanReportedVersion.version =
555 wdiRspParams->wlanReportedVersion.version;
556 wdaContext->wcnssWlanReportedVersion.revision =
557 wdiRspParams->wlanReportedVersion.revision;
558 wpalMemoryCopy(wdaContext->wcnssSoftwareVersionString,
559 wdiRspParams->wcnssSoftwareVersion,
560 sizeof(wdaContext->wcnssSoftwareVersionString));
561 wpalMemoryCopy(wdaContext->wcnssHardwareVersionString,
562 wdiRspParams->wcnssHardwareVersion,
563 sizeof(wdaContext->wcnssHardwareVersionString));
Jeff Johnson295189b2012-06-20 16:38:30 -0700564 /* Notify WDA_start that WDI_Start has completed */
565 status = vos_event_set(&wdaContext->wdaWdiEvent);
Jeff Johnson43971f52012-07-17 12:26:56 -0700566 if (VOS_STATUS_SUCCESS != status)
Jeff Johnson295189b2012-06-20 16:38:30 -0700567 {
568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700569 "%s: Unable to unblock WDA_start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700570 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700571 return;
572}
573
Jeff Johnson295189b2012-06-20 16:38:30 -0700574/*
575 * FUNCTION: WDA_start
576 * Prepare TLV configuration and call WDI_Start.
577 */
Jeff Johnson295189b2012-06-20 16:38:30 -0700578VOS_STATUS WDA_start(v_PVOID_t pVosContext)
579{
580 tWDA_CbContext *wdaContext;
581 VOS_STATUS status;
582 WDI_Status wdiStatus;
583 WDI_StartReqParamsType wdiStartParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700584 if (NULL == pVosContext)
585 {
586 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700587 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700588 return VOS_STATUS_E_FAILURE;
589 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700590 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
591 if (NULL == wdaContext)
592 {
593 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700594 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700595 return VOS_STATUS_E_FAILURE;
596 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700597 /* Non-FTM mode, WDA status for START must be INIT
598 * FTM mode, WDA Status for START can be INIT or STOP */
599 if ( (WDA_INIT_STATE != wdaContext->wdaState) &&
600 (WDA_STOP_STATE != wdaContext->wdaState) )
601 {
602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
603 "%s: Invoked from wrong state %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700604 __func__, wdaContext->wdaState );
Jeff Johnson295189b2012-06-20 16:38:30 -0700605 return VOS_STATUS_E_FAILURE;
606 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700607 /* initialize the wdiStartParam. Note that we can create this on
608 the stack since we won't exit until WDI_Start() completes or
609 times out */
610 vos_mem_set(&wdiStartParam, sizeof(wdiStartParam), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700611 wdiStartParam.wdiDriverType = wdaContext->driverMode;
Jeff Johnson295189b2012-06-20 16:38:30 -0700612 /* prepare the config TLV for the WDI */
613 status = WDA_prepareConfigTLV(pVosContext, &wdiStartParam);
614 if ( !VOS_IS_STATUS_SUCCESS(status) )
615 {
616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700617 "%s: Unable to prepare Config TLV", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700618 return VOS_STATUS_E_FAILURE;
619 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700620 /* note from here onwards if an error occurs we must
621 reclaim the config TLV buffer */
Jeff Johnson295189b2012-06-20 16:38:30 -0700622 wdiStartParam.wdiLowLevelIndCB = WDA_lowLevelIndCallback;
623 wdiStartParam.pIndUserData = (v_PVOID_t *)wdaContext;
624 wdiStartParam.wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700625 /* initialize the WDA-WDI synchronization event */
626 vos_event_reset(&wdaContext->wdaWdiEvent);
Jeff Johnson295189b2012-06-20 16:38:30 -0700627 /* call WDI start */
628 wdiStatus = WDI_Start(&wdiStartParam,
629 (WDI_StartRspCb)WDA_wdiStartCallback,
630 (v_VOID_t *)pVosContext);
631 if ( IS_WDI_STATUS_FAILURE(wdiStatus) )
632 {
633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700634 "%s: WDI Start failed", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700635 vos_mem_free(wdiStartParam.pConfigBuffer);
636 return VOS_STATUS_E_FAILURE;
637 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700638 /* wait for WDI start to invoke our callback */
639 status = vos_wait_single_event( &wdaContext->wdaWdiEvent,
640 WDA_WDI_START_TIMEOUT );
641 if ( !VOS_IS_STATUS_SUCCESS(status) )
642 {
643 if ( VOS_STATUS_E_TIMEOUT == status )
644 {
645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700646 "%s: Timeout occurred during WDI_Start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700647 }
648 else
649 {
650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
651 "%s: Error %d while waiting for WDI_Start",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700652 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700653 }
654 vos_mem_free(wdiStartParam.pConfigBuffer);
Siddharth Bhalbea38ad2014-10-12 14:10:52 +0530655 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700656 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700657 /* WDI_Start() has completed so we can resume our work */
Jeff Johnson295189b2012-06-20 16:38:30 -0700658 /* we no longer need the config TLV */
659 vos_mem_free(wdiStartParam.pConfigBuffer);
Jeff Johnson295189b2012-06-20 16:38:30 -0700660 /* if we are not in the START state then WDI_Start() failed */
661 if (WDA_START_STATE != wdaContext->wdaState)
662 {
663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700664 "%s: WDI_Start() failure detected", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700665 return VOS_STATUS_E_FAILURE;
666 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700667 /* FTM mode does not need to monitor BA activity */
668 if ( eDRIVER_TYPE_MFG != wdaContext->driverMode )
669 {
670 status = wdaCreateTimers(wdaContext) ;
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -0800671 if(VOS_STATUS_SUCCESS == status)
672 {
673 wdaContext->wdaTimersCreated = VOS_TRUE;
674 }
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +0530675 else
676 {
677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
678 FL("wda create timers failed"));
679 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700680 }
Leo Chang9d76f622013-08-23 16:34:52 -0700681 else
682 {
683 vos_event_init(&wdaContext->ftmStopDoneEvent);
684 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700685 return status;
686}
687
Jeff Johnson295189b2012-06-20 16:38:30 -0700688/*
689 * FUNCTION: WDA_prepareConfigTLV
690 * Function to prepare CFG for DAL(WDA)
691 */
692VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
693 WDI_StartReqParamsType *wdiStartParams )
694{
695 /* get pMac to acess CFG data base */
696 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
697 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
698 tHalCfg *tlvStruct = NULL ;
699 tANI_U8 *tlvStructStart = NULL ;
700 tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
701 v_PVOID_t *configParam;
702 tANI_U32 configParamSize;
703 tANI_U32 *configDataValue;
704 WDI_WlanVersionType wcnssCompiledApiVersion;
Wilson Tsaof8b37942013-09-06 10:49:00 -0700705 tANI_U8 i;
706
Jeff Johnson295189b2012-06-20 16:38:30 -0700707 if ((NULL == pMac)||(NULL == wdaContext))
708 {
709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700710 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700711 VOS_ASSERT(0);
712 return VOS_STATUS_E_FAILURE;
713 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700714 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
715 WNI_CFG_STA_ID_LEN +
716 WNI_CFG_EDCA_WME_ACBK_LEN +
717 WNI_CFG_EDCA_WME_ACBE_LEN +
718 WNI_CFG_EDCA_WME_ACVI_LEN +
719 WNI_CFG_EDCA_WME_ACVO_LEN +
720 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700721 /* malloc memory for all configs in one shot */
722 configParam = vos_mem_malloc(configParamSize);
723
724 if(NULL == configParam )
725 {
726 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700727 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700728 VOS_ASSERT(0) ;
729 return VOS_STATUS_E_NOMEM;
730 }
731 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700732 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700733 tlvStruct = (tHalCfg *)configParam;
734 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700735 /* TODO: Remove Later */
736 /* QWLAN_HAL_CFG_STA_ID */
737 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
738 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
739 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
740 eSIR_SUCCESS)
741 {
742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
743 "Failed to get value for WNI_CFG_STA_ID");
744 goto handle_failure;
745 }
746 tlvStruct->length = strLength ;
747 /* calculate the pad bytes to have the CFG in aligned format */
748 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
749 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700750 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
751 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700752 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
753 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
754 tlvStruct->length = sizeof(tANI_U32);
755 configDataValue = (tANI_U32 *)(tlvStruct + 1);
756 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
757 != eSIR_SUCCESS)
758 {
759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
760 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
761 goto handle_failure;
762 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700763 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
764 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700765 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
766 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
767 tlvStruct->length = sizeof(tANI_U32);
768 configDataValue = (tANI_U32 *)(tlvStruct + 1);
769 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
770 eSIR_SUCCESS)
771 {
772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
773 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
774 goto handle_failure;
775 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700776 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
777 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700778 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
779 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
780 tlvStruct->length = sizeof(tANI_U32);
781 configDataValue = (tANI_U32 *)(tlvStruct + 1);
782 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
783 != eSIR_SUCCESS)
784 {
785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
786 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
787 goto handle_failure;
788 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700789 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
790 + sizeof(tHalCfg) + tlvStruct->length)) ;
791
792 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
793 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
794 tlvStruct->length = sizeof(tANI_U32);
795 configDataValue = (tANI_U32 *)(tlvStruct + 1);
796 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
797 configDataValue ) != eSIR_SUCCESS)
798 {
799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
800 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
801 goto handle_failure;
802 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700803 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
804 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700805 /* QWLAN_HAL_CFG_CAL_PERIOD */
806 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
807 tlvStruct->length = sizeof(tANI_U32);
808 configDataValue = (tANI_U32 *)(tlvStruct + 1);
809 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
810 != eSIR_SUCCESS)
811 {
812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
813 "Failed to get value for WNI_CFG_CAL_PERIOD");
814 goto handle_failure;
815 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700816 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
817 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700818 /* QWLAN_HAL_CFG_CAL_CONTROL */
819 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
820 tlvStruct->length = sizeof(tANI_U32);
821 configDataValue = (tANI_U32 *)(tlvStruct + 1);
822 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
823 != eSIR_SUCCESS)
824 {
825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
826 "Failed to get value for WNI_CFG_CAL_CONTROL");
827 goto handle_failure;
828 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700829 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
830 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700831 /* QWLAN_HAL_CFG_PROXIMITY */
832 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
833 tlvStruct->length = sizeof(tANI_U32);
834 configDataValue = (tANI_U32 *)(tlvStruct + 1);
835 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
836 != eSIR_SUCCESS)
837 {
838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
839 "Failed to get value for WNI_CFG_PROXIMITY");
840 goto handle_failure;
841 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700842 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
843 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700844 /* QWLAN_HAL_CFG_NETWORK_DENSITY */
845 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
846 tlvStruct->length = sizeof(tANI_U32);
847 configDataValue = (tANI_U32 *)(tlvStruct + 1);
848 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
849 != eSIR_SUCCESS)
850 {
851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
852 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
853 goto handle_failure;
854 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700855 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
856 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700857 /* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */
858 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
859 tlvStruct->length = sizeof(tANI_U32);
860 configDataValue = (tANI_U32 *)(tlvStruct + 1);
861 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
862 eSIR_SUCCESS)
863 {
864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
865 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
866 goto handle_failure;
867 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700868 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
869 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700870 /* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */
871 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
872 tlvStruct->length = sizeof(tANI_U32);
873 configDataValue = (tANI_U32 *)(tlvStruct + 1);
874 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
875 configDataValue ) != eSIR_SUCCESS)
876 {
877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
878 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
879 goto handle_failure;
880 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700881 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
882 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700883 /* QWLAN_HAL_CFG_RTS_THRESHOLD */
884 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
885 tlvStruct->length = sizeof(tANI_U32);
886 configDataValue = (tANI_U32 *)(tlvStruct + 1);
887 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
888 eSIR_SUCCESS)
889 {
890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
891 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
892 goto handle_failure;
893 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700894 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
895 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700896 /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
897 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
898 tlvStruct->length = sizeof(tANI_U32);
899 configDataValue = (tANI_U32 *)(tlvStruct + 1);
900 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
901 eSIR_SUCCESS)
902 {
903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
904 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
905 goto handle_failure;
906 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700907 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
908 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700909 /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
910 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
911 tlvStruct->length = sizeof(tANI_U32);
912 configDataValue = (tANI_U32 *)(tlvStruct + 1);
913 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
914 eSIR_SUCCESS)
915 {
916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
917 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
918 goto handle_failure;
919 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700920 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
921 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700922 /* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */
923 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
924 tlvStruct->length = sizeof(tANI_U32);
925 configDataValue = (tANI_U32 *)(tlvStruct + 1);
926 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
927 configDataValue ) != eSIR_SUCCESS)
928 {
929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
930 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
931 goto handle_failure;
932 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700933 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
934 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700935 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
936 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
937 tlvStruct->length = sizeof(tANI_U32);
938 configDataValue = (tANI_U32 *)(tlvStruct + 1);
939 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
940 configDataValue ) != eSIR_SUCCESS)
941 {
942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
943 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
944 goto handle_failure;
945 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700946 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
947 + sizeof(tHalCfg) + tlvStruct->length));
948
949 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
950 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
951 tlvStruct->length = sizeof(tANI_U32);
952 configDataValue = (tANI_U32 *)(tlvStruct + 1);
953 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
954 configDataValue ) != eSIR_SUCCESS)
955 {
956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
957 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
958 goto handle_failure;
959 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700960 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
961 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700962 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
963 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
964 tlvStruct->length = sizeof(tANI_U32);
965 configDataValue = (tANI_U32 *)(tlvStruct + 1);
966 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
967 configDataValue ) != eSIR_SUCCESS)
968 {
969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
970 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
971 goto handle_failure;
972 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700973 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
974 + sizeof(tHalCfg) + tlvStruct->length));
975
976 /* QWLAN_HAL_CFG_FIXED_RATE */
977 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
978 tlvStruct->length = sizeof(tANI_U32);
979 configDataValue = (tANI_U32 *)(tlvStruct + 1);
980 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
981 != eSIR_SUCCESS)
982 {
983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
984 "Failed to get value for WNI_CFG_FIXED_RATE");
985 goto handle_failure;
986 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700987 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
988 + sizeof(tHalCfg) + tlvStruct->length));
989
990 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
991 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
992 tlvStruct->length = sizeof(tANI_U32);
993 configDataValue = (tANI_U32 *)(tlvStruct + 1);
994 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
995 != eSIR_SUCCESS)
996 {
997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
998 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
999 goto handle_failure;
1000 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001001 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
1002 + sizeof(tHalCfg) + tlvStruct->length));
1003
1004 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
1005 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
1006 tlvStruct->length = sizeof(tANI_U32);
1007 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1008 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
1009 configDataValue ) != eSIR_SUCCESS)
1010 {
1011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1012 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
1013 goto handle_failure;
1014 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001015 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
1016 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001017 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
1018 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
1019 tlvStruct->length = sizeof(tANI_U32);
1020 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1021 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
1022 configDataValue ) != eSIR_SUCCESS)
1023 {
1024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1025 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
1026 goto handle_failure;
1027 }
1028 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
1029 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001030 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
1031 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
1032 tlvStruct->length = sizeof(tANI_U32);
1033 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1034 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
1035 configDataValue ) != eSIR_SUCCESS)
1036 {
1037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1038 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
1039 goto handle_failure;
1040 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001041 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1042 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001043 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
1044 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
1045 tlvStruct->length = sizeof(tANI_U32);
1046 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1047 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
1048 configDataValue ) != eSIR_SUCCESS)
1049 {
1050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1051 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
1052 goto handle_failure;
1053 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001054 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1055 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001056 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
1057 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
1058 tlvStruct->length = sizeof(tANI_U32);
1059 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1060 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
1061 configDataValue ) != eSIR_SUCCESS)
1062 {
1063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1064 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
1065 goto handle_failure;
1066 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001067 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1068 + sizeof(tHalCfg) + tlvStruct->length);
1069
Jeff Johnson295189b2012-06-20 16:38:30 -07001070 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
1071 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
1072 tlvStruct->length = sizeof(tANI_U32);
1073 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1074 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
1075 configDataValue ) != eSIR_SUCCESS)
1076 {
1077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1078 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
1079 goto handle_failure;
1080 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001081 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1082 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001083 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
1084 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
1085 tlvStruct->length = sizeof(tANI_U32);
1086 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1087 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
1088 configDataValue ) != eSIR_SUCCESS)
1089 {
1090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1091 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
1092 goto handle_failure;
1093 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001094 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1095 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001096 /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
1097 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
1098 tlvStruct->length = sizeof(tANI_U32);
1099 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1100 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
1101 eSIR_SUCCESS)
1102 {
1103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1104 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
1105 goto handle_failure;
1106 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001107 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1108 + sizeof(tHalCfg) + tlvStruct->length);
1109
1110 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
1111 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
1112 tlvStruct->length = sizeof(tANI_U32);
1113 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1114 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
1115 configDataValue ) != eSIR_SUCCESS)
1116 {
1117 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1118 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
1119 goto handle_failure;
1120 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001121 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1122 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001123 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
1124 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
1125 tlvStruct->length = sizeof(tANI_U32);
1126 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1127 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
1128 configDataValue ) != eSIR_SUCCESS)
1129 {
1130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1131 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
1132 goto handle_failure;
1133 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001134 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1135 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001136 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
1137 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
1138 tlvStruct->length = sizeof(tANI_U32);
1139 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1140 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
1141 configDataValue ) != eSIR_SUCCESS)
1142 {
1143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1144 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
1145 goto handle_failure;
1146 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001147 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1148 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001149 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
1150 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
1151 tlvStruct->length = sizeof(tANI_U32);
1152 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1153 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
1154 configDataValue ) != eSIR_SUCCESS)
1155 {
1156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1157 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
1158 goto handle_failure;
1159 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001160 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1161 + sizeof(tHalCfg) + tlvStruct->length);
1162
1163 /* QWLAN_HAL_CFG_STATS_PERIOD */
1164 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
1165 tlvStruct->length = sizeof(tANI_U32);
1166 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1167 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
1168 eSIR_SUCCESS)
1169 {
1170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1171 "Failed to get value for WNI_CFG_STATS_PERIOD");
1172 goto handle_failure;
1173 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001174 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1175 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001176 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
1177 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
1178 tlvStruct->length = sizeof(tANI_U32);
1179 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1180 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
1181 eSIR_SUCCESS)
1182 {
1183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1184 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
1185 goto handle_failure;
1186 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001187 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1188 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001189 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
1190 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
1191 tlvStruct->length = sizeof(tANI_U32);
1192 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1193 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
1194 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -07001195 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1196 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001197 /* QWLAN_HAL_CFG_DTIM_PERIOD */
1198 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
1199 tlvStruct->length = sizeof(tANI_U32);
1200 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1201 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
1202 != eSIR_SUCCESS)
1203 {
1204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1205 "Failed to get value for WNI_CFG_DTIM_PERIOD");
1206 goto handle_failure;
1207 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001208 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1209 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001210 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
1211 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
1212 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
1213 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1214 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
1215 &strLength) != eSIR_SUCCESS)
1216 {
1217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1218 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1219 goto handle_failure;
1220 }
1221 tlvStruct->length = strLength;
1222 /* calculate the pad bytes to have the CFG in aligned format */
1223 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1224 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001225 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1226 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001227 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1228 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1229 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1230 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1231 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1232 &strLength) != eSIR_SUCCESS)
1233 {
1234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1235 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1236 goto handle_failure;
1237 }
1238 tlvStruct->length = strLength;
1239 /* calculate the pad bytes to have the CFG in aligned format */
1240 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1241 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001242 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1243 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001244 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1245 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1246 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1247 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1248 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1249 &strLength) != eSIR_SUCCESS)
1250 {
1251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1252 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1253 goto handle_failure;
1254 }
1255 tlvStruct->length = strLength;
1256 /* calculate the pad bytes to have the CFG in aligned format */
1257 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1258 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001259 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1260 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001261 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1262 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1263 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1264 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1265 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1266 &strLength) != eSIR_SUCCESS)
1267 {
1268 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1269 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1270 goto handle_failure;
1271 }
1272 tlvStruct->length = strLength;
1273 /* calculate the pad bytes to have the CFG in aligned format */
1274 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1275 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001276 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1277 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001278 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1279 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1280 tlvStruct->length = sizeof(tANI_U32);
1281 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1282 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1283 != eSIR_SUCCESS)
1284 {
1285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1286 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1287 goto handle_failure;
1288 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001289 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1290 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001291 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1292 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1293 tlvStruct->length = sizeof(tANI_U32);
1294 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1295 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1296 != eSIR_SUCCESS)
1297 {
1298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1299 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1300 goto handle_failure;
1301 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001302 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1303 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001304 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1305 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1306 tlvStruct->length = sizeof(tANI_U32);
1307 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1308 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1309 != eSIR_SUCCESS)
1310 {
1311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1312 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1313 goto handle_failure;
1314 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001315 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1316 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001317 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1318 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1319 tlvStruct->length = sizeof(tANI_U32);
1320 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1321 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1322 != eSIR_SUCCESS)
1323 {
1324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1325 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1326 goto handle_failure;
1327 }
1328 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1329 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001330 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1331 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1332 tlvStruct->length = sizeof(tANI_U32);
1333 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1334 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1335 != eSIR_SUCCESS)
1336 {
1337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1338 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1339 goto handle_failure;
1340 }
1341 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1342 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001343 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1344 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1345 tlvStruct->length = sizeof(tANI_U32);
1346 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1347 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1348 != eSIR_SUCCESS)
1349 {
1350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1351 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1352 goto handle_failure;
1353 }
1354 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1355 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001356 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1357 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1358 tlvStruct->length = sizeof(tANI_U32);
1359 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1360 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1361 != eSIR_SUCCESS)
1362 {
1363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1364 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1365 goto handle_failure;
1366 }
1367 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1368 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001369 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1370 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1371 tlvStruct->length = sizeof(tANI_U32);
1372 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1373 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
1374 != eSIR_SUCCESS)
1375 {
1376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1377 "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
1378 goto handle_failure;
1379 }
1380 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1381 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001382 /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
1383 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1384 tlvStruct->length = sizeof(tANI_U32);
1385 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1386 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1387 != eSIR_SUCCESS)
1388 {
1389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1390 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1391 goto handle_failure;
1392 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001393 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1394 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001395 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1396 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1397 tlvStruct->length = sizeof(tANI_U32);
1398 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1399 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1400 != eSIR_SUCCESS)
1401 {
1402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1403 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1404 goto handle_failure;
1405 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001406 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1407 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001408 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1409 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1410 tlvStruct->length = sizeof(tANI_U32);
1411 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1412 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1413 != eSIR_SUCCESS)
1414 {
1415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1416 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1417 goto handle_failure;
1418 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001419 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1420 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001421 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1422 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1423 * into FW, so the parameters are added here.
1424 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001425 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1426 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1427 tlvStruct->length = sizeof(tANI_U32);
1428 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1429 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1430 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1431 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001432 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1433 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1434 tlvStruct->length = sizeof(tANI_U32);
1435 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1436 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1437 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1438 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001439 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1440 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1441 tlvStruct->length = sizeof(tANI_U32);
1442 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1443 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1444 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1445 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001446 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1447 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1448 tlvStruct->length = sizeof(tANI_U32);
1449 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1450 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1451 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1452 + sizeof(tHalCfg) + tlvStruct->length) ;
1453
1454 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1455 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1456 tlvStruct->length = sizeof(tANI_U32);
1457 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1458 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1459 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1460 + sizeof(tHalCfg) + tlvStruct->length) ;
1461
1462 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1463 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1464 tlvStruct->length = sizeof(tANI_U32);
1465 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1466 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1467 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1468 + sizeof(tHalCfg) + tlvStruct->length) ;
1469
1470 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1471 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1472 tlvStruct->length = sizeof(tANI_U32);
1473 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1474 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1475 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1476 + sizeof(tHalCfg) + tlvStruct->length) ;
1477
1478 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1479 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1480 tlvStruct->length = sizeof(tANI_U32);
1481 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1482 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1483 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1484 + sizeof(tHalCfg) + tlvStruct->length) ;
1485
1486 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1487 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1488 tlvStruct->length = sizeof(tANI_U32);
1489 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1490 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1491 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1492 + sizeof(tHalCfg) + tlvStruct->length) ;
1493
1494 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1495 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1496 tlvStruct->length = sizeof(tANI_U32);
1497 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1498 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1499 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1500 + sizeof(tHalCfg) + tlvStruct->length) ;
1501
1502 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1503 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1504 tlvStruct->length = sizeof(tANI_U32);
1505 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1506 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1507 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1508 + sizeof(tHalCfg) + tlvStruct->length) ;
1509
1510 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1511 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1512 tlvStruct->length = sizeof(tANI_U32);
1513 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1514 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1515 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1516 + sizeof(tHalCfg) + tlvStruct->length) ;
1517
1518 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1519 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1520 tlvStruct->length = sizeof(tANI_U32);
1521 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1522 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1523 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1524 + sizeof(tHalCfg) + tlvStruct->length) ;
1525
1526 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1527 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1528 tlvStruct->length = sizeof(tANI_U32);
1529 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1530 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1531 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1532 + sizeof(tHalCfg) + tlvStruct->length) ;
1533
1534 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1535 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1536 tlvStruct->length = sizeof(tANI_U32);
1537 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1538 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1539 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1540 + sizeof(tHalCfg) + tlvStruct->length) ;
1541
1542 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1543 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1544 tlvStruct->length = sizeof(tANI_U32);
1545 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1546 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1547 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1548 + sizeof(tHalCfg) + tlvStruct->length) ;
1549
Wilson Tsaof8b37942013-09-06 10:49:00 -07001550 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_VICTIM; i++)
1551 {
1552 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WAN_FREQ */
1553 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WAN_FREQ + i*4;
1554 tlvStruct->length = sizeof(tANI_U32);
1555 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1556 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWANFreq[i];
1557 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1558 + sizeof(tHalCfg) + tlvStruct->length) ;
1559
1560 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WLAN_FREQ */
1561 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WLAN_FREQ + i*4;
1562 tlvStruct->length = sizeof(tANI_U32);
1563 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1564 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWLANFreq[i];
1565 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1566 + sizeof(tHalCfg) + tlvStruct->length) ;
1567
1568 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG */
1569 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG + i*4;
1570 tlvStruct->length = sizeof(tANI_U32);
1571 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1572 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig[i];
1573 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1574 + sizeof(tHalCfg) + tlvStruct->length) ;
1575
1576 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG2 */
1577 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG2 + i*4;
1578 tlvStruct->length = sizeof(tANI_U32);
1579 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1580 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig2[i];
1581 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1582 + sizeof(tHalCfg) + tlvStruct->length) ;
1583 }
1584
1585 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF */
1586 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF ;
1587 tlvStruct->length = sizeof(tANI_U32);
1588 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1589 *configDataValue = pMac->btc.btcConfig.mwsCoexModemBackoff;
1590 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1591 + sizeof(tHalCfg) + tlvStruct->length) ;
1592
1593 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_CONFIG; i++)
1594 {
1595 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_CONFIGX */
1596 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_CONFIG1 + i;
1597 tlvStruct->length = sizeof(tANI_U32);
1598 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1599 *configDataValue = pMac->btc.btcConfig.mwsCoexConfig[i];
1600 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1601 + sizeof(tHalCfg) + tlvStruct->length) ;
1602 }
1603
1604 /* [COEX] QWLAN_HAL_CFG_SAR_POWER_BACKOFF */
1605 tlvStruct->type = QWLAN_HAL_CFG_SAR_POWER_BACKOFF ;
1606 tlvStruct->length = sizeof(tANI_U32);
1607 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1608 *configDataValue = pMac->btc.btcConfig.SARPowerBackoff;
1609 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1610 + sizeof(tHalCfg) + tlvStruct->length) ;
1611
Jeff Johnson32d95a32012-09-10 13:15:23 -07001612 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001613 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1614 tlvStruct->length = sizeof(tANI_U32);
1615 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1616 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1617 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1618 wcnssCompiledApiVersion.minor,
1619 wcnssCompiledApiVersion.version,
1620 wcnssCompiledApiVersion.revision);
1621 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1622 + sizeof(tHalCfg) + tlvStruct->length) ;
1623
Jeff Johnsond13512a2012-07-17 11:42:19 -07001624 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1625 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1626 tlvStruct->length = sizeof(tANI_U32);
1627 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1628 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1629 configDataValue ) != eSIR_SUCCESS)
1630 {
1631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1632 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1633 goto handle_failure;
1634 }
1635
1636 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1637 + sizeof(tHalCfg) + tlvStruct->length) ;
1638 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1639 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1640 tlvStruct->length = sizeof(tANI_U32);
1641 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1642 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1643 configDataValue ) != eSIR_SUCCESS)
1644 {
1645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1646 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1647 goto handle_failure;
1648 }
1649
1650 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1651 + sizeof(tHalCfg) + tlvStruct->length) ;
1652
1653 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1654 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1655 tlvStruct->length = sizeof(tANI_U32);
1656 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1657 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1658 != eSIR_SUCCESS)
1659 {
1660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1661 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1662 goto handle_failure;
1663 }
1664
1665 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1666 + sizeof(tHalCfg) + tlvStruct->length) ;
1667
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08001668 /* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */
1669 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION ;
1670 tlvStruct->length = sizeof(tANI_U32);
1671 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1672 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION, configDataValue)
1673 != eSIR_SUCCESS)
1674 {
1675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1676 "Failed to get value for WNI_CFG_ENABLE_LPWR_IMG_TRANSITION");
1677 goto handle_failure;
1678 }
1679
1680 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1681 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala976e3252013-01-03 15:45:56 -08001682#ifdef WLAN_SOFTAP_VSTA_FEATURE
1683 tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
1684 tlvStruct->length = sizeof(tANI_U32);
1685 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1686 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
1687 != eSIR_SUCCESS)
1688 {
1689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1690 "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
1691 goto handle_failure;
1692 }
1693
1694 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1695 + sizeof(tHalCfg) + tlvStruct->length) ;
1696#endif
1697
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08001698 /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
1699 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
1700 tlvStruct->length = sizeof(tANI_U32);
1701 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1702
1703 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
1704 != eSIR_SUCCESS)
1705 {
1706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1707 "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
1708 goto handle_failure;
1709 }
1710
1711 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1712 + sizeof(tHalCfg) + tlvStruct->length) ;
1713
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301714/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */
1715 tlvStruct->type = QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT ;
1716 tlvStruct->length = sizeof(tANI_U32);
1717 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1718 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
1719 configDataValue ) != eSIR_SUCCESS)
1720 {
1721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1722 "Failed to get value for WNI_CFG_AP_LINK_MONITOR_TIMEOUT");
1723 goto handle_failure;
1724 }
1725
1726 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1727 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301728#ifdef FEATURE_WLAN_TDLS
1729 /* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */
1730 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_MASK;
1731 tlvStruct->length = sizeof(tANI_U32);
1732 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1733 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK,
1734 configDataValue ) != eSIR_SUCCESS)
1735 {
1736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1737 "Failed to get value for WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK");
1738 goto handle_failure;
1739 }
1740 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1741 + sizeof(tHalCfg) + tlvStruct->length) ;
1742
1743 /* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */
1744 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE;
1745 tlvStruct->length = sizeof(tANI_U32);
1746 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1747 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_BUF_STA_ENABLED,
1748 configDataValue ) != eSIR_SUCCESS)
1749 {
1750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1751 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1752 goto handle_failure;
1753 }
1754 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1755 + sizeof(tHalCfg) + tlvStruct->length) ;
1756 /* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */
1757 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME;
1758 tlvStruct->length = sizeof(tANI_U32);
1759 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1760 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_PUAPSD_INACT_TIME,
1761 configDataValue ) != eSIR_SUCCESS)
1762 {
1763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1764 "Failed to get value for WNI_CFG_TDLS_PUAPSD_INACT_TIME");
1765 goto handle_failure;
1766 }
1767 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1768 + sizeof(tHalCfg) + tlvStruct->length) ;
1769 /* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */
1770 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP;
1771 tlvStruct->length = sizeof(tANI_U32);
1772 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1773 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_RX_FRAME_THRESHOLD,
1774 configDataValue ) != eSIR_SUCCESS)
1775 {
1776 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1777 "Failed to get value for WNI_CFG_TDLS_RX_FRAME_THRESHOLD");
1778 goto handle_failure;
1779 }
1780 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1781 + sizeof(tHalCfg) + tlvStruct->length) ;
Naresh Jayaramf73f3762014-02-04 16:13:20 +05301782 /* QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE */
1783 tlvStruct->type = QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE;
1784 tlvStruct->length = sizeof(tANI_U32);
1785 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1786 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_OFF_CHANNEL_ENABLED,
1787 configDataValue ) != eSIR_SUCCESS)
1788 {
1789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1790 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1791 goto handle_failure;
1792 }
1793 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1794 + sizeof(tHalCfg) + tlvStruct->length) ;
1795
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301796#endif
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301797
Sudhir Sattayappa Kohallida1be202013-07-11 12:04:30 -07001798 /* QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN */
1799 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE ;
1800 tlvStruct->length = sizeof(tANI_U32);
1801 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1802 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_ADAPT_RX_DRAIN,
1803 configDataValue ) != eSIR_SUCCESS)
1804 {
1805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1806 "Failed to get value for WNI_CFG_ENABLE_ADAPT_RX_DRAIN");
1807 goto handle_failure;
1808 }
1809
1810 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1811 + sizeof(tHalCfg) + tlvStruct->length) ;
Yue Ma0fd23872013-08-01 15:56:47 -07001812
1813 /* QWLAN_HAL_CFG_FLEX_CONNECT_POWER_FACTOR */
1814 tlvStruct->type = QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR;
1815 tlvStruct->length = sizeof(tANI_U32);
1816 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1817 if(wlan_cfgGetInt(pMac, WNI_CFG_FLEX_CONNECT_POWER_FACTOR, configDataValue)
1818 != eSIR_SUCCESS)
1819 {
1820 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1821 "Failed to get value for WNI_CFG_FLEX_CONNECT_POWER_FACTOR");
1822 goto handle_failure;
1823 }
1824 tlvStruct = (tHalCfg *)(((tANI_U8 *) tlvStruct
1825 + sizeof(tHalCfg) + tlvStruct->length));
1826
Madan Mohan Koyyalamudica454572013-08-07 19:57:03 +05301827 /* QWLAN_HAL_CFG_ANTENNA_DIVERSITY */
1828 tlvStruct->type = QWLAN_HAL_CFG_ANTENNA_DIVERSITY;
1829 tlvStruct->length = sizeof(tANI_U32);
1830 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1831 if (wlan_cfgGetInt(pMac, WNI_CFG_ANTENNA_DIVESITY,
1832 configDataValue ) != eSIR_SUCCESS)
1833 {
1834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1835 "Failed to get value for WNI_CFG_ANTENNA_DIVESITY");
1836 goto handle_failure;
1837 }
1838
1839 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1840 + sizeof(tHalCfg) + tlvStruct->length) ;
1841
Madan Mohan Koyyalamudi2558bc92013-08-24 16:54:31 +05301842 /* QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT */
1843 tlvStruct->type = QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT ;
1844 tlvStruct->length = sizeof(tANI_U32);
1845 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1846 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_LINK_MONITOR_TIMEOUT,
1847 configDataValue ) != eSIR_SUCCESS)
1848 {
1849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1850 "Failed to get value for WNI_CFG_GO_LINK_MONITOR_TIMEOUT");
1851 goto handle_failure;
1852 }
1853 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1854 + sizeof(tHalCfg) + tlvStruct->length) ;
1855
Kiet Lam4bbd3cb2013-11-07 20:03:49 +05301856 /* QWLAN_HAL_CFG_ATH_DISABLE */
1857 tlvStruct->type = QWLAN_HAL_CFG_ATH_DISABLE ;
1858 tlvStruct->length = sizeof(tANI_U32);
1859 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1860 if(wlan_cfgGetInt(pMac, WNI_CFG_ATH_DISABLE,
1861 configDataValue ) != eSIR_SUCCESS)
1862 {
1863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1864 "Failed to get value for WNI_CFG_ATH_DISABLE");
1865 goto handle_failure;
1866 }
1867 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1868 + sizeof(tHalCfg) + tlvStruct->length) ;
1869
c_hpothu6d7dc922013-12-02 12:36:41 +05301870 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_WLAN_LEN */
1871 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1872 tlvStruct->length = sizeof(tANI_U32);
1873 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1874 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_WLAN_LEN,
1875 configDataValue ) != eSIR_SUCCESS)
1876 {
1877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1878 "Failed to get value for WNI_CFG_BTC_ACTIVE_WLAN_LEN");
1879 goto handle_failure;
1880 }
1881 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1882 + sizeof(tHalCfg) + tlvStruct->length) ;
1883
1884 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1885 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1886 tlvStruct->length = sizeof(tANI_U32);
1887 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1888 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_BT_LEN,
1889 configDataValue ) != eSIR_SUCCESS)
1890 {
1891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1892 "Failed to get value for WNI_CFG_BTC_ACTIVE_BT_LEN");
1893 goto handle_failure;
1894 }
1895 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1896 + sizeof(tHalCfg) + tlvStruct->length) ;
1897
1898 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN */
1899 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1900 tlvStruct->length = sizeof(tANI_U32);
1901 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1902 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN,
1903 configDataValue ) != eSIR_SUCCESS)
1904 {
1905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1906 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN");
1907 goto handle_failure;
1908 }
1909 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1910 + sizeof(tHalCfg) + tlvStruct->length) ;
1911
1912 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1913 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1914 tlvStruct->length = sizeof(tANI_U32);
1915 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1916 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_BT_LEN,
1917 configDataValue ) != eSIR_SUCCESS)
1918 {
1919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1920 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_BT_LEN");
1921 goto handle_failure;
1922 }
1923 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1924 + sizeof(tHalCfg) + tlvStruct->length) ;
1925
AnjaneeDevi Kapparapu50239e32014-01-07 18:09:33 +05301926 /* QWLAN_HAL_CFG_ASD_PROBE_INTERVAL */
1927 tlvStruct->type = QWLAN_HAL_CFG_ASD_PROBE_INTERVAL ;
1928 tlvStruct->length = sizeof(tANI_U32);
1929 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1930 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_PROBE_INTERVAL,
1931 configDataValue ) != eSIR_SUCCESS)
1932 {
1933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1934 "Failed to get value for WNI_CFG_ASD_PROBE_INTERVAL");
1935 goto handle_failure;
1936 }
1937 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1938 + sizeof(tHalCfg) + tlvStruct->length) ;
1939
1940 /* QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD */
1941 tlvStruct->type = QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD ;
1942 tlvStruct->length = sizeof(tANI_U32);
1943 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1944 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_TRIGGER_THRESHOLD,
1945 configDataValue ) != eSIR_SUCCESS)
1946 {
1947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1948 "Failed to get value for WNI_CFG_ASD_TRIGGER_THRESHOLD");
1949 goto handle_failure;
1950 }
1951 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1952 + sizeof(tHalCfg) + tlvStruct->length) ;
1953
1954 /* QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD */
1955 tlvStruct->type = QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD ;
1956 tlvStruct->length = sizeof(tANI_U32);
1957 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1958 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD,
1959 configDataValue ) != eSIR_SUCCESS)
1960 {
1961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1962 "Failed to get value for WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD");
1963 goto handle_failure;
1964 }
1965 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1966 + sizeof(tHalCfg) + tlvStruct->length) ;
1967
Leela Venkata Kiran Kumar Reddy Chirala22c159b2013-12-23 18:19:13 -08001968 /* QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO */
1969 tlvStruct->type = QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO ;
1970 tlvStruct->length = sizeof(tANI_U32);
1971 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1972 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CTS2S_DURING_SCO,
1973 configDataValue ) != eSIR_SUCCESS)
1974 {
1975 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1976 "Failed to get value for WNI_CFG_BTC_CTS2S_DURING_SCO");
1977 goto handle_failure;
1978 }
1979 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1980 + sizeof(tHalCfg) + tlvStruct->length) ;
1981
c_hpothu5bd1ae42014-03-07 20:28:22 +05301982 /* QWLAN_HAL_CFG_RA_FILTER_ENABLE */
1983 tlvStruct->type = QWLAN_HAL_CFG_RA_FILTER_ENABLE ;
1984 tlvStruct->length = sizeof(tANI_U32);
1985 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1986
1987 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_FILTER_ENABLE,
1988 configDataValue ) != eSIR_SUCCESS)
1989 {
1990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1991 "Failed to get value for WNI_CFG_RA_FILTER_ENABLE");
1992 goto handle_failure;
1993 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05301994 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1995 + sizeof(tHalCfg) + tlvStruct->length) ;
1996
1997 /* QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL */
1998 tlvStruct->type = QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL ;
1999 tlvStruct->length = sizeof(tANI_U32);
2000 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2001
2002 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_RATE_LIMIT_INTERVAL,
2003 configDataValue ) != eSIR_SUCCESS)
2004 {
2005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2006 "Failed to get value for WNI_CFG_RA_RATE_LIMIT_INTERVAL");
2007 goto handle_failure;
2008 }
c_hpothu2d0f1c42014-04-01 18:38:51 +05302009 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2010 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu5bd1ae42014-03-07 20:28:22 +05302011
c_hpothu2d0f1c42014-04-01 18:38:51 +05302012 /* QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE */
2013 tlvStruct->type = QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE ;
2014 tlvStruct->length = sizeof(tANI_U32);
2015 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2016
2017 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE,
2018 configDataValue ) != eSIR_SUCCESS)
2019 {
2020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2021 "Failed to get value for WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE");
2022 goto handle_failure;
2023 }
2024 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2025 + sizeof(tHalCfg) + tlvStruct->length) ;
2026
2027 /* QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE */
2028 tlvStruct->type = QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE ;
2029 tlvStruct->length = sizeof(tANI_U32);
2030 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2031
2032 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE,
2033 configDataValue ) != eSIR_SUCCESS)
2034 {
2035 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2036 "Failed to get value for WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE");
2037 goto handle_failure;
2038 }
2039 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2040 + sizeof(tHalCfg) + tlvStruct->length) ;
2041
2042 /* QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD */
2043 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD ;
2044 tlvStruct->length = sizeof(tANI_U32);
2045 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2046
2047 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD,
2048 configDataValue ) != eSIR_SUCCESS)
2049 {
2050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2051 "Failed to get value for WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD");
2052 goto handle_failure;
2053 }
2054 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2055 + sizeof(tHalCfg) + tlvStruct->length) ;
2056
2057 /* QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD */
2058 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD ;
2059 tlvStruct->length = sizeof(tANI_U32);
2060 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2061
2062 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD,
2063 configDataValue ) != eSIR_SUCCESS)
2064 {
2065 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2066 "Failed to get value for WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD");
2067 goto handle_failure;
2068 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05302069 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2070 + sizeof(tHalCfg) + tlvStruct->length) ;
2071
Mihir Shetec34258c2014-07-30 17:50:27 +05302072 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP */
2073 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP ;
2074 tlvStruct->length = sizeof(tANI_U32);
2075 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2076
2077 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_SP,
2078 configDataValue ) != eSIR_SUCCESS)
2079 {
2080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2081 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_SP");
2082 goto handle_failure;
2083 }
2084 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2085 + sizeof(tHalCfg) + tlvStruct->length) ;
2086
2087 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT */
2088 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT ;
2089 tlvStruct->length = sizeof(tANI_U32);
2090 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2091
2092 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT,
2093 configDataValue ) != eSIR_SUCCESS)
2094 {
2095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2096 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT");
2097 goto handle_failure;
2098 }
2099 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2100 + sizeof(tHalCfg) + tlvStruct->length) ;
2101
2102 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT */
2103 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT ;
2104 tlvStruct->length = sizeof(tANI_U32);
2105 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2106
2107 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT,
2108 configDataValue ) != eSIR_SUCCESS)
2109 {
2110 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2111 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT");
2112 goto handle_failure;
2113 }
2114 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2115 + sizeof(tHalCfg) + tlvStruct->length) ;
2116
2117 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW */
2118 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW ;
2119 tlvStruct->length = sizeof(tANI_U32);
2120 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2121
2122 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW,
2123 configDataValue ) != eSIR_SUCCESS)
2124 {
2125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2126 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW");
2127 goto handle_failure;
2128 }
2129 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2130 + sizeof(tHalCfg) + tlvStruct->length) ;
2131
2132 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW */
2133 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW ;
2134 tlvStruct->length = sizeof(tANI_U32);
2135 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2136
2137 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW,
2138 configDataValue ) != eSIR_SUCCESS)
2139 {
2140 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2141 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW");
2142 goto handle_failure;
2143 }
2144 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2145 + sizeof(tHalCfg) + tlvStruct->length) ;
2146
2147 /* QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE */
2148 tlvStruct->type = QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE ;
2149 tlvStruct->length = sizeof(tANI_U32);
2150 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2151
2152 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE,
2153 configDataValue ) != eSIR_SUCCESS)
2154 {
2155 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2156 "Failed to get value for WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE");
2157 goto handle_failure;
2158 }
2159 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2160 + sizeof(tHalCfg) + tlvStruct->length) ;
2161
2162 /* QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS */
2163 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS ;
2164 tlvStruct->length = sizeof(tANI_U32);
2165 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2166
2167 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS,
2168 configDataValue ) != eSIR_SUCCESS)
2169 {
2170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2171 "Failed to get value for WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS");
2172 goto handle_failure;
2173 }
2174 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2175 + sizeof(tHalCfg) + tlvStruct->length) ;
2176
2177 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS */
2178 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS ;
2179 tlvStruct->length = sizeof(tANI_U32);
2180 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2181
2182 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_WMMPS,
2183 configDataValue ) != eSIR_SUCCESS)
2184 {
2185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2186 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_WMMPS");
2187 goto handle_failure;
2188 }
2189 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2190 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu03d961b2014-09-19 16:45:00 +05302191
2192 /* QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE */
2193 tlvStruct->type = QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE ;
2194 tlvStruct->length = sizeof(tANI_U32);
2195 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2196
2197 if (wlan_cfgGetInt(pMac, WNI_CFG_BURST_MODE_BE_TXOP_VALUE,
2198 configDataValue ) != eSIR_SUCCESS)
2199 {
2200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2201 "Failed to get value for WNI_CFG_BURST_MODE_BE_TXOP_VALUE");
2202 goto handle_failure;
2203 }
2204 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2205 + sizeof(tHalCfg) + tlvStruct->length) ;
2206
Deepthi Gowri9025aa62014-11-07 19:45:36 +05302207 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE */
2208 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE ;
2209 tlvStruct->length = sizeof(tANI_U32);
2210 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2211
2212 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE,
2213 configDataValue ) != eSIR_SUCCESS)
2214 {
2215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2216 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE");
2217 goto handle_failure;
2218 }
2219 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2220 + sizeof(tHalCfg) + tlvStruct->length) ;
2221
Naresh Jayaramf5bbe3f2014-12-29 18:32:47 +05302222 /* QWLAN_HAL_CFG_BTC_FAST_WLAN_CONN_PREF */
2223 tlvStruct->type = QWLAN_HAL_CFG_BTC_FAST_WLAN_CONN_PREF ;
2224 tlvStruct->length = sizeof(tANI_U32);
2225 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2226
2227 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FAST_WLAN_CONN_PREF,
2228 configDataValue ) != eSIR_SUCCESS)
2229 {
2230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2231 "Failed to get value for WNI_CFG_BTC_FAST_WLAN_CONN_PREF");
2232 goto handle_failure;
2233 }
2234 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2235 + sizeof(tHalCfg) + tlvStruct->length) ;
Deepthi Gowri9025aa62014-11-07 19:45:36 +05302236
jagadeeshaf2d0ce2015-03-31 11:45:30 +05302237 /* QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT */
2238 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT;
2239 tlvStruct->length = sizeof(tANI_U32);
2240 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2241
2242 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_RTSCTS_HTVHT,
2243 configDataValue ) != eSIR_SUCCESS)
2244 {
2245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2246 "Failed to get value for WNI_CFG_ENABLE_RTSCTS_HTVHT");
2247 goto handle_failure;
2248 }
2249 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2250 + sizeof(tHalCfg) + tlvStruct->length) ;
2251
Sachin Ahuja41b61902015-06-18 18:32:15 +05302252
2253 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN */
2254 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN ;
2255 tlvStruct->length = sizeof(tANI_U32);
2256 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2257
2258 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN,
2259 configDataValue ) != eSIR_SUCCESS)
2260 {
2261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2262 "Failed to get value for WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN");
2263 goto handle_failure;
2264 }
2265 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2266 + sizeof(tHalCfg) + tlvStruct->length) ;
2267
2268 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN */
2269 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN ;
2270 tlvStruct->length = sizeof(tANI_U32);
2271 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2272
2273 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN,
2274 configDataValue ) != eSIR_SUCCESS)
2275 {
2276 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2277 "Failed to get value for WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN");
2278 goto handle_failure;
2279 }
Sachin Ahuja41b61902015-06-18 18:32:15 +05302280 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2281 + sizeof(tHalCfg) + tlvStruct->length) ;
2282
Hanumantha Reddy Pothula9a8ccab2015-07-03 14:33:17 +05302283 /* QWLAN_HAL_CFG_LINK_FAIL_TIMEOUT */
2284 tlvStruct->type = QWLAN_HAL_CFG_LINK_FAIL_TIMEOUT ;
2285 tlvStruct->length = sizeof(tANI_U32);
2286 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2287
2288 if (wlan_cfgGetInt(pMac, WNI_CFG_LINK_FAIL_TIMEOUT,
2289 configDataValue ) != eSIR_SUCCESS)
2290 {
2291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2292 "Failed to get value for WNI_CFG_LINK_FAIL_TIMEOUT");
2293 goto handle_failure;
2294 }
2295 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2296 + sizeof(tHalCfg) + tlvStruct->length) ;
2297
2298 /* QWLAN_HAL_CFG_LINK_FAIL_TX_CNT */
2299 tlvStruct->type = QWLAN_HAL_CFG_LINK_FAIL_TX_CNT ;
2300 tlvStruct->length = sizeof(tANI_U32);
2301 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2302
2303 if (wlan_cfgGetInt(pMac, WNI_CFG_LINK_FAIL_TX_CNT,
2304 configDataValue ) != eSIR_SUCCESS)
2305 {
2306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2307 "Failed to get value for WNI_CFG_LINK_FAIL_TX_CNT");
2308 goto handle_failure;
2309 }
2310 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2311 + sizeof(tHalCfg) + tlvStruct->length) ;
Sachin Ahuja41b61902015-06-18 18:32:15 +05302312
Hanumantha Reddy Pothulae0216f92015-08-11 18:30:06 +05302313 /* QWLAN_HAL_CFG_TOGGLE_ARP_BDRATES */
2314 tlvStruct->type = QWLAN_HAL_CFG_TOGGLE_ARP_BDRATES;
2315 tlvStruct->length = sizeof(tANI_U32);
2316 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2317
2318 if (wlan_cfgGetInt(pMac, WNI_CFG_TOGGLE_ARP_BDRATES,
2319 configDataValue ) != eSIR_SUCCESS)
2320 {
2321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2322 "Failed to get value for WNI_CFG_TOGGLE_ARP_BDRATES");
2323 goto handle_failure;
2324 }
2325 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2326 + sizeof(tHalCfg) + tlvStruct->length) ;
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +05302327 /* QWLAN_HAL_CFG_OPTIMIZE_CA_EVENT */
2328 tlvStruct->type = QWLAN_HAL_CFG_OPTIMIZE_CA_EVENT ;
2329 tlvStruct->length = sizeof(tANI_U32);
2330 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2331 if (wlan_cfgGetInt(pMac, WNI_CFG_OPTIMIZE_CA_EVENT,
2332 configDataValue ) != eSIR_SUCCESS)
2333 {
2334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2335 "Failed to get value for WNI_CFG_OPTIMIZE_CA_EVENT");
2336 goto handle_failure;
2337 }
2338 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2339 + sizeof(tHalCfg) + tlvStruct->length) ;
Hanumantha Reddy Pothulae0216f92015-08-11 18:30:06 +05302340
Padma, Santhosh Kumare2eb0fa2015-08-26 13:40:47 +05302341 /* QWLAN_HAL_CFG_EXT_SCAN_CONC_MODE */
2342 tlvStruct->type = QWLAN_HAL_CFG_EXT_SCAN_CONC_MODE ;
2343 tlvStruct->length = sizeof(tANI_U32);
2344 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2345
2346 if (wlan_cfgGetInt(pMac, WNI_CFG_EXT_SCAN_CONC_MODE,
2347 configDataValue ) != eSIR_SUCCESS)
2348 {
2349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2350 "Failed to get value for WNI_CFG_EXT_SCAN_CONC_MODE");
2351 goto handle_failure;
2352 }
2353 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2354 + sizeof(tHalCfg) + tlvStruct->length) ;
2355
Sachin Ahujab4d7a292015-12-08 19:57:04 +05302356 /* QWLAN_HAL_CFG_BAR_WAKEUP_HOST_DISABLE */
2357 tlvStruct->type = QWLAN_HAL_CFG_BAR_WAKEUP_HOST_DISABLE;
2358 tlvStruct->length = sizeof(tANI_U32);
2359 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2360
2361 if (wlan_cfgGetInt(pMac, WNI_CFG_DISABLE_BAR_WAKE_UP_HOST,
2362 configDataValue ) != eSIR_SUCCESS)
2363 {
2364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2365 "Failed to get value for WNI_CFG_DISABLE_BAR_WAKE_UP_HOST");
2366 goto handle_failure;
2367 }
2368 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2369 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002370 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002371#ifdef WLAN_DEBUG
2372 {
2373 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07002374 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2375 "****** Dumping CFG TLV ***** ");
2376 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
2377 {
2378 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2379 "%02x %02x %02x %02x %02x %02x %02x %02x",
2380 tlvStructStart[i],
2381 tlvStructStart[i+1],
2382 tlvStructStart[i+2],
2383 tlvStructStart[i+3],
2384 tlvStructStart[i+4],
2385 tlvStructStart[i+5],
2386 tlvStructStart[i+6],
2387 tlvStructStart[i+7]);
2388 }
2389 /* Dump the bytes in the last line*/
2390 for (; i < wdiStartParams->usConfigBufferLen; i++)
2391 {
2392 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2393 "%02x ",tlvStructStart[i]);
2394 }
2395 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2396 "**************************** ");
2397 }
2398#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002399 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002400handle_failure:
2401 vos_mem_free(configParam);
2402 return VOS_STATUS_E_FAILURE;
2403}
Jeff Johnson295189b2012-06-20 16:38:30 -07002404/*
2405 * FUNCTION: WDA_wdiCompleteCB
2406 * call the voss call back function
2407 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002408void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07002409{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002410 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2411 tWDA_CbContext *wdaContext;
2412
2413 if(NULL == pWdaParams)
2414 {
2415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002416 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002417 VOS_ASSERT(0) ;
2418 return ;
2419 }
2420
2421 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
2422
Jeff Johnson295189b2012-06-20 16:38:30 -07002423 if (NULL == wdaContext)
2424 {
2425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002426 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002427 return ;
2428 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002429
Jeff Johnson295189b2012-06-20 16:38:30 -07002430 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002431 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07002432 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002433 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002434 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002435 vos_mem_free(pWdaParams);
2436
Jeff Johnson295189b2012-06-20 16:38:30 -07002437 if(WDI_STATUS_SUCCESS != status)
2438 {
2439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2440 "WDI stop callback returned failure" );
2441 VOS_ASSERT(0) ;
2442 }
2443 else
2444 {
2445 wdaContext->wdaState = WDA_STOP_STATE;
2446 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002447
Leo Chang9d76f622013-08-23 16:34:52 -07002448 /* FTM Driver stop procedure should be synced.
2449 * Stop and Close will happen on same context */
2450 if (eDRIVER_TYPE_MFG == wdaContext->driverMode)
2451 {
2452 if (VOS_STATUS_SUCCESS != vos_event_set(&wdaContext->ftmStopDoneEvent))
2453 {
2454 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2455 "%s: FTM Stop Event Set Fail", __func__);
2456 VOS_ASSERT(0);
2457 }
2458 }
2459
Jeff Johnson295189b2012-06-20 16:38:30 -07002460 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002461 vos_WDAComplete_cback(wdaContext->pVosContext);
2462
Jeff Johnson295189b2012-06-20 16:38:30 -07002463 return ;
2464}
Jeff Johnson295189b2012-06-20 16:38:30 -07002465/*
2466 * FUNCTION: WDA_stop
2467 * call WDI_stop
2468 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002469VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
2470{
2471 WDI_Status wdiStatus;
2472 VOS_STATUS status = VOS_STATUS_SUCCESS;
2473 WDI_StopReqParamsType *wdiStopReq;
2474 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002475 tWDA_ReqParams *pWdaParams ;
2476
Jeff Johnson295189b2012-06-20 16:38:30 -07002477 if (NULL == pWDA)
2478 {
2479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002480 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002481 VOS_ASSERT(0);
2482 return VOS_STATUS_E_FAILURE;
2483 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002484 if (pWDA->wdiFailed == true)
2485 {
2486 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002487 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002488 return VOS_STATUS_E_ALREADY;
2489 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002490
Jeff Johnson295189b2012-06-20 16:38:30 -07002491 /* FTM mode stay START_STATE */
2492 if( (WDA_READY_STATE != pWDA->wdaState) &&
2493 (WDA_INIT_STATE != pWDA->wdaState) &&
2494 (WDA_START_STATE != pWDA->wdaState) )
2495 {
2496 VOS_ASSERT(0);
2497 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002498 wdiStopReq = (WDI_StopReqParamsType *)
2499 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
2500 if(NULL == wdiStopReq)
2501 {
2502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002503 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002504 VOS_ASSERT(0);
2505 return VOS_STATUS_E_NOMEM;
2506 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002507
Jeff Johnson295189b2012-06-20 16:38:30 -07002508 wdiStopReq->wdiStopReason = reason;
2509 wdiStopReq->wdiReqStatusCB = NULL;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302510
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002511 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2512 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07002513 {
2514 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002515 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002516 VOS_ASSERT(0);
2517 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002518 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07002519 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002520
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002521 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
2522 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07002523 {
2524 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002525 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002526 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002527
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002528 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
2529 pWdaParams->wdaMsgParam = NULL;
2530 pWdaParams->pWdaContext = pWDA;
2531
Jeff Johnson295189b2012-06-20 16:38:30 -07002532 /* call WDI stop */
2533 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002534 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
2535
Jeff Johnson295189b2012-06-20 16:38:30 -07002536 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
2537 {
2538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2539 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002540 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2541 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002542 status = VOS_STATUS_E_FAILURE;
2543 }
Leo Chang9d76f622013-08-23 16:34:52 -07002544
2545 /* FTM Driver stop procedure should be synced.
2546 * Stop and Close will happen on same context */
2547 if (eDRIVER_TYPE_MFG == pWDA->driverMode)
2548 {
2549 status = vos_wait_single_event(&pWDA->ftmStopDoneEvent,
2550 WDI_RESPONSE_TIMEOUT);
2551 if (status != VOS_STATUS_SUCCESS)
2552 {
2553 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2554 "%s: FTM Stop Timepoout", __func__);
2555 VOS_ASSERT(0);
Leo Chang9d76f622013-08-23 16:34:52 -07002556 }
c_hpothu0d36bc42014-07-03 17:43:45 +05302557 vos_event_destroy(&pWDA->ftmStopDoneEvent);
Leo Chang9d76f622013-08-23 16:34:52 -07002558 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002559 return status;
2560}
Jeff Johnson295189b2012-06-20 16:38:30 -07002561/*
2562 * FUNCTION: WDA_close
2563 * call WDI_close and free the WDA context
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302564 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002565VOS_STATUS WDA_close(v_PVOID_t pVosContext)
2566{
Jeff Johnson43971f52012-07-17 12:26:56 -07002567 VOS_STATUS status = VOS_STATUS_SUCCESS;
2568 WDI_Status wstatus;
2569 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07002570 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07002571 if (NULL == wdaContext)
2572 {
2573 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002574 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002575 return VOS_STATUS_E_FAILURE;
2576 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002577 if((WDA_INIT_STATE != wdaContext->wdaState) &&
2578 (WDA_STOP_STATE != wdaContext->wdaState))
2579 {
2580 VOS_ASSERT(0);
2581 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002582 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07002583 wstatus = WDI_Close();
2584 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07002585 {
2586 status = VOS_STATUS_E_FAILURE;
2587 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002588 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002589 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07002590 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
2591 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002592 {
2593 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002594 "WDI Sync Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002595 status = VOS_STATUS_E_FAILURE;
2596 }
2597
Jeff Johnson43971f52012-07-17 12:26:56 -07002598 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002599 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002600 {
2601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002602 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002603 status = VOS_STATUS_E_FAILURE;
2604 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002605 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002606 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002607 {
2608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002609 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002610 status = VOS_STATUS_E_FAILURE;
2611 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002612 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07002613 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002614 {
2615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002616 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002617 status = VOS_STATUS_E_FAILURE;
2618 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002619 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07002620 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07002621 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07002622 {
2623 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2624 "error in WDA close " );
2625 status = VOS_STATUS_E_FAILURE;
2626 }
2627 return status;
2628}
Jeff Johnson295189b2012-06-20 16:38:30 -07002629/*
2630 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
2631 * returns 1 if the compiled version is greater than or equal to the input version
2632 */
2633
2634uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2635{
2636 VOS_STATUS status = VOS_STATUS_SUCCESS;
2637 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2638 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002639 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002640 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
2641 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
2642 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
2643 (compiledVersion.revision >= revision)))
2644 return 1;
2645 else
2646 return 0;
2647}
Jeff Johnson295189b2012-06-20 16:38:30 -07002648/*
2649 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
2650 * returns 1 if the compiled version is greater than or equal to the input version
2651 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002652uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2653{
2654 VOS_STATUS status = VOS_STATUS_SUCCESS;
2655 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2656 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002657 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002658 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
2659 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
2660 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
2661 (reportedVersion.revision >= revision)))
2662 return 1;
2663 else
2664 return 0;
2665}
Jeff Johnson295189b2012-06-20 16:38:30 -07002666/*
2667 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
2668 * Returns the version of the WCNSS WLAN API with which the HOST
2669 * device driver was compiled
2670 */
2671VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
2672 tSirVersionType *pVersion)
2673{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302674 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002675 if ((NULL == pvosGCtx) || (NULL == pVersion))
2676 {
2677 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002678 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002679 VOS_ASSERT(0);
2680 return VOS_STATUS_E_FAILURE;
2681 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002682 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2683 if (NULL == pWDA )
2684 {
2685 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002686 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002687 VOS_ASSERT(0);
2688 return VOS_STATUS_E_FAILURE;
2689 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002690 *pVersion = pWDA->wcnssWlanCompiledVersion;
2691 return VOS_STATUS_SUCCESS;
2692}
Jeff Johnson295189b2012-06-20 16:38:30 -07002693/*
2694 * FUNCTION: WDA_GetWcnssWlanReportedVersion
2695 * Returns the version of the WCNSS WLAN API with which the WCNSS
2696 * device driver was compiled
2697 */
2698VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
2699 tSirVersionType *pVersion)
2700{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302701 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002702 if ((NULL == pvosGCtx) || (NULL == pVersion))
2703 {
2704 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002705 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002706 VOS_ASSERT(0);
2707 return VOS_STATUS_E_FAILURE;
2708 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002709 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2710 if (NULL == pWDA )
2711 {
2712 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002713 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002714 VOS_ASSERT(0);
2715 return VOS_STATUS_E_FAILURE;
2716 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002717 *pVersion = pWDA->wcnssWlanReportedVersion;
2718 return VOS_STATUS_SUCCESS;
2719}
Jeff Johnson295189b2012-06-20 16:38:30 -07002720/*
2721 * FUNCTION: WDA_GetWcnssSoftwareVersion
2722 * Returns the WCNSS Software version string
2723 */
2724VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
2725 tANI_U8 *pVersion,
2726 tANI_U32 versionBufferSize)
2727{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302728 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002729 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002730 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002731 if ((NULL == pvosGCtx) || (NULL == pVersion))
2732 {
2733 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002734 "%s: Invoked with invalid parameter", __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 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2739 if (NULL == pWDA )
2740 {
2741 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002742 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002743 VOS_ASSERT(0);
2744 return VOS_STATUS_E_FAILURE;
2745 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002746 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
2747 return VOS_STATUS_SUCCESS;
2748}
Jeff Johnson295189b2012-06-20 16:38:30 -07002749/*
2750 * FUNCTION: WDA_GetWcnssHardwareVersion
2751 * Returns the WCNSS Hardware version string
2752 */
2753VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
2754 tANI_U8 *pVersion,
2755 tANI_U32 versionBufferSize)
2756{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302757 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002758 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002759 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002760 if ((NULL == pvosGCtx) || (NULL == pVersion))
2761 {
2762 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002763 "%s: Invoked with invalid parameter", __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 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2768 if (NULL == pWDA )
2769 {
2770 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002771 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002772 VOS_ASSERT(0);
2773 return VOS_STATUS_E_FAILURE;
2774 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002775 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
2776 return VOS_STATUS_SUCCESS;
2777}
Jeff Johnson295189b2012-06-20 16:38:30 -07002778/*
2779 * FUNCTION: WDA_WniCfgDnld
2780 * Trigger CFG Download
2781 */
2782VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
2783{
2784 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302785 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnsonab81a082013-04-03 16:00:31 -07002786
Jeff Johnson295189b2012-06-20 16:38:30 -07002787 if (NULL == pMac )
2788 {
2789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002790 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002791 VOS_ASSERT(0);
2792 return VOS_STATUS_E_FAILURE;
2793 }
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302794 processCfgDownloadReq(pMac);
Jeff Johnson295189b2012-06-20 16:38:30 -07002795 return vosStatus;
2796}
Jeff Johnson295189b2012-06-20 16:38:30 -07002797/* -----------------------------------------------------------------
2798 * WDI interface
2799 * -----------------------------------------------------------------
2800 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002801/*
2802 * FUNCTION: WDA_suspendDataTxCallback
2803 * call back function called from TL after suspend Transmission
2804 */
2805VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
2806 v_U8_t* ucSTAId,
2807 VOS_STATUS vosStatus)
2808{
2809 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07002810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002811 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002812 if (NULL == pWDA )
2813 {
2814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002815 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002816 VOS_ASSERT(0);
2817 return VOS_STATUS_E_FAILURE;
2818 }
2819 if(VOS_IS_STATUS_SUCCESS(vosStatus))
2820 {
2821 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
2822 }
2823 else
2824 {
2825 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
2826 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002827 /* Trigger the event to bring the WDA TL suspend function to come
2828 * out of wait*/
2829 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
2830 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
2831 {
2832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002833 "NEW VOS Event Set failed - status = %d", vosStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07002834 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002835 /* If TL suspended had timedout before this callback was called, resume back
2836 * TL.*/
2837 if (pWDA->txSuspendTimedOut)
2838 {
2839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002840 "Late TLSuspendCallback, resuming TL back again");
Jeff Johnson295189b2012-06-20 16:38:30 -07002841 WDA_ResumeDataTx(pWDA);
2842 pWDA->txSuspendTimedOut = FALSE;
2843 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002844 return VOS_STATUS_SUCCESS;
2845}
Jeff Johnson295189b2012-06-20 16:38:30 -07002846/*
2847 * FUNCTION: WDA_suspendDataTx
2848 * Update TL to suspend the data Transmission
2849 */
2850VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
2851{
2852 VOS_STATUS status = VOS_STATUS_E_FAILURE;
2853 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002854
2855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002856 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002857 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002858 if (pWDA->txSuspendTimedOut)
2859 {
2860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002861 "TL suspend timedout previously, CB not called yet");
Jeff Johnson295189b2012-06-20 16:38:30 -07002862 return status;
2863 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002864 /* Reset the event to be not signalled */
2865 status = vos_event_reset(&pWDA->suspendDataTxEvent);
2866 if(!VOS_IS_STATUS_SUCCESS(status))
2867 {
2868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002869 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002870 return VOS_STATUS_E_FAILURE;
2871 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002872 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07002873 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07002874 WDA_SuspendDataTxCallback);
2875 if(status != VOS_STATUS_SUCCESS)
2876 {
2877 return status;
2878 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002879 /* Wait for the event to be set by the TL, to get the response of
2880 * suspending the TX queues, this event should be set by the Callback
2881 * function called by TL*/
2882 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2883 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2884 if(!VOS_IS_STATUS_SUCCESS(status))
2885 {
2886 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2887 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002888 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002889 /* Set this flag to true when TL suspend times out, so that when TL
2890 * suspend eventually happens and calls the callback, TL can be resumed
2891 * right away by looking at this flag when true.*/
2892 pWDA->txSuspendTimedOut = TRUE;
2893 }
2894 else
2895 {
2896 pWDA->txSuspendTimedOut = FALSE;
2897 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002898 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2899 {
2900 status = VOS_STATUS_SUCCESS;
2901 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002902 return status;
2903}
Jeff Johnson295189b2012-06-20 16:38:30 -07002904/*
2905 * FUNCTION: WDA_resumeDataTx
2906 * Update TL to resume the data Transmission
2907 */
2908VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
2909{
2910 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07002911
2912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002913 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07002914
2915 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07002916 return status;
2917}
Jeff Johnson295189b2012-06-20 16:38:30 -07002918/*
2919 * FUNCTION: WDA_InitScanReqCallback
2920 * Trigger Init SCAN callback
2921 */
2922void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2923{
2924 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2925 tWDA_CbContext *pWDA;
2926 tInitScanParams *pWDA_ScanParam ;
2927 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002929 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002930 if(NULL == pWdaParams)
2931 {
2932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002933 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002934 VOS_ASSERT(0) ;
2935 return ;
2936 }
2937 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2938 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002939 if(NULL == pWDA_ScanParam)
2940 {
2941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002942 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002943 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002944 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2945 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002946 return ;
2947 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002948 if(WDI_STATUS_SUCCESS != wdiStatus)
2949 {
2950 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002951 if(VOS_STATUS_SUCCESS != status)
2952 {
2953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002954 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002955 }
2956 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002957 /* free WDI command buffer */
2958 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002959 vos_mem_free(pWdaParams) ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302960
2961
Jeff Johnson295189b2012-06-20 16:38:30 -07002962 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002963 /* without converting the Status to Failure or Success Just
2964 pass the same status to lim */
2965 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002966 /* send SCAN RSP message back to PE */
2967 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002968 return ;
2969}
2970
2971/*
2972 * FUNCTION: WDA_ProcessInitScanReq
2973 * Trigger Init SCAN in DAL
2974 */
2975VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2976 tInitScanParams *initScanParams)
2977{
2978 WDI_Status status = WDI_STATUS_SUCCESS ;
2979 WDI_InitScanReqParamsType *wdiInitScanParam =
2980 (WDI_InitScanReqParamsType *)vos_mem_malloc(
2981 sizeof(WDI_InitScanReqParamsType)) ;
2982 tWDA_ReqParams *pWdaParams;
2983 tANI_U8 i = 0;
2984
2985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002986 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002987 if(NULL == wdiInitScanParam)
2988 {
2989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002990 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002991 VOS_ASSERT(0);
2992 return VOS_STATUS_E_NOMEM;
2993 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002994 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2995 if(NULL == pWdaParams)
2996 {
2997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002998 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002999 VOS_ASSERT(0);
3000 vos_mem_free(wdiInitScanParam);
3001 return VOS_STATUS_E_NOMEM;
3002 }
3003
3004 /* Copy init Scan params to WDI structure */
3005 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
3006 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
3007 sizeof(tSirMacAddr)) ;
3008 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
3009 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
3010 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003011 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
3012 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07003013 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
3014 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003015 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
3016 {
3017 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
3018 initScanParams->scanEntry.bssIdx[i] ;
3019 }
3020
3021 /* if Frame length, copy macMgmtHdr or WDI structure */
3022 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
3023 {
3024 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
3025 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
3026 }
3027 wdiInitScanParam->wdiReqStatusCB = NULL ;
3028
Jeff Johnson295189b2012-06-20 16:38:30 -07003029 /* Store Init Req pointer, as this will be used for response */
3030 pWdaParams->pWdaContext = pWDA;
3031 pWdaParams->wdaMsgParam = initScanParams;
3032 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003033 /* first try to suspend TX */
3034 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003035 if(WDI_STATUS_SUCCESS != status)
3036 {
3037 goto handleWdiFailure;
3038 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003039 /* call DAL API to pass init scan request to DAL */
3040 status = WDI_InitScanReq(wdiInitScanParam,
3041 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003042 if(IS_WDI_STATUS_FAILURE(status))
3043 {
3044 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3045 "error in WDA Init Scan, Resume Tx " );
3046 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003047 VOS_ASSERT(0) ;
3048
3049 goto handleWdiFailure;
3050 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003051 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003052handleWdiFailure:
3053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3054 "Failure in WDI Api, free all the memory " );
3055 /* free WDI command buffer */
3056 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3057 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003058 /* send Failure to PE */
3059 initScanParams->status = eSIR_FAILURE ;
3060 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003061 return CONVERT_WDI2VOS_STATUS(status) ;
3062}
3063
Jeff Johnson295189b2012-06-20 16:38:30 -07003064/*
3065 * FUNCTION: WDA_StartScanReqCallback
3066 * send Start SCAN RSP back to PE
3067 */
3068void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
3069 void* pUserData)
3070{
3071 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3072 tWDA_CbContext *pWDA;
3073 tStartScanParams *pWDA_ScanParam;
3074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003075 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003076 if(NULL == pWdaParams)
3077 {
3078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003079 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003080 VOS_ASSERT(0) ;
3081 return ;
3082 }
3083 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3084 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003085 if(NULL == pWDA_ScanParam)
3086 {
3087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003088 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003089 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003090 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003091 return ;
3092 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003093 if(NULL == pWdaParams->wdaWdiApiMsgParam)
3094 {
3095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003096 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003097 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003098 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003099 return ;
3100 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003101 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3102 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003103
Jeff Johnson295189b2012-06-20 16:38:30 -07003104
3105 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003106 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003107 /* send SCAN RSP message back to PE */
3108 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003109 return ;
3110}
3111
Jeff Johnson295189b2012-06-20 16:38:30 -07003112/*
3113 * FUNCTION: WDA_ProcessStartScanReq
3114 * Trigger start SCAN in WDI
3115 */
3116VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
3117 tStartScanParams *startScanParams)
3118{
3119 WDI_Status status = WDI_STATUS_SUCCESS;
3120 WDI_StartScanReqParamsType *wdiStartScanParams =
3121 (WDI_StartScanReqParamsType *)vos_mem_malloc(
3122 sizeof(WDI_StartScanReqParamsType)) ;
3123 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003125 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003126 if(NULL == wdiStartScanParams)
3127 {
3128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003129 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003130 VOS_ASSERT(0);
3131 return VOS_STATUS_E_NOMEM;
3132 }
3133 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3134 if(NULL == pWdaParams)
3135 {
3136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003137 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003138 VOS_ASSERT(0);
3139 vos_mem_free(wdiStartScanParams);
3140 return VOS_STATUS_E_NOMEM;
3141 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003142 /* Copy init Scan params to WDI structure */
3143 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
3144 wdiStartScanParams->wdiReqStatusCB = NULL ;
3145
Jeff Johnson295189b2012-06-20 16:38:30 -07003146 /* Store Init Req pointer, as this will be used for response */
3147 /* store Params pass it to WDI */
3148 pWdaParams->pWdaContext = pWDA;
3149 pWdaParams->wdaMsgParam = startScanParams;
3150 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003151 /* call DAL API to pass init scan request to DAL */
3152 status = WDI_StartScanReq(wdiStartScanParams,
3153 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003154 /* failure returned by WDI API */
3155 if(IS_WDI_STATUS_FAILURE(status))
3156 {
3157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3158 "Failure in Start Scan WDI API, free all the memory "
3159 "It should be due to previous abort scan." );
3160 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3161 vos_mem_free(pWdaParams) ;
3162 startScanParams->status = eSIR_FAILURE ;
3163 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
3164 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003165 return CONVERT_WDI2VOS_STATUS(status) ;
3166}
Jeff Johnson295189b2012-06-20 16:38:30 -07003167/*
3168 * FUNCTION: WDA_EndScanReqCallback
3169 * END SCAN callback
3170 */
3171void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
3172{
3173 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3174 tWDA_CbContext *pWDA;
3175 tEndScanParams *endScanParam;
3176 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003177 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003178 if(NULL == pWdaParams)
3179 {
3180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003181 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003182 VOS_ASSERT(0) ;
3183 return ;
3184 }
3185 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3186 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003187 if(NULL == endScanParam)
3188 {
3189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003190 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003191 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003192 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3193 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003194 return ;
3195 }
3196
3197 /* Free WDI command buffer */
3198 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3199 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003200 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003201 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003202 /* send response back to PE */
3203 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
3204 return ;
3205}
3206
Jeff Johnson295189b2012-06-20 16:38:30 -07003207/*
3208 * FUNCTION: WDA_ProcessEndScanReq
3209 * Trigger END SCAN in WDI
3210 */
3211VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
3212 tEndScanParams *endScanParams)
3213{
3214 WDI_Status status = WDI_STATUS_SUCCESS;
3215 WDI_EndScanReqParamsType *wdiEndScanParams =
3216 (WDI_EndScanReqParamsType *)vos_mem_malloc(
3217 sizeof(WDI_EndScanReqParamsType)) ;
3218 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003220 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003221 if(NULL == wdiEndScanParams)
3222 {
3223 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003224 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003225 VOS_ASSERT(0);
3226 return VOS_STATUS_E_NOMEM;
3227 }
3228 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3229 if(NULL == pWdaParams)
3230 {
3231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003232 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003233 VOS_ASSERT(0);
3234 vos_mem_free(wdiEndScanParams);
3235 return VOS_STATUS_E_NOMEM;
3236 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003237 /* Copy init Scan params to WDI structure */
3238 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
3239 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003240 /* Store Init Req pointer, as this will be used for response */
3241 /* store Params pass it to WDI */
3242 pWdaParams->pWdaContext = pWDA;
3243 pWdaParams->wdaMsgParam = endScanParams;
3244 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003245 /* call DAL API to pass init scan request to DAL */
3246 status = WDI_EndScanReq(wdiEndScanParams,
3247 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003248 if(IS_WDI_STATUS_FAILURE(status))
3249 {
3250 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3251 "Failure in End Scan WDI API, free all the memory "
3252 "It should be due to previous abort scan." );
3253 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3254 vos_mem_free(pWdaParams) ;
3255 endScanParams->status = eSIR_FAILURE ;
3256 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
3257 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003258 return CONVERT_WDI2VOS_STATUS(status) ;
3259}
Jeff Johnson295189b2012-06-20 16:38:30 -07003260/*
3261 * FUNCTION: WDA_FinishScanReqCallback
3262 * Trigger Finish SCAN callback
3263 */
3264void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
3265{
3266 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3267 tWDA_CbContext *pWDA;
3268 tFinishScanParams *finishScanParam;
3269 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003271 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003272 if(NULL == pWdaParams)
3273 {
3274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003275 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003276 VOS_ASSERT(0) ;
3277 return ;
3278 }
3279
3280 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3281 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003282 if(NULL == finishScanParam)
3283 {
3284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003285 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003286 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003287 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3288 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003289 return ;
3290 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003291 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3292 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003293 /*
3294 * Now Resume TX, if we reached here means, TX is already suspended, we
3295 * have to resume it unconditionaly
3296 */
3297 status = WDA_ResumeDataTx(pWDA) ;
3298
3299 if(VOS_STATUS_SUCCESS != status)
3300 {
3301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003302 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003303 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003304 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003305 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
3306 return ;
3307}
Jeff Johnson295189b2012-06-20 16:38:30 -07003308/*
3309 * FUNCTION: WDA_ProcessFinshScanReq
3310 * Trigger Finish SCAN in WDI
3311 */
3312VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
3313 tFinishScanParams *finishScanParams)
3314{
3315 WDI_Status status = WDI_STATUS_SUCCESS;
3316 WDI_FinishScanReqParamsType *wdiFinishScanParams =
3317 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
3318 sizeof(WDI_FinishScanReqParamsType)) ;
3319 tWDA_ReqParams *pWdaParams ;
3320 tANI_U8 i = 0;
3321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003322 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003323 if(NULL == wdiFinishScanParams)
3324 {
3325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003326 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003327 VOS_ASSERT(0);
3328 return VOS_STATUS_E_NOMEM;
3329 }
3330 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3331 if(NULL == pWdaParams)
3332 {
3333 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003334 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003335 VOS_ASSERT(0);
3336 vos_mem_free(wdiFinishScanParams);
3337 return VOS_STATUS_E_NOMEM;
3338 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003339 /* Copy init Scan params to WDI structure */
3340 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
3341 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
3342 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003343 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
3344 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
3345 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
3346 finishScanParams->frameLength ;
3347 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
3348 finishScanParams->currentOperChannel ;
3349 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
3350 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
3351 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003352 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
3353 {
3354 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
3355 finishScanParams->scanEntry.bssIdx[i] ;
3356 }
3357
3358
Jeff Johnson295189b2012-06-20 16:38:30 -07003359 /* if Frame length, copy macMgmtHdr ro WDI structure */
3360 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
3361 {
3362 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
3363 &finishScanParams->macMgmtHdr,
3364 sizeof(WDI_MacMgmtHdr)) ;
3365 }
3366 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003367 /* Store Init Req pointer, as this will be used for response */
3368 /* store Params pass it to WDI */
3369 pWdaParams->pWdaContext = pWDA;
3370 pWdaParams->wdaMsgParam = finishScanParams;
3371 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003372 /* call DAL API to pass init scan request to DAL */
3373 status = WDI_FinishScanReq(wdiFinishScanParams,
3374 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003375
Jeff Johnson295189b2012-06-20 16:38:30 -07003376
3377 /*
3378 * WDI API returns failure..
3379 */
3380 if(IS_WDI_STATUS_FAILURE( status))
3381 {
3382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3383 "Failure in Finish Scan WDI API, free all the memory " );
3384 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3385 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003386 finishScanParams->status = eSIR_FAILURE ;
3387 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
3388 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003389 return CONVERT_WDI2VOS_STATUS(status) ;
3390}
Jeff Johnson295189b2012-06-20 16:38:30 -07003391/*---------------------------------------------------------------------
3392 * ASSOC API's
3393 *---------------------------------------------------------------------
3394 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003395/*
Sachin Ahuja935eda782014-07-30 14:57:41 +05303396 * FUNCTION: WDA_JoinRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07003397 * Trigger Init SCAN callback
3398 */
Sachin Ahuja935eda782014-07-30 14:57:41 +05303399void WDA_JoinRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07003400{
3401 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3402 tWDA_CbContext *pWDA;
3403 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003405 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003406 if(NULL == pWdaParams)
3407 {
3408 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003409 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003410 VOS_ASSERT(0) ;
3411 return ;
3412 }
3413 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3414 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003415 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3416 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003417 /* reset macBSSID */
3418 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07003419 /* reset macSTASelf */
3420 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003421 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003422 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003423 return ;
3424}
Sachin Ahuja935eda782014-07-30 14:57:41 +05303425
3426/*
3427 * FUNCTION: WDA_JoinReqCallback
3428 * Free memory and send SWITCH CHANNEL RSP back to PE.
3429 * Invoked when Enter JOIN REQ failed in WDI and no RSP callback is generated.
3430 */
3431void WDA_JoinReqCallback(WDI_Status wdiStatus, void* pUserData)
3432{
3433 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3434 tWDA_CbContext *pWDA;
3435 tSwitchChannelParams *joinReqParam;
3436
3437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3438 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
3439
3440 if(NULL == pWdaParams)
3441 {
3442 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3443 "%s: pWdaParams received NULL", __func__);
3444 VOS_ASSERT(0);
3445 return;
3446 }
3447
3448 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3449 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3450 joinReqParam->status = wdiStatus;
3451
3452 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3453 {
3454 /* reset macBSSID */
3455 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
3456 /* reset macSTASelf */
3457 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
3458
3459 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3460 vos_mem_free(pWdaParams);
3461 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
3462 }
3463
3464 return;
3465}
3466
Jeff Johnson295189b2012-06-20 16:38:30 -07003467/*
3468 * FUNCTION: WDA_ProcessJoinReq
3469 * Trigger Join REQ in WDI
3470 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003471VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
3472 tSwitchChannelParams* joinReqParam)
3473{
3474 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003475 WDI_JoinReqParamsType *wdiJoinReqParam =
3476 (WDI_JoinReqParamsType *)vos_mem_malloc(
3477 sizeof(WDI_JoinReqParamsType)) ;
3478 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003480 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003481 if(NULL == wdiJoinReqParam)
3482 {
3483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003484 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003485 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003486 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003487 return VOS_STATUS_E_NOMEM;
3488 }
3489 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3490 if(NULL == pWdaParams)
3491 {
3492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003493 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003494 VOS_ASSERT(0);
3495 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003496 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003497 return VOS_STATUS_E_NOMEM;
3498 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003499
3500 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
3501 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
3502 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
3503 {
3504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3505 "%s: received join request when BSSID or self-STA is NULL "
3506 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003507 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003508 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
3509 VOS_ASSERT(0);
3510 vos_mem_free(wdiJoinReqParam);
3511 vos_mem_free(pWdaParams);
3512 joinReqParam->status = eSIR_FAILURE ;
3513 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3514 return VOS_STATUS_E_INVAL;
3515 }
3516
Jeff Johnson295189b2012-06-20 16:38:30 -07003517 /* copy the BSSID for pWDA */
3518 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
3519 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003520 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
3521 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003522 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
3523 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07003524#ifdef WLAN_FEATURE_VOWIFI
3525 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
3526 joinReqParam->maxTxPower ;
3527#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003528 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
3529 joinReqParam->localPowerConstraint ;
3530#endif
3531 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
3532 joinReqParam->secondaryChannelOffset ;
3533 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
3534
Sachin Ahuja935eda782014-07-30 14:57:41 +05303535 wdiJoinReqParam->wdiReqStatusCB = WDA_JoinReqCallback;
3536 wdiJoinReqParam->pUserData = pWdaParams;
3537
Jeff Johnson295189b2012-06-20 16:38:30 -07003538 /* Store Init Req pointer, as this will be used for response */
3539 /* store Params pass it to WDI */
3540 pWdaParams->pWdaContext = pWDA;
3541 pWdaParams->wdaMsgParam = joinReqParam;
3542 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003543 status = WDI_JoinReq(wdiJoinReqParam,
Sachin Ahuja935eda782014-07-30 14:57:41 +05303544 (WDI_JoinRspCb )WDA_JoinRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003545 if(IS_WDI_STATUS_FAILURE(status))
3546 {
3547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3548 "Failure in Join WDI API, free all the memory " );
3549 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3550 vos_mem_free(pWdaParams) ;
3551 joinReqParam->status = eSIR_FAILURE ;
3552 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3553 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003554 return CONVERT_WDI2VOS_STATUS(status) ;
3555}
Jeff Johnson295189b2012-06-20 16:38:30 -07003556/*
3557 * FUNCTION: WDA_SwitchChannelReqCallback
3558 * send Switch channel RSP back to PE
3559 */
3560void WDA_SwitchChannelReqCallback(
3561 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
3562{
3563 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3564 tWDA_CbContext *pWDA;
3565 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003567 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003568 if(NULL == pWdaParams)
3569 {
3570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003571 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003572 VOS_ASSERT(0) ;
3573 return ;
3574 }
3575 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3576 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3577
3578#ifdef WLAN_FEATURE_VOWIFI
3579 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
3580#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003581 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3582 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003583 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003584 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003585 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003586 return ;
3587}
Jeff Johnson295189b2012-06-20 16:38:30 -07003588/*
3589 * FUNCTION: WDA_ProcessChannelSwitchReq
3590 * Request to WDI to switch channel REQ params.
3591 */
3592VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
3593 tSwitchChannelParams *pSwitchChanParams)
3594{
3595 WDI_Status status = WDI_STATUS_SUCCESS ;
3596 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
3597 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
3598 sizeof(WDI_SwitchChReqParamsType)) ;
3599 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003601 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003602 if(NULL == wdiSwitchChanParam)
3603 {
3604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003605 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003606 VOS_ASSERT(0);
3607 return VOS_STATUS_E_NOMEM;
3608 }
3609 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3610 if(NULL == pWdaParams)
3611 {
3612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003613 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003614 VOS_ASSERT(0);
3615 vos_mem_free(wdiSwitchChanParam);
3616 return VOS_STATUS_E_NOMEM;
3617 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003618 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
3619#ifndef WLAN_FEATURE_VOWIFI
3620 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3621 pSwitchChanParams->localPowerConstraint;
3622#endif
3623 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3624 pSwitchChanParams->secondaryChannelOffset;
3625 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003626 /* Store req pointer, as this will be used for response */
3627 /* store Params pass it to WDI */
3628 pWdaParams->pWdaContext = pWDA;
3629 pWdaParams->wdaMsgParam = pSwitchChanParams;
3630 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003631#ifdef WLAN_FEATURE_VOWIFI
3632 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
3633 = pSwitchChanParams->maxTxPower;
3634 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3635 pSwitchChanParams ->selfStaMacAddr,
3636 sizeof(tSirMacAddr));
3637#endif
3638 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3639 pSwitchChanParams->bssId,
3640 sizeof(tSirMacAddr));
3641
3642 status = WDI_SwitchChReq(wdiSwitchChanParam,
3643 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003644 if(IS_WDI_STATUS_FAILURE(status))
3645 {
3646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3647 "Failure in process channel switch Req WDI API, free all the memory " );
3648 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3649 vos_mem_free(pWdaParams) ;
3650 pSwitchChanParams->status = eSIR_FAILURE ;
3651 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
3652 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003653 return CONVERT_WDI2VOS_STATUS(status) ;
3654}
Kalikinkar dhara1e83b772014-02-06 12:59:22 -08003655
3656/*
3657 * FUNCTION: WDA_SwitchChannelReqCallback_V1
3658 * send Switch channel RSP back to PE
3659 */
3660void WDA_SwitchChannelReqCallback_V1(
3661 WDI_SwitchChRspParamsType_V1 *wdiSwitchChanRsp,
3662 void* pUserData)
3663{
3664 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3665 tWDA_CbContext *pWDA;
3666 tSwitchChannelParams *pSwitchChanParams;
3667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3668 "<------ %s " ,__func__);
3669
3670 if (NULL == pWdaParams)
3671 {
3672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3673 "%s: pWdaParams received NULL", __func__);
3674 VOS_ASSERT(0);
3675 return ;
3676 }
3677 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3678 pSwitchChanParams =
3679 (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3680 pSwitchChanParams->channelSwitchSrc =
3681 wdiSwitchChanRsp->channelSwitchSrc;
3682#ifdef WLAN_FEATURE_VOWIFI
3683 pSwitchChanParams->txMgmtPower =
3684 wdiSwitchChanRsp->ucTxMgmtPower;
3685#endif
3686 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3687 vos_mem_free(pWdaParams);
3688 pSwitchChanParams->status =
3689 wdiSwitchChanRsp->wdiStatus ;
3690 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3691 (void *)pSwitchChanParams , 0);
3692 return;
3693}
3694
3695/*
3696 * FUNCTION: WDA_ProcessChannelSwitchReq_V1
3697 * Request to WDI to switch channel REQ params.
3698 */
3699VOS_STATUS WDA_ProcessChannelSwitchReq_V1(tWDA_CbContext *pWDA,
3700 tSwitchChannelParams *pSwitchChanParams)
3701{
3702 WDI_Status status = WDI_STATUS_SUCCESS ;
3703 WDI_SwitchChReqParamsType_V1 *wdiSwitchChanParam =
3704 (WDI_SwitchChReqParamsType_V1 *)vos_mem_malloc(
3705 sizeof(WDI_SwitchChReqParamsType_V1)) ;
3706 tWDA_ReqParams *pWdaParams ;
3707 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3708 "------> %s " ,__func__);
3709 if (NULL == wdiSwitchChanParam)
3710 {
3711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3712 "%s: VOS MEM Alloc Failure", __func__);
3713 VOS_ASSERT(0);
3714 return VOS_STATUS_E_NOMEM;
3715 }
3716 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3717 if (NULL == pWdaParams)
3718 {
3719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3720 "%s: VOS MEM Alloc Failure", __func__);
3721 VOS_ASSERT(0);
3722 vos_mem_free(wdiSwitchChanParam);
3723 return VOS_STATUS_E_NOMEM;
3724 }
3725 wdiSwitchChanParam->wdiChInfo.channelSwitchSrc =
3726 pSwitchChanParams->channelSwitchSrc;
3727
3728 wdiSwitchChanParam->wdiChInfo.ucChannel =
3729 pSwitchChanParams->channelNumber;
3730#ifndef WLAN_FEATURE_VOWIFI
3731 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3732 pSwitchChanParams->localPowerConstraint;
3733#endif
3734 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3735 pSwitchChanParams->secondaryChannelOffset;
3736 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
3737 /* Store req pointer, as this will be used for response */
3738 /* store Params pass it to WDI */
3739 pWdaParams->pWdaContext = pWDA;
3740 pWdaParams->wdaMsgParam = pSwitchChanParams;
3741 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
3742#ifdef WLAN_FEATURE_VOWIFI
3743 wdiSwitchChanParam->wdiChInfo.cMaxTxPower =
3744 pSwitchChanParams->maxTxPower;
3745 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3746 pSwitchChanParams ->selfStaMacAddr,
3747 sizeof(tSirMacAddr));
3748#endif
3749 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3750 pSwitchChanParams->bssId,
3751 sizeof(tSirMacAddr));
3752
3753 status = WDI_SwitchChReq_V1(wdiSwitchChanParam,
3754 (WDI_SwitchChRspCb_V1)WDA_SwitchChannelReqCallback_V1,
3755 pWdaParams);
3756 if (IS_WDI_STATUS_FAILURE(status))
3757 {
3758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3759 "Failure in process channel switch Req WDI "
3760 "API, free all the memory " );
3761 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3762 vos_mem_free(pWdaParams) ;
3763 pSwitchChanParams->status = eSIR_FAILURE ;
3764 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3765 (void *)pSwitchChanParams, 0) ;
3766 }
3767 return CONVERT_WDI2VOS_STATUS(status) ;
3768}
3769
Jeff Johnson295189b2012-06-20 16:38:30 -07003770/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05303771 * FUNCTION: WDA_ConfigBssRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07003772 * config BSS Req Callback, called by WDI
3773 */
Abhishek Singhf1221ab2015-08-04 16:38:39 +05303774void WDA_ConfigBssRspCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
Jeff Johnson295189b2012-06-20 16:38:30 -07003775 ,void* pUserData)
3776{
3777 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3778 tWDA_CbContext *pWDA;
3779 tAddBssParams *configBssReqParam;
3780 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003781 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003782 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003783 if(NULL == pWdaParams)
3784 {
3785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003786 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003787 VOS_ASSERT(0) ;
3788 return ;
3789 }
3790 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3791 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
3792 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003793 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003794 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003795 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
3796 {
3797 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
3798 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003799 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
3800 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
3801 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
3802
3803 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
3804 {
3805 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
3806 {
3807 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
3808 staConfigBssParam->staType = STA_ENTRY_BSSID;
3809 }
3810 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
3811 (staConfigBssParam->staType == STA_ENTRY_SELF))
3812 {
3813 /* This is the 1st add BSS Req for the BTAMP STA */
3814 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3815 staConfigBssParam->staType = STA_ENTRY_BSSID;
3816 }
3817 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3818 (staConfigBssParam->staType == STA_ENTRY_PEER))
3819 {
3820 /* This is the 2nd ADD BSS Request that is sent
3821 * on the BTAMP STA side. The Sta type is
3822 * set to STA_ENTRY_PEER here.*/
3823 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3824 }
3825 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3826 (staConfigBssParam->staType == STA_ENTRY_SELF))
3827 {
3828 /* statype is already set by PE.
3829 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
3830 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
3831 staConfigBssParam->staType = STA_ENTRY_BSSID;
3832 }
3833 else
3834 {
3835 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
3836 staConfigBssParam->staType = STA_ENTRY_PEER;
3837 }
3838 }
3839 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
3840 {
3841 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
3842 staConfigBssParam->staType = STA_ENTRY_SELF;
3843 }
3844 else
3845 {
3846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3847 "Invalid operation mode specified");
3848 VOS_ASSERT(0);
3849 }
3850
3851 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003852 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003853 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003854 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003855 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
3856 sizeof(tSirMacAddr));
3857 staConfigBssParam->txChannelWidthSet =
3858 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07003859 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
3860 staConfigBssParam->htCapable)
3861 {
3862 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
3863 wdiConfigBssRsp->ucBSSIdx;
3864 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
3865 WDA_VALID_STA_INDEX ;
Abhishek Singh0644e482014-10-06 18:38:23 +05303866 pWDA->wdaStaInfo[staConfigBssParam->staIdx].currentOperChan =
3867 configBssReqParam->currentOperChannel;
Jeff Johnson295189b2012-06-20 16:38:30 -07003868 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003869 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
3870 wdiConfigBssRsp->ucBSSIdx,
3871 wdiConfigBssRsp->ucSTAIdx))
3872 {
3873 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003874 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003875 VOS_ASSERT(0) ;
3876 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003877 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
3878 {
3879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003880 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003881 VOS_ASSERT(0) ;
3882 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003883#ifdef WLAN_FEATURE_VOWIFI
3884 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
3885#endif
3886 }
Abhishek Singh837adf22015-10-01 17:37:37 +05303887 else
3888 {
3889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3890 "%s: Failure with status %d", __func__,
3891 wdiConfigBssRsp->wdiStatus);
3892 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
3893 WLAN_LOG_INDICATOR_HOST_DRIVER,
3894 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
3895 FALSE, TRUE);
3896 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05303897 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
3898 sizeof(WDI_ConfigBSSReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07003899 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3900 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003901 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003902 return ;
3903}
Jeff Johnson295189b2012-06-20 16:38:30 -07003904/*
3905 * FUNCTION: WDA_UpdateEdcaParamsForAC
3906 * Update WDI EDCA params with PE edca params
3907 */
3908void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
3909 WDI_EdcaParamRecord *wdiEdcaParam,
3910 tSirMacEdcaParamRecord *macEdcaParam)
3911{
3912 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
3913 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
3914 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
3915 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
3916 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
3917 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
3918}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05303919void WDA_ConfigBssReqCallback(WDI_Status wdiStatus,
3920 void* pUserData)
3921{
3922 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3923 tWDA_CbContext *pWDA;
3924 tAddBssParams *addBssParams;
3925
3926 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3927 "<------ %s, wdiStatus: %d",
3928 __func__, wdiStatus);
3929
3930 if (NULL == pWdaParams)
3931 {
3932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3933 "%s: Invalid pWdaParams pointer", __func__);
3934 VOS_ASSERT(0);
3935 return;
3936 }
3937
3938 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3939 addBssParams = (tAddBssParams *)pWdaParams->wdaMsgParam;
3940
3941 addBssParams->status = wdiStatus;
3942
3943 if (IS_WDI_STATUS_FAILURE(wdiStatus))
3944 {
3945 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3946 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05303947 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
3948 WLAN_LOG_INDICATOR_HOST_DRIVER,
3949 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
3950 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05303951 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)addBssParams , 0);
3952 }
3953
3954 return ;
3955}
3956
Jeff Johnson295189b2012-06-20 16:38:30 -07003957/*
3958 * FUNCTION: WDA_ProcessConfigBssReq
3959 * Configure BSS before starting Assoc with AP
3960 */
3961VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
3962 tAddBssParams* configBssReqParam)
3963{
3964 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303965 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003966 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003967 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003968 "------> %s " ,__func__);
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303969 if (NULL == configBssReqParam)
3970 {
3971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3972 "%s: configBssReqParam is NULL", __func__);
3973 return VOS_STATUS_E_INVAL;
3974 }
3975
3976 wdiConfigBssReqParam = (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
3977 sizeof(WDI_ConfigBSSReqParamsType)) ;
3978
Jeff Johnson295189b2012-06-20 16:38:30 -07003979 if(NULL == wdiConfigBssReqParam)
3980 {
3981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003982 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003983 VOS_ASSERT(0);
3984 return VOS_STATUS_E_NOMEM;
3985 }
3986 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3987 if(NULL == pWdaParams)
3988 {
3989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003990 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003991 VOS_ASSERT(0);
3992 vos_mem_free(wdiConfigBssReqParam);
3993 return VOS_STATUS_E_NOMEM;
3994 }
Kiran4a17ebe2013-01-31 10:43:43 -08003995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3996 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07003997 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003998 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
3999 configBssReqParam) ;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304000 wdiConfigBssReqParam->wdiReqStatusCB = WDA_ConfigBssReqCallback;
4001 wdiConfigBssReqParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004002 /* Store Init Req pointer, as this will be used for response */
4003 /* store Params pass it to WDI */
4004 pWdaParams->pWdaContext = pWDA;
4005 pWdaParams->wdaMsgParam = configBssReqParam;
4006 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004007 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304008 (WDI_ConfigBSSRspCb )WDA_ConfigBssRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004009 if(IS_WDI_STATUS_FAILURE(status))
4010 {
4011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4012 "Failure in Config BSS WDI API, free all the memory " );
4013 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4014 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004015 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004016 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
4017 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004018 return CONVERT_WDI2VOS_STATUS(status) ;
4019}
Jeff Johnson295189b2012-06-20 16:38:30 -07004020#ifdef ENABLE_HAL_COMBINED_MESSAGES
4021/*
4022 * FUNCTION: WDA_PostAssocReqCallback
4023 * Post ASSOC req callback, send RSP back to PE
4024 */
4025void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
4026 void* pUserData)
4027{
4028 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4029 tPostAssocParams *postAssocReqParam =
4030 (tPostAssocParams *)pWDA->wdaMsgParam ;
4031 /*STA context within the BSS Params*/
4032 tAddStaParams *staPostAssocParam =
4033 &postAssocReqParam->addBssParams.staContext ;
4034 /*STA Params for self STA*/
4035 tAddStaParams *selfStaPostAssocParam =
4036 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004038 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004039 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004040 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004041 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
4042 {
4043 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
4044 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
4045 sizeof(tSirMacAddr)) ;
4046 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
4047 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
4048 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004049 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
4050 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05304051 vos_mem_zero(pWDA->wdaWdiApiMsgParam, sizeof(WDI_PostAssocReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004052 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
4053 pWDA->wdaWdiApiMsgParam = NULL;
4054 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004055 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004056 return ;
4057}
Jeff Johnson295189b2012-06-20 16:38:30 -07004058/*
4059 * FUNCTION: WDA_ProcessPostAssocReq
4060 * Trigger POST ASSOC processing in WDI
4061 */
4062VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
4063 tPostAssocParams *postAssocReqParam)
4064{
Jeff Johnson295189b2012-06-20 16:38:30 -07004065 WDI_Status status = WDI_STATUS_SUCCESS ;
4066
4067 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
4068 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
4069 sizeof(WDI_PostAssocReqParamsType)) ;
4070 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004071 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004072
Jeff Johnson295189b2012-06-20 16:38:30 -07004073 if(NULL == wdiPostAssocReqParam)
4074 {
4075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004076 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004077 VOS_ASSERT(0);
4078 return VOS_STATUS_E_NOMEM;
4079 }
4080
4081 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
4082 {
4083 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004084 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004085 VOS_ASSERT(0);
4086 return VOS_STATUS_E_FAILURE;
4087 }
4088
Jeff Johnson295189b2012-06-20 16:38:30 -07004089 /* update BSS params into WDI structure */
4090 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
4091 &postAssocReqParam->addBssParams) ;
4092 /* update STA params into WDI structure */
4093 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
4094 &postAssocReqParam->addStaParams) ;
4095
4096 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
4097 postAssocReqParam->addBssParams.highPerformance;
4098 WDA_UpdateEdcaParamsForAC(pWDA,
4099 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
4100 &postAssocReqParam->addBssParams.acbe);
4101 WDA_UpdateEdcaParamsForAC(pWDA,
4102 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
4103 &postAssocReqParam->addBssParams.acbk);
4104 WDA_UpdateEdcaParamsForAC(pWDA,
4105 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
4106 &postAssocReqParam->addBssParams.acvi);
4107 WDA_UpdateEdcaParamsForAC(pWDA,
4108 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
4109 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07004110 /* Store Init Req pointer, as this will be used for response */
4111 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004112 /* store Params pass it to WDI */
4113 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004114 status = WDI_PostAssocReq(wdiPostAssocReqParam,
4115 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004116 if(IS_WDI_STATUS_FAILURE(status))
4117 {
4118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4119 "Failure in Post Assoc WDI API, free all the memory " );
4120 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
4121 pWDA->wdaWdiApiMsgParam = NULL;
4122 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004123 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004124 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
4125 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004126 return CONVERT_WDI2VOS_STATUS(status) ;
4127}
4128#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004129/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304130 * FUNCTION: WDA_AddStaRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004131 * ADD STA req callback, send RSP back to PE
4132 */
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304133void WDA_AddStaRspCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -07004134 void* pUserData)
4135{
4136 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4137 tWDA_CbContext *pWDA;
4138 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004140 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004141 if(NULL == pWdaParams)
4142 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004144 VOS_ASSERT(0) ;
4145 return ;
4146 }
4147 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4148 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004149 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004150 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004151 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
4152 {
4153 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
4154 /*TODO: UMAC structure doesn't have these fields*/
4155 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
4156 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
4157 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
4158 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
4159 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
4160 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08004161#ifdef FEATURE_WLAN_TDLS
4162 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
4163 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
4164#else
Jeff Johnson295189b2012-06-20 16:38:30 -07004165 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08004166#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004167 {
4168 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
4169 wdiConfigStaRsp->ucBssIdx;
4170 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
4171 WDA_VALID_STA_INDEX ;
Abhishek Singhf08a82b2014-10-07 11:00:42 +05304172 pWDA->wdaStaInfo[addStaReqParam->staIdx].currentOperChan =
4173 addStaReqParam->currentOperChan;
Jeff Johnson295189b2012-06-20 16:38:30 -07004174 }
4175 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
4176 {
4177 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004178 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004179 VOS_ASSERT(0) ;
4180 return ;
4181 }
4182 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304183 else
4184 {
4185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4186 "%s: Failure with status %d", __func__,
4187 wdiConfigStaRsp->wdiStatus);
4188 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4189 WLAN_LOG_INDICATOR_HOST_DRIVER,
4190 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4191 FALSE, TRUE);
4192 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004193 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4194 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004195 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004196 return ;
4197}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304198void WDA_AddStaReqCallback(WDI_Status wdiStatus,
4199 void* pUserData)
4200{
4201 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4202 tWDA_CbContext *pWDA;
4203 tAddStaParams *addStaParams;
4204
4205 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4206 "<------ %s, wdiStatus: %d",
4207 __func__, wdiStatus);
4208
4209 if (NULL == pWdaParams)
4210 {
4211 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4212 "%s: Invalid pWdaParams pointer", __func__);
4213 VOS_ASSERT(0);
4214 return;
4215 }
4216
4217 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4218 addStaParams = (tAddStaParams *)pWdaParams->wdaMsgParam;
4219
4220 addStaParams->status = wdiStatus;
4221
4222 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4223 {
4224 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4225 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304226 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4227 WLAN_LOG_INDICATOR_HOST_DRIVER,
4228 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4229 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304230 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaParams , 0);
4231 }
4232
4233 return ;
4234}
4235
Jeff Johnson295189b2012-06-20 16:38:30 -07004236/*
4237 * FUNCTION: WDA_ConfigStaReq
4238 * Trigger Config STA processing in WDI
4239 */
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304240VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
Jeff Johnson295189b2012-06-20 16:38:30 -07004241 tAddStaParams *addStaReqParam)
4242{
Jeff Johnson295189b2012-06-20 16:38:30 -07004243 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004244 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
4245 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
4246 sizeof(WDI_ConfigSTAReqParamsType)) ;
4247 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004249 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004250 if(NULL == wdiConfigStaReqParam)
4251 {
4252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004253 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004254 VOS_ASSERT(0);
4255 return VOS_STATUS_E_NOMEM;
4256 }
4257 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4258 if(NULL == pWdaParams)
4259 {
4260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004261 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004262 VOS_ASSERT(0);
4263 vos_mem_free(wdiConfigStaReqParam);
4264 return VOS_STATUS_E_NOMEM;
4265 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004266 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004267 /* update STA params into WDI structure */
4268 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
4269 addStaReqParam) ;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304270 wdiConfigStaReqParam->wdiReqStatusCB = WDA_AddStaReqCallback;
4271 wdiConfigStaReqParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004272 /* Store Init Req pointer, as this will be used for response */
4273 /* store Params pass it to WDI */
4274 pWdaParams->pWdaContext = pWDA;
4275 pWdaParams->wdaMsgParam = addStaReqParam;
4276 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304277
Jeff Johnson295189b2012-06-20 16:38:30 -07004278 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304279 (WDI_ConfigSTARspCb )WDA_AddStaRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004280 if(IS_WDI_STATUS_FAILURE(status))
4281 {
4282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4283 "Failure in Config STA WDI API, free all the memory " );
4284 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4285 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004286 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004287 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
4288 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004289 return CONVERT_WDI2VOS_STATUS(status) ;
4290}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304291
Jeff Johnson295189b2012-06-20 16:38:30 -07004292/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304293 * FUNCTION: WDA_DelBSSRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004294 * Dens DEL BSS RSP back to PE
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304295 */
4296void WDA_DelBSSRspCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -07004297 void* pUserData)
4298{
4299 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4300 tWDA_CbContext *pWDA;
4301 tDeleteBssParams *delBssReqParam;
4302 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07004303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004304 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004305 if(NULL == pWdaParams)
4306 {
4307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004308 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004309 VOS_ASSERT(0) ;
4310 return ;
4311 }
4312 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4313 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004314 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004315 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
4316 {
4317 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
4318 sizeof(tSirMacAddr)) ;
4319 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304320 else
4321 {
4322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4323 "%s: Failure with status %d", __func__,
4324 wdiDelBssRsp->wdiStatus);
4325 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4326 WLAN_LOG_INDICATOR_HOST_DRIVER,
4327 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4328 FALSE, TRUE);
4329 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004330 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
4331 {
4332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004333 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004334 VOS_ASSERT(0) ;
4335 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004336 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
4337 {
4338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004339 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004340 VOS_ASSERT(0) ;
4341 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004342 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
4343 {
4344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004345 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004346 VOS_ASSERT(0) ;
4347 }
Mihir Shete2ab1d492014-06-04 14:21:05 +05304348
4349 WLANTL_StartForwarding(staIdx,0,0);
4350
Jeff Johnson295189b2012-06-20 16:38:30 -07004351 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4352 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004353 /* reset the the system role*/
4354 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
4355
4356 /* Reset the BA related information */
4357 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
4358 {
4359 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
4360 {
4361 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
4362 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05304363 pWDA->wdaStaInfo[staIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004364 /* Reset framesTxed counters here */
4365 for(tid = 0; tid < STACFG_MAX_TC; tid++)
4366 {
4367 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
4368 }
4369 }
4370 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304371
Jeff Johnson295189b2012-06-20 16:38:30 -07004372 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004373 return ;
4374}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304375void WDA_DelBSSReqCallback(WDI_Status wdiStatus,
4376 void* pUserData)
4377{
4378 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4379 tWDA_CbContext *pWDA;
4380 tDeleteBssParams *delbssParams;
4381
4382 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4383 "<------ %s, wdiStatus: %d",
4384 __func__, wdiStatus);
4385
4386 if (NULL == pWdaParams)
4387 {
4388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4389 "%s: Invalid pWdaParams pointer", __func__);
4390 VOS_ASSERT(0);
4391 return;
4392 }
4393
4394 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4395 delbssParams = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
4396
4397 delbssParams->status = wdiStatus ;
4398
4399 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4400 {
4401 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4402 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304403 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4404 WLAN_LOG_INDICATOR_HOST_DRIVER,
4405 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4406 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304407 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delbssParams , 0) ;
4408 }
4409
4410 return ;
4411}
Jeff Johnson295189b2012-06-20 16:38:30 -07004412
Jeff Johnson295189b2012-06-20 16:38:30 -07004413/*
4414 * FUNCTION: WDA_ProcessDelBssReq
4415 * Init DEL BSS req with WDI
4416 */
4417VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
4418 tDeleteBssParams *delBssParam)
4419{
4420 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004421 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
4422 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
4423 sizeof(WDI_DelBSSReqParamsType)) ;
4424 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004426 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004427 if(NULL == wdiDelBssReqParam)
4428 {
4429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304430 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004431 VOS_ASSERT(0);
4432 return VOS_STATUS_E_NOMEM;
4433 }
4434 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4435 if(NULL == pWdaParams)
4436 {
4437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004438 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004439 VOS_ASSERT(0);
4440 vos_mem_free(wdiDelBssReqParam);
4441 return VOS_STATUS_E_NOMEM;
4442 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004443 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304444 wdiDelBssReqParam->wdiReqStatusCB = WDA_DelBSSReqCallback ;
4445 wdiDelBssReqParam->pUserData = pWdaParams;
4446
Jeff Johnson295189b2012-06-20 16:38:30 -07004447 /* Store Init Req pointer, as this will be used for response */
4448 /* store Params pass it to WDI */
4449 pWdaParams->pWdaContext = pWDA;
4450 pWdaParams->wdaMsgParam = delBssParam;
4451 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304452
Jeff Johnson295189b2012-06-20 16:38:30 -07004453 status = WDI_DelBSSReq(wdiDelBssReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304454 (WDI_DelBSSRspCb )WDA_DelBSSRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004455 if(IS_WDI_STATUS_FAILURE(status))
4456 {
4457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4458 "Failure in Del BSS WDI API, free all the memory " );
4459 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4460 vos_mem_free(pWdaParams) ;
4461 delBssParam->status = eSIR_FAILURE ;
4462 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
4463 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004464 return CONVERT_WDI2VOS_STATUS(status) ;
4465}
Jeff Johnson295189b2012-06-20 16:38:30 -07004466/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304467 * FUNCTION: WDA_DelSTARspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004468 * Dens DEL STA RSP back to PE
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304469 */
4470void WDA_DelSTARspCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -07004471 void* pUserData)
4472{
4473 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4474 tWDA_CbContext *pWDA;
4475 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004477 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004478 if(NULL == pWdaParams)
4479 {
4480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004481 "%s: pWdaParams received NULL", __func__);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304482 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004483 return ;
4484 }
4485 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4486 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004487 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004488 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
4489 {
4490 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
4491 {
4492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004493 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004494 VOS_ASSERT(0) ;
4495 }
4496 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
Mihir Shete2ab1d492014-06-04 14:21:05 +05304497 WLANTL_StartForwarding(delStaReqParam->staIdx,0,0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004498 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304499 else
4500 {
4501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4502 "%s: Failure with status %d", __func__,
4503 wdiDelStaRsp->wdiStatus);
4504 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4505 WLAN_LOG_INDICATOR_HOST_DRIVER,
4506 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4507 FALSE, TRUE);
4508 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004509 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4510 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004511 /*Reset the BA information corresponding to this STAIdx */
4512 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
4513 WDA_INVALID_STA_INDEX;
4514 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05304515 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004516 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004517 return ;
4518}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304519void WDA_DelSTAReqCallback(WDI_Status wdiStatus,
4520 void* pUserData)
4521{
4522 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4523 tWDA_CbContext *pWDA;
4524 tDeleteStaParams *delStaParams;
4525
4526 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4527 "<------ %s, wdiStatus: %d",
4528 __func__, wdiStatus);
4529
4530 if (NULL == pWdaParams)
4531 {
4532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4533 "%s: Invalid pWdaParams pointer", __func__);
4534 VOS_ASSERT(0);
4535 return;
4536 }
4537
4538 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4539 delStaParams = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
4540
4541 delStaParams->status = wdiStatus ;
4542
4543 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4544 {
4545 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4546 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304547 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4548 WLAN_LOG_INDICATOR_HOST_DRIVER,
4549 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4550 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304551 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParams , 0) ;
4552 }
4553
4554 return ;
4555}
4556
Jeff Johnson295189b2012-06-20 16:38:30 -07004557/*
4558 * FUNCTION: WDA_ProcessDelStaReq
4559 * Init DEL STA req with WDI
4560 */
4561VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
4562 tDeleteStaParams *delStaParam)
4563{
4564 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004565 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
4566 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
4567 sizeof(WDI_DelSTAReqParamsType)) ;
4568 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004570 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004571 if(NULL == wdiDelStaReqParam)
4572 {
4573 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004574 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004575 VOS_ASSERT(0);
4576 return VOS_STATUS_E_NOMEM;
4577 }
4578 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4579 if(NULL == pWdaParams)
4580 {
4581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004582 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004583 VOS_ASSERT(0);
4584 vos_mem_free(wdiDelStaReqParam);
4585 return VOS_STATUS_E_NOMEM;
4586 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004587 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304588 wdiDelStaReqParam->wdiReqStatusCB = WDA_DelSTAReqCallback ;
4589 wdiDelStaReqParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004590 /* Store Init Req pointer, as this will be used for response */
4591 /* store Params pass it to WDI */
4592 pWdaParams->pWdaContext = pWDA;
4593 pWdaParams->wdaMsgParam = delStaParam;
4594 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304595
Jeff Johnson295189b2012-06-20 16:38:30 -07004596 status = WDI_DelSTAReq(wdiDelStaReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304597 (WDI_DelSTARspCb )WDA_DelSTARspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004598 if(IS_WDI_STATUS_FAILURE(status))
4599 {
4600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4601 "Failure in Del STA WDI API, free all the memory status = %d",
4602 status );
4603 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4604 vos_mem_free(pWdaParams) ;
4605 delStaParam->status = eSIR_FAILURE ;
4606 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
4607 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004608 return CONVERT_WDI2VOS_STATUS(status) ;
4609}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304610void WDA_ProcessAddStaSelfRspCallback(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07004611{
4612 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4613 tWDA_CbContext *pWDA;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304614 tAddStaSelfParams *pAddStaSelfRsp = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004616 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004617 if(NULL == pWdaParams)
4618 {
4619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004620 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004621 VOS_ASSERT(0) ;
4622 return ;
4623 }
4624 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4625 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004626 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4627 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004628 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
4629 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
4630 pwdiAddSTASelfRsp->macSelfSta,
4631 sizeof(pAddStaSelfRsp->selfMacAddr));
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304632 pWDA->wdaAddSelfStaParams.ucSTASelfIdx = pwdiAddSTASelfRsp->ucSTASelfIdx;
4633 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaRspCounter++;
4634 if (pAddStaSelfRsp->status == eSIR_FAILURE)
4635 {
4636 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_RSP_WDI_FAIL;
4637 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Abhishek Singh837adf22015-10-01 17:37:37 +05304638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4639 "%s: Failure with status %d failcnter %d", __func__,
4640 pwdiAddSTASelfRsp->wdiStatus,
4641 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter);
4642 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4643 WLAN_LOG_INDICATOR_HOST_DRIVER,
4644 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4645 FALSE, TRUE);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304646 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004647 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004648 return ;
4649}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304650void WDA_ProcessAddStaSelfReqCallback(WDI_Status wdiStatus,
4651 void* pUserData)
4652{
4653 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4654 tWDA_CbContext *pWDA;
4655 tAddStaSelfParams *addStaSelfParams;
4656
4657 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4658 "<------ %s, wdiStatus: %d",
4659 __func__, wdiStatus);
4660
4661 if (NULL == pWdaParams)
4662 {
4663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4664 "%s: Invalid pWdaParams pointer", __func__);
4665 VOS_ASSERT(0);
4666 return;
4667 }
4668
4669 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4670 addStaSelfParams = (tAddStaSelfParams *)pWdaParams->wdaMsgParam;
4671
4672 addStaSelfParams->status = wdiStatus ;
4673
4674 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4675 {
4676 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4677 vos_mem_free(pWdaParams) ;
4678 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason
4679 = WDA_ADDSTA_REQ_WDI_FAIL;
4680 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Abhishek Singh837adf22015-10-01 17:37:37 +05304681 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4682 "%s: Failure with status %d failcnter %d", __func__,
4683 wdiStatus,
4684 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter);
4685 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4686 WLAN_LOG_INDICATOR_HOST_DRIVER,
4687 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4688 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304689 WDA_SendMsg(pWDA, WDA_ADD_STA_SELF_RSP, (void *)addStaSelfParams , 0);
4690 }
4691
4692 return ;
4693}
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304694
Jeff Johnson295189b2012-06-20 16:38:30 -07004695/*
4696 * FUNCTION: WDA_ProcessAddStaSelfReq
4697 *
4698 */
4699VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
4700{
4701 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004702 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004703 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
4704 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
4705 sizeof(WDI_AddSTASelfReqParamsType)) ;
4706 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004707 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004708 "------> %s " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304709 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaReqCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004710 if( NULL == wdiAddStaSelfReq )
4711 {
4712 VOS_ASSERT( 0 );
4713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004714 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304715 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4716 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004717 return( VOS_STATUS_E_NOMEM );
4718 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004719 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004720 if( NULL == pWdaParams )
4721 {
4722 VOS_ASSERT( 0 );
4723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004724 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304725 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4726 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004727 vos_mem_free(wdiAddStaSelfReq) ;
4728 return( VOS_STATUS_E_NOMEM );
4729 }
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304730 wdiAddStaSelfReq->wdiReqStatusCB = WDA_ProcessAddStaSelfReqCallback;
4731 wdiAddStaSelfReq->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004732 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
Kiran Kumar Lokere0ad5cd32013-06-25 11:26:22 -07004733 wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004734 /* Store Init Req pointer, as this will be used for response */
4735 /* store Params pass it to WDI */
4736 pWdaParams->pWdaContext = pWDA;
4737 pWdaParams->wdaMsgParam = pAddStaSelfReq;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304738 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
4739
4740 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq,
4741 WDA_ProcessAddStaSelfRspCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004742
Jeff Johnson43971f52012-07-17 12:26:56 -07004743 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004744 {
4745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4746 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07004747 wstatus );
4748 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004749 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4750 vos_mem_free(pWdaParams) ;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304751 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_WDI_FAIL;
4752 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004753 pAddStaSelfReq->status = eSIR_FAILURE ;
4754 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
4755 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004756 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004757}
Jeff Johnson295189b2012-06-20 16:38:30 -07004758/*
4759 * FUNCTION: WDA_DelSTASelfRespCallback
4760 *
4761 */
4762void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
4763 wdiDelStaSelfRspParams , void* pUserData)
4764{
4765 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4766 tWDA_CbContext *pWDA;
4767 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004768 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004769 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004770 if (NULL == pWdaParams)
4771 {
4772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004773 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004774 VOS_ASSERT(0);
4775 return;
4776 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004777 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4778 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004779 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004780 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004781
4782 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4783 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304784 if (WDI_STATUS_SUCCESS != delStaSelfParams->status)
Abhishek Singh231cc4b2015-12-14 12:31:42 +05304785 {
Abhishek Singh837adf22015-10-01 17:37:37 +05304786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4787 "%s: Failure with status %d", __func__,
4788 wdiDelStaSelfRspParams->wdiStatus);
4789 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4790 WLAN_LOG_INDICATOR_HOST_DRIVER,
4791 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4792 FALSE, TRUE);
Abhishek Singh231cc4b2015-12-14 12:31:42 +05304793 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004794 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004795 return ;
4796}
Jeff Johnson295189b2012-06-20 16:38:30 -07004797/*
4798 * FUNCTION: WDA_DelSTASelfReqCallback
4799 *
4800 */
4801void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
4802 void* pUserData)
4803{
4804 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4805 tWDA_CbContext *pWDA;
4806 tDelStaSelfParams *delStaSelfParams;
4807
4808 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05304809 "<------ %s, wdiStatus: %d pWdaParams: %p",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004810 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004811
4812 if (NULL == pWdaParams)
4813 {
4814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004815 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004816 VOS_ASSERT(0);
4817 return;
4818 }
4819
4820 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4821 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
4822
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004823 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004824
4825 if(IS_WDI_STATUS_FAILURE(wdiStatus))
4826 {
4827 VOS_ASSERT(0);
4828 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4829 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304830 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4831 WLAN_LOG_INDICATOR_HOST_DRIVER,
4832 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4833 FALSE, TRUE);
Jeff Johnson295189b2012-06-20 16:38:30 -07004834 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
4835 }
4836
4837 return ;
4838}
4839
4840/*
4841 * FUNCTION: WDA_DelSTASelfReq
4842 * Trigger Config STA processing in WDI
4843 */
4844VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
4845 tDelStaSelfParams* pDelStaSelfReqParam)
4846{
4847 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004848 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004849 tWDA_ReqParams *pWdaParams = NULL;
4850 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
4851 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
4852 sizeof(WDI_DelSTASelfReqParamsType)) ;
4853
Jeff Johnson295189b2012-06-20 16:38:30 -07004854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004855 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004856 if( NULL == wdiDelStaSelfReq )
4857 {
4858 VOS_ASSERT( 0 );
4859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004860 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004861 return( VOS_STATUS_E_NOMEM );
4862 }
4863
4864 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4865 if( NULL == pWdaParams )
4866 {
4867 VOS_ASSERT( 0 );
4868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004869 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004870 vos_mem_free(wdiDelStaSelfReq) ;
4871 return( VOS_STATUS_E_NOMEM );
4872 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004873 pWdaParams->pWdaContext = pWDA;
4874 /* Store param pointer as passed in by caller */
4875 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
4876 /* store Params pass it to WDI */
4877 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07004878 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
4879 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
4880
4881 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
4882 wdiDelStaSelfReq->pUserData = pWdaParams;
4883
Jeff Johnson43971f52012-07-17 12:26:56 -07004884 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07004885 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
4886
Jeff Johnson43971f52012-07-17 12:26:56 -07004887 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004888 {
4889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
4890 "Failure in Del Sta Self REQ WDI API, free all the memory " );
4891 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07004892 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004893 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4894 vos_mem_free(pWdaParams) ;
4895 pDelStaSelfReqParam->status = eSIR_FAILURE ;
4896 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
4897 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004898 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004899}
4900
Jeff Johnson295189b2012-06-20 16:38:30 -07004901/*
4902 * FUNCTION: WDA_SendMsg
4903 * Send Message back to PE
4904 */
4905void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
4906 void *pBodyptr, tANI_U32 bodyVal)
4907{
4908 tSirMsgQ msg = {0} ;
4909 tANI_U32 status = VOS_STATUS_SUCCESS ;
4910 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07004911 msg.type = msgType;
4912 msg.bodyval = bodyVal;
4913 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07004914 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07004915 if (VOS_STATUS_SUCCESS != status)
4916 {
4917 if(NULL != pBodyptr)
4918 {
4919 vos_mem_free(pBodyptr);
4920 }
4921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004922 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004923 VOS_ASSERT(0) ;
4924 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004925 return ;
4926}
Jeff Johnson295189b2012-06-20 16:38:30 -07004927/*
4928 * FUNCTION: WDA_UpdateBSSParams
4929 * Translated WDA/PE BSS info into WDI BSS info..
4930 */
4931void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
4932 WDI_ConfigBSSReqInfoType *wdiBssParams,
4933 tAddBssParams *wdaBssParams)
4934{
4935 v_U8_t keyIndex = 0;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05304936 v_U8_t i = 0;
4937
Jeff Johnson295189b2012-06-20 16:38:30 -07004938 /* copy bssReq Params to WDI structure */
4939 vos_mem_copy(wdiBssParams->macBSSID,
4940 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
4941 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
4942 sizeof(tSirMacAddr)) ;
4943 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
4944 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
4945 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004946 wdiBssParams->ucShortSlotTimeSupported =
4947 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004948 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
4949 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
4950 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
4951 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
4952 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
4953
4954 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
4955 wdiBssParams->ucTXOPProtectionFullSupport =
4956 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004957 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
4958 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004959 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004960 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
4961 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
4962 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
4963 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
4964
Chet Lanctot186b5732013-03-18 10:26:30 -07004965 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
4966
Jeff Johnson295189b2012-06-20 16:38:30 -07004967 /* copy SSID into WDI structure */
4968 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
4969 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
4970 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004971 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
4972 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004973 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07004974#ifdef WLAN_FEATURE_VOWIFI
4975 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
4976#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004977 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07004978 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07004979#ifdef WLAN_FEATURE_VOWIFI_11R
4980 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07004981 if(wdiBssParams->bExtSetStaKeyParamValid)
4982 {
4983 /* copy set STA key params to WDI structure */
4984 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
4985 wdaBssParams->extSetStaKeyParam.staIdx;
4986 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
4987 wdaBssParams->extSetStaKeyParam.encType;
4988 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
4989 wdaBssParams->extSetStaKeyParam.wepType;
4990 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
4991 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004992 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
4993 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004994 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004995 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
4996 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4997 {
4998 WDA_GetWepKeysFromCfg( pWDA,
4999 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
5000 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
5001 wdiBssParams->wdiExtSetKeyParam.wdiKey );
5002 }
5003 else
5004 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005005 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5006 keyIndex++)
5007 {
5008 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
5009 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
5010 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
5011 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
5012 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
5013 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05305014
5015 if(WDA_getHostWlanFeatCaps(DISA) && WDA_getFwWlanFeatCaps(DISA))
5016 {
5017 for (i = 0; i < WLAN_MAX_KEY_RSC_LEN; i ++)
5018 {
5019 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc[i] =
5020 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc[i]);
5021 }
5022
5023 for (i = 0; i < SIR_MAC_MAX_KEY_LENGTH; i++)
5024 {
5025 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key[i] =
5026 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].key[i]);
5027 }
5028 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5029 FL("%s: Negated Keys"), __func__);
5030 }
5031 else
5032 {
5033 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5034 FL("%s: No change in Keys "), __func__);
5035 vos_mem_copy(
5036 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
5037 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc,
5038 WLAN_MAX_KEY_RSC_LEN);
5039 vos_mem_copy(
5040 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
5041 wdaBssParams->extSetStaKeyParam.key[keyIndex].key,
5042 SIR_MAC_MAX_KEY_LENGTH);
5043 }
5044
Jeff Johnson295189b2012-06-20 16:38:30 -07005045 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
5046 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
5047 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
5048 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07005049 }
Srinivas Dasari9b57b112014-11-27 12:25:23 +05305050 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
Jeff Johnson295189b2012-06-20 16:38:30 -07005051 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005052 }
5053 }
5054 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
5055 }
5056 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
5057 {
5058 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
5059 sizeof(wdaBssParams->extSetStaKeyParam) );
5060 }
5061#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07005062#ifdef WLAN_FEATURE_11AC
5063 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
5064 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
5065#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005066
5067 return ;
5068}
Jeff Johnson295189b2012-06-20 16:38:30 -07005069/*
5070 * FUNCTION: WDA_UpdateSTAParams
5071 * Translated WDA/PE BSS info into WDI BSS info..
5072 */
5073void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
5074 WDI_ConfigStaReqInfoType *wdiStaParams,
5075 tAddStaParams *wdaStaParams)
5076{
5077 tANI_U8 i = 0;
5078 /* Update STA params */
5079 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
5080 sizeof(tSirMacAddr)) ;
5081 wdiStaParams->usAssocId = wdaStaParams->assocId;
5082 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07005083 wdiStaParams->staIdx = wdaStaParams->staIdx;
5084
Jeff Johnson295189b2012-06-20 16:38:30 -07005085 wdiStaParams->ucShortPreambleSupported =
5086 wdaStaParams->shortPreambleSupported;
5087 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
5088 sizeof(tSirMacAddr)) ;
5089 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
5090
5091 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
5092
5093 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
5094 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
5095 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
5096 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
5097 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
5098 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
5099 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
5100
5101 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
5102 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07005103 wdiStaParams->wdiSupportedRates.opRateMode =
5104 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07005105 for(i = 0;i < WDI_NUM_11B_RATES;i++)
5106 {
5107 wdiStaParams->wdiSupportedRates.llbRates[i] =
5108 wdaStaParams->supportedRates.llbRates[i];
5109 }
5110 for(i = 0;i < WDI_NUM_11A_RATES;i++)
5111 {
5112 wdiStaParams->wdiSupportedRates.llaRates[i] =
5113 wdaStaParams->supportedRates.llaRates[i];
5114 }
5115 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
5116 {
5117 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
5118 wdaStaParams->supportedRates.aniLegacyRates[i];
5119 }
5120 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
5121 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07005122#ifdef WLAN_FEATURE_11AC
5123 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
5124 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
5125 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
5126 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
5127#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005128 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
5129 {
5130 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
5131 wdaStaParams->supportedRates.supportedMCSSet[i];
5132 }
5133 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
5134 wdaStaParams->supportedRates.rxHighestDataRate;
5135
5136 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
5137
5138 wdiStaParams->wdiAction = wdaStaParams->updateSta;
5139
5140 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
5141 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
5142 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
5143
5144 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
5145 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
5146 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
5147 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07005148 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07005149#ifdef WLAN_FEATURE_11AC
5150 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
5151 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08005152 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Abhishek Singh6927fa02014-06-27 17:19:55 +05305153 wdiStaParams->vhtTxMUBformeeCapable = wdaStaParams->vhtTxMUBformeeCapable;
5154 /* When MU vhtTxMUBformeeCapable is set, SU ucVhtTxBFEnabled
5155 * must be set by default */
5156 if ( wdiStaParams->vhtTxMUBformeeCapable )
5157 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxMUBformeeCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07005158#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08005159 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
5160 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07005161 return ;
5162}
Jeff Johnson295189b2012-06-20 16:38:30 -07005163/*
5164 * -------------------------------------------------------------------------
5165 * CFG update to WDI
5166 * -------------------------------------------------------------------------
5167 */
5168
5169 /*
5170 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
5171 * Convert the WNI CFG ID to HAL CFG ID
5172 */
Jeff Johnsone7245742012-09-05 17:12:55 -07005173static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07005174{
5175 switch(wniCfgId)
5176 {
5177 case WNI_CFG_STA_ID:
5178 return QWLAN_HAL_CFG_STA_ID;
5179 case WNI_CFG_CURRENT_TX_ANTENNA:
5180 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
5181 case WNI_CFG_CURRENT_RX_ANTENNA:
5182 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
5183 case WNI_CFG_LOW_GAIN_OVERRIDE:
5184 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
5185 case WNI_CFG_POWER_STATE_PER_CHAIN:
5186 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
5187 case WNI_CFG_CAL_PERIOD:
5188 return QWLAN_HAL_CFG_CAL_PERIOD;
5189 case WNI_CFG_CAL_CONTROL:
5190 return QWLAN_HAL_CFG_CAL_CONTROL;
5191 case WNI_CFG_PROXIMITY:
5192 return QWLAN_HAL_CFG_PROXIMITY;
5193 case WNI_CFG_NETWORK_DENSITY:
5194 return QWLAN_HAL_CFG_NETWORK_DENSITY;
5195 case WNI_CFG_MAX_MEDIUM_TIME:
5196 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
5197 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
5198 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
5199 case WNI_CFG_RTS_THRESHOLD:
5200 return QWLAN_HAL_CFG_RTS_THRESHOLD;
5201 case WNI_CFG_SHORT_RETRY_LIMIT:
5202 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
5203 case WNI_CFG_LONG_RETRY_LIMIT:
5204 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
5205 case WNI_CFG_FRAGMENTATION_THRESHOLD:
5206 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
5207 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
5208 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
5209 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
5210 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
5211 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
5212 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
5213 case WNI_CFG_FIXED_RATE:
5214 return QWLAN_HAL_CFG_FIXED_RATE;
5215 case WNI_CFG_RETRYRATE_POLICY:
5216 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
5217 case WNI_CFG_RETRYRATE_SECONDARY:
5218 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
5219 case WNI_CFG_RETRYRATE_TERTIARY:
5220 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
5221 case WNI_CFG_FORCE_POLICY_PROTECTION:
5222 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
5223 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
5224 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
5225 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
5226 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
5227 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
5228 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
5229 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
5230 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
5231 case WNI_CFG_MAX_BA_SESSIONS:
5232 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
5233 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
5234 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
5235 case WNI_CFG_PS_ENABLE_BCN_FILTER:
5236 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
5237 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
5238 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
5239 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
5240 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
5241 case WNI_CFG_STATS_PERIOD:
5242 return QWLAN_HAL_CFG_STATS_PERIOD;
5243 case WNI_CFG_CFP_MAX_DURATION:
5244 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
5245#if 0 /*This is not part of CFG*/
5246 case WNI_CFG_FRAME_TRANS_ENABLED:
5247 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
5248#endif
5249 case WNI_CFG_DTIM_PERIOD:
5250 return QWLAN_HAL_CFG_DTIM_PERIOD;
5251 case WNI_CFG_EDCA_WME_ACBK:
5252 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
5253 case WNI_CFG_EDCA_WME_ACBE:
5254 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
5255 case WNI_CFG_EDCA_WME_ACVI:
5256 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
5257 case WNI_CFG_EDCA_WME_ACVO:
5258 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
5259#if 0
5260 case WNI_CFG_TELE_BCN_WAKEUP_EN:
5261 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
5262 case WNI_CFG_TELE_BCN_TRANS_LI:
5263 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
5264 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
5265 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
5266 case WNI_CFG_TELE_BCN_MAX_LI:
5267 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
5268 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
5269 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
5270#endif
5271 case WNI_CFG_ENABLE_CLOSE_LOOP:
5272 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08005273 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
5274 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
jagadeeshaf2d0ce2015-03-31 11:45:30 +05305275 case WNI_CFG_ENABLE_RTSCTS_HTVHT:
5276 return QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT;
Jeff Johnson295189b2012-06-20 16:38:30 -07005277 default:
5278 {
5279 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005280 "There is no HAL CFG Id corresponding to WNI CFG Id: %d",
Jeff Johnson295189b2012-06-20 16:38:30 -07005281 wniCfgId);
5282 return VOS_STATUS_E_INVAL;
5283 }
5284 }
5285}
Jeff Johnson295189b2012-06-20 16:38:30 -07005286/*
5287 * FUNCTION: WDA_UpdateCfgCallback
5288 *
5289 */
5290void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
5291{
5292 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
5293 WDI_UpdateCfgReqParamsType *wdiCfgParam =
5294 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005296 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005297 /*
5298 * currently there is no response message is expected between PE and
5299 * WDA, Failure return from WDI is a ASSERT condition
5300 */
5301 if(WDI_STATUS_SUCCESS != wdiStatus)
5302 {
5303 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005304 "%s: CFG (%d) config failure", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07005305 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
5306 }
5307
5308 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
5309 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5310 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07005311 return ;
5312}
Jeff Johnson295189b2012-06-20 16:38:30 -07005313/*
5314 * FUNCTION: WDA_UpdateCfg
5315 *
5316 */
5317VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
5318{
5319
5320 WDI_Status status = WDI_STATUS_SUCCESS ;
5321 tANI_U32 val =0;
5322 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
5323 tHalCfg *configData;
5324 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
5325 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07005326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005327 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005328 if (NULL == pMac )
5329 {
5330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005331 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07005332 return VOS_STATUS_E_FAILURE;
5333 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005334 if(WDA_START_STATE != pWDA->wdaState)
5335 {
5336 return VOS_STATUS_E_FAILURE;
5337 }
5338
5339 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
5340 {
5341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005342 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005343 VOS_ASSERT(0);
5344 return VOS_STATUS_E_FAILURE;
5345 }
5346
5347 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
5348 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005349 if(NULL == wdiCfgReqParam)
5350 {
5351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005352 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005353 VOS_ASSERT(0);
5354 return VOS_STATUS_E_NOMEM;
5355 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005356 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
5357 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005358 if(NULL == wdiCfgReqParam->pConfigBuffer)
5359 {
5360 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005361 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005362 vos_mem_free(wdiCfgReqParam);
5363 VOS_ASSERT(0);
5364 return VOS_STATUS_E_NOMEM;
5365 }
5366
5367 /*convert the WNI CFG Id to HAL CFG Id*/
5368 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
5369 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
5370
5371 /*TODO: revisit this for handling string parameters */
5372 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
5373 &val) != eSIR_SUCCESS)
5374 {
5375 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005376 "Failed to cfg get id %d", cfgParam->bodyval);
Jeff Johnson295189b2012-06-20 16:38:30 -07005377 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
5378 vos_mem_free(wdiCfgReqParam);
5379 return eSIR_FAILURE;
5380 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005381 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
5382 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
5383 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
5384 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
5385 wdiCfgReqParam->wdiReqStatusCB = NULL ;
5386
5387 /* store Params pass it to WDI */
5388 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005389#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
5390 status = WDI_UpdateCfgReq(wdiCfgReqParam,
5391 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005392 if(IS_WDI_STATUS_FAILURE(status))
5393 {
5394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5395 "Failure in Update CFG WDI API, free all the memory " );
5396 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
5397 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5398 pWDA->wdaWdiCfgApiMsgParam = NULL;
5399 /* Failure is not expected */
5400 VOS_ASSERT(0) ;
5401 }
5402#else
5403 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
5404 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5405 pWDA->wdaWdiCfgApiMsgParam = NULL;
5406#endif
5407 return CONVERT_WDI2VOS_STATUS(status) ;
5408}
5409
Jeff Johnson295189b2012-06-20 16:38:30 -07005410VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
5411 v_U8_t *pDefaultKeyId,
5412 v_U8_t *pNumKeys,
5413 WDI_KeysType *pWdiKeys )
5414{
5415 v_U32_t i, j, defKeyId = 0;
5416 v_U32_t val = SIR_MAC_KEY_LENGTH;
5417 VOS_STATUS status = WDI_STATUS_SUCCESS;
5418 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005419 if (NULL == pMac )
5420 {
5421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005422 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07005423 return VOS_STATUS_E_FAILURE;
5424 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005425 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
5426 &defKeyId ))
5427 {
5428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5429 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
5430 }
5431
5432 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07005433 /* Need to extract ALL of the configured WEP Keys */
5434 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
5435 {
5436 val = SIR_MAC_KEY_LENGTH;
5437 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
5438 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
5439 pWdiKeys[j].key,
5440 &val ))
5441 {
5442 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005443 "WEP Key index [%d] may not configured in CFG",i);
Jeff Johnson295189b2012-06-20 16:38:30 -07005444 }
5445 else
5446 {
5447 pWdiKeys[j].keyId = (tANI_U8) i;
5448 /*
5449 * Actually, a DC (Don't Care) because
5450 * this is determined (and set) by PE/MLME
5451 */
5452 pWdiKeys[j].unicast = 0;
5453 /*
5454 * Another DC (Don't Care)
5455 */
5456 pWdiKeys[j].keyDirection = eSIR_TX_RX;
5457 /* Another DC (Don't Care). Unused for WEP */
5458 pWdiKeys[j].paeRole = 0;
5459 /* Determined from wlan_cfgGetStr() above.*/
5460 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07005461 j++;
5462 *pNumKeys = (tANI_U8) j;
5463 }
5464 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005465 return status;
5466}
Jeff Johnson295189b2012-06-20 16:38:30 -07005467/*
5468 * FUNCTION: WDA_SetBssKeyReqCallback
5469 * send SET BSS key RSP back to PE
5470 */
5471void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
5472{
5473 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5474 tWDA_CbContext *pWDA;
5475 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005477 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005478 if(NULL == pWdaParams)
5479 {
5480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005481 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005482 VOS_ASSERT(0) ;
5483 return ;
5484 }
5485 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5486 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05305487 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
5488 sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005489 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5490 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005491 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005492 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005493 return ;
5494}
Jeff Johnson295189b2012-06-20 16:38:30 -07005495/*
5496 * FUNCTION: WDA_ProcessSetBssKeyReq
5497 * Request to WDI for programming the BSS key( key for
5498 * broadcast/multicast frames Encryption)
5499 */
5500VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
5501 tSetBssKeyParams *setBssKeyParams )
5502{
5503 WDI_Status status = WDI_STATUS_SUCCESS ;
5504 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
5505 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
5506 sizeof(WDI_SetBSSKeyReqParamsType)) ;
5507 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005508 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005510 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005511 if(NULL == wdiSetBssKeyParam)
5512 {
5513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005514 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005515 VOS_ASSERT(0);
5516 return VOS_STATUS_E_NOMEM;
5517 }
5518 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5519 if(NULL == pWdaParams)
5520 {
5521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005522 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005523 VOS_ASSERT(0);
5524 vos_mem_free(wdiSetBssKeyParam);
5525 return VOS_STATUS_E_NOMEM;
5526 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005527 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005528 /* copy set BSS params to WDI structure */
5529 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
5530 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
5531 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07005532 if(setBssKeyParams->encType != eSIR_ED_NONE)
5533 {
5534 if( setBssKeyParams->numKeys == 0 &&
5535 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
5536 setBssKeyParams->encType == eSIR_ED_WEP104))
5537 {
5538 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005539 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
5540 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
5541 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
5542 }
5543 else
5544 {
5545 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
5546 {
5547 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
5548 setBssKeyParams->key[keyIndex].keyId;
5549 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
5550 setBssKeyParams->key[keyIndex].unicast;
5551 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
5552 setBssKeyParams->key[keyIndex].keyDirection;
5553 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
5554 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5555 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
5556 setBssKeyParams->key[keyIndex].paeRole;
5557 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
5558 setBssKeyParams->key[keyIndex].keyLength;
5559 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
5560 setBssKeyParams->key[keyIndex].key,
5561 SIR_MAC_MAX_KEY_LENGTH);
5562 }
5563 }
5564 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005565 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
5566 setBssKeyParams->singleTidRc;
5567 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005568 /* Store set key pointer, as this will be used for response */
5569 /* store Params pass it to WDI */
5570 pWdaParams->pWdaContext = pWDA;
5571 pWdaParams->wdaMsgParam = setBssKeyParams;
5572 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005573 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
5574 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
5575
5576 if(IS_WDI_STATUS_FAILURE(status))
5577 {
5578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5579 "Failure in Set BSS Key Req WDI API, free all the memory " );
5580 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5581 vos_mem_free(pWdaParams) ;
5582 setBssKeyParams->status = eSIR_FAILURE ;
5583 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
5584 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005585 return CONVERT_WDI2VOS_STATUS(status) ;
5586}
Jeff Johnson295189b2012-06-20 16:38:30 -07005587/*
5588 * FUNCTION: WDA_RemoveBssKeyReqCallback
5589 * send SET BSS key RSP back to PE
5590 */
5591void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
5592{
5593 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5594 tWDA_CbContext *pWDA;
5595 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005597 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005598 if(NULL == pWdaParams)
5599 {
5600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005601 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005602 VOS_ASSERT(0) ;
5603 return ;
5604 }
5605 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5606 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005607 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5608 vos_mem_free(pWdaParams) ;
5609
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005610 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005611 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005612 return ;
5613}
Siddharth Bhal171788a2014-09-29 21:02:40 +05305614
5615/*
Siddharth Bhal64246172015-02-27 01:04:37 +05305616 * FUNCTION: WDA_GetFrameLogRspCallback
5617 * recieves get frame log response from FW
5618 */
5619void WDA_GetFrameLogRspCallback(WDI_GetFrameLogRspParamType* wdiRsp,
5620 void* pUserData)
5621{
5622 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5623 tWDA_CbContext *pWDA = NULL;
5624 tAniGetFrameLogReq *pGetFrameLogReqParams = NULL;
5625
5626 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5627 "<------ Entering: %s " ,__func__);
5628 if(NULL == pWdaParams)
5629 {
5630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5631 "%s: pWdaParams received NULL", __func__);
5632 VOS_ASSERT(0) ;
5633 return ;
5634 }
5635
5636 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5637 if (NULL == pWDA)
5638 {
5639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5640 "%s:pWDA is NULL", __func__);
5641 VOS_ASSERT(0);
5642 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5643 vos_mem_free(pWdaParams);
5644 return ;
5645 }
5646
5647 pGetFrameLogReqParams = (tAniGetFrameLogReq *)pWdaParams->wdaMsgParam;
5648 if(NULL == pGetFrameLogReqParams)
5649 {
5650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5651 "%s: pGetFrameLogReqParams received NULL", __func__);
5652 VOS_ASSERT(0);
5653 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5654 vos_mem_free(pWdaParams);
5655 return;
5656 }
5657
Siddharth Bhal64246172015-02-27 01:04:37 +05305658 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
5659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Abhishek Singh611295e2015-07-09 11:11:54 +05305660 "%s:GetFrameLog with rsp status %d flag %d", __func__,
5661 wdiRsp->wdiStatus,pGetFrameLogReqParams->getFrameLogCmdFlag);
Siddharth Bhal64246172015-02-27 01:04:37 +05305662 }
5663
5664 /* free WDI command buffer only */
5665 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5666 vos_mem_free(pWdaParams->wdaMsgParam);
5667 vos_mem_free(pWdaParams);
5668
5669 return ;
5670
5671}
Gupta, Kapil7c34b322015-09-30 13:12:35 +05305672
5673/*
5674 * FUNCTION: WDA_RssiMonitorStopRspCallback
5675 * recieves Rssi Monitor stop response from FW
5676 */
5677void WDA_RssiMonitorStopRspCallback(WDI_RssiMonitorStopRspParamType *wdiRsp,
5678 void* pUserData)
5679{
5680 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5681 tSirRssiMonitorReq *pRssiMonitorReqParams;
5682
5683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5684 "<------ %s " ,__func__);
5685
5686 if(NULL == pWdaParams)
5687 {
5688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5689 "%s: pWdaParams received NULL", __func__);
5690 VOS_ASSERT(0);
5691 return ;
5692 }
5693
5694 if(NULL == pWdaParams->wdaMsgParam)
5695 {
5696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5697 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
5698 VOS_ASSERT(0);
5699 vos_mem_free(pWdaParams);
5700 return ;
5701 }
5702
5703 pRssiMonitorReqParams = (tSirRssiMonitorReq *)pWdaParams->wdaMsgParam;
5704
5705 if(pRssiMonitorReqParams->rssiMonitorCallback)
5706 {
5707 pRssiMonitorReqParams->rssiMonitorCallback(
5708 pRssiMonitorReqParams->rssiMonitorCbContext,
5709 CONVERT_WDI2VOS_STATUS(wdiRsp->status));
5710 }
5711 else
5712 {
5713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5714 "%s: pFWLoggingInitParams callback is NULL", __func__);
5715 }
5716
5717 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5718 vos_mem_free(pWdaParams->wdaMsgParam);
5719 vos_mem_free(pWdaParams);
5720
5721 return;
5722}
5723
5724/*
5725 * FUNCTION: WDA_RssiMonitorStartRspCallback
5726 * recieves Rssi Monitor start response from FW
5727 */
5728void WDA_RssiMonitorStartRspCallback(WDI_RssiMonitorStartRspParamType* wdiRsp,
5729 void* pUserData)
5730{
5731 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5732 tSirRssiMonitorReq *pRssiMonitorReqParams;
5733
5734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5735 "<------ %s " ,__func__);
5736
5737 if(NULL == pWdaParams)
5738 {
5739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5740 "%s: pWdaParams received NULL", __func__);
5741 VOS_ASSERT(0);
5742 return ;
5743 }
5744
5745 if(NULL == pWdaParams->wdaMsgParam)
5746 {
5747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5748 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
5749 VOS_ASSERT(0);
5750 vos_mem_free(pWdaParams);
5751 return ;
5752 }
5753
5754 pRssiMonitorReqParams = (tSirRssiMonitorReq *)pWdaParams->wdaMsgParam;
5755
5756 if(pRssiMonitorReqParams->rssiMonitorCallback)
5757 {
5758 pRssiMonitorReqParams->rssiMonitorCallback(
5759 pRssiMonitorReqParams->rssiMonitorCbContext,
5760 CONVERT_WDI2VOS_STATUS(wdiRsp->status));
5761 }
5762 else
5763 {
5764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5765 "%s: pFWLoggingInitParams callback is NULL", __func__);
5766 }
5767
5768 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5769 vos_mem_free(pWdaParams->wdaMsgParam);
5770 vos_mem_free(pWdaParams);
5771
5772 return;
5773}
5774
Siddharth Bhal64246172015-02-27 01:04:37 +05305775/*
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305776 * FUNCTION: WDA_FWLoggingInitRspCallback
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305777 * recieves Mgmt Logging init response from FW
5778 */
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305779void WDA_FWLoggingInitRspCallback(WDI_FWLoggingInitRspParamType* wdiRsp,
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305780 void* pUserData)
5781{
5782 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305783 tSirFWLoggingInitParam *pFWLoggingInitParams;
c_manjeecfd1efb2015-09-25 19:32:34 +05305784 tAniLoggingInitRsp *pLoggingInitRsp;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305785
5786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5787 "<------ %s " ,__func__);
5788
5789 if(NULL == pWdaParams)
5790 {
5791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5792 "%s: pWdaParams received NULL", __func__);
5793 VOS_ASSERT(0);
5794 return ;
5795 }
5796
5797 if(NULL == pWdaParams->wdaMsgParam)
5798 {
5799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5800 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
5801 VOS_ASSERT(0);
5802 vos_mem_free(pWdaParams);
5803 return ;
5804 }
5805
c_manjeecfd1efb2015-09-25 19:32:34 +05305806 pLoggingInitRsp = (tAniLoggingInitRsp *)vos_mem_malloc(sizeof(tAniLoggingInitRsp)) ;
5807 if(NULL == pWdaParams)
5808 {
5809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5810 "%s: VOS MEM Alloc Failure for pLoggingInitRsp", __func__);
5811 VOS_ASSERT(0);
5812 vos_mem_free(pWdaParams);
5813 return;
5814 }
5815
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305816 pFWLoggingInitParams = (tSirFWLoggingInitParam *)pWdaParams->wdaMsgParam;
c_manjeecfd1efb2015-09-25 19:32:34 +05305817 vos_mem_copy(pLoggingInitRsp, wdiRsp, sizeof(tAniLoggingInitRsp));
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305818
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305819 if(pFWLoggingInitParams->fwlogInitCallback)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305820 {
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305821 pFWLoggingInitParams->fwlogInitCallback(
5822 pFWLoggingInitParams->fwlogInitCbContext,
c_manjeecfd1efb2015-09-25 19:32:34 +05305823 pLoggingInitRsp);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305824 }
5825 else
5826 {
5827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305828 "%s: pFWLoggingInitParams callback is NULL", __func__);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305829 }
5830
c_manjeecfd1efb2015-09-25 19:32:34 +05305831 vos_mem_free(pLoggingInitRsp);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305832 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5833 vos_mem_free(pWdaParams->wdaMsgParam);
5834 vos_mem_free(pWdaParams);
5835
5836 return;
5837}
5838
5839/*
Siddharth Bhal171788a2014-09-29 21:02:40 +05305840 * FUNCTION: WDA_SpoofMacAddrRspCallback
5841 * recieves spoof mac addr response from FW
5842 */
5843void WDA_SpoofMacAddrRspCallback(WDI_SpoofMacAddrRspParamType* wdiRsp, void* pUserData)
5844{
5845 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5846 tWDA_CbContext *pWDA;
Siddharth Bhal029d6732014-10-09 21:31:23 +05305847
Siddharth Bhal171788a2014-09-29 21:02:40 +05305848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5849 "<------ %s " ,__func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305850
Siddharth Bhal171788a2014-09-29 21:02:40 +05305851 if(NULL == pWdaParams)
5852 {
5853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5854 "%s: pWdaParams received NULL", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305855 VOS_ASSERT(0);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305856 return ;
5857 }
Siddharth Bhal171788a2014-09-29 21:02:40 +05305858 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Siddharth Bhal171788a2014-09-29 21:02:40 +05305859
Siddharth Bhal029d6732014-10-09 21:31:23 +05305860 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
Siddharth Bhal171788a2014-09-29 21:02:40 +05305861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhal029d6732014-10-09 21:31:23 +05305862 "%s:Spoofing with rsp status %d", __func__, wdiRsp->wdiStatus);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305863 }
Siddharth Bhal029d6732014-10-09 21:31:23 +05305864 WDA_SendMsg(pWDA, WDA_SPOOF_MAC_ADDR_RSP, NULL,
5865 CONVERT_WDI2SIR_STATUS(wdiRsp->wdiStatus));
Siddharth Bhal171788a2014-09-29 21:02:40 +05305866
Siddharth Bhal171788a2014-09-29 21:02:40 +05305867 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305868 vos_mem_free(pWdaParams->wdaMsgParam);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305869 vos_mem_free(pWdaParams);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305870
5871 return;
Siddharth Bhal171788a2014-09-29 21:02:40 +05305872}
5873
Jeff Johnson295189b2012-06-20 16:38:30 -07005874/*
5875 * FUNCTION: WDA_ProcessRemoveBssKeyReq
5876 * Request to WDI to remove the BSS key( key for broadcast/multicast
5877 * frames Encryption)
5878 */
5879VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
5880 tRemoveBssKeyParams *removeBssKeyParams )
5881{
5882 WDI_Status status = WDI_STATUS_SUCCESS ;
5883 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
5884 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
5885 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
5886 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005888 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005889 if(NULL == wdiRemoveBssKeyParam)
5890 {
5891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005892 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005893 VOS_ASSERT(0);
5894 return VOS_STATUS_E_NOMEM;
5895 }
5896 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5897 if(NULL == pWdaParams)
5898 {
5899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005900 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005901 VOS_ASSERT(0);
5902 vos_mem_free(wdiRemoveBssKeyParam);
5903 return VOS_STATUS_E_NOMEM;
5904 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005905 /* copy Remove BSS key params to WDI structure*/
5906 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
5907 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
5908 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
5909 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
5910 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005911 /* Store remove key pointer, as this will be used for response */
5912 /* store Params pass it to WDI */
5913 pWdaParams->pWdaContext = pWDA;
5914 pWdaParams->wdaMsgParam = removeBssKeyParams;
5915 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005916 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
5917 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005918 if(IS_WDI_STATUS_FAILURE(status))
5919 {
5920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5921 "Failure in Remove BSS Key Req WDI API, free all the memory " );
5922 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5923 vos_mem_free(pWdaParams) ;
5924 removeBssKeyParams->status = eSIR_FAILURE ;
5925 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
5926 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005927 return CONVERT_WDI2VOS_STATUS(status) ;
5928}
Jeff Johnson295189b2012-06-20 16:38:30 -07005929/*
5930 * FUNCTION: WDA_SetBssKeyReqCallback
5931 * send SET BSS key RSP back to PE
5932 */
5933void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
5934{
5935 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5936 tWDA_CbContext *pWDA;
5937 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005939 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005940 if(NULL == pWdaParams)
5941 {
5942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005943 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005944 VOS_ASSERT(0) ;
5945 return ;
5946 }
5947 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5948 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05305949 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
5950 sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005951 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5952 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005953 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005954 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005955 return ;
5956}
Jeff Johnson295189b2012-06-20 16:38:30 -07005957/*
5958 * FUNCTION: WDA_ProcessSetStaKeyReq
5959 * Request to WDI for programming the STA key( key for Unicast frames
5960 * Encryption)
5961 */
5962VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
5963 tSetStaKeyParams *setStaKeyParams )
5964{
5965 WDI_Status status = WDI_STATUS_SUCCESS ;
5966 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
5967 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
5968 sizeof(WDI_SetSTAKeyReqParamsType)) ;
5969 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005970 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005972 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005973 if(NULL == wdiSetStaKeyParam)
5974 {
5975 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005976 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005977 VOS_ASSERT(0);
5978 return VOS_STATUS_E_NOMEM;
5979 }
5980 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5981 if(NULL == pWdaParams)
5982 {
5983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005984 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005985 VOS_ASSERT(0);
5986 vos_mem_free(wdiSetStaKeyParam);
5987 return VOS_STATUS_E_NOMEM;
5988 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005989 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005990 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005991 /* copy set STA key params to WDI structure */
5992 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
5993 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
5994 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
5995 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005996 if(setStaKeyParams->encType != eSIR_ED_NONE)
5997 {
Jeff Johnson43971f52012-07-17 12:26:56 -07005998 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005999 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
6000 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
6001 {
6002 WDA_GetWepKeysFromCfg( pWDA,
6003 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
6004 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
6005 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
6006 }
6007 else
6008 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006009 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
6010 keyIndex++)
6011 {
6012 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
6013 setStaKeyParams->key[keyIndex].keyId;
6014 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
6015 setStaKeyParams->key[keyIndex].unicast;
6016 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
6017 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07006018 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
6019 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
6020 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
6021 setStaKeyParams->key[keyIndex].paeRole;
6022 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
6023 setStaKeyParams->key[keyIndex].keyLength;
6024 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
6025 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
6026 /* set default index to index which have key direction as WDI_TX_DEFAULT */
6027 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
6028 {
6029 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
6030 }
6031 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006032 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
6033 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07006034 }
6035 }
6036 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
6037 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006038 /* Store set key pointer, as this will be used for response */
6039 /* store Params pass it to WDI */
6040 pWdaParams->pWdaContext = pWDA;
6041 pWdaParams->wdaMsgParam = setStaKeyParams;
6042 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006043 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
6044 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006045 if(IS_WDI_STATUS_FAILURE(status))
6046 {
6047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6048 "Failure in set STA Key Req WDI API, free all the memory " );
6049 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6050 vos_mem_free(pWdaParams) ;
6051 setStaKeyParams->status = eSIR_FAILURE ;
6052 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
6053 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006054 return CONVERT_WDI2VOS_STATUS(status) ;
6055}
Jeff Johnson295189b2012-06-20 16:38:30 -07006056/*
6057 * FUNCTION: WDA_SetBcastStaKeyReqCallback
6058 * send SET Bcast STA key RSP back to PE
6059 */
6060void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
6061{
6062 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6063 tWDA_CbContext *pWDA;
6064 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006065 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006066 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006067 if(NULL == pWdaParams)
6068 {
6069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006070 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006071 VOS_ASSERT(0) ;
6072 return ;
6073 }
6074 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6075 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006076 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6077 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006078 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006079 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006080 return ;
6081}
6082
Jeff Johnson295189b2012-06-20 16:38:30 -07006083/*
6084 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
6085 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
6086 * Encryption)
6087 */
6088VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
6089 tSetStaKeyParams *setStaKeyParams )
6090{
6091 WDI_Status status = WDI_STATUS_SUCCESS ;
6092 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
6093 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
6094 sizeof(WDI_SetSTAKeyReqParamsType)) ;
6095 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006096 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07006097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006098 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006099 if(NULL == wdiSetStaKeyParam)
6100 {
6101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006102 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006103 VOS_ASSERT(0);
6104 return VOS_STATUS_E_NOMEM;
6105 }
6106 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6107 if(NULL == pWdaParams)
6108 {
6109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006110 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006111 VOS_ASSERT(0);
6112 vos_mem_free(wdiSetStaKeyParam);
6113 return VOS_STATUS_E_NOMEM;
6114 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006115 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006116 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006117 /* copy set STA key params to WDI structure */
6118 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
6119 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
6120 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
6121 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006122 if(setStaKeyParams->encType != eSIR_ED_NONE)
6123 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006124 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
6125 keyIndex++)
6126 {
6127 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
6128 setStaKeyParams->key[keyIndex].keyId;
6129 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
6130 setStaKeyParams->key[keyIndex].unicast;
6131 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
6132 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07006133 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
6134 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
6135 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
6136 setStaKeyParams->key[keyIndex].paeRole;
6137 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
6138 setStaKeyParams->key[keyIndex].keyLength;
6139 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
6140 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
6141 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006142 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
6143 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07006144 }
6145 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07006146 /* Store set key pointer, as this will be used for response */
6147 /* store Params pass it to WDI */
6148 pWdaParams->pWdaContext = pWDA;
6149 pWdaParams->wdaMsgParam = setStaKeyParams;
6150 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006151 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
6152 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006153 if(IS_WDI_STATUS_FAILURE(status))
6154 {
6155 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6156 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
6157 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6158 vos_mem_free(pWdaParams) ;
6159 setStaKeyParams->status = eSIR_FAILURE ;
6160 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
6161 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006162 return CONVERT_WDI2VOS_STATUS(status) ;
6163}
Jeff Johnson295189b2012-06-20 16:38:30 -07006164/*
6165 * FUNCTION: WDA_RemoveStaKeyReqCallback
6166 * send SET BSS key RSP back to PE
6167 */
6168void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
6169{
6170 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6171 tWDA_CbContext *pWDA;
6172 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006173 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006174 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006175 if(NULL == pWdaParams)
6176 {
6177 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006178 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006179 VOS_ASSERT(0) ;
6180 return ;
6181 }
6182 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6183 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006184 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6185 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006186 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006187 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006188 return ;
6189}
6190
Jeff Johnson295189b2012-06-20 16:38:30 -07006191/*
6192 * FUNCTION: WDA_ProcessRemoveStaKeyReq
6193 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
6194 */
6195VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
6196 tRemoveStaKeyParams *removeStaKeyParams )
6197{
6198 WDI_Status status = WDI_STATUS_SUCCESS ;
6199 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
6200 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
6201 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
6202 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006204 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006205 if(NULL == wdiRemoveStaKeyParam)
6206 {
6207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006208 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006209 VOS_ASSERT(0);
6210 return VOS_STATUS_E_NOMEM;
6211 }
6212 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6213 if(NULL == pWdaParams)
6214 {
6215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006216 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006217 VOS_ASSERT(0);
6218 vos_mem_free(wdiRemoveStaKeyParam);
6219 return VOS_STATUS_E_NOMEM;
6220 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006221 /* copy remove STA key params to WDI structure*/
6222 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
6223 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
6224 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
6225 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
6226 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006227 /* Store remove key pointer, as this will be used for response */
6228 /* store Params pass it to WDI */
6229 pWdaParams->pWdaContext = pWDA;
6230 pWdaParams->wdaMsgParam = removeStaKeyParams;
6231 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006232 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
6233 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006234 if(IS_WDI_STATUS_FAILURE(status))
6235 {
6236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6237 "Failure in remove STA Key Req WDI API, free all the memory " );
6238 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6239 vos_mem_free(pWdaParams) ;
6240 removeStaKeyParams->status = eSIR_FAILURE ;
6241 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
6242 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006243 return CONVERT_WDI2VOS_STATUS(status) ;
6244}
Jeff Johnson295189b2012-06-20 16:38:30 -07006245/*
6246 * FUNCTION: WDA_IsHandleSetLinkStateReq
6247 * Update the WDA state and return the status to handle this message or not
6248 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006249WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
6250 tWDA_CbContext *pWDA,
6251 tLinkStateParams *linkStateParams)
6252{
6253 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006254 switch(linkStateParams->state)
6255 {
6256 case eSIR_LINK_PREASSOC_STATE:
6257 case eSIR_LINK_BTAMP_PREASSOC_STATE:
6258 /*
6259 * set the WDA state to PRE ASSOC
6260 * copy the BSSID into pWDA to use it in join request and return,
6261 * No need to handle these messages.
6262 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006263 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
6264 {
6265 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07006266 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006267 }
6268 else
6269 {
6270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006271 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006272 VOS_ASSERT(0);
6273 }
6274
6275 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
6276 {
6277 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07006278 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006279 }
6280 else
6281 {
6282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006283 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006284 VOS_ASSERT(0);
6285 }
6286
Jeff Johnson295189b2012-06-20 16:38:30 -07006287 /* UMAC is issuing the setlink state with PREASSOC twice (before set
6288 *channel and after ) so reset the WDA state to ready when the second
6289 * time UMAC issue the link state with PREASSOC
6290 */
6291 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
6292 {
6293 /* RESET WDA state back to WDA_READY_STATE */
6294 pWDA->wdaState = WDA_READY_STATE;
6295 }
6296 else
6297 {
6298 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
6299 }
6300 //populate linkState info in WDACbCtxt
6301 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07006302 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07006303 default:
6304 if(pWDA->wdaState != WDA_READY_STATE)
6305 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07006306 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
6307 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
6308 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
6309 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
6310 *the ASSERT in WDA_Stop during module unload.*/
6311 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
6312 {
6313 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006314 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07006315 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006316 else
6317 {
6318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07006319 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006320 status = WDA_IGNORE_SET_LINK_STATE;
6321 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006322 }
6323 break;
6324 }
6325
6326 return status;
6327}
Jeff Johnson295189b2012-06-20 16:38:30 -07006328/*
6329 * FUNCTION: WDA_SetLinkStateCallback
6330 * call back function for set link state from WDI
6331 */
6332void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
6333{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306334 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006335 tLinkStateParams *linkStateParams;
6336 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006338 "<------ %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306339 if (NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006340 {
6341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006342 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006343 VOS_ASSERT(0) ;
6344 return ;
6345 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006346 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306347 if (NULL == pWDA)
6348 {
6349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6350 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306351 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6352 vos_mem_free(pWdaParams->wdaMsgParam);
6353 vos_mem_free(pWdaParams);
6354
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306355 VOS_ASSERT(0);
6356 return ;
6357 }
6358
Jeff Johnson295189b2012-06-20 16:38:30 -07006359 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006360 /*
6361 * In STA mode start the BA activity check timer after association
6362 * and in AP mode start BA activity check timer after BSS start */
6363 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
6364 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07006365 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
6366 ((status == WDI_STATUS_SUCCESS) &&
6367 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07006368 {
6369 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
6370 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006371 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006372 /*
6373 * No respone required for WDA_SET_LINK_STATE so free the request
6374 * param here
6375 */
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306376 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6377 vos_mem_free(pWdaParams);
6378
Jeff Johnson295189b2012-06-20 16:38:30 -07006379 return ;
6380}
Jeff Johnson295189b2012-06-20 16:38:30 -07006381/*
6382 * FUNCTION: WDA_ProcessSetLinkState
6383 * Request to WDI to set the link status.
6384 */
6385VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
6386 tLinkStateParams *linkStateParams)
6387{
6388 WDI_Status status = WDI_STATUS_SUCCESS ;
6389 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
6390 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
6391 sizeof(WDI_SetLinkReqParamsType)) ;
6392 tWDA_ReqParams *pWdaParams ;
6393 tpAniSirGlobal pMac;
6394 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
6395
6396 if(NULL == pMac)
6397 {
6398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006399 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006400 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07006401 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006402 return VOS_STATUS_E_FAILURE;
6403 }
6404
6405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006406 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006407 if(NULL == wdiSetLinkStateParam)
6408 {
6409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006410 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006411 VOS_ASSERT(0);
6412 return VOS_STATUS_E_NOMEM;
6413 }
6414 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6415 if(NULL == pWdaParams)
6416 {
6417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006418 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006419 VOS_ASSERT(0);
6420 vos_mem_free(wdiSetLinkStateParam);
6421 return VOS_STATUS_E_NOMEM;
6422 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006423 if(WDA_IGNORE_SET_LINK_STATE ==
6424 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
6425 {
6426 status = WDI_STATUS_E_FAILURE;
6427 }
6428 else
6429 {
6430 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
6431 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006432 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
6433 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006434 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
6435 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006436 pWdaParams->pWdaContext = pWDA;
6437 /* Store remove key pointer, as this will be used for response */
6438 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006439 /* store Params pass it to WDI */
6440 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
6441 /* Stop Timer only other than GO role and concurrent session */
6442 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07006443 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07006444 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
6445 {
6446 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
6447 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006448 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
6449 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006450 if(IS_WDI_STATUS_FAILURE(status))
6451 {
6452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6453 "Failure in set link state Req WDI API, free all the memory " );
6454 }
6455 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006456 if(IS_WDI_STATUS_FAILURE(status))
6457 {
6458 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07006459 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006460 vos_mem_free(pWdaParams);
6461 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006462 return CONVERT_WDI2VOS_STATUS(status) ;
6463}
Jeff Johnson295189b2012-06-20 16:38:30 -07006464/*
6465 * FUNCTION: WDA_GetStatsReqParamsCallback
6466 * send the response to PE with Stats received from WDI
6467 */
6468void WDA_GetStatsReqParamsCallback(
6469 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
6470 void* pUserData)
6471{
Jeff Johnson295189b2012-06-20 16:38:30 -07006472 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306473 vos_msg_t vosMsg;
Jeff Johnson295189b2012-06-20 16:38:30 -07006474
6475 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006476 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006477 pGetPEStatsRspParams =
6478 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
6479 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
6480
6481 if(NULL == pGetPEStatsRspParams)
6482 {
6483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006484 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006485 VOS_ASSERT(0);
6486 return;
6487 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006488 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306489 pGetPEStatsRspParams->msgType = eWNI_SME_GET_STATISTICS_RSP;
Jeff Johnson295189b2012-06-20 16:38:30 -07006490 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
6491 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006492
6493 //Fill the Session Id Properly in PE
6494 pGetPEStatsRspParams->sessionId = 0;
6495 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006496 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07006497 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
6498 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07006499 vos_mem_copy( pGetPEStatsRspParams + 1,
6500 wdiGetStatsRsp + 1,
6501 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306502
6503 vosMsg.type = eWNI_SME_GET_STATISTICS_RSP;
6504 vosMsg.bodyptr = (void *)pGetPEStatsRspParams;
6505 vosMsg.bodyval = 0;
6506 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME,
6507 (vos_msg_t*)&vosMsg))
6508 {
6509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6510 "%s: fail to post eWNI_SME_GET_STATISTICS_RSP", __func__);
6511 vos_mem_free(pGetPEStatsRspParams);
6512 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006513
6514 return;
6515}
6516
Jeff Johnson295189b2012-06-20 16:38:30 -07006517/*
6518 * FUNCTION: WDA_ProcessGetStatsReq
6519 * Request to WDI to get the statistics
6520 */
6521VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
6522 tAniGetPEStatsReq *pGetStatsParams)
6523{
6524 WDI_Status status = WDI_STATUS_SUCCESS ;
6525 WDI_GetStatsReqParamsType wdiGetStatsParam;
6526 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306527 vos_msg_t vosMsg;
6528
Jeff Johnson295189b2012-06-20 16:38:30 -07006529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006530 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006531 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
6532 pGetStatsParams->staId;
6533 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
6534 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07006535 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006536 status = WDI_GetStatsReq(&wdiGetStatsParam,
6537 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006538 if(IS_WDI_STATUS_FAILURE(status))
6539 {
6540 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6541 "Failure in Get Stats Req WDI API, free all the memory " );
6542 pGetPEStatsRspParams =
6543 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
6544 if(NULL == pGetPEStatsRspParams)
6545 {
6546 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006547 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006548 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006549 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006550 return VOS_STATUS_E_NOMEM;
6551 }
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306552 pGetPEStatsRspParams->msgType = eWNI_SME_GET_STATISTICS_RSP;
Jeff Johnson295189b2012-06-20 16:38:30 -07006553 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
6554 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
6555 pGetPEStatsRspParams->rc = eSIR_FAILURE;
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306556
6557 vosMsg.type = eWNI_SME_GET_STATISTICS_RSP;
6558 vosMsg.bodyptr = (void *)pGetPEStatsRspParams;
6559 vosMsg.bodyval = 0;
6560 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME,
6561 (vos_msg_t*)&vosMsg))
6562 {
6563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6564 "%s: fail to post eWNI_SME_GET_STATISTICS_RSP", __func__);
6565 vos_mem_free(pGetPEStatsRspParams);
6566 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006567 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006568 /* Free the request message */
6569 vos_mem_free(pGetStatsParams);
6570 return CONVERT_WDI2VOS_STATUS(status);
6571}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006572
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08006573#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006574/*
6575 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
6576 * send the response to PE with roam Rssi received from WDI
6577 */
6578void WDA_GetRoamRssiReqParamsCallback(
6579 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
6580 void* pUserData)
6581{
6582 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6583 tWDA_CbContext *pWDA = NULL;
6584 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
6585 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
6586 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6587 "<------ %s " ,__func__);
6588 if(NULL == pWdaParams)
6589 {
6590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6591 "%s: pWdaParams received NULL", __func__);
6592 VOS_ASSERT(0) ;
6593 return ;
6594 }
6595 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6596 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
6597
6598 if(NULL == pGetRoamRssiReqParams)
6599 {
6600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6601 "%s: pGetRoamRssiReqParams received NULL", __func__);
6602 VOS_ASSERT(0);
6603 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6604 vos_mem_free(pWdaParams);
6605 return ;
6606 }
6607 pGetRoamRssiRspParams =
6608 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
6609
6610 if(NULL == pGetRoamRssiRspParams)
6611 {
6612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6613 "%s: VOS MEM Alloc Failure", __func__);
6614 VOS_ASSERT(0);
6615 return;
6616 }
6617 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
6618 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006619 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006620 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
6621 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
6622
6623 /* Assign get roam rssi req (backup) in to the response */
6624 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
6625
6626 /* free WDI command buffer */
6627 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6628 vos_mem_free(pWdaParams) ;
6629
6630 /* send response to UMAC*/
6631 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
6632
6633 return;
6634}
6635
6636
6637
6638/*
6639 * FUNCTION: WDA_ProcessGetRoamRssiReq
6640 * Request to WDI to get the statistics
6641 */
6642VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
6643 tAniGetRssiReq *pGetRoamRssiParams)
6644{
6645 WDI_Status status = WDI_STATUS_SUCCESS ;
6646 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
6647 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
6648 tWDA_ReqParams *pWdaParams = NULL;
6649
6650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6651 "------> %s " ,__func__);
6652 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
6653 pGetRoamRssiParams->staId;
6654 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
6655
6656 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6657 if(NULL == pWdaParams)
6658 {
6659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6660 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05306661 vos_mem_free(pGetRoamRssiParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006662 VOS_ASSERT(0);
6663 return VOS_STATUS_E_NOMEM;
6664 }
6665
6666 /* Store Init Req pointer, as this will be used for response */
6667 pWdaParams->pWdaContext = pWDA;
6668
6669 /* Take Get roam Rssi req backup as it stores the callback to be called after
6670 receiving the response */
6671 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
6672 pWdaParams->wdaWdiApiMsgParam = NULL;
6673
6674 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
6675 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
6676 if(IS_WDI_STATUS_FAILURE(status))
6677 {
6678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6679 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
6680 pGetRoamRssiRspParams =
6681 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
6682 if(NULL == pGetRoamRssiRspParams)
6683 {
6684 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6685 "%s: VOS MEM Alloc Failure", __func__);
6686 VOS_ASSERT(0);
Abhishek Singh1e2bfa32014-01-02 15:44:15 +05306687 vos_mem_free(pGetRoamRssiParams);
6688 vos_mem_free(pWdaParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006689 return VOS_STATUS_E_NOMEM;
6690 }
6691 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
6692 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
6693 pGetRoamRssiRspParams->rssi = 0;
6694 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
6695 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
6696 (void *)pGetRoamRssiRspParams, 0) ;
6697 }
6698 return CONVERT_WDI2VOS_STATUS(status);
6699}
6700#endif
6701
6702
Jeff Johnson295189b2012-06-20 16:38:30 -07006703/*
6704 * FUNCTION: WDA_UpdateEDCAParamCallback
6705 * call back function for Update EDCA params from WDI
6706 */
6707void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
6708{
6709 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6710 tEdcaParams *pEdcaParams;
6711
6712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006713 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006714 if(NULL == pWdaParams)
6715 {
6716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006717 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006718 VOS_ASSERT(0) ;
6719 return ;
6720 }
6721 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006722 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6723 vos_mem_free(pWdaParams);
6724 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006725 return ;
6726}
Jeff Johnson295189b2012-06-20 16:38:30 -07006727/*
6728 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
6729 * Request to WDI to Update the EDCA params.
6730 */
6731VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
6732 tEdcaParams *pEdcaParams)
6733{
6734 WDI_Status status = WDI_STATUS_SUCCESS ;
6735 WDI_UpdateEDCAParamsType *wdiEdcaParam =
6736 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
6737 sizeof(WDI_UpdateEDCAParamsType)) ;
6738 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006740 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006741 if(NULL == wdiEdcaParam)
6742 {
6743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006744 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006745 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006746 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006747 return VOS_STATUS_E_NOMEM;
6748 }
6749 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6750 if(NULL == pWdaParams)
6751 {
6752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006753 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006754 VOS_ASSERT(0);
6755 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006756 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006757 return VOS_STATUS_E_NOMEM;
6758 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006759 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
Bansidhar Gopalachari5dcf9e02013-07-29 19:53:58 -07006760 /*
6761 Since firmware is not using highperformance flag, we have removed
6762 this flag from wdiEDCAInfo structure to match sizeof the structure
6763 between host and firmware.In future if we are planning to use
6764 highperformance flag then Please define this flag in wdiEDCAInfo
6765 structure, update it here and send it to firmware. i.e.
6766 Following is the original line which we removed as part of the fix
6767 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid =
6768 pEdcaParams->highPerformance;
6769 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006770 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
6771 &pEdcaParams->acbe);
6772 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
6773 &pEdcaParams->acbk);
6774 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
6775 &pEdcaParams->acvi);
6776 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
6777 &pEdcaParams->acvo);
6778 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006779 pWdaParams->pWdaContext = pWDA;
6780 /* Store remove key pointer, as this will be used for response */
6781 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006782 /* store Params pass it to WDI */
6783 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006784 status = WDI_UpdateEDCAParams(wdiEdcaParam,
6785 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006786 if(IS_WDI_STATUS_FAILURE(status))
6787 {
6788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6789 "Failure in Update EDCA Params WDI API, free all the memory " );
6790 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6791 vos_mem_free(pWdaParams);
6792 vos_mem_free(pEdcaParams);
6793 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006794 return CONVERT_WDI2VOS_STATUS(status) ;
6795}
Jeff Johnson295189b2012-06-20 16:38:30 -07006796/*
6797 * FUNCTION: WDA_AddBAReqCallback
6798 * send ADD BA RSP back to PE
6799 */
6800void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
6801 void* pUserData)
6802{
6803 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6804 tWDA_CbContext *pWDA;
6805 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006807 "<------ %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306808 if (NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006809 {
6810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006811 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006812 VOS_ASSERT(0) ;
6813 return ;
6814 }
6815 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306816 if (NULL == pWDA)
6817 {
6818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6819 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306820 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6821 vos_mem_free(pWdaParams->wdaMsgParam);
6822 vos_mem_free(pWdaParams);
6823
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306824 VOS_ASSERT(0);
6825 return ;
6826 }
6827
Jeff Johnson295189b2012-06-20 16:38:30 -07006828 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006829 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6830 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006831 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006832 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006833 return ;
6834}
6835
Jeff Johnson295189b2012-06-20 16:38:30 -07006836/*
6837 * FUNCTION: WDA_ProcessAddBAReq
6838 * Request to WDI to Update the ADDBA REQ params.
6839 */
6840VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
Abhishek Singh01c73d12015-03-12 15:13:44 +05306841 tANI_U16 baSessionID, tANI_U8 staIdx, tANI_U8 ucWinSize, tAddBAParams *pAddBAReqParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006842{
Jeff Johnson43971f52012-07-17 12:26:56 -07006843 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07006844 WDI_AddBAReqParamsType *wdiAddBAReqParam =
6845 (WDI_AddBAReqParamsType *)vos_mem_malloc(
6846 sizeof(WDI_AddBAReqParamsType)) ;
6847 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006849 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006850 if(NULL == wdiAddBAReqParam)
6851 {
6852 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006853 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006854 VOS_ASSERT(0);
6855 return VOS_STATUS_E_NOMEM;
6856 }
6857 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6858 if(NULL == pWdaParams)
6859 {
6860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006861 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006862 VOS_ASSERT(0);
6863 vos_mem_free(wdiAddBAReqParam);
6864 return VOS_STATUS_E_NOMEM;
6865 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006866 do
6867 {
6868 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006869 wdiAddBaInfo->ucSTAIdx = staIdx ;
6870 wdiAddBaInfo->ucBaSessionID = baSessionID ;
Abhishek Singh01c73d12015-03-12 15:13:44 +05306871 wdiAddBaInfo->ucWinSize = ucWinSize ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006872 } while(0) ;
6873 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006874 pWdaParams->pWdaContext = pWDA;
6875 /* store Params pass it to WDI */
6876 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
6877 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07006878 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
6879 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006880
Jeff Johnson43971f52012-07-17 12:26:56 -07006881 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07006882 {
6883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07006884 "Failure in ADD BA REQ Params WDI API, free all the memory" );
6885 status = CONVERT_WDI2VOS_STATUS(wstatus);
6886 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006887 vos_mem_free(pWdaParams);
6888 pAddBAReqParams->status = eSIR_FAILURE;
6889 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6890 }
Jeff Johnson43971f52012-07-17 12:26:56 -07006891 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07006892}
Jeff Johnson295189b2012-06-20 16:38:30 -07006893/*
6894 * FUNCTION: WDA_AddBASessionReqCallback
6895 * send ADD BA SESSION RSP back to PE/(or TL)
6896 */
6897void WDA_AddBASessionReqCallback(
6898 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
6899{
6900 VOS_STATUS status = VOS_STATUS_SUCCESS ;
6901 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306902 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006903 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006905 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006906 if(NULL == pWdaParams)
6907 {
6908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006909 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006910 VOS_ASSERT(0) ;
6911 return ;
6912 }
6913 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306914 if (NULL == pWDA)
6915 {
6916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6917 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306918 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6919 vos_mem_free(pWdaParams->wdaMsgParam);
6920 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306921 VOS_ASSERT(0);
6922 return ;
6923 }
6924
Jeff Johnson295189b2012-06-20 16:38:30 -07006925 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006926 if( NULL == pAddBAReqParams )
6927 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006929 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006930 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006931 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6932 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006933 return ;
6934 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006935 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6936 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006937 /*
Deepthi Gowriba794fc2015-03-27 17:14:01 +05306938 * if BA direction is for recipient, update TL with BA session params and send
Jeff Johnson295189b2012-06-20 16:38:30 -07006939 * another request to HAL(/WDI) (ADD_BA_REQ)
6940 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006941 if((VOS_STATUS_SUCCESS ==
6942 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
Deepthi Gowriba794fc2015-03-27 17:14:01 +05306943 (eBA_RECIPIENT == pAddBAReqParams->baDirection))
Jeff Johnson295189b2012-06-20 16:38:30 -07006944 {
6945 /* Update TL with BA info received from HAL/WDI */
6946 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
6947 wdiAddBaSession->usBaSessionID,
6948 wdiAddBaSession->ucSTAIdx,
6949 wdiAddBaSession->ucBaTID,
6950 wdiAddBaSession->ucBaBufferSize,
6951 wdiAddBaSession->ucWinSize,
6952 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07006953 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
Abhishek Singh01c73d12015-03-12 15:13:44 +05306954 wdiAddBaSession->ucSTAIdx,
6955 wdiAddBaSession->ucWinSize, pAddBAReqParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006956 }
6957 else
6958 {
6959 pAddBAReqParams->status =
6960 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
6961
6962 /* Setting Flag to indicate that Set BA is success */
6963 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
6964 {
6965 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
6966 tANI_U8 tid = wdiAddBaSession->ucBaTID;
6967 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
6968 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006969 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6970 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006971 /*Reset the WDA state to READY */
6972 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006973 return ;
6974}
6975
Jeff Johnson295189b2012-06-20 16:38:30 -07006976/*
6977 * FUNCTION: WDA_ProcessAddBASessionReq
6978 * Request to WDI to Update the ADDBA REQ params.
6979 */
6980VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
6981 tAddBAParams *pAddBAReqParams)
6982{
6983 WDI_Status status = WDI_STATUS_SUCCESS ;
6984 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
6985 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
6986 sizeof(WDI_AddBASessionReqParamsType)) ;
6987 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07006988 WLANTL_STAStateType tlSTAState = 0;
6989
Jeff Johnson295189b2012-06-20 16:38:30 -07006990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006991 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006992 if(NULL == wdiAddBASessionReqParam)
6993 {
6994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006995 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006996 VOS_ASSERT(0);
6997 return VOS_STATUS_E_NOMEM;
6998 }
6999 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7000 if(NULL == pWdaParams)
7001 {
7002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007003 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007004 VOS_ASSERT(0);
7005 vos_mem_free(wdiAddBASessionReqParam);
7006 return VOS_STATUS_E_NOMEM;
7007 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007008 /*
7009 * Populate ADD BA parameters and pass these paarmeters to WDI.
7010 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
7011 * the state to track if these is BA recipient case or BA initiator
7012 * case.
7013 */
7014 do
7015 {
7016 WDI_AddBASessionReqinfoType *wdiBAInfoType =
7017 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
7018 /* vos_mem_copy(wdiBAInfoType->macBSSID,
7019 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
7020 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
7021 vos_mem_copy(wdiBAInfoType->macPeerAddr,
7022 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007023 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07007024 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
7025 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
7026 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
7027 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
7028 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Deepthi Gowriba794fc2015-03-27 17:14:01 +05307029
Jeff Johnson295189b2012-06-20 16:38:30 -07007030 }while(0) ;
7031 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007032 pWdaParams->pWdaContext = pWDA;
7033 /* Store ADD BA pointer, as this will be used for response */
7034 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
7035 /* store Params pass it to WDI */
7036 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07007037
7038 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
7039 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
7040 */
7041 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
7042 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
7043 {
7044 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007045 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.", pAddBAReqParams->staIdx, tlSTAState );
Hoonki Leea0631ce2013-04-15 16:59:08 -07007046 status = WDI_STATUS_E_NOT_ALLOWED;
7047 pAddBAReqParams->status =
7048 CONVERT_WDI2SIR_STATUS(status) ;
7049 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
7050 /*Reset the WDA state to READY */
7051 pWDA->wdaState = WDA_READY_STATE;
7052 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7053 vos_mem_free(pWdaParams);
7054
7055 return CONVERT_WDI2VOS_STATUS(status) ;
7056 }
7057
Jeff Johnson295189b2012-06-20 16:38:30 -07007058 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
7059 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007060 if(IS_WDI_STATUS_FAILURE(status))
7061 {
7062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007063 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d", status);
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07007064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007065 "Send ADD BA failure response to PE");
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07007066 pAddBAReqParams->status =
7067 CONVERT_WDI2SIR_STATUS(status) ;
7068 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07007069 /*Reset the WDA state to READY */
7070 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07007071 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007072 vos_mem_free(pWdaParams);
7073 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007074 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007075}
Jeff Johnson295189b2012-06-20 16:38:30 -07007076/*
7077 * FUNCTION: WDA_DelBANotifyTL
7078 * send DEL BA IND to TL
7079 */
7080void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
7081 tDelBAParams *pDelBAReqParams)
7082{
7083 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
7084 //tSirMsgQ msg;
7085 vos_msg_t vosMsg;
7086 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07007087 if(NULL == pDelBAInd)
7088 {
7089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007090 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007091 VOS_ASSERT(0) ;
7092 return;
7093 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007094 pDelBAInd->mesgType = WDA_DELETEBA_IND;
7095 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
7096 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
7097 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07007098
Jeff Johnson295189b2012-06-20 16:38:30 -07007099
7100 vosMsg.type = WDA_DELETEBA_IND;
7101 vosMsg.bodyptr = pDelBAInd;
7102 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
7103 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
7104 {
7105 vosStatus = VOS_STATUS_E_BADMSG;
7106 }
7107}
Jeff Johnson295189b2012-06-20 16:38:30 -07007108/*
7109 * FUNCTION: WDA_DelBAReqCallback
7110 * send DEL BA RSP back to PE
7111 */
7112void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
7113{
7114 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7115 tWDA_CbContext *pWDA;
7116 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007117 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007118 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007119 if(NULL == pWdaParams)
7120 {
7121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007122 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007123 VOS_ASSERT(0) ;
7124 return ;
7125 }
7126 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307127
Jeff Johnson295189b2012-06-20 16:38:30 -07007128 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007129 /* Notify TL about DEL BA in case of recipinet */
7130 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
7131 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
7132 {
7133 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
7134 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007135 /*
7136 * No respone required for WDA_DELBA_IND so just free the request
7137 * param here
7138 */
7139 vos_mem_free(pDelBAReqParams);
7140 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7141 vos_mem_free(pWdaParams);
7142 return ;
7143}
7144
Jeff Johnson295189b2012-06-20 16:38:30 -07007145/*
7146 * FUNCTION: WDA_ProcessDelBAReq
7147 * Request to WDI to Update the DELBA REQ params.
7148 */
7149VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
7150 tDelBAParams *pDelBAReqParams)
7151{
7152 WDI_Status status = WDI_STATUS_SUCCESS ;
7153 WDI_DelBAReqParamsType *wdiDelBAReqParam =
7154 (WDI_DelBAReqParamsType *)vos_mem_malloc(
7155 sizeof(WDI_DelBAReqParamsType)) ;
7156 tWDA_ReqParams *pWdaParams ;
7157 tANI_U16 staIdx = 0;
7158 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07007159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007160 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007161 if(NULL == wdiDelBAReqParam)
7162 {
7163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007164 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007165 VOS_ASSERT(0);
7166 return VOS_STATUS_E_NOMEM;
7167 }
7168 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7169 if(NULL == pWdaParams)
7170 {
7171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007172 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007173 VOS_ASSERT(0);
7174 vos_mem_free(wdiDelBAReqParam);
7175 return VOS_STATUS_E_NOMEM;
7176 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007177 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
7178 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
7179 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
7180 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007181 pWdaParams->pWdaContext = pWDA;
7182 /* Store DEL BA pointer, as this will be used for response */
7183 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007184 /* store Params pass it to WDI */
7185 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007186 /* if BA exchange over the air is failed, clear this tid in BaBitmap
7187 * maintained in WDA, so that WDA can retry for another BA session
7188 */
7189 staIdx = pDelBAReqParams->staIdx;
7190 tid = pDelBAReqParams->baTID;
7191 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07007192 status = WDI_DelBAReq(wdiDelBAReqParam,
7193 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007194 if(IS_WDI_STATUS_FAILURE(status))
7195 {
7196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7197 "Failure in DEL BA REQ Params WDI API, free all the memory " );
7198 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7199 vos_mem_free(pWdaParams->wdaMsgParam);
7200 vos_mem_free(pWdaParams);
7201 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007202 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007203}
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007204
7205/*
7206 * FUNCTION: WDA_UpdateChReqCallback
7207 *
7208 */
7209void WDA_UpdateChReqCallback(WDI_Status status, void* pUserData)
7210{
Siddharth Bhala006c122014-05-03 12:13:27 +05307211 tWDA_ReqParams *pWdaParams;
7212 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
7213 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
7214 WDI_UpdateChannelReqinfoType *pChanInfoType;
7215 tSirUpdateChanList *pChanList;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007216
7217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7218 "<------ %s " ,__func__);
Siddharth Bhala006c122014-05-03 12:13:27 +05307219 if(NULL == pUserData)
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007220 {
7221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhala006c122014-05-03 12:13:27 +05307222 "%s: pUserData received NULL", __func__);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007223 VOS_ASSERT(0);
7224 return;
7225 }
7226
Siddharth Bhala006c122014-05-03 12:13:27 +05307227 pWdaParams = (tWDA_ReqParams *)pUserData;
7228 pwdiUpdateChReqParam =
7229 (WDI_UpdateChReqParamsType *)pWdaParams->wdaWdiApiMsgParam;
7230 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
7231 pChanInfoType = pwdiUpdateChanReqType->pchanParam;
7232 pChanList = (tSirUpdateChanList *)pWdaParams->wdaMsgParam;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007233 /*
7234 * currently there is no response message is expected between PE and
7235 * WDA, Failure return from WDI is a ASSERT condition
7236 */
7237 vos_mem_free(pChanInfoType);
7238 vos_mem_free(pChanList);
7239 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7240 vos_mem_free(pWdaParams);
7241
7242 return;
7243}
7244
7245/*
7246 * FUNCTION: WDA_ProcessUpdateChannelList
7247 * Request to WDI to Update the ChannelList params.
7248 */
7249VOS_STATUS WDA_ProcessUpdateChannelList(tWDA_CbContext *pWDA,
7250 tSirUpdateChanList *pChanList)
7251{
7252 WDI_Status status = WDI_STATUS_SUCCESS;
7253 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
7254 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
7255 WDI_UpdateChannelReqinfoType *pChanInfoType;
7256 tWDA_ReqParams *pWdaParams;
7257 wpt_uint8 i;
7258
7259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7260 "------> %s " ,__func__);
7261 if(NULL == pChanList)
7262 {
7263 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7264 "%s: NULL pChanList", __func__);
7265 VOS_ASSERT(0);
7266 return VOS_STATUS_E_INVAL;
7267 }
7268
7269 if(!WDA_getFwWlanFeatCaps(UPDATE_CHANNEL_LIST))
7270 {
Ratheesh S P36dbc932015-08-07 14:28:57 +05307271 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007272 "Update channel list capability Not Supported");
7273 vos_mem_free(pChanList);
7274 return VOS_STATUS_E_INVAL;
7275 }
7276
7277 pwdiUpdateChReqParam = (WDI_UpdateChReqParamsType *)vos_mem_malloc(
7278 sizeof(WDI_UpdateChReqParamsType));
7279 if(NULL == pwdiUpdateChReqParam)
7280 {
7281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7282 "%s: VOS MEM Alloc Failed for WDI_UpdateChReqParamsType",
7283 __func__);
7284 VOS_ASSERT(0);
7285 vos_mem_free(pChanList);
7286 return VOS_STATUS_E_NOMEM;
7287 }
7288 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
7289 pChanInfoType = (WDI_UpdateChannelReqinfoType *)
7290 vos_mem_malloc(sizeof(WDI_UpdateChannelReqinfoType) *
7291 pChanList->numChan);
7292 if(NULL == pChanInfoType)
7293 {
7294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7295 "%s: VOS MEM Alloc Failure", __func__);
7296 VOS_ASSERT(0);
7297 vos_mem_free(pChanList);
7298 vos_mem_free(pwdiUpdateChReqParam);
7299 return VOS_STATUS_E_NOMEM;
7300 }
7301 vos_mem_zero(pChanInfoType, sizeof(WDI_UpdateChannelReqinfoType)
7302 * pChanList->numChan);
7303 pwdiUpdateChanReqType->pchanParam = pChanInfoType;
7304
7305 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7306 if(NULL == pWdaParams)
7307 {
7308 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7309 "%s: VOS MEM Alloc Failure", __func__);
7310 VOS_ASSERT(0);
7311 vos_mem_free(pChanList);
7312 vos_mem_free(pChanInfoType);
7313 vos_mem_free(pwdiUpdateChReqParam);
7314 return VOS_STATUS_E_NOMEM;
7315 }
7316 pwdiUpdateChanReqType->numchan = pChanList->numChan;
7317
7318 for(i = 0; i < pwdiUpdateChanReqType->numchan; i++)
7319 {
7320 pChanInfoType->mhz =
7321 vos_chan_to_freq(pChanList->chanParam[i].chanId);
7322
7323 pChanInfoType->band_center_freq1 = pChanInfoType->mhz;
7324 pChanInfoType->band_center_freq2 = 0;
7325
7326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7327 "chan[%d] = %u", i, pChanInfoType->mhz);
7328 if (pChanList->chanParam[i].dfsSet)
7329 {
7330 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_PASSIVE);
7331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7332 "chan[%d] DFS[%d]", pChanList->chanParam[i].chanId,
7333 pChanList->chanParam[i].dfsSet);
7334 }
7335
7336 if (pChanInfoType->mhz < WDA_2_4_GHZ_MAX_FREQ)
7337 {
7338 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11G);
7339 }
7340 else
7341 {
7342 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11A);
7343 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_HT);
7344 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_VHT);
7345 }
7346
7347 WDA_SET_CHANNEL_MAX_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
7348 WDA_SET_CHANNEL_REG_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
Sachin Ahujacb64fc82015-01-12 17:01:05 +05307349 WDA_SET_CUURENT_REG_DOMAIN(pChanInfoType, pChanList->regId);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007350 pChanInfoType++;
7351 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007352 pwdiUpdateChReqParam->wdiReqStatusCB = NULL;
7353 pWdaParams->pWdaContext = pWDA;
7354 pWdaParams->wdaMsgParam = (void *)pChanList;
7355 /* store Params pass it to WDI */
7356 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiUpdateChReqParam;
7357 status = WDI_UpdateChannelReq(pwdiUpdateChReqParam,
7358 (WDI_UpdateChannelRspCb)WDA_UpdateChReqCallback, pWdaParams);
7359 if(IS_WDI_STATUS_FAILURE(status))
7360 {
7361 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7362 "Failure in Update Channel REQ Params WDI API, free all the memory");
7363 vos_mem_free(pwdiUpdateChanReqType->pchanParam);
7364 vos_mem_free(pwdiUpdateChReqParam);
7365 vos_mem_free(pWdaParams->wdaMsgParam);
7366 vos_mem_free(pWdaParams);
7367 }
7368 return CONVERT_WDI2VOS_STATUS(status);
7369}
7370
Jeff Johnson295189b2012-06-20 16:38:30 -07007371/*
7372 * FUNCTION: WDA_AddTSReqCallback
7373 * send ADD TS RSP back to PE
7374 */
7375void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
7376{
7377 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307378 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007379 tAddTsParams *pAddTsReqParams;
7380
7381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007382 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007383 if(NULL == pWdaParams)
7384 {
7385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007386 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007387 VOS_ASSERT(0) ;
7388 return ;
7389 }
7390 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307391 if (NULL == pWDA)
7392 {
7393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7394 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307395 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7396 vos_mem_free(pWdaParams->wdaMsgParam);
7397 vos_mem_free(pWdaParams);
7398
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307399 VOS_ASSERT(0);
7400 return ;
7401 }
7402
Jeff Johnson295189b2012-06-20 16:38:30 -07007403 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
7404 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7405 vos_mem_free(pWdaParams);
7406
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007407 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007408 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007409 return ;
7410}
7411
Jeff Johnson295189b2012-06-20 16:38:30 -07007412/*
7413 * FUNCTION: WDA_ProcessAddTSReq
7414 * Request to WDI to Update the ADD TS REQ params.
7415 */
7416VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
7417 tAddTsParams *pAddTsReqParams)
7418{
7419 WDI_Status status = WDI_STATUS_SUCCESS ;
7420 WDI_AddTSReqParamsType *wdiAddTSReqParam =
7421 (WDI_AddTSReqParamsType *)vos_mem_malloc(
7422 sizeof(WDI_AddTSReqParamsType)) ;
7423 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007425 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007426 if(NULL == wdiAddTSReqParam)
7427 {
7428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007429 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007430 VOS_ASSERT(0);
7431 return VOS_STATUS_E_NOMEM;
7432 }
7433 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7434 if(NULL == pWdaParams)
7435 {
7436 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007437 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007438 VOS_ASSERT(0);
7439 vos_mem_free(wdiAddTSReqParam);
7440 return VOS_STATUS_E_NOMEM;
7441 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007442 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
7443 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07007444 //TS IE
7445 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
7446 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
7447 pAddTsReqParams->tspec.length;
7448
7449 //TS IE : TS INFO : TRAFFIC
7450 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
7451 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
7452 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
7453 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
7454 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
7455 pAddTsReqParams->tspec.tsinfo.traffic.psb;
7456 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
7457 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
7458 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
7459 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
7460 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
7461 pAddTsReqParams->tspec.tsinfo.traffic.direction;
7462 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
7463 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
7464 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
7465 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
7466
7467 //TS IE : TS INFO : SCHEDULE
7468 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
7469 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
7470 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
7471 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07007472 //TS IE
7473 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
7474 pAddTsReqParams->tspec.nomMsduSz;
7475 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
7476 pAddTsReqParams->tspec.maxMsduSz;
7477 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
7478 pAddTsReqParams->tspec.minSvcInterval;
7479 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
7480 pAddTsReqParams->tspec.maxSvcInterval;
7481 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
7482 pAddTsReqParams->tspec.inactInterval;
7483 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
7484 pAddTsReqParams->tspec.suspendInterval;
7485 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
7486 pAddTsReqParams->tspec.svcStartTime;
7487 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
7488 pAddTsReqParams->tspec.minDataRate;
7489 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
7490 pAddTsReqParams->tspec.meanDataRate;
7491 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
7492 pAddTsReqParams->tspec.peakDataRate;
7493 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
7494 pAddTsReqParams->tspec.maxBurstSz;
7495 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
7496 pAddTsReqParams->tspec.delayBound;
7497 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
7498 pAddTsReqParams->tspec.minPhyRate;
7499 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
7500 pAddTsReqParams->tspec.surplusBw;
7501 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
7502 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07007503 /* TODO: tAddTsParams doesn't have the following fields */
7504#if 0
7505 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
7506 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
7507 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
7508 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
7509#endif
7510 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
7511
7512 pWdaParams->pWdaContext = pWDA;
7513 /* Store ADD TS pointer, as this will be used for response */
7514 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007515 /* store Params pass it to WDI */
7516 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007517 status = WDI_AddTSReq(wdiAddTSReqParam,
7518 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007519 if(IS_WDI_STATUS_FAILURE(status))
7520 {
7521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7522 "Failure in ADD TS REQ Params WDI API, free all the memory " );
7523 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7524 vos_mem_free(pWdaParams);
7525 pAddTsReqParams->status = eSIR_FAILURE ;
7526 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
7527 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007528 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007529}
7530
Jeff Johnson295189b2012-06-20 16:38:30 -07007531/*
7532 * FUNCTION: WDA_DelTSReqCallback
7533 * send DEL TS RSP back to PE
7534 */
7535void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
7536{
7537 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007539 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007540 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7541 vos_mem_free(pWdaParams->wdaMsgParam) ;
7542 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007543 /*
7544 * No respone required for WDA_DEL_TS_REQ so just free the request
7545 * param here
7546 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007547 return ;
7548}
7549
Jeff Johnson295189b2012-06-20 16:38:30 -07007550/*
7551 * FUNCTION: WDA_ProcessDelTSReq
7552 * Request to WDI to Update the DELTS REQ params.
7553 */
7554VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
7555 tDelTsParams *pDelTSReqParams)
7556{
7557 WDI_Status status = WDI_STATUS_SUCCESS ;
7558 WDI_DelTSReqParamsType *wdiDelTSReqParam =
7559 (WDI_DelTSReqParamsType *)vos_mem_malloc(
7560 sizeof(WDI_DelTSReqParamsType)) ;
7561 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007563 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007564 if(NULL == wdiDelTSReqParam)
7565 {
7566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007567 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007568 VOS_ASSERT(0);
7569 return VOS_STATUS_E_NOMEM;
7570 }
7571 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7572 if(NULL == pWdaParams)
7573 {
7574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007575 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007576 VOS_ASSERT(0);
7577 vos_mem_free(wdiDelTSReqParam);
7578 return VOS_STATUS_E_NOMEM;
7579 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007580 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
7581 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
7582 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
7583 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
7584 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007585 pWdaParams->pWdaContext = pWDA;
7586 /* Store DEL TS pointer, as this will be used for response */
7587 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007588 /* store Params pass it to WDI */
7589 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007590 status = WDI_DelTSReq(wdiDelTSReqParam,
7591 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007592 if(IS_WDI_STATUS_FAILURE(status))
7593 {
7594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7595 "Failure in DEL TS REQ Params WDI API, free all the memory " );
7596 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7597 vos_mem_free(pWdaParams->wdaMsgParam);
7598 vos_mem_free(pWdaParams);
7599 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007600 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007601}
Jeff Johnson295189b2012-06-20 16:38:30 -07007602/*
7603 * FUNCTION: WDA_UpdateBeaconParamsCallback
7604 * Free the memory. No need to send any response to PE in this case
7605 */
7606void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
7607{
7608 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007610 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007611 if(NULL == pWdaParams)
7612 {
7613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007614 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007615 VOS_ASSERT(0) ;
7616 return ;
7617 }
7618 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7619 vos_mem_free(pWdaParams->wdaMsgParam) ;
7620 vos_mem_free(pWdaParams);
7621 /*
7622 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
7623 * param here
7624 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007625 return ;
7626}
Jeff Johnson295189b2012-06-20 16:38:30 -07007627/*
7628 * FUNCTION: WDA_ProcessUpdateBeaconParams
7629 * Request to WDI to send the beacon parameters to HAL to update the Hardware
7630 */
7631VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
7632 tUpdateBeaconParams *pUpdateBeaconParams)
7633{
7634 WDI_Status status = WDI_STATUS_SUCCESS ;
7635 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
7636 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
7637 sizeof(WDI_UpdateBeaconParamsType)) ;
7638 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007640 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007641 if(NULL == wdiUpdateBeaconParams)
7642 {
7643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007644 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007645 VOS_ASSERT(0);
7646 return VOS_STATUS_E_NOMEM;
7647 }
7648 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7649 if(NULL == pWdaParams)
7650 {
7651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007652 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007653 VOS_ASSERT(0);
7654 vos_mem_free(wdiUpdateBeaconParams);
7655 return VOS_STATUS_E_NOMEM;
7656 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007657 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
7658 pUpdateBeaconParams->bssIdx;
7659 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
7660 pUpdateBeaconParams->fShortPreamble;
7661 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
7662 pUpdateBeaconParams->fShortSlotTime;
7663 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
7664 pUpdateBeaconParams->beaconInterval;
7665 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
7666 pUpdateBeaconParams->llaCoexist;
7667 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
7668 pUpdateBeaconParams->llbCoexist;
7669 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
7670 pUpdateBeaconParams->llgCoexist;
7671 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
7672 pUpdateBeaconParams->ht20MhzCoexist;
7673 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
7674 pUpdateBeaconParams->llnNonGFCoexist;
7675 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
7676 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
7677 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
7678 pUpdateBeaconParams->fRIFSMode;
7679 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
7680 pUpdateBeaconParams->paramChangeBitmap;
7681 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
7682
7683 pWdaParams->pWdaContext = pWDA;
7684 /* Store UpdateBeacon Req pointer, as this will be used for response */
7685 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007686 /* store Params pass it to WDI */
7687 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007688 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
7689 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
7690 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007691 if(IS_WDI_STATUS_FAILURE(status))
7692 {
7693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7694 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
7695 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7696 vos_mem_free(pWdaParams->wdaMsgParam);
7697 vos_mem_free(pWdaParams);
7698 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007699 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007700}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08007701#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -07007702/*
7703 * FUNCTION: WDA_TSMStatsReqCallback
7704 * send TSM Stats RSP back to PE
7705 */
7706void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
7707{
7708 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7709 tWDA_CbContext *pWDA = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007710 tpAniGetTsmStatsRsp pTsmRspParams = NULL;
7711 tpAniGetTsmStatsReq pGetTsmStatsReqParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007712
7713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007714 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007715 if(NULL == pWdaParams)
7716 {
7717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007718 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007719 VOS_ASSERT(0) ;
7720 return ;
7721 }
7722 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307723 if (NULL == pWDA)
7724 {
7725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7726 "%s:pWDA is NULL", __func__);
7727 VOS_ASSERT(0);
7728 return ;
7729 }
7730
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007731 pGetTsmStatsReqParams = (tAniGetTsmStatsReq *)pWdaParams->wdaMsgParam;
7732
7733 if(NULL == pGetTsmStatsReqParams)
7734 {
7735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7736 "%s: pGetTsmStatsReqParams received NULL", __func__);
7737 VOS_ASSERT(0);
7738 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7739 vos_mem_free(pWdaParams);
7740 return;
7741 }
7742
7743 pTsmRspParams =
7744 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
Jeff Johnson295189b2012-06-20 16:38:30 -07007745 if( NULL == pTsmRspParams )
7746 {
7747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007748 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007749 VOS_ASSERT( 0 );
7750 return ;
7751 }
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007752 vos_mem_set(pTsmRspParams, sizeof(tAniGetTsmStatsRsp), 0);
7753 pTsmRspParams->rc = pwdiTSMStatsRspParams->wdiStatus;
7754 pTsmRspParams->staId = pGetTsmStatsReqParams->staId;
7755
Jeff Johnson295189b2012-06-20 16:38:30 -07007756 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
7757 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
7758 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
7759 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
7760 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
7761 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
7762 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
7763 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
7764 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
7765 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007766
7767 /* Assign get tsm stats req req (backup) in to the response */
7768 pTsmRspParams->tsmStatsReq = pGetTsmStatsReqParams;
7769
7770 /* free WDI command buffer */
7771 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7772 vos_mem_free(pWdaParams);
7773
Jeff Johnson295189b2012-06-20 16:38:30 -07007774 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007775 return ;
7776}
7777
7778
Jeff Johnson295189b2012-06-20 16:38:30 -07007779/*
7780 * FUNCTION: WDA_ProcessTsmStatsReq
7781 * Request to WDI to get the TSM Stats params.
7782 */
7783VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007784 tpAniGetTsmStatsReq pTsmStats)
Jeff Johnson295189b2012-06-20 16:38:30 -07007785{
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007786 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007787 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007788 tWDA_ReqParams *pWdaParams = NULL;
7789 tAniGetTsmStatsRsp *pGetTsmStatsRspParams = NULL;
7790
Jeff Johnson295189b2012-06-20 16:38:30 -07007791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007792 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007793 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
7794 sizeof(WDI_TSMStatsReqParamsType));
7795 if(NULL == wdiTSMReqParam)
7796 {
7797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007798 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007799 VOS_ASSERT(0);
7800 return VOS_STATUS_E_NOMEM;
7801 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007802 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7803 if(NULL == pWdaParams)
7804 {
7805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007806 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007807 VOS_ASSERT(0);
7808 vos_mem_free(wdiTSMReqParam);
7809 return VOS_STATUS_E_NOMEM;
7810 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007811 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
7812 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
7813 pTsmStats->bssId,
7814 sizeof(wpt_macAddr));
7815 wdiTSMReqParam->wdiReqStatusCB = NULL ;
7816
7817 pWdaParams->pWdaContext = pWDA;
7818 /* Store TSM Stats pointer, as this will be used for response */
7819 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007820 pWdaParams->wdaWdiApiMsgParam = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007821 status = WDI_TSMStatsReq(wdiTSMReqParam,
7822 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007823 if(IS_WDI_STATUS_FAILURE(status))
7824 {
7825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7826 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007827 vos_mem_free(pWdaParams);
7828
7829 pGetTsmStatsRspParams =
7830 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
7831 if(NULL == pGetTsmStatsRspParams)
7832 {
7833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7834 "%s: VOS MEM Alloc Failure", __func__);
7835 VOS_ASSERT(0);
7836 vos_mem_free(pTsmStats);
7837 return VOS_STATUS_E_NOMEM;
7838 }
7839 pGetTsmStatsRspParams->staId = pTsmStats->staId;
7840 pGetTsmStatsRspParams->rc = eSIR_FAILURE;
7841 pGetTsmStatsRspParams->tsmStatsReq = pTsmStats;
7842
7843 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pGetTsmStatsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007844 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007845 return CONVERT_WDI2VOS_STATUS(status) ;
7846}
7847#endif
7848/*
7849 * FUNCTION: WDA_SendBeaconParamsCallback
7850 * No need to send any response to PE in this case
7851 */
7852void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
7853{
7854
Jeff Johnson295189b2012-06-20 16:38:30 -07007855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007856 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007857 return ;
7858}
Jeff Johnson295189b2012-06-20 16:38:30 -07007859/*
7860 * FUNCTION: WDA_ProcessSendBeacon
7861 * Request to WDI to send the beacon template to HAL to update the TPE memory and
7862 * start beacon trasmission
7863 */
7864VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
7865 tSendbeaconParams *pSendbeaconParams)
7866{
7867 WDI_Status status = WDI_STATUS_SUCCESS ;
7868 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007869 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007870 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007871 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
7872 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
7873 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
7874 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07007875 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
7876 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05307877 /* p2pIeOffset should be atleast greater than timIeOffset */
7878 if ((pSendbeaconParams->p2pIeOffset != 0) &&
7879 (pSendbeaconParams->p2pIeOffset <
7880 pSendbeaconParams->timIeOffset))
7881 {
7882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7883 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
Ratheesh S P62439fe2015-06-11 15:53:31 +05307884 vos_mem_free(pSendbeaconParams);
Gopichand Nakkala81aef732013-03-22 11:15:19 +05307885 VOS_ASSERT( 0 );
7886 return WDI_STATUS_E_FAILURE;
7887 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007888 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
7889 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07007890 /* Copy the beacon template to local buffer */
7891 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
7892 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
7893 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
7894
Jeff Johnson295189b2012-06-20 16:38:30 -07007895 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
7896 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007897 if(IS_WDI_STATUS_FAILURE(status))
7898 {
7899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7900 "Failure in SEND BEACON REQ Params WDI API" );
7901 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007902 vos_mem_free(pSendbeaconParams);
7903 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07007904}
Jeff Johnson295189b2012-06-20 16:38:30 -07007905/*
7906 * FUNCTION: WDA_UpdateProbeRspParamsCallback
7907 * No need to send any response to PE in this case
7908 */
7909void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
7910{
Jeff Johnson295189b2012-06-20 16:38:30 -07007911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007912 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007913 return ;
7914}
7915
Jeff Johnson295189b2012-06-20 16:38:30 -07007916/*
7917 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
7918 * Request to WDI to send the probe response template to HAL to update the TPE memory and
7919 * send probe response
7920 */
7921VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
7922 tSendProbeRespParams *pSendProbeRspParams)
7923{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007924 WDI_Status status = WDI_STATUS_SUCCESS;
7925 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
7926 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07007927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007928 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007929
7930 if (!wdiSendProbeRspParam)
Ratheesh S P62439fe2015-06-11 15:53:31 +05307931 {
7932 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007933 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
Ratheesh S P62439fe2015-06-11 15:53:31 +05307934 }
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007935
Jeff Johnson295189b2012-06-20 16:38:30 -07007936 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007937 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07007938 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007939 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07007940 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07007941 /* Copy the Probe Response template to local buffer */
7942 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007943 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07007944 pSendProbeRspParams->pProbeRespTemplate,
7945 pSendProbeRspParams->probeRespTemplateLen);
7946 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007947 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07007948 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
7949 WDI_PROBE_REQ_BITMAP_IE_LEN);
7950
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007951 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007952
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007953 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07007954 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007955 if(IS_WDI_STATUS_FAILURE(status))
7956 {
7957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7958 "Failure in SEND Probe RSP Params WDI API" );
7959 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007960 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007961 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007962 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07007963}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08007964#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -07007965/*
7966 * FUNCTION: WDA_SetMaxTxPowerCallBack
7967 * send the response to PE with power value received from WDI
7968 */
7969void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
7970 void* pUserData)
7971{
7972 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7973 tWDA_CbContext *pWDA = NULL;
7974 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
7975
7976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007977 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007978 if(NULL == pWdaParams)
7979 {
7980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007981 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007982 VOS_ASSERT(0) ;
7983 return ;
7984 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007985 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307986 if (NULL == pWDA)
7987 {
7988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7989 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307990 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7991 vos_mem_free(pWdaParams->wdaMsgParam);
7992 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307993 VOS_ASSERT(0);
7994 return ;
7995 }
7996
Jeff Johnson295189b2012-06-20 16:38:30 -07007997 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007998 if( NULL == pMaxTxPowerParams )
7999 {
8000 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008001 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07008002 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008003 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8004 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008005 return ;
8006 }
Jeff Johnsone7245742012-09-05 17:12:55 -07008007
Jeff Johnson295189b2012-06-20 16:38:30 -07008008
8009 /*need to free memory for the pointers used in the
8010 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008011 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8012 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008013 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07008014
Jeff Johnson295189b2012-06-20 16:38:30 -07008015
8016 /* send response to UMAC*/
8017 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
8018
8019 return;
8020}
Jeff Johnson295189b2012-06-20 16:38:30 -07008021/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008022 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07008023 * Request to WDI to send set Max Tx Power Request
8024 */
8025 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
8026 tMaxTxPowerParams *MaxTxPowerParams)
8027{
8028 WDI_Status status = WDI_STATUS_SUCCESS;
8029 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
8030 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008031
Jeff Johnson295189b2012-06-20 16:38:30 -07008032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008033 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008034
Jeff Johnson295189b2012-06-20 16:38:30 -07008035 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
8036 sizeof(WDI_SetMaxTxPowerParamsType));
8037 if(NULL == wdiSetMaxTxPowerParams)
8038 {
8039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008040 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008041 VOS_ASSERT(0);
8042 return VOS_STATUS_E_NOMEM;
8043 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008044 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8045 if(NULL == pWdaParams)
8046 {
8047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008048 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008049 vos_mem_free(wdiSetMaxTxPowerParams);
8050 VOS_ASSERT(0);
8051 return VOS_STATUS_E_NOMEM;
8052 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008053 /* Copy.Max.Tx.Power Params to WDI structure */
8054 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
8055 MaxTxPowerParams->bssId,
8056 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008057 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
8058 MaxTxPowerParams->selfStaMacAddr,
8059 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008060 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
8061 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07008062 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008063 pWdaParams->pWdaContext = pWDA;
8064 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008065 /* store Params pass it to WDI */
8066 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008067 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
8068 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008069 if(IS_WDI_STATUS_FAILURE(status))
8070 {
8071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8072 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
8073 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8074 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008075 /* send response to UMAC*/
8076 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008077 }
8078 return CONVERT_WDI2VOS_STATUS(status);
8079
8080}
Jeff Johnson295189b2012-06-20 16:38:30 -07008081#endif
schang86c22c42013-03-13 18:41:24 -07008082
8083/*
Arif Hussaina5ebce02013-08-09 15:09:58 -07008084 * FUNCTION: WDA_SetMaxTxPowerPerBandCallBack
8085 * send the response to PE with power value received from WDI
8086 */
8087void WDA_SetMaxTxPowerPerBandCallBack(WDI_SetMaxTxPowerPerBandRspMsg
8088 *pwdiSetMaxTxPowerPerBandRsp,
8089 void* pUserData)
8090{
8091 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8092 tWDA_CbContext *pWDA = NULL;
8093 tMaxTxPowerPerBandParams *pMxTxPwrPerBandParams = NULL;
8094
8095 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8096 "<------ %s ", __func__);
8097 if (NULL == pWdaParams)
8098 {
8099 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8100 "%s: pWdaParams received NULL", __func__);
8101 VOS_ASSERT(0);
8102 return ;
8103 }
8104 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308105 if (NULL == pWDA)
8106 {
8107 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8108 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308109 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8110 vos_mem_free(pWdaParams->wdaMsgParam);
8111 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308112 VOS_ASSERT(0);
8113 return ;
8114 }
8115
Arif Hussaina5ebce02013-08-09 15:09:58 -07008116 pMxTxPwrPerBandParams = (tMaxTxPowerPerBandParams*)pWdaParams->wdaMsgParam;
8117 if ( NULL == pMxTxPwrPerBandParams )
8118 {
8119 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8120 "%s: pMxTxPwrPerBandParams received NULL ", __func__);
8121 VOS_ASSERT(0);
8122 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8123 vos_mem_free(pWdaParams);
8124 return;
8125 }
8126
8127 /*need to free memory for the pointers used in the
8128 WDA Process.Set Max Tx Power Req function*/
8129 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8130 vos_mem_free(pWdaParams);
8131 pMxTxPwrPerBandParams->power = pwdiSetMaxTxPowerPerBandRsp->ucPower;
8132
8133 /* send response to UMAC*/
8134 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
8135 pMxTxPwrPerBandParams, 0);
8136
8137 return;
8138}
8139
8140/*
8141 * FUNCTION: WDA_ProcessSetMaxTxPowerPerBandReq
8142 * Request to WDI to send set Max Tx Power Per band Request
8143 */
8144 VOS_STATUS WDA_ProcessSetMaxTxPowerPerBandReq(tWDA_CbContext *pWDA,
8145 tMaxTxPowerPerBandParams
8146 *MaxTxPowerPerBandParams)
8147{
8148 WDI_Status status = WDI_STATUS_SUCCESS;
8149 WDI_SetMaxTxPowerPerBandParamsType *wdiSetMxTxPwrPerBandParams = NULL;
8150 tWDA_ReqParams *pWdaParams = NULL;
8151
8152 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8153 "------> %s ", __func__);
8154
8155 wdiSetMxTxPwrPerBandParams = vos_mem_malloc(
8156 sizeof(WDI_SetMaxTxPowerPerBandParamsType));
8157
8158 if (NULL == wdiSetMxTxPwrPerBandParams)
8159 {
8160 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8161 "%s: VOS MEM Alloc Failure", __func__);
8162 VOS_ASSERT(0);
8163 return VOS_STATUS_E_NOMEM;
8164 }
8165 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8166 if (NULL == pWdaParams)
8167 {
8168 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8169 "%s: VOS MEM Alloc Failure", __func__);
8170 vos_mem_free(wdiSetMxTxPwrPerBandParams);
8171 VOS_ASSERT(0);
8172 return VOS_STATUS_E_NOMEM;
8173 }
8174 /* Copy.Max.Tx.Power.Per.Band Params to WDI structure */
8175 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.bandInfo = \
8176 MaxTxPowerPerBandParams->bandInfo;
8177 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.ucPower = \
8178 MaxTxPowerPerBandParams->power;
8179 wdiSetMxTxPwrPerBandParams->wdiReqStatusCB = NULL;
8180 pWdaParams->pWdaContext = pWDA;
8181 pWdaParams->wdaMsgParam = (void *)MaxTxPowerPerBandParams;
8182 /* store Params pass it to WDI */
8183 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMxTxPwrPerBandParams;
8184 status = WDI_SetMaxTxPowerPerBandReq(wdiSetMxTxPwrPerBandParams,
8185 WDA_SetMaxTxPowerPerBandCallBack,
8186 pWdaParams);
8187 if (IS_WDI_STATUS_FAILURE(status))
8188 {
8189 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8190 "Failure in SET MAX TX Power REQ Params WDI API,"
8191 " free all the memory");
8192 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8193 vos_mem_free(pWdaParams);
8194 /* send response to UMAC*/
8195 WDA_SendMsg(pWDA,
8196 WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
8197 MaxTxPowerPerBandParams, 0);
8198 }
8199 return CONVERT_WDI2VOS_STATUS(status);
8200}
8201
8202/*
schang86c22c42013-03-13 18:41:24 -07008203 * FUNCTION: WDA_SetTxPowerCallBack
8204 * send the response to PE with power value received from WDI
8205 */
8206void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
8207 void* pUserData)
8208{
8209 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8210 tWDA_CbContext *pWDA = NULL;
8211 tSirSetTxPowerReq *pTxPowerParams = NULL;
8212
8213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8214 "<------ %s ", __func__);
8215 if(NULL == pWdaParams)
8216 {
8217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8218 "%s: pWdaParams received NULL", __func__);
8219 VOS_ASSERT(0) ;
8220 return ;
8221 }
8222 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308223 if (NULL == pWDA)
8224 {
8225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8226 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308227 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8228 vos_mem_free(pWdaParams->wdaMsgParam);
8229 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308230 VOS_ASSERT(0);
8231 return ;
8232 }
8233
schang86c22c42013-03-13 18:41:24 -07008234 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
8235 if(NULL == pTxPowerParams)
8236 {
8237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8238 "%s: pTxPowerParams received NULL " ,__func__);
8239 VOS_ASSERT(0);
8240 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8241 vos_mem_free(pWdaParams);
8242 return ;
8243 }
8244
8245 /*need to free memory for the pointers used in the
8246 WDA Process.Set Max Tx Power Req function*/
8247 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8248 vos_mem_free(pWdaParams);
8249
8250 /* send response to UMAC*/
8251 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
8252 return;
8253}
8254
8255/*
8256 * FUNCTION: WDA_ProcessSetTxPowerReq
8257 * Request to WDI to send set Tx Power Request
8258 */
8259 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
8260 tSirSetTxPowerReq *txPowerParams)
8261{
8262 WDI_Status status = WDI_STATUS_SUCCESS;
8263 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
8264 tWDA_ReqParams *pWdaParams = NULL;
8265
8266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8267 "------> %s ", __func__);
8268
8269 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
8270 sizeof(WDI_SetTxPowerParamsType));
8271 if(NULL == wdiSetTxPowerParams)
8272 {
8273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8274 "%s: VOS MEM Alloc Failure", __func__);
8275 VOS_ASSERT(0);
8276 return VOS_STATUS_E_NOMEM;
8277 }
8278 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8279 if(NULL == pWdaParams)
8280 {
8281 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8282 "%s: VOS MEM Alloc Failure", __func__);
8283 vos_mem_free(wdiSetTxPowerParams);
8284 VOS_ASSERT(0);
8285 return VOS_STATUS_E_NOMEM;
8286 }
8287 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
8288 txPowerParams->bssIdx;
8289 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
8290 txPowerParams->mwPower;
8291 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
8292 pWdaParams->pWdaContext = pWDA;
8293 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
8294 /* store Params pass it to WDI */
8295 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
8296 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
8297 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
8298 if(IS_WDI_STATUS_FAILURE(status))
8299 {
8300 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8301 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
8302 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8303 vos_mem_free(pWdaParams);
8304 /* send response to UMAC*/
8305 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
8306 }
8307 return CONVERT_WDI2VOS_STATUS(status);
8308}
8309
Jeff Johnson295189b2012-06-20 16:38:30 -07008310/*
8311 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
8312 * Free the memory. No need to send any response to PE in this case
8313 */
8314void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
8315{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008316 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8317
Jeff Johnson295189b2012-06-20 16:38:30 -07008318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008319 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008320
8321 if(NULL == pWdaParams)
8322 {
8323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008324 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008325 VOS_ASSERT(0) ;
8326 return ;
8327 }
8328
8329 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8330 vos_mem_free(pWdaParams->wdaMsgParam) ;
8331 vos_mem_free(pWdaParams);
8332
Jeff Johnson295189b2012-06-20 16:38:30 -07008333 /*
8334 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
8335 * so just free the request param here
8336 */
Jeff Johnson295189b2012-06-20 16:38:30 -07008337 return ;
8338}
8339
Jeff Johnson295189b2012-06-20 16:38:30 -07008340/*
8341 * FUNCTION: WDA_ProcessSetP2PGONOAReq
8342 * Request to WDI to set the P2P Group Owner Notice of Absence Req
8343 */
8344VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
8345 tP2pPsParams *pP2pPsConfigParams)
8346{
8347 WDI_Status status = WDI_STATUS_SUCCESS ;
8348 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
8349 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
8350 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008351 tWDA_ReqParams *pWdaParams = NULL;
8352
Jeff Johnson295189b2012-06-20 16:38:30 -07008353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008354 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008355 if(NULL == wdiSetP2PGONOAReqParam)
8356 {
8357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008358 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308359 vos_mem_free(pP2pPsConfigParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008360 VOS_ASSERT(0);
8361 return VOS_STATUS_E_NOMEM;
8362 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008363
8364 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8365 if(NULL == pWdaParams)
8366 {
8367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008368 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008369 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008370 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008371 VOS_ASSERT(0);
8372 return VOS_STATUS_E_NOMEM;
8373 }
8374
Jeff Johnson295189b2012-06-20 16:38:30 -07008375 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
8376 pP2pPsConfigParams->opp_ps;
8377 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
8378 pP2pPsConfigParams->ctWindow;
8379 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
8380 pP2pPsConfigParams->count;
8381 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
8382 pP2pPsConfigParams->duration;
8383 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
8384 pP2pPsConfigParams->interval;
8385 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
8386 pP2pPsConfigParams->single_noa_duration;
8387 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
8388 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008389
Jeff Johnson295189b2012-06-20 16:38:30 -07008390 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
8391 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008392 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
8393
Jeff Johnson295189b2012-06-20 16:38:30 -07008394 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008395 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
8396 pWdaParams->pWdaContext = pWDA;
8397
Jeff Johnson295189b2012-06-20 16:38:30 -07008398 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008399 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
8400
Jeff Johnson295189b2012-06-20 16:38:30 -07008401 if(IS_WDI_STATUS_FAILURE(status))
8402 {
8403 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8404 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008405 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8406 vos_mem_free(pWdaParams->wdaMsgParam);
8407 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008408 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008409 return CONVERT_WDI2VOS_STATUS(status);
8410
Jeff Johnson295189b2012-06-20 16:38:30 -07008411}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308412
8413#ifdef FEATURE_WLAN_TDLS
8414/*
8415 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
8416 * Free the memory. No need to send any response to PE in this case
8417 */
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308418void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
8419 void* pUserData)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308420{
8421 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8422 tWDA_CbContext *pWDA = NULL;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308423 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308424
8425
8426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8427 "<------ %s " ,__func__);
8428 if(NULL == pWdaParams)
8429 {
8430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8431 "%s: pWdaParams received NULL", __func__);
8432 VOS_ASSERT(0) ;
8433 return ;
8434 }
8435 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
8436
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308437 if (NULL == pWDA)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308438 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8440 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308441 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8442 vos_mem_free(pWdaParams->wdaMsgParam);
8443 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308444 VOS_ASSERT(0);
8445 return ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308446 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308447
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308448 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
8449 if( NULL == pTdlsLinkEstablishParams )
8450 {
8451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8452 "%s: pTdlsLinkEstablishParams "
8453 "received NULL " ,__func__);
8454 VOS_ASSERT(0);
8455 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8456 vos_mem_free(pWdaParams);
8457 return ;
8458 }
8459 pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
8460 wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308461 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308462 vos_mem_free(pWdaParams);
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308463 /* send response to UMAC*/
8464 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
8465
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308466 return ;
8467}
8468
8469VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
8470 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
8471{
8472 WDI_Status status = WDI_STATUS_SUCCESS ;
8473 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
8474 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
8475 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
8476 tWDA_ReqParams *pWdaParams = NULL;
8477 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8478 "------> %s " ,__func__);
8479 if(NULL == wdiSetTDLSLinkEstablishReqParam)
8480 {
8481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8482 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308483 vos_mem_free(pTdlsLinkEstablishParams);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308484 VOS_ASSERT(0);
8485 return VOS_STATUS_E_NOMEM;
8486 }
8487 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8488 if(NULL == pWdaParams)
8489 {
8490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8491 "%s: VOS MEM Alloc Failure", __func__);
8492 vos_mem_free(pTdlsLinkEstablishParams);
8493 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
8494 VOS_ASSERT(0);
8495 return VOS_STATUS_E_NOMEM;
8496 }
8497 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308498 pTdlsLinkEstablishParams->staIdx;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308499 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308500 pTdlsLinkEstablishParams->isResponder;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308501 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308502 pTdlsLinkEstablishParams->uapsdQueues;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308503 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308504 pTdlsLinkEstablishParams->maxSp;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308505 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308506 pTdlsLinkEstablishParams->isBufsta;
Naresh Jayaramc7cbd782014-02-04 17:38:23 +05308507 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsOffChannelSupported =
8508 pTdlsLinkEstablishParams->isOffChannelSupported;
8509
8510 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannels,
8511 pTdlsLinkEstablishParams->validChannels,
8512 pTdlsLinkEstablishParams->validChannelsLen);
8513
8514 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannelsLen =
8515 pTdlsLinkEstablishParams->validChannelsLen;
8516
8517 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClasses,
8518 pTdlsLinkEstablishParams->validOperClasses,
8519 pTdlsLinkEstablishParams->validOperClassesLen);
8520 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClassesLen =
8521 pTdlsLinkEstablishParams->validOperClassesLen;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308522
8523 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
8524 /* Store msg pointer from PE, as this will be used for response */
8525 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
8526 /* store Params pass it to WDI */
8527 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
8528 pWdaParams->pWdaContext = pWDA;
8529
8530 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
8531 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
8532 WDA_SetTDLSLinkEstablishReqParamsCallback,
8533 pWdaParams);
8534 if(IS_WDI_STATUS_FAILURE(status))
8535 {
8536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8537 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
8538 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8539 vos_mem_free(pWdaParams->wdaMsgParam);
8540 vos_mem_free(pWdaParams);
8541 }
8542 return CONVERT_WDI2VOS_STATUS(status);
8543}
Atul Mittalc0f739f2014-07-31 13:47:47 +05308544
8545// tdlsoffchan
8546void WDA_SetTDLSChanSwitchReqParamsCallback(WDI_SetTdlsChanSwitchReqResp *wdiSetTdlsChanSwitchReqRsp,
8547 void* pUserData)
8548{
8549 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8550 tWDA_CbContext *pWDA = NULL;
8551 tTdlsChanSwitchParams *pTdlsChanSwitchParams;
8552
8553
8554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8555 "<------ %s " ,__func__);
8556 if(NULL == pWdaParams)
8557 {
8558 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8559 "%s: pWdaParams received NULL", __func__);
Atul Mittalc0f739f2014-07-31 13:47:47 +05308560 VOS_ASSERT(0) ;
8561 return ;
8562 }
8563 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
8564
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308565 if (NULL == pWDA)
Atul Mittal60bd4292014-08-14 12:19:27 +05308566 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8568 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308569 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8570 vos_mem_free(pWdaParams->wdaMsgParam);
8571 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308572 VOS_ASSERT(0);
8573 return ;
Atul Mittal60bd4292014-08-14 12:19:27 +05308574 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308575
Atul Mittalc0f739f2014-07-31 13:47:47 +05308576 pTdlsChanSwitchParams = (tTdlsChanSwitchParams *)pWdaParams->wdaMsgParam ;
Atul Mittal60bd4292014-08-14 12:19:27 +05308577 if( NULL == pTdlsChanSwitchParams )
Atul Mittalc0f739f2014-07-31 13:47:47 +05308578 {
8579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8580 "%s: pTdlsChanSwitchParams "
8581 "received NULL " ,__func__);
8582 VOS_ASSERT(0);
8583 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8584 vos_mem_free(pWdaParams);
8585 return ;
8586 }
8587 pTdlsChanSwitchParams->status = CONVERT_WDI2SIR_STATUS(
8588 wdiSetTdlsChanSwitchReqRsp->wdiStatus);
Atul Mittalc0f739f2014-07-31 13:47:47 +05308589 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8590 vos_mem_free(pWdaParams);
Atul Mittal60bd4292014-08-14 12:19:27 +05308591 /* send response to UMAC*/
8592 WDA_SendMsg(pWDA, WDA_SET_TDLS_CHAN_SWITCH_REQ_RSP, pTdlsChanSwitchParams, 0) ;
Atul Mittalc0f739f2014-07-31 13:47:47 +05308593
8594 return ;
8595}
8596VOS_STATUS WDA_ProcessSetTdlsChanSwitchReq(tWDA_CbContext *pWDA,
8597 tTdlsChanSwitchParams *pTdlsChanSwitchParams)
8598{
8599 WDI_Status status = WDI_STATUS_SUCCESS ;
8600 WDI_SetTDLSChanSwitchReqParamsType *wdiSetTDLSChanSwitchReqParam =
8601 (WDI_SetTDLSChanSwitchReqParamsType *)vos_mem_malloc(
8602 sizeof(WDI_SetTDLSChanSwitchReqParamsType));
8603 tWDA_ReqParams *pWdaParams = NULL;
8604
8605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8606 "Enter: %s ",__func__);
8607 if(NULL == wdiSetTDLSChanSwitchReqParam)
8608 {
8609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8610 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308611 vos_mem_free(pTdlsChanSwitchParams);
Atul Mittalc0f739f2014-07-31 13:47:47 +05308612 VOS_ASSERT(0);
8613 return VOS_STATUS_E_NOMEM;
8614 }
8615
8616 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8617 if(NULL == pWdaParams)
8618 {
8619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8620 "%s: VOS MEM Alloc Failure", __func__);
8621 vos_mem_free(pTdlsChanSwitchParams);
8622 vos_mem_free(wdiSetTDLSChanSwitchReqParam);
8623 VOS_ASSERT(0);
8624 return VOS_STATUS_E_NOMEM;
8625 }
8626 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.staIdx =
8627 pTdlsChanSwitchParams->staIdx;
8628 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.isOffchannelInitiator =
8629 pTdlsChanSwitchParams->tdlsSwMode;
8630 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetOperClass =
8631 pTdlsChanSwitchParams->operClass;
8632 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetChannel =
8633 pTdlsChanSwitchParams->tdlsOffCh;
8634 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.secondaryChannelOffset =
8635 pTdlsChanSwitchParams->tdlsOffChBwOffset;
8636
8637
8638 /* Store msg pointer from PE, as this will be used for response */
8639 pWdaParams->wdaMsgParam = (void *)pTdlsChanSwitchParams ;
8640 /* store Params pass it to WDI */
8641 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSChanSwitchReqParam ;
8642 pWdaParams->pWdaContext = pWDA;
8643 status = WDI_SetTDLSChanSwitchReq(wdiSetTDLSChanSwitchReqParam,
8644 (WDI_SetTDLSChanSwitchReqParamsRspCb)
8645 WDA_SetTDLSChanSwitchReqParamsCallback,
8646 pWdaParams);
8647 if(IS_WDI_STATUS_FAILURE(status))
8648 {
8649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8650 "Failure in TDLS Channel Switch Req WDI API, free all the memory" );
8651 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8652 vos_mem_free(pWdaParams->wdaMsgParam);
8653 vos_mem_free(pWdaParams);
8654 }
8655 return CONVERT_WDI2VOS_STATUS(status);
8656}
8657#endif /*FEATURE_WLAN_TDLS*/
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308658
8659
Jeff Johnson295189b2012-06-20 16:38:30 -07008660#ifdef WLAN_FEATURE_VOWIFI_11R
8661/*
8662 * FUNCTION: WDA_AggrAddTSReqCallback
8663 * send ADD AGGREGATED TS RSP back to PE
8664 */
8665void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
8666{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008667 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308668 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008669 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008670 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07008671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008672 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008673 if(NULL == pWdaParams)
8674 {
8675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008676 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008677 VOS_ASSERT(0) ;
8678 return ;
8679 }
8680
8681 pWDA = pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308682 if (NULL == pWDA)
8683 {
8684 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8685 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308686 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8687 vos_mem_free(pWdaParams->wdaMsgParam);
8688 vos_mem_free(pWdaParams);
8689
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308690 VOS_ASSERT(0);
8691 return ;
8692 }
8693
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008694 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008695
8696 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
8697 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008698 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008699 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008700 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008701
8702 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8703 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008704 return ;
8705}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07008706/*
8707 * FUNCTION: WDA_ProcessAddTSReq
8708 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
8709 */
8710VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
8711 tAggrAddTsParams *pAggrAddTsReqParams)
8712{
8713 WDI_Status status = WDI_STATUS_SUCCESS ;
8714 int i;
8715 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008716 tWDA_ReqParams *pWdaParams = NULL;
8717
8718
Jeff Johnson295189b2012-06-20 16:38:30 -07008719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008720 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008721 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
8722 sizeof(WDI_AggrAddTSReqParamsType)) ;
8723 if(NULL == wdiAggrAddTSReqParam)
8724 {
8725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008726 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308727 vos_mem_free(pAggrAddTsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008728 VOS_ASSERT(0);
8729 return VOS_STATUS_E_NOMEM;
8730 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008731
8732
8733 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8734 if(NULL == pWdaParams)
8735 {
8736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008737 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008738 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008739 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008740 VOS_ASSERT(0);
8741 return VOS_STATUS_E_NOMEM;
8742 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008743 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
8744 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
8745 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008746 for( i = 0; i < WDI_MAX_NO_AC; i++ )
8747 {
8748 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
8749 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
8750 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07008751 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
8752 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
8753 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
8754 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
8755 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
8756 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
8757 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
8758 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
8759 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
8760 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
8761 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
8762 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
8763 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
8764 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
8765 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
8766 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07008767 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
8768 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07008769 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
8770 pAggrAddTsReqParams->tspec[i].nomMsduSz;
8771 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
8772 pAggrAddTsReqParams->tspec[i].maxMsduSz;
8773 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
8774 pAggrAddTsReqParams->tspec[i].minSvcInterval;
8775 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
8776 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
8777 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
8778 pAggrAddTsReqParams->tspec[i].inactInterval;
8779 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
8780 pAggrAddTsReqParams->tspec[i].suspendInterval;
8781 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
8782 pAggrAddTsReqParams->tspec[i].svcStartTime;
8783 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
8784 pAggrAddTsReqParams->tspec[i].minDataRate;
8785 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
8786 pAggrAddTsReqParams->tspec[i].meanDataRate;
8787 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
8788 pAggrAddTsReqParams->tspec[i].peakDataRate;
8789 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
8790 pAggrAddTsReqParams->tspec[i].maxBurstSz;
8791 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
8792 pAggrAddTsReqParams->tspec[i].delayBound;
8793 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
8794 pAggrAddTsReqParams->tspec[i].minPhyRate;
8795 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
8796 pAggrAddTsReqParams->tspec[i].surplusBw;
8797 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
8798 pAggrAddTsReqParams->tspec[i].mediumTime;
8799 }
8800
8801 /* TODO: tAggrAddTsParams doesn't have the following fields */
8802#if 0
8803 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
8804 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
8805 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
8806 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
8807#endif
8808 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
8809
8810 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008811 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008812 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008813 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
8814
8815 pWdaParams->pWdaContext = pWDA;
8816
Jeff Johnson295189b2012-06-20 16:38:30 -07008817 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008818 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
8819
Jeff Johnson295189b2012-06-20 16:38:30 -07008820 if(IS_WDI_STATUS_FAILURE(status))
8821 {
8822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8823 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008824 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8825 vos_mem_free(pWdaParams);
8826
8827 /* send the failure response back to PE*/
8828 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
8829 {
8830 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
8831 }
8832
8833 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
8834 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008835 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008836 return CONVERT_WDI2VOS_STATUS(status) ;
8837}
8838#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07008839/*
Mihir Shetea4306052014-03-25 00:02:54 +05308840 * FUNCTION: WDA_EnterImpsRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008841 * send Enter IMPS RSP back to PE
8842 */
Mihir Shetea4306052014-03-25 00:02:54 +05308843void WDA_EnterImpsRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008844{
Mihir Shetea4306052014-03-25 00:02:54 +05308845 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308846 tWDA_CbContext *pWDA = NULL;
Mihir Shetea4306052014-03-25 00:02:54 +05308847
Jeff Johnson295189b2012-06-20 16:38:30 -07008848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Mihir Shetea4306052014-03-25 00:02:54 +05308849 "<------ %s status=%d" ,__func__,status);
8850 if(NULL == pWdaParams)
8851 {
8852 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8853 "%s: pWdaParams received NULL", __func__);
8854 VOS_ASSERT(0);
8855 return;
8856 }
8857
8858 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308859 if (NULL == pWDA)
8860 {
8861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8862 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308863 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8864 vos_mem_free(pWdaParams->wdaMsgParam);
8865 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308866 VOS_ASSERT(0);
8867 return ;
8868 }
Mihir Shetea4306052014-03-25 00:02:54 +05308869
8870 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8871 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05308872 if (WDI_STATUS_SUCCESS != status)
8873 {
8874 pWDA->failureCounts.enterImpsFailureCount++;
8875 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
8876 pWDA->failureCounts.enterImpsFailureCount)
8877 {
8878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8879 "%s: Status %d fail count %d", __func__, status,
8880 pWDA->failureCounts.enterImpsFailureCount);
8881 pWDA->failureCounts.enterImpsFailureCount = 0;
8882 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
8883 WLAN_LOG_INDICATOR_HOST_DRIVER,
8884 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
8885 FALSE, TRUE);
8886 }
8887 }
8888 else
8889 {
8890 pWDA->failureCounts.enterImpsFailureCount = 0;
8891 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008892 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008893 return ;
8894}
Mihir Shetea4306052014-03-25 00:02:54 +05308895
8896
8897/*
8898 * FUNCTION: WDA_EnterImpsReqCallback
8899 * Free memory and send Enter IMPS RSP back to PE.
8900 * Invoked when Enter IMPS REQ failed in WDI and no RSP callback is generated.
8901 */
8902void WDA_EnterImpsReqCallback(WDI_Status wdiStatus, void* pUserData)
8903{
8904 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308905 tWDA_CbContext *pWDA = NULL;
Mihir Shetea4306052014-03-25 00:02:54 +05308906
8907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8908 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8909
8910 if(NULL == pWdaParams)
8911 {
8912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8913 "%s: pWdaParams received NULL", __func__);
8914 VOS_ASSERT(0);
8915 return;
8916 }
8917
8918 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308919 if (NULL == pWDA)
8920 {
8921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8922 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308923 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8924 vos_mem_free(pWdaParams->wdaMsgParam);
8925 vos_mem_free(pWdaParams);
8926
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308927 VOS_ASSERT(0);
8928 return ;
8929 }
8930
Mihir Shetea4306052014-03-25 00:02:54 +05308931
8932 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8933 {
8934 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8935 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05308936 pWDA->failureCounts.enterImpsFailureCount++;
8937 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
8938 pWDA->failureCounts.enterImpsFailureCount)
8939 {
8940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8941 "%s: wdiStatus %d fail count %d", __func__, wdiStatus,
8942 pWDA->failureCounts.enterImpsFailureCount);
8943 pWDA->failureCounts.enterImpsFailureCount = 0;
8944 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
8945 WLAN_LOG_INDICATOR_HOST_DRIVER,
8946 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
8947 FALSE, TRUE);
8948 }
Mihir Shetea4306052014-03-25 00:02:54 +05308949 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
8950 CONVERT_WDI2SIR_STATUS(wdiStatus));
8951 }
8952
8953 return;
8954}
Jeff Johnson295189b2012-06-20 16:38:30 -07008955/*
8956 * FUNCTION: WDA_ProcessEnterImpsReq
8957 * Request to WDI to Enter IMPS power state.
8958 */
8959VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
8960{
8961 WDI_Status status = WDI_STATUS_SUCCESS ;
Mihir Shetea4306052014-03-25 00:02:54 +05308962 WDI_EnterImpsReqParamsType *wdiEnterImpsReqParams;
8963 tWDA_ReqParams *pWdaParams;
Sushant Kaushik7438e252015-05-01 14:55:09 +05308964 static int failcnt = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07008965 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008966 "------> %s " ,__func__);
Mihir Shetea4306052014-03-25 00:02:54 +05308967
8968
8969 wdiEnterImpsReqParams = vos_mem_malloc(sizeof(WDI_EnterImpsReqParamsType));
8970 if (NULL == wdiEnterImpsReqParams)
8971 {
8972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8973 "%s: VOS MEM Alloc Failure", __func__);
8974 VOS_ASSERT(0);
8975 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
8976 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
8977 return VOS_STATUS_E_NOMEM;
8978 }
8979
8980 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8981 if (NULL == pWdaParams)
8982 {
8983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8984 "%s: VOS MEM Alloc Failure", __func__);
8985 VOS_ASSERT(0);
8986 vos_mem_free(wdiEnterImpsReqParams);
8987 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL ,
8988 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
8989 return VOS_STATUS_E_NOMEM;
8990 }
8991
8992 wdiEnterImpsReqParams->wdiReqStatusCB = WDA_EnterImpsReqCallback;
8993 wdiEnterImpsReqParams->pUserData = pWdaParams;
8994
8995 pWdaParams->wdaWdiApiMsgParam = wdiEnterImpsReqParams;
8996 pWdaParams->wdaMsgParam = NULL;
8997 pWdaParams->pWdaContext = pWDA;
8998
8999 status = WDI_EnterImpsReq(wdiEnterImpsReqParams,
9000 (WDI_EnterImpsRspCb)WDA_EnterImpsRspCallback,
9001 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009002 if(IS_WDI_STATUS_FAILURE(status))
9003 {
Sushant Kaushik7438e252015-05-01 14:55:09 +05309004 if (! (failcnt & 0xF))
9005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9006 "Failure in Enter IMPS REQ WDI API, free all the memory " );
9007 failcnt++;
Mihir Shetea4306052014-03-25 00:02:54 +05309008 vos_mem_free(wdiEnterImpsReqParams);
9009 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009010 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009011 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009012 return CONVERT_WDI2VOS_STATUS(status) ;
9013}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309014
9015/*
9016 * FUNCTION: WDA_ExitImpsRespCallback
9017 * send Exit IMPS RSP back to PE
9018 */
9019void WDA_ExitImpsRespCallback(WDI_Status status, void* pUserData)
9020{
9021 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9022 tWDA_CbContext *pWDA;
9023
9024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9025 "<------ %s " ,__func__);
9026
9027 if (NULL == pWdaParams)
9028 {
9029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9030 "%s: pWdaParams received NULL", __func__);
9031 VOS_ASSERT(0);
9032 return;
9033 }
9034 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9035
9036 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9037 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309038 if (WDI_STATUS_SUCCESS != status)
9039 {
9040 pWDA->failureCounts.exitImpsFailureCount++;
9041 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9042 pWDA->failureCounts.exitImpsFailureCount)
9043 {
9044 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9045 "%s: Status %d fail count %d", __func__,
9046 status,
9047 pWDA->failureCounts.exitImpsFailureCount);
9048 pWDA->failureCounts.exitImpsFailureCount = 0;
9049 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9050 WLAN_LOG_INDICATOR_HOST_DRIVER,
9051 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9052 FALSE, TRUE);
9053 }
9054 }
9055 else
9056 {
9057 pWDA->failureCounts.exitImpsFailureCount = 0;
9058 }
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309059
9060 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status));
9061 return;
9062}
9063
Jeff Johnson295189b2012-06-20 16:38:30 -07009064/*
9065 * FUNCTION: WDA_ExitImpsReqCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009066 */
9067void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
9068{
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309069 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Abhishek Singh837adf22015-10-01 17:37:37 +05309070 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009072 "<------ %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309073 if(NULL == pWdaParams)
9074 {
9075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9076 "%s: pWdaParams received NULL", __func__);
9077 VOS_ASSERT(0);
9078 return;
9079 }
Abhishek Singh837adf22015-10-01 17:37:37 +05309080 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309081 if (IS_WDI_STATUS_FAILURE(status))
9082 {
9083 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9084 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309085
9086 pWDA->failureCounts.exitImpsFailureCount++;
9087 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9088 pWDA->failureCounts.exitImpsFailureCount)
9089 {
9090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9091 "%s: wdiStatus %d fail count %d", __func__,
9092 status,
9093 pWDA->failureCounts.exitImpsFailureCount);
9094 pWDA->failureCounts.exitImpsFailureCount = 0;
9095 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9096 WLAN_LOG_INDICATOR_HOST_DRIVER,
9097 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9098 FALSE, TRUE);
9099 }
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309100 if (WDI_STATUS_DEV_INTERNAL_FAILURE == status)
9101 {
9102 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9103 FL("reload wlan driver"));
9104 wpalWlanReload();
9105 }
9106 }
9107 return;
Jeff Johnson295189b2012-06-20 16:38:30 -07009108}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309109
Jeff Johnson295189b2012-06-20 16:38:30 -07009110/*
9111 * FUNCTION: WDA_ProcessExitImpsReq
9112 * Request to WDI to Exit IMPS power state.
9113 */
9114VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
9115{
9116 WDI_Status status = WDI_STATUS_SUCCESS ;
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309117 tWDA_ReqParams *pWdaParams;
9118 WDI_ExitImpsReqParamsType *wdiExitImpsReqParams;
9119
Jeff Johnson295189b2012-06-20 16:38:30 -07009120 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009121 "------> %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309122 wdiExitImpsReqParams = (WDI_ExitImpsReqParamsType *)vos_mem_malloc(
9123 sizeof(WDI_ExitImpsReqParamsType));
9124 if (NULL == wdiExitImpsReqParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009125 {
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9127 "%s: VOS MEM Alloc Failure", __func__);
9128 VOS_ASSERT(0);
9129 return VOS_STATUS_E_NOMEM;
9130 }
9131 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
9132 if(NULL == pWdaParams)
9133 {
9134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9135 "%s: VOS MEM Alloc Failure", __func__);
9136 VOS_ASSERT(0);
9137 vos_mem_free(wdiExitImpsReqParams);
9138 return VOS_STATUS_E_NOMEM;
9139 }
9140 wdiExitImpsReqParams->wdiReqStatusCB = WDA_ExitImpsReqCallback;
9141 wdiExitImpsReqParams->pUserData = pWdaParams;
9142
9143 /* Store param pointer as passed in by caller */
9144 /* store Params pass it to WDI */
9145 pWdaParams->wdaWdiApiMsgParam = wdiExitImpsReqParams;
9146 pWdaParams->pWdaContext = pWDA;
9147 pWdaParams->wdaMsgParam = wdiExitImpsReqParams;
9148 status = WDI_ExitImpsReq(wdiExitImpsReqParams,
9149 (WDI_ExitImpsRspCb)WDA_ExitImpsRespCallback,
9150 pWdaParams);
9151 if (IS_WDI_STATUS_FAILURE(status))
9152 {
9153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9154 "Failure in Exit IMPS REQ WDI API, free all the memory " );
9155 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9156 vos_mem_free(pWdaParams);
9157 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009158 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009159 return CONVERT_WDI2VOS_STATUS(status) ;
9160}
Jeff Johnson295189b2012-06-20 16:38:30 -07009161/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009162 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009163 * send Enter BMPS RSP back to PE
9164 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009165void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009166{
9167 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309168 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009169 tEnterBmpsParams *pEnterBmpsRspParams;
9170
Jeff Johnson295189b2012-06-20 16:38:30 -07009171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009172 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009173 if(NULL == pWdaParams)
9174 {
9175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009176 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009177 VOS_ASSERT(0) ;
9178 return ;
9179 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009180
9181 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309182 if (NULL == pWDA)
9183 {
9184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9185 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05309186
9187 if(pWdaParams->wdaWdiApiMsgParam)
9188 {
9189 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9190 }
9191 vos_mem_free(pWdaParams);
9192
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309193 VOS_ASSERT(0);
9194 return ;
9195 }
9196
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009197 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
9198
9199 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009200 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009201
9202 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009203 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05309204 if (eHAL_STATUS_SUCCESS != pEnterBmpsRspParams->status)
9205 {
9206 pWDA->failureCounts.enterBmpsFailureCount++;
9207 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9208 pWDA->failureCounts.enterBmpsFailureCount)
9209 {
9210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9211 "%s: wdiStatus %d fail count %d", __func__,
9212 pwdiEnterBmpsRsp->wdiStatus,
9213 pWDA->failureCounts.enterBmpsFailureCount);
9214 pWDA->failureCounts.enterBmpsFailureCount = 0;
9215 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9216 WLAN_LOG_INDICATOR_HOST_DRIVER,
9217 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
9218 FALSE, TRUE);
9219 }
9220 }
9221 else
9222 {
9223 pWDA->failureCounts.enterBmpsFailureCount = 0;
9224 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009225 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
9226
Jeff Johnson295189b2012-06-20 16:38:30 -07009227 return ;
9228}
Jeff Johnson295189b2012-06-20 16:38:30 -07009229/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009230 * FUNCTION: WDA_EnterBmpsReqCallback
9231 * Free memory and send Enter BMPS RSP back to PE.
9232 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
9233 */
9234void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
9235{
9236 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309237 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009238 tEnterBmpsParams *pEnterBmpsRspParams;
9239
9240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9241 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9242
9243 if(NULL == pWdaParams)
9244 {
9245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9246 "%s: pWdaParams received NULL", __func__);
9247 VOS_ASSERT(0);
9248 return;
9249 }
9250
9251 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309252 if (NULL == pWDA)
9253 {
9254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9255 "%s:pWDA is NULL", __func__);
9256 VOS_ASSERT(0);
9257 return ;
9258 }
9259
Yue Ma7f44bbe2013-04-12 11:47:39 -07009260 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
9261 pEnterBmpsRspParams->status = wdiStatus;
9262
9263 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9264 {
9265 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9266 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309267 pWDA->failureCounts.enterBmpsFailureCount++;
9268 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9269 pWDA->failureCounts.enterBmpsFailureCount)
9270 {
9271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9272 "%s: wdiStatus %d fail count %d", __func__,
9273 wdiStatus,
9274 pWDA->failureCounts.enterBmpsFailureCount);
9275 pWDA->failureCounts.enterBmpsFailureCount = 0;
9276 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9277 WLAN_LOG_INDICATOR_HOST_DRIVER,
9278 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
9279 FALSE, TRUE);
9280 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009281 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
9282 }
9283
9284 return;
9285}
9286/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009287 * FUNCTION: WDA_ProcessEnterBmpsReq
9288 * Request to WDI to Enter BMPS power state.
9289 */
9290VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
9291 tEnterBmpsParams *pEnterBmpsReqParams)
9292{
9293 WDI_Status status = WDI_STATUS_SUCCESS;
9294 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
9295 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009297 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009298 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
9299 {
9300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009301 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009302 VOS_ASSERT(0);
9303 return VOS_STATUS_E_FAILURE;
9304 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009305 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
9306 if (NULL == wdiEnterBmpsReqParams)
9307 {
9308 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009309 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009310 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009311 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
9312 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009313 return VOS_STATUS_E_NOMEM;
9314 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009315 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
9316 if (NULL == pWdaParams)
9317 {
9318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009319 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009320 VOS_ASSERT(0);
9321 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009322 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
9323 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009324 return VOS_STATUS_E_NOMEM;
9325 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009326 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
9327 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
9328 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
9329 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08009330 // For ESE and 11R Roaming
Jeff Johnson295189b2012-06-20 16:38:30 -07009331 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
9332 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
9333 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009334 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
9335 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009336
Jeff Johnson295189b2012-06-20 16:38:30 -07009337 /* Store param pointer as passed in by caller */
9338 /* store Params pass it to WDI */
9339 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009340 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009341 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009342 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009343 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009344 if (IS_WDI_STATUS_FAILURE(status))
9345 {
9346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9347 "Failure in Enter BMPS REQ WDI API, free all the memory" );
9348 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009349 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07009350 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009351 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009352 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009353 return CONVERT_WDI2VOS_STATUS(status);
9354}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009355
9356
9357static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
9358 WDI_Status wdiStatus,
9359 tExitBmpsParams *pExitBmpsReqParams)
9360{
9361 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
9362
9363 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
9364}
9365
9366
Jeff Johnson295189b2012-06-20 16:38:30 -07009367/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009368 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009369 * send Exit BMPS RSP back to PE
9370 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009371void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009372{
9373 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309374 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009375 tExitBmpsParams *pExitBmpsRspParams;
9376
Jeff Johnson295189b2012-06-20 16:38:30 -07009377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009378 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009379 if(NULL == pWdaParams)
9380 {
9381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009382 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009383 VOS_ASSERT(0) ;
9384 return ;
9385 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009386
9387 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309388 if (NULL == pWDA)
9389 {
9390 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9391 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05309392
9393 if(pWdaParams->wdaWdiApiMsgParam)
9394 {
9395 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9396 }
9397 vos_mem_free(pWdaParams);
9398
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309399 VOS_ASSERT(0);
9400 return ;
9401 }
9402
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009403 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
9404
9405 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009406 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009407
Jeff Johnson295189b2012-06-20 16:38:30 -07009408 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Abhishek Singh837adf22015-10-01 17:37:37 +05309409 vos_mem_free(pWdaParams);
9410
9411 if (WDI_STATUS_SUCCESS != pwdiExitBmpsRsp->wdiStatus)
9412 {
9413 pWDA->failureCounts.exitBmpsFailureCount++;
9414 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9415 pWDA->failureCounts.exitBmpsFailureCount)
9416 {
9417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9418 "%s: Status %d fail count %d", __func__,
9419 pExitBmpsRspParams->status,
9420 pWDA->failureCounts.exitBmpsFailureCount);
9421 pWDA->failureCounts.exitBmpsFailureCount = 0;
9422 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9423 WLAN_LOG_INDICATOR_HOST_DRIVER,
9424 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9425 FALSE, TRUE);
9426 }
9427 }
9428 else
9429 {
9430 pWDA->failureCounts.exitBmpsFailureCount = 0;
9431 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009432
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009433 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009434 return ;
9435}
Jeff Johnson295189b2012-06-20 16:38:30 -07009436/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009437 * FUNCTION: WDA_ExitBmpsReqCallback
9438 * Free memory and send Exit BMPS RSP back to PE.
9439 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
9440 */
9441void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
9442{
9443 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309444 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009445 tExitBmpsParams *pExitBmpsRspParams;
9446
9447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9448 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9449
9450 if(NULL == pWdaParams)
9451 {
9452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9453 "%s: pWdaParams received NULL", __func__);
9454 VOS_ASSERT(0);
9455 return;
9456 }
9457
9458 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309459 if (NULL == pWDA)
9460 {
9461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9462 "%s:pWDA is NULL", __func__);
9463 VOS_ASSERT(0);
9464 return ;
9465 }
9466
Yue Ma7f44bbe2013-04-12 11:47:39 -07009467 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
9468 pExitBmpsRspParams->status = wdiStatus;
9469
9470 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9471 {
9472 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9473 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309474 pWDA->failureCounts.exitBmpsFailureCount++;
9475 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9476 pWDA->failureCounts.exitBmpsFailureCount)
9477 {
9478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9479 "%s: wdiStatus %d fail count %d", __func__,
9480 wdiStatus,
9481 pWDA->failureCounts.exitBmpsFailureCount);
9482 pWDA->failureCounts.exitBmpsFailureCount = 0;
9483 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9484 WLAN_LOG_INDICATOR_HOST_DRIVER,
9485 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9486 FALSE, TRUE);
9487 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009488 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
9489 }
9490
9491 return;
9492}
9493/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009494 * FUNCTION: WDA_ProcessExitBmpsReq
9495 * Request to WDI to Exit BMPS power state.
9496 */
9497VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
9498 tExitBmpsParams *pExitBmpsReqParams)
9499{
9500 WDI_Status status = WDI_STATUS_SUCCESS ;
9501 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
9502 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
9503 sizeof(WDI_ExitBmpsReqParamsType)) ;
9504 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009506 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009507 if(NULL == wdiExitBmpsReqParams)
9508 {
9509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009510 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009511 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009512 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009513 return VOS_STATUS_E_NOMEM;
9514 }
9515 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9516 if(NULL == pWdaParams)
9517 {
9518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009519 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009520 VOS_ASSERT(0);
9521 vos_mem_free(wdiExitBmpsReqParams);
9522 return VOS_STATUS_E_NOMEM;
9523 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009524 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07009525
9526 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
9527
Yue Ma7f44bbe2013-04-12 11:47:39 -07009528 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
9529 wdiExitBmpsReqParams->pUserData = pWdaParams;
9530
Jeff Johnson295189b2012-06-20 16:38:30 -07009531 /* Store param pointer as passed in by caller */
9532 /* store Params pass it to WDI */
9533 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
9534 pWdaParams->pWdaContext = pWDA;
9535 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009536 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009537 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009538 if(IS_WDI_STATUS_FAILURE(status))
9539 {
9540 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9541 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009542 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9543 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009544 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009545 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009546 return CONVERT_WDI2VOS_STATUS(status) ;
9547}
Jeff Johnson295189b2012-06-20 16:38:30 -07009548/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009549 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009550 * send Enter UAPSD RSP back to PE
9551 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009552void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009553{
9554 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309555 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009556 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009558 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009559 if(NULL == pWdaParams)
9560 {
9561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009562 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009563 VOS_ASSERT(0) ;
9564 return ;
9565 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009566
9567 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309568 if (NULL == pWDA)
9569 {
9570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9571 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05309572
9573 if(pWdaParams->wdaWdiApiMsgParam)
9574 {
9575 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9576 }
9577 vos_mem_free(pWdaParams);
9578
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309579 VOS_ASSERT(0);
9580 return ;
9581 }
9582
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009583 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
9584
9585 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009586 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009587
Jeff Johnson295189b2012-06-20 16:38:30 -07009588 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9589 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009590 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009591 return ;
9592}
Jeff Johnson295189b2012-06-20 16:38:30 -07009593/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009594 * FUNCTION: WDA_EnterUapsdReqCallback
9595 * Free memory and send Enter UAPSD RSP back to PE.
9596 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
9597 */
9598void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
9599{
9600 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9601 tWDA_CbContext *pWDA;
9602 tUapsdParams *pEnterUapsdRsqParams;
9603
9604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9605 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9606
9607 if(NULL == pWdaParams)
9608 {
9609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9610 "%s: pWdaParams received NULL", __func__);
9611 VOS_ASSERT(0);
9612 return;
9613 }
9614
9615 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309616 if (NULL == pWDA)
9617 {
9618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9619 "%s:pWDA is NULL", __func__);
9620 VOS_ASSERT(0);
9621 return ;
9622 }
9623
Yue Ma7f44bbe2013-04-12 11:47:39 -07009624 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
9625 pEnterUapsdRsqParams->status = wdiStatus;
9626
9627 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9628 {
9629 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9630 vos_mem_free(pWdaParams);
9631 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
9632 }
9633
9634 return;
9635}
9636/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009637 * FUNCTION: WDA_ProcessEnterUapsdReq
9638 * Request to WDI to Enter UAPSD power state.
9639 */
9640VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
9641 tUapsdParams *pEnterUapsdReqParams)
9642{
9643 WDI_Status status = WDI_STATUS_SUCCESS ;
9644 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
9645 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
9646 sizeof(WDI_EnterUapsdReqParamsType)) ;
9647 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009649 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009650 if(NULL == wdiEnterUapsdReqParams)
9651 {
9652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009653 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009654 VOS_ASSERT(0);
9655 return VOS_STATUS_E_NOMEM;
9656 }
9657 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9658 if(NULL == pWdaParams)
9659 {
9660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009661 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009662 VOS_ASSERT(0);
9663 vos_mem_free(wdiEnterUapsdReqParams);
9664 return VOS_STATUS_E_NOMEM;
9665 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009666 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
9667 pEnterUapsdReqParams->beDeliveryEnabled;
9668 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
9669 pEnterUapsdReqParams->beTriggerEnabled;
9670 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
9671 pEnterUapsdReqParams->bkDeliveryEnabled;
9672 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
9673 pEnterUapsdReqParams->bkTriggerEnabled;
9674 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
9675 pEnterUapsdReqParams->viDeliveryEnabled;
9676 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
9677 pEnterUapsdReqParams->viTriggerEnabled;
9678 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
9679 pEnterUapsdReqParams->voDeliveryEnabled;
9680 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
9681 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07009682 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07009683
Yue Ma7f44bbe2013-04-12 11:47:39 -07009684 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
9685 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009686
Jeff Johnson295189b2012-06-20 16:38:30 -07009687 /* Store param pointer as passed in by caller */
9688 /* store Params pass it to WDI */
9689 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
9690 pWdaParams->pWdaContext = pWDA;
9691 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009692 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009693 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009694 if(IS_WDI_STATUS_FAILURE(status))
9695 {
9696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9697 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
9698 vos_mem_free(pWdaParams->wdaMsgParam) ;
9699 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9700 vos_mem_free(pWdaParams) ;
9701 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009702 return CONVERT_WDI2VOS_STATUS(status) ;
9703}
Jeff Johnson295189b2012-06-20 16:38:30 -07009704/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009705 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009706 * send Exit UAPSD RSP back to PE
9707 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009708void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009709{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009710
9711 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9712 tWDA_CbContext *pWDA;
9713 tExitUapsdParams *pExitUapsdRspParams;
9714
Jeff Johnson295189b2012-06-20 16:38:30 -07009715 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009716 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009717 if(NULL == pWdaParams)
9718 {
9719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009720 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009721 VOS_ASSERT(0);
9722 return;
9723 }
9724
9725 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9726 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
9727
9728 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009729 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009730
9731 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9732 vos_mem_free(pWdaParams) ;
9733
9734 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009735 return ;
9736}
Jeff Johnson295189b2012-06-20 16:38:30 -07009737/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009738 * FUNCTION: WDA_ExitUapsdReqCallback
9739 * Free memory and send Exit UAPSD RSP back to PE.
9740 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
9741 */
9742void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
9743{
9744 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309745 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009746 tExitUapsdParams *pExitUapsdRspParams;
9747
9748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9749 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9750
9751 if(NULL == pWdaParams)
9752 {
9753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9754 "%s: pWdaParams received NULL", __func__);
9755 VOS_ASSERT(0);
9756 return;
9757 }
9758
9759 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309760 if (NULL == pWDA)
9761 {
9762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9763 "%s:pWDA is NULL", __func__);
9764 VOS_ASSERT(0);
9765 return ;
9766 }
9767
Yue Ma7f44bbe2013-04-12 11:47:39 -07009768 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
9769 pExitUapsdRspParams->status = wdiStatus;
9770
9771 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9772 {
9773 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9774 vos_mem_free(pWdaParams);
9775 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
9776 }
9777
9778 return;
9779}
9780/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009781 * FUNCTION: WDA_ProcessExitUapsdReq
9782 * Request to WDI to Exit UAPSD power state.
9783 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009784VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
9785 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009786{
9787 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009788 tWDA_ReqParams *pWdaParams ;
9789 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
9790 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
9791 sizeof(WDI_ExitUapsdReqParamsType)) ;
9792
Jeff Johnson295189b2012-06-20 16:38:30 -07009793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009794 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009795
9796 if(NULL == wdiExitUapsdReqParams)
9797 {
9798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009799 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009800 VOS_ASSERT(0);
9801 return VOS_STATUS_E_NOMEM;
9802 }
9803 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9804 if(NULL == pWdaParams)
9805 {
9806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009807 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009808 VOS_ASSERT(0);
9809 vos_mem_free(wdiExitUapsdReqParams);
9810 return VOS_STATUS_E_NOMEM;
9811 }
9812
9813 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009814 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
9815 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009816
9817 /* Store param pointer as passed in by caller */
9818 /* store Params pass it to WDI */
9819 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
9820 pWdaParams->pWdaContext = pWDA;
9821 pWdaParams->wdaMsgParam = pExitUapsdParams;
9822
Yue Ma7f44bbe2013-04-12 11:47:39 -07009823 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009824 if(IS_WDI_STATUS_FAILURE(status))
9825 {
9826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9827 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009828 vos_mem_free(pWdaParams->wdaMsgParam) ;
9829 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9830 vos_mem_free(pWdaParams) ;
9831
Jeff Johnson295189b2012-06-20 16:38:30 -07009832 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009833 return CONVERT_WDI2VOS_STATUS(status) ;
9834}
9835
Jeff Johnson295189b2012-06-20 16:38:30 -07009836/*
9837 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
9838 *
9839 */
9840void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
9841{
9842 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009844 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009845 if(NULL == pWdaParams)
9846 {
9847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009848 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009849 VOS_ASSERT(0) ;
9850 return ;
9851 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009852 if( pWdaParams != NULL )
9853 {
9854 if( pWdaParams->wdaWdiApiMsgParam != NULL )
9855 {
9856 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9857 }
9858 if( pWdaParams->wdaMsgParam != NULL )
9859 {
9860 vos_mem_free(pWdaParams->wdaMsgParam) ;
9861 }
9862 vos_mem_free(pWdaParams) ;
9863 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009864 return ;
9865}
Jeff Johnson295189b2012-06-20 16:38:30 -07009866/*
9867 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
9868 * Request to WDI to set the power save params at start.
9869 */
9870VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
9871 tSirPowerSaveCfg *pPowerSaveCfg)
9872{
9873 WDI_Status status = WDI_STATUS_SUCCESS ;
9874 tHalCfg *tlvStruct = NULL ;
9875 tANI_U8 *tlvStructStart = NULL ;
9876 v_PVOID_t *configParam;
9877 tANI_U32 configParamSize;
9878 tANI_U32 *configDataValue;
9879 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
9880 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009882 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009883 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
9884 {
9885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009886 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009887 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009888 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009889 return VOS_STATUS_E_FAILURE;
9890 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009891 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
9892 if (NULL == wdiPowerSaveCfg)
9893 {
9894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009895 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009896 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009897 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009898 return VOS_STATUS_E_NOMEM;
9899 }
9900 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9901 if(NULL == pWdaParams)
9902 {
9903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009904 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009905 VOS_ASSERT(0);
9906 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009907 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009908 return VOS_STATUS_E_NOMEM;
9909 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009910 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
9911 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07009912 if(NULL == configParam)
9913 {
9914 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08009915 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009916 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07009917 vos_mem_free(pWdaParams);
9918 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009919 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009920 return VOS_STATUS_E_NOMEM;
9921 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009922 vos_mem_set(configParam, configParamSize, 0);
9923 wdiPowerSaveCfg->pConfigBuffer = configParam;
9924 tlvStruct = (tHalCfg *)configParam;
9925 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009926 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
9927 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
9928 tlvStruct->length = sizeof(tANI_U32);
9929 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9930 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07009931 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9932 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009933 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
9934 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
9935 tlvStruct->length = sizeof(tANI_U32);
9936 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9937 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07009938 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9939 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009940 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
9941 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
9942 tlvStruct->length = sizeof(tANI_U32);
9943 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9944 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07009945 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9946 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009947 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
9948 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
9949 tlvStruct->length = sizeof(tANI_U32);
9950 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9951 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
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_MAX_PS_POLL */
9955 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
9956 tlvStruct->length = sizeof(tANI_U32);
9957 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9958 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
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_MIN_RSSI_THRESHOLD */
9962 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
9963 tlvStruct->length = sizeof(tANI_U32);
9964 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9965 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
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_NTH_BEACON_FILTER */
9969 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
9970 tlvStruct->length = sizeof(tANI_U32);
9971 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9972 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
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_ENABLE_BCN_EARLY_TERM */
9976 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
9977 tlvStruct->length = sizeof(tANI_U32);
9978 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9979 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
9980 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9981 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009982 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
9983 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
9984 tlvStruct->length = sizeof(tANI_U32);
9985 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9986 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
9987 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9988 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009989 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
9990 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
9991 tlvStruct->length = sizeof(tANI_U32);
9992 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9993 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
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_RSSI_FILTER_PERIOD */
9997 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
9998 tlvStruct->length = sizeof(tANI_U32);
9999 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10000 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070010001 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10002 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010003 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010004 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010005 /* store Params pass it to WDI */
10006 pWdaParams->wdaMsgParam = configParam;
10007 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
10008 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070010009 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
10010 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010011 if(IS_WDI_STATUS_FAILURE(status))
10012 {
10013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10014 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
10015 vos_mem_free(pWdaParams->wdaMsgParam);
10016 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10017 vos_mem_free(pWdaParams);
10018 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010019 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -070010020 return CONVERT_WDI2VOS_STATUS(status);
10021}
Jeff Johnson295189b2012-06-20 16:38:30 -070010022/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010023 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010024 *
10025 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010026void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010027{
Yue Ma7f44bbe2013-04-12 11:47:39 -070010028 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10029
Jeff Johnson295189b2012-06-20 16:38:30 -070010030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010031 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070010032
10033 if(NULL == pWdaParams)
10034 {
10035 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10036 "%s: pWdaParams received NULL", __func__);
10037 VOS_ASSERT(0);
10038 return ;
10039 }
10040
10041 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -070010042 vos_mem_free(pWdaParams);
10043
Jeff Johnson295189b2012-06-20 16:38:30 -070010044 return ;
10045}
Jeff Johnson295189b2012-06-20 16:38:30 -070010046/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010047 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
10048 * Free memory.
10049 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
10050 */
10051void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
10052{
10053 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10054
10055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10056 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10057
10058 if(NULL == pWdaParams)
10059 {
10060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10061 "%s: pWdaParams received NULL", __func__);
10062 VOS_ASSERT(0);
10063 return;
10064 }
10065
10066 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10067 {
10068 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10069 vos_mem_free(pWdaParams);
10070 }
10071
10072 return;
10073}
10074/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010075 * FUNCTION: WDA_SetUapsdAcParamsReq
10076 * Request to WDI to set the UAPSD params for an ac (sta mode).
10077 */
10078VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
10079 tUapsdInfo *pUapsdInfo)
10080{
10081 WDI_Status status = WDI_STATUS_SUCCESS;
10082 tWDA_CbContext *pWDA = NULL ;
10083 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
10084 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
10085 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
10086 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010088 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010089 if(NULL == wdiUapsdParams)
10090 {
10091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010092 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010093 VOS_ASSERT(0);
10094 return VOS_STATUS_E_NOMEM;
10095 }
10096 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10097 if(NULL == pWdaParams)
10098 {
10099 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010100 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010101 VOS_ASSERT(0);
10102 vos_mem_free(wdiUapsdParams);
10103 return VOS_STATUS_E_NOMEM;
10104 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010105 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
10106 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
10107 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
10108 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
10109 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
10110 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010111 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
10112 wdiUapsdParams->pUserData = pWdaParams;
10113
Jeff Johnson295189b2012-06-20 16:38:30 -070010114 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -070010115 pWdaParams->pWdaContext = pWDA;
10116 /* Store param pointer as passed in by caller */
10117 pWdaParams->wdaMsgParam = pUapsdInfo;
10118 /* store Params pass it to WDI */
10119 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010120 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010121 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070010122 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010123 if(IS_WDI_STATUS_FAILURE(status))
10124 {
10125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10126 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
10127 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10128 vos_mem_free(pWdaParams);
10129 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010130 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
10131 return VOS_STATUS_SUCCESS;
10132 else
10133 return VOS_STATUS_E_FAILURE;
10134
Jeff Johnson295189b2012-06-20 16:38:30 -070010135}
10136/*
10137 * FUNCTION: WDA_ClearUapsdAcParamsReq
10138 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
10139 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
10140 * and again enter the UPASD with the modified params. Hence the disable
10141 * function was kept empty.
10142 *
10143 */
10144VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
10145{
10146 /* do nothing */
10147 return VOS_STATUS_SUCCESS;
10148}
Jeff Johnson295189b2012-06-20 16:38:30 -070010149/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010150 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010151 *
10152 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010153void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010154{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010155 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10156
Jeff Johnson295189b2012-06-20 16:38:30 -070010157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010158 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010159
10160 if(NULL == pWdaParams)
10161 {
10162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010163 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010164 VOS_ASSERT(0) ;
10165 return ;
10166 }
10167
10168 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10169 vos_mem_free(pWdaParams->wdaMsgParam);
10170 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010171
Jeff Johnson295189b2012-06-20 16:38:30 -070010172 //print a msg, nothing else to do
10173 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010174 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010175 return ;
10176}
Jeff Johnson295189b2012-06-20 16:38:30 -070010177/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010178 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
10179 * Free memory.
10180 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
10181 */
10182void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
10183{
10184 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10185
10186 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10187 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10188
10189 if(NULL == pWdaParams)
10190 {
10191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10192 "%s: pWdaParams received NULL", __func__);
10193 VOS_ASSERT(0);
10194 return;
10195 }
10196
10197 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10198 {
10199 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10200 vos_mem_free(pWdaParams->wdaMsgParam);
10201 vos_mem_free(pWdaParams);
10202 }
10203
10204 return;
10205}
10206/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010207 * FUNCTION: WDA_UpdateUapsdParamsReq
10208 * Request to WDI to update UAPSD params (in softAP mode) for a station.
10209 */
10210VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
10211 tUpdateUapsdParams* pUpdateUapsdInfo)
10212{
10213 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010214 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010215 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
10216 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
10217 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010218 tWDA_ReqParams *pWdaParams = NULL;
10219
Jeff Johnson295189b2012-06-20 16:38:30 -070010220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010221 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010222 if(NULL == wdiUpdateUapsdParams)
10223 {
10224 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010225 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010226 VOS_ASSERT(0);
10227 return VOS_STATUS_E_NOMEM;
10228 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010229 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
10230 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
10231 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010232 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
10233 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010234
10235 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10236 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010237 {
10238 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010239 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010240 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010241 vos_mem_free(pUpdateUapsdInfo);
10242 vos_mem_free(wdiUpdateUapsdParams);
10243 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -070010244 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010245 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010246 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -070010247 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010248 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
10249 pWdaParams->pWdaContext = pWDA;
10250
Jeff Johnson43971f52012-07-17 12:26:56 -070010251 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010252 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010253 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010254
Jeff Johnson43971f52012-07-17 12:26:56 -070010255 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010256 {
10257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10258 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010259 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
10260 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10261 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070010262 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010263 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010264 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010265}
Jeff Johnson295189b2012-06-20 16:38:30 -070010266/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010267 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010268 *
10269 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010270void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010271{
10272 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010274 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010275 if(WDI_STATUS_SUCCESS != wdiStatus)
10276 {
10277 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080010278 "%s: RXP config filter failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070010279 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010280 if(NULL == pWdaParams)
10281 {
10282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010283 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010284 VOS_ASSERT(0) ;
10285 return ;
10286 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010287 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10288 vos_mem_free(pWdaParams->wdaMsgParam);
10289 vos_mem_free(pWdaParams);
10290 return ;
10291}
Jeff Johnson295189b2012-06-20 16:38:30 -070010292/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010293 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
10294 * Free memory.
10295 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
10296 */
10297void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
10298{
10299 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10300
10301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10302 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10303
10304 if(NULL == pWdaParams)
10305 {
10306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10307 "%s: pWdaParams received NULL", __func__);
10308 VOS_ASSERT(0);
10309 return;
10310 }
10311
10312 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10313 {
10314 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10315 vos_mem_free(pWdaParams->wdaMsgParam);
10316 vos_mem_free(pWdaParams);
10317 }
10318
10319 return;
10320}
10321/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010322 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
10323 *
10324 */
10325VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
10326 tSirWlanSetRxpFilters *pWlanSuspendParam)
10327{
Jeff Johnson295189b2012-06-20 16:38:30 -070010328 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010329 WDI_Status wstatus;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +053010330 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010331 tWDA_ReqParams *pWdaParams ;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +053010332 /* Sanity Check
10333 * This is very unlikely and add assert to collect more info next time */
10334 if(NULL == pWlanSuspendParam)
10335 {
10336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10337 "%s: pWlanSuspendParam received NULL", __func__);
10338 VOS_ASSERT(0) ;
10339 return VOS_STATUS_E_FAULT;
10340 }
10341 wdiRxpFilterParams = (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
10342 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010344 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010345 if(NULL == wdiRxpFilterParams)
10346 {
10347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010348 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010349 VOS_ASSERT(0);
10350 vos_mem_free(pWlanSuspendParam);
10351 return VOS_STATUS_E_NOMEM;
10352 }
10353 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10354 if(NULL == pWdaParams)
10355 {
10356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010357 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010358 VOS_ASSERT(0);
10359 vos_mem_free(wdiRxpFilterParams);
10360 vos_mem_free(pWlanSuspendParam);
10361 return VOS_STATUS_E_NOMEM;
10362 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010363 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
10364 pWlanSuspendParam->setMcstBcstFilter;
10365 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
10366 pWlanSuspendParam->configuredMcstBcstFilterSetting;
10367
Yue Ma7f44bbe2013-04-12 11:47:39 -070010368 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
10369 wdiRxpFilterParams->pUserData = pWdaParams;
10370
Jeff Johnson295189b2012-06-20 16:38:30 -070010371 pWdaParams->pWdaContext = pWDA;
10372 pWdaParams->wdaMsgParam = pWlanSuspendParam;
10373 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010374 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010375 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070010376 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010377 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010378 {
10379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10380 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010381 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010382 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10383 vos_mem_free(pWdaParams->wdaMsgParam);
10384 vos_mem_free(pWdaParams);
10385 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010386 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010387}
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010388
10389/*
Siddharth Bhal64246172015-02-27 01:04:37 +053010390 * FUNCTION: WDA_ProcessGetFrameLogReq
10391 * Request to WDI to get the Frame Log.
10392 */
10393VOS_STATUS WDA_ProcessGetFrameLogReq(tWDA_CbContext *pWDA,
10394 tAniGetFrameLogReq *pGetFrameLog)
10395{
10396 VOS_STATUS status = VOS_STATUS_SUCCESS;
10397 WDI_Status wstatus;
10398 WDI_GetFrameLogReqInfoType *wdiGetFrameLogInfo;
10399 tWDA_ReqParams *pWdaParams ;
10400
10401 /* Sanity Check*/
10402 if(NULL == pGetFrameLog)
10403 {
10404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010405 "%s: pFWLoggingInitParam received NULL", __func__);
Siddharth Bhal64246172015-02-27 01:04:37 +053010406 VOS_ASSERT(0) ;
10407 return VOS_STATUS_E_FAULT;
10408 }
10409
10410 wdiGetFrameLogInfo = (WDI_GetFrameLogReqInfoType *)vos_mem_malloc(
10411 sizeof(WDI_GetFrameLogReqInfoType));
10412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10413 "------> %s " ,__func__);
10414
10415 if(NULL == wdiGetFrameLogInfo)
10416 {
10417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10418 "%s: VOS MEM Alloc Failure", __func__);
10419 VOS_ASSERT(0);
10420 vos_mem_free(pGetFrameLog);
10421 return VOS_STATUS_E_NOMEM;
10422 }
10423
10424 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
10425 if(NULL == pWdaParams)
10426 {
10427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10428 "%s: VOS MEM Alloc Failure", __func__);
10429 VOS_ASSERT(0);
10430 vos_mem_free(wdiGetFrameLogInfo);
10431 vos_mem_free(pGetFrameLog);
10432 return VOS_STATUS_E_NOMEM;
10433 }
10434
10435 wdiGetFrameLogInfo->flags = pGetFrameLog->getFrameLogCmdFlag;
10436
10437 pWdaParams->pWdaContext = pWDA;
10438 pWdaParams->wdaMsgParam = pGetFrameLog;
10439 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGetFrameLogInfo;
10440
10441 wstatus = WDI_GetFrameLogReq(wdiGetFrameLogInfo,
10442 (WDI_GetFrameLogRspCb)WDA_GetFrameLogRspCallback,
10443 pWdaParams);
10444 if(IS_WDI_STATUS_FAILURE(wstatus))
10445 {
10446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10447 "Failure in get frame log REQ WDI API, free all the memory" );
10448 status = CONVERT_WDI2VOS_STATUS(wstatus);
10449 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10450 vos_mem_free(pWdaParams->wdaMsgParam);
10451 vos_mem_free(pWdaParams);
10452 }
10453 return status;
10454}
10455
Sachin Ahuja715aafc2015-07-21 23:35:10 +053010456
10457/*
10458 * FUNCTION: WDA_FatalEventLogsRspCallback
10459 * recieves Flush Logs response from FW
10460 */
10461
10462void WDA_FatalEventLogsRspCallback(WDI_FatalEventLogsRspParamType* wdiRsp,
10463 void* pUserData)
10464{
10465 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10466
10467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10468 "<------ %s,wdiStatus:%d " ,
10469 __func__, wdiRsp->wdiStatus);
10470 if(NULL == pWdaParams)
10471 {
10472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10473 "%s: pWdaParams received NULL", __func__);
10474 VOS_ASSERT(0);
10475 return ;
10476 }
10477
10478 if(NULL == pWdaParams->wdaMsgParam)
10479 {
10480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10481 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
10482 VOS_ASSERT(0);
10483 vos_mem_free(pWdaParams);
10484 return ;
10485 }
10486
10487 if(IS_WDI_STATUS_FAILURE(wdiRsp->wdiStatus))
10488 {
10489 /*
10490 * If it is failure, it means JOb is already posted by FW
10491 * for logging, so for failure scenario also we will get the
10492 * done indication
10493 */
10494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10495 "%s: Fatal Event Rsp Failure,wdiStatus : %d ",
10496 __func__, wdiRsp->wdiStatus);
10497 }
10498
10499 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10500 vos_mem_free(pWdaParams->wdaMsgParam);
10501 vos_mem_free(pWdaParams);
10502
10503 return;
10504
10505}
10506
10507/*
10508 * FUNCTION: WDA_ProcessFatalEventLogsReq
10509 * Request to WDI to send the fatal Event Logs Req.
10510 */
10511
10512VOS_STATUS WDA_ProcessFatalEventLogsReq(tWDA_CbContext *pWDA,
10513 tSirFatalEventLogsReqParam *pFatalEventLogsReqParam)
10514{
10515 VOS_STATUS status = VOS_STATUS_SUCCESS;
10516 WDI_FatalEventLogsReqInfoType *wdiFatalEventLogsReqInfo;
10517 tWDA_ReqParams *pWdaParams ;
10518 WDI_Status wstatus;
10519
10520
10521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10522 "------> %s " ,__func__);
10523 if (NULL == pFatalEventLogsReqParam)
10524 {
10525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10526 "%s: pMgmtLoggingInitParam received NULL", __func__);
10527 VOS_ASSERT(0) ;
10528 return VOS_STATUS_E_FAULT;
10529 }
10530 wdiFatalEventLogsReqInfo = (WDI_FatalEventLogsReqInfoType *)vos_mem_malloc(
10531 sizeof(WDI_FatalEventLogsReqInfoType));
10532 if(NULL == wdiFatalEventLogsReqInfo)
10533 {
10534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10535 "%s: VOS MEM Alloc Failure", __func__);
10536 VOS_ASSERT(0);
10537 vos_mem_free(pFatalEventLogsReqParam);
10538 return VOS_STATUS_E_NOMEM;
10539 }
10540 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10541 if(NULL == pWdaParams)
10542 {
10543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10544 "%s: VOS MEM Alloc Failure", __func__);
10545 VOS_ASSERT(0);
10546 vos_mem_free(wdiFatalEventLogsReqInfo);
10547 vos_mem_free(pFatalEventLogsReqParam);
10548 return VOS_STATUS_E_NOMEM;
10549 }
10550 wdiFatalEventLogsReqInfo->reason_code = pFatalEventLogsReqParam->reason_code;
10551 pWdaParams->pWdaContext = pWDA;
10552 pWdaParams->wdaMsgParam = pFatalEventLogsReqParam;
10553 pWdaParams->wdaWdiApiMsgParam = (void *)wdiFatalEventLogsReqInfo;
10554
10555 wstatus = WDI_FatalEventLogsReq(wdiFatalEventLogsReqInfo,
10556 (WDI_FatalEventLogsRspCb)WDA_FatalEventLogsRspCallback,
10557 pWdaParams);
10558 if(IS_WDI_STATUS_FAILURE(wstatus))
10559 {
10560 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10561 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
10562 status = CONVERT_WDI2VOS_STATUS(wstatus);
10563 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10564 vos_mem_free(pWdaParams->wdaMsgParam);
10565 vos_mem_free(pWdaParams);
10566 }
10567
10568 return status;
10569
10570}
10571
Siddharth Bhal64246172015-02-27 01:04:37 +053010572/*
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010573 * FUNCTION: WDA_ProcessFWLoggingInitReq
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010574 *
10575 */
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010576VOS_STATUS WDA_ProcessFWLoggingInitReq(tWDA_CbContext *pWDA,
10577 tSirFWLoggingInitParam *pFWLoggingInitParam)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010578{
10579 VOS_STATUS status = VOS_STATUS_SUCCESS;
10580 WDI_Status wstatus;
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010581 WDI_FWLoggingInitReqInfoType *wdiFWLoggingInitInfo;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010582 tWDA_ReqParams *pWdaParams ;
10583
10584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10585 "------> %s " ,__func__);
10586
10587 /* Sanity Check*/
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010588 if(NULL == pFWLoggingInitParam)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010589 {
10590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010591 "%s: pFWLoggingInitParam received NULL", __func__);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010592 VOS_ASSERT(0) ;
10593 return VOS_STATUS_E_FAULT;
10594 }
10595
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010596 wdiFWLoggingInitInfo = (WDI_FWLoggingInitReqInfoType *)vos_mem_malloc(
10597 sizeof(WDI_FWLoggingInitReqInfoType));
10598 if(NULL == wdiFWLoggingInitInfo)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010599 {
10600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10601 "%s: VOS MEM Alloc Failure", __func__);
10602 VOS_ASSERT(0);
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010603 vos_mem_free(pFWLoggingInitParam);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010604 return VOS_STATUS_E_NOMEM;
10605 }
10606
10607 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10608 if(NULL == pWdaParams)
10609 {
10610 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10611 "%s: VOS MEM Alloc Failure", __func__);
10612 VOS_ASSERT(0);
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010613 vos_mem_free(wdiFWLoggingInitInfo);
10614 vos_mem_free(pFWLoggingInitParam);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010615 return VOS_STATUS_E_NOMEM;
10616 }
10617
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010618 wdiFWLoggingInitInfo->enableFlag = pFWLoggingInitParam->enableFlag;
10619 wdiFWLoggingInitInfo->frameType = pFWLoggingInitParam->frameType;
10620 wdiFWLoggingInitInfo->frameSize = pFWLoggingInitParam->frameSize;
10621 wdiFWLoggingInitInfo->bufferMode = pFWLoggingInitParam->bufferMode;
10622 wdiFWLoggingInitInfo->continuousFrameLogging =
10623 pFWLoggingInitParam->continuousFrameLogging;
10624 wdiFWLoggingInitInfo->minLogBufferSize=
10625 pFWLoggingInitParam->minLogBufferSize;
10626 wdiFWLoggingInitInfo->maxLogBufferSize=
10627 pFWLoggingInitParam->maxLogBufferSize;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010628
10629 pWdaParams->pWdaContext = pWDA;
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010630 pWdaParams->wdaMsgParam = pFWLoggingInitParam;
10631 pWdaParams->wdaWdiApiMsgParam = (void *)wdiFWLoggingInitInfo;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010632
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010633 wstatus = WDI_FWLoggingInitReq(wdiFWLoggingInitInfo,
10634 (WDI_FWLoggingInitRspCb)WDA_FWLoggingInitRspCallback,
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010635 pWdaParams);
10636 if(IS_WDI_STATUS_FAILURE(wstatus))
10637 {
10638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10639 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
10640 status = CONVERT_WDI2VOS_STATUS(wstatus);
10641 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10642 vos_mem_free(pWdaParams->wdaMsgParam);
10643 vos_mem_free(pWdaParams);
10644 }
10645
10646 return status;
10647}
10648
Jeff Johnson295189b2012-06-20 16:38:30 -070010649/*
Gupta, Kapil7c34b322015-09-30 13:12:35 +053010650 * FUNCTION: WDA_ProcessStartRssiMonitorReq
10651 *
10652 */
10653VOS_STATUS WDA_ProcessStartRssiMonitorReq(tWDA_CbContext *pWDA,
10654 tSirRssiMonitorReq *pRssiMonitorReqParam)
10655{
10656 VOS_STATUS status = VOS_STATUS_SUCCESS;
10657 WDI_Status wstatus;
10658 WDI_RssiMonitorReqInfoType *wdiRssiMonitorInfo;
10659 tWDA_ReqParams *pWdaParams ;
10660
10661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10662 "------> %s " ,__func__);
10663
10664 /* Sanity Check*/
10665 if(NULL == pRssiMonitorReqParam)
10666 {
10667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10668 "%s: pRssiMonitorReqParam received NULL", __func__);
10669 VOS_ASSERT(0) ;
10670 return VOS_STATUS_E_FAULT;
10671 }
10672
10673 wdiRssiMonitorInfo = (WDI_RssiMonitorReqInfoType *)vos_mem_malloc(
10674 sizeof(WDI_RssiMonitorReqInfoType));
10675 if(NULL == wdiRssiMonitorInfo)
10676 {
10677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10678 "%s: VOS MEM Alloc Failure", __func__);
10679 VOS_ASSERT(0);
10680 vos_mem_free(pRssiMonitorReqParam);
10681 return VOS_STATUS_E_NOMEM;
10682 }
10683
10684 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10685 if(NULL == pWdaParams)
10686 {
10687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10688 "%s: VOS MEM Alloc Failure", __func__);
10689 VOS_ASSERT(0);
10690 vos_mem_free(wdiRssiMonitorInfo);
10691 vos_mem_free(pRssiMonitorReqParam);
10692 return VOS_STATUS_E_NOMEM;
10693 }
10694
10695 wdiRssiMonitorInfo->requestId = pRssiMonitorReqParam->requestId;
10696 wdiRssiMonitorInfo->minRssi = pRssiMonitorReqParam->minRssi;
10697 wdiRssiMonitorInfo->maxRssi = pRssiMonitorReqParam->maxRssi;
10698 vos_mem_copy(wdiRssiMonitorInfo->currentBssId,
10699 &(pRssiMonitorReqParam->currentBssId), sizeof(tSirMacAddr));
10700
10701 pWdaParams->pWdaContext = pWDA;
10702 pWdaParams->wdaMsgParam = pRssiMonitorReqParam;
10703 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRssiMonitorInfo;
10704
10705 wstatus = WDI_StartRssiMonitorReq(wdiRssiMonitorInfo,
10706 (WDI_RssiMonitorStartRspCb)WDA_RssiMonitorStartRspCallback,
10707 pWdaParams);
10708 if(IS_WDI_STATUS_FAILURE(wstatus))
10709 {
10710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10711 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
10712 status = CONVERT_WDI2VOS_STATUS(wstatus);
10713 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10714 vos_mem_free(pWdaParams->wdaMsgParam);
10715 vos_mem_free(pWdaParams);
10716 }
10717
10718 return status;
10719}
10720
10721/*
10722 * FUNCTION: WDA_ProcessStopRssiMonitorReq
10723 *
10724 */
10725VOS_STATUS WDA_ProcessStopRssiMonitorReq(tWDA_CbContext *pWDA,
10726 tSirRssiMonitorReq *pRssiMonitorReqParam)
10727{
10728 VOS_STATUS status = VOS_STATUS_SUCCESS;
10729 WDI_Status wstatus;
10730 WDI_RssiMonitorReqInfoType *wdiRssiMonitorInfo;
10731 tWDA_ReqParams *pWdaParams ;
10732
10733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10734 "------> %s " ,__func__);
10735
10736 /* Sanity Check*/
10737 if(NULL == pRssiMonitorReqParam)
10738 {
10739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10740 "%s: pRssiMonitorReqParam received NULL", __func__);
10741 VOS_ASSERT(0) ;
10742 return VOS_STATUS_E_FAULT;
10743 }
10744
10745 wdiRssiMonitorInfo = (WDI_RssiMonitorReqInfoType *)vos_mem_malloc(
10746 sizeof(WDI_RssiMonitorReqInfoType));
10747 if(NULL == wdiRssiMonitorInfo)
10748 {
10749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10750 "%s: VOS MEM Alloc Failure", __func__);
10751 VOS_ASSERT(0);
10752 vos_mem_free(pRssiMonitorReqParam);
10753 return VOS_STATUS_E_NOMEM;
10754 }
10755
10756 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10757 if(NULL == pWdaParams)
10758 {
10759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10760 "%s: VOS MEM Alloc Failure", __func__);
10761 VOS_ASSERT(0);
10762 vos_mem_free(wdiRssiMonitorInfo);
10763 vos_mem_free(pRssiMonitorReqParam);
10764 return VOS_STATUS_E_NOMEM;
10765 }
10766
10767 wdiRssiMonitorInfo->requestId = pRssiMonitorReqParam->requestId;
10768 vos_mem_copy(wdiRssiMonitorInfo->currentBssId,
10769 &(pRssiMonitorReqParam->currentBssId), sizeof(tSirMacAddr));
10770
10771 pWdaParams->pWdaContext = pWDA;
10772 pWdaParams->wdaMsgParam = pRssiMonitorReqParam;
10773 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRssiMonitorInfo;
10774
10775 wstatus = WDI_StopRssiMonitorReq(wdiRssiMonitorInfo,
10776 (WDI_RssiMonitorStopRspCb)WDA_RssiMonitorStopRspCallback,
10777 pWdaParams);
10778 if(IS_WDI_STATUS_FAILURE(wstatus))
10779 {
10780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10781 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
10782 status = CONVERT_WDI2VOS_STATUS(wstatus);
10783 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10784 vos_mem_free(pWdaParams->wdaMsgParam);
10785 vos_mem_free(pWdaParams);
10786 }
10787
10788 return status;
10789}
10790
10791
10792/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010793 * FUNCTION: WDA_WdiIndicationCallback
10794 *
10795 */
10796void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
10797 void* pUserData)
10798{
10799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010800 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010801}
Jeff Johnson295189b2012-06-20 16:38:30 -070010802/*
10803 * FUNCTION: WDA_ProcessWlanSuspendInd
10804 *
10805 */
10806VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
10807 tSirWlanSuspendParam *pWlanSuspendParam)
10808{
10809 WDI_Status wdiStatus;
10810 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010812 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010813 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
10814 pWlanSuspendParam->configuredMcstBcstFilterSetting;
10815 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
10816 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010817 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -070010818 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
10819 if(WDI_STATUS_PENDING == wdiStatus)
10820 {
10821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010822 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070010823 }
10824 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
10825 {
10826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010827 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070010828 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010829 vos_mem_free(pWlanSuspendParam);
10830 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
10831}
10832
Chet Lanctot186b5732013-03-18 10:26:30 -070010833#ifdef WLAN_FEATURE_11W
10834/*
10835 * FUNCTION: WDA_ProcessExcludeUnecryptInd
10836 *
10837 */
10838VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
10839 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
10840{
10841 WDI_Status wdiStatus;
10842 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
10843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10844 "------> %s ", __func__);
10845
10846 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
10847 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
10848 sizeof(tSirMacAddr));
10849
10850 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
10851 wdiExclUnencryptParams.pUserData = pWDA;
10852
10853 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
10854 if(WDI_STATUS_PENDING == wdiStatus)
10855 {
10856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10857 "Pending received for %s:%d ", __func__, __LINE__ );
10858 }
10859 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
10860 {
10861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10862 "Failure in %s:%d ", __func__, __LINE__ );
10863 }
10864 vos_mem_free(pExclUnencryptParam);
10865 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
10866}
10867#endif
10868
Jeff Johnson295189b2012-06-20 16:38:30 -070010869/*
10870 * FUNCTION: WDA_ProcessWlanResumeCallback
10871 *
10872 */
10873void WDA_ProcessWlanResumeCallback(
10874 WDI_SuspendResumeRspParamsType *resumeRspParams,
10875 void* pUserData)
10876{
10877 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010879 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010880 if(NULL == pWdaParams)
10881 {
10882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010883 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010884 VOS_ASSERT(0) ;
10885 return ;
10886 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010887 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
10888 {
10889 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080010890 "%s: Process Wlan Resume failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070010891 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010892 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10893 vos_mem_free(pWdaParams->wdaMsgParam);
10894 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010895 return ;
10896}
Jeff Johnson295189b2012-06-20 16:38:30 -070010897/*
10898 * FUNCTION: WDA_ProcessWlanResumeReq
10899 *
10900 */
10901VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
10902 tSirWlanResumeParam *pWlanResumeParam)
10903{
10904 WDI_Status wdiStatus;
10905 WDI_ResumeParamsType *wdiResumeParams =
10906 (WDI_ResumeParamsType *)vos_mem_malloc(
10907 sizeof(WDI_ResumeParamsType) ) ;
10908 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010910 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010911 if(NULL == wdiResumeParams)
10912 {
10913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010914 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010915 VOS_ASSERT(0);
10916 return VOS_STATUS_E_NOMEM;
10917 }
10918 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10919 if(NULL == pWdaParams)
10920 {
10921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010922 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010923 VOS_ASSERT(0);
10924 vos_mem_free(wdiResumeParams);
10925 return VOS_STATUS_E_NOMEM;
10926 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010927 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
10928 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -070010930 wdiResumeParams->wdiReqStatusCB = NULL;
10931 pWdaParams->wdaMsgParam = pWlanResumeParam;
10932 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
10933 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070010934 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
10935 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
10936 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010937 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10938 {
10939 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10940 "Failure in Host Resume REQ WDI API, free all the memory " );
10941 VOS_ASSERT(0);
10942 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10943 vos_mem_free(pWdaParams->wdaMsgParam);
10944 vos_mem_free(pWdaParams);
10945 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010946 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
10947}
10948
Jeff Johnson295189b2012-06-20 16:38:30 -070010949/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010950 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010951 *
10952 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010953void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010954{
10955 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010957 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010958 if(NULL == pWdaParams)
10959 {
10960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010961 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010962 VOS_ASSERT(0) ;
10963 return ;
10964 }
10965
10966 vos_mem_free(pWdaParams->wdaMsgParam) ;
10967 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10968 vos_mem_free(pWdaParams) ;
10969 /*
10970 * No respone required for SetBeaconFilter req so just free the request
10971 * param here
10972 */
10973
Jeff Johnson295189b2012-06-20 16:38:30 -070010974 return ;
10975}
Jeff Johnson295189b2012-06-20 16:38:30 -070010976/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010977 * FUNCTION: WDA_SetBeaconFilterReqCallback
10978 * Free memory.
10979 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
10980 */
10981void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
10982{
10983 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10984
10985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10986 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10987
10988 if(NULL == pWdaParams)
10989 {
10990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10991 "%s: pWdaParams received NULL", __func__);
10992 VOS_ASSERT(0);
10993 return;
10994 }
10995
10996 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10997 {
10998 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10999 vos_mem_free(pWdaParams->wdaMsgParam);
11000 vos_mem_free(pWdaParams);
11001 }
11002
11003 return;
11004}
11005/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011006 * FUNCTION: WDA_SetBeaconFilterReq
11007 * Request to WDI to send the beacon filtering related information.
11008 */
11009VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
11010 tBeaconFilterMsg* pBeaconFilterInfo)
11011{
11012 WDI_Status status = WDI_STATUS_SUCCESS;
11013 tANI_U8 *dstPtr, *srcPtr;
11014 tANI_U8 filterLength;
11015 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
11016 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
11017 sizeof(WDI_BeaconFilterReqParamsType) ) ;
11018 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011019 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011020 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011021 if(NULL == wdiBeaconFilterInfo)
11022 {
11023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011024 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011025 VOS_ASSERT(0);
11026 return VOS_STATUS_E_NOMEM;
11027 }
11028 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11029 if(NULL == pWdaParams)
11030 {
11031 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011032 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011033 VOS_ASSERT(0);
11034 vos_mem_free(wdiBeaconFilterInfo);
11035 return VOS_STATUS_E_NOMEM;
11036 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011037 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
11038 pBeaconFilterInfo->beaconInterval;
11039 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
11040 pBeaconFilterInfo->capabilityInfo;
11041 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
11042 pBeaconFilterInfo->capabilityMask;
11043 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -070011044
11045 //Fill the BssIdx
11046 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
11047
Jeff Johnson295189b2012-06-20 16:38:30 -070011048 //Fill structure with info contained in the beaconFilterTable
11049 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
11050 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
11051 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
11052 if(WDI_BEACON_FILTER_LEN < filterLength)
11053 {
11054 filterLength = WDI_BEACON_FILTER_LEN;
11055 }
11056 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -070011057 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
11058 wdiBeaconFilterInfo->pUserData = pWdaParams;
11059
Jeff Johnson295189b2012-06-20 16:38:30 -070011060 /* Store param pointer as passed in by caller */
11061 /* store Params pass it to WDI */
11062 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
11063 pWdaParams->pWdaContext = pWDA;
11064 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
11065
Jeff Johnson295189b2012-06-20 16:38:30 -070011066 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011067 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011068 if(IS_WDI_STATUS_FAILURE(status))
11069 {
11070 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11071 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
11072 vos_mem_free(pWdaParams->wdaMsgParam) ;
11073 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11074 vos_mem_free(pWdaParams) ;
11075 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011076 return CONVERT_WDI2VOS_STATUS(status) ;
11077}
Jeff Johnson295189b2012-06-20 16:38:30 -070011078/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011079 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011080 *
11081 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011082void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011083{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011084 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
11085
Jeff Johnson295189b2012-06-20 16:38:30 -070011086 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011087 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011088
11089 if(NULL == pWdaParams)
11090 {
11091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011092 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011093 VOS_ASSERT(0) ;
11094 return ;
11095 }
11096
11097 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11098 vos_mem_free(pWdaParams->wdaMsgParam);
11099 vos_mem_free(pWdaParams);
11100
Jeff Johnson295189b2012-06-20 16:38:30 -070011101 //print a msg, nothing else to do
11102 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011103 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011104 return ;
11105}
Yue Ma7f44bbe2013-04-12 11:47:39 -070011106/*
11107 * FUNCTION: WDA_RemBeaconFilterReqCallback
11108 * Free memory.
11109 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
11110 */
11111void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
11112{
11113 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11114
11115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11116 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11117
11118 if(NULL == pWdaParams)
11119 {
11120 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11121 "%s: pWdaParams received NULL", __func__);
11122 VOS_ASSERT(0);
11123 return;
11124 }
11125
11126 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11127 {
11128 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11129 vos_mem_free(pWdaParams->wdaMsgParam);
11130 vos_mem_free(pWdaParams);
11131 }
11132
11133 return;
11134}
Jeff Johnson295189b2012-06-20 16:38:30 -070011135 // TODO: PE does not have this feature for now implemented,
11136 // but the support for removing beacon filter exists between
11137 // HAL and FW. This function can be called whenever PE defines
11138 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -070011139/*
11140 * FUNCTION: WDA_RemBeaconFilterReq
11141 * Request to WDI to send the removal of beacon filtering related information.
11142 */
11143VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
11144 tRemBeaconFilterMsg* pBeaconFilterInfo)
11145{
11146 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011147 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011148 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
11149 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
11150 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011151 tWDA_ReqParams *pWdaParams ;
11152
Jeff Johnson295189b2012-06-20 16:38:30 -070011153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011154 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011155 if(NULL == wdiBeaconFilterInfo)
11156 {
11157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011158 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011159 VOS_ASSERT(0);
11160 return VOS_STATUS_E_NOMEM;
11161 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011162 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11163 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070011164 {
11165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011166 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011167 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011168 vos_mem_free(wdiBeaconFilterInfo);
11169 vos_mem_free(pBeaconFilterInfo);
11170 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -070011171 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011172
11173 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
11174 pBeaconFilterInfo->ucIeCount;
11175 //Fill structure with info contained in the ucRemIeId
11176 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
11177 pBeaconFilterInfo->ucRemIeId,
11178 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
11179 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
11180 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011181
11182 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011183 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -070011184 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011185 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
11186
11187 pWdaParams->pWdaContext = pWDA;
11188
Jeff Johnson43971f52012-07-17 12:26:56 -070011189 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011190 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011191 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011192 {
11193 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11194 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011195 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011196 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11197 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070011198 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011199 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011200 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011201}
Jeff Johnson295189b2012-06-20 16:38:30 -070011202/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011203 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011204 *
11205 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011206void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011207{
11208 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011210 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011211 if(NULL == pWdaParams)
11212 {
11213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011214 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011215 VOS_ASSERT(0) ;
11216 return ;
11217 }
11218
11219 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11220 vos_mem_free(pWdaParams) ;
11221
Jeff Johnson295189b2012-06-20 16:38:30 -070011222 return ;
11223}
Jeff Johnson295189b2012-06-20 16:38:30 -070011224/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011225 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
11226 * Free memory.
11227 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
11228 */
11229void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
11230{
11231 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11232
11233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11234 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11235
11236 if(NULL == pWdaParams)
11237 {
11238 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11239 "%s: pWdaParams received NULL", __func__);
11240 VOS_ASSERT(0);
11241 return;
11242 }
11243
11244 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11245 {
11246 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11247 vos_mem_free(pWdaParams);
11248 }
11249
11250 return;
11251}
11252/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011253 * FUNCTION: WDA_SetRSSIThresholdsReq
11254 * Request to WDI to set the RSSI thresholds (sta mode).
11255 */
11256VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
11257{
11258 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011259 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011260 tWDA_CbContext *pWDA = NULL ;
11261 v_PVOID_t pVosContext = NULL;
11262 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
11263 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
11264 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
11265 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011267 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011268 if(NULL == wdiRSSIThresholdsInfo)
11269 {
11270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011271 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011272 VOS_ASSERT(0);
11273 return VOS_STATUS_E_NOMEM;
11274 }
11275 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11276 if(NULL == pWdaParams)
11277 {
11278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011279 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011280 VOS_ASSERT(0);
11281 vos_mem_free(wdiRSSIThresholdsInfo);
11282 return VOS_STATUS_E_NOMEM;
11283 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011284 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -070011285 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
11286 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
11287 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -070011288 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
11289 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
11290 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -070011291 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
11292 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
11293 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011294 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
11295 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011296 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
11297 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
11298
Jeff Johnson295189b2012-06-20 16:38:30 -070011299 /* Store param pointer as passed in by caller */
11300 /* store Params pass it to WDI */
11301 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
11302 pWdaParams->pWdaContext = pWDA;
11303 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -070011304 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011305 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011306 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011307 {
11308 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11309 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011310 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011311 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11312 vos_mem_free(pWdaParams) ;
11313 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011314 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011315
11316}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011317/*
Yue Madb90ac12013-04-04 13:39:13 -070011318 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011319 *
11320 */
Yue Madb90ac12013-04-04 13:39:13 -070011321void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011322{
11323 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
11324
11325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011326 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011327 if(NULL == pWdaParams)
11328 {
11329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011330 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011331 VOS_ASSERT(0) ;
11332 return ;
11333 }
11334
11335 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11336 vos_mem_free(pWdaParams->wdaMsgParam);
11337 vos_mem_free(pWdaParams) ;
11338
11339 //print a msg, nothing else to do
11340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -070011341 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011342 return ;
11343}
Jeff Johnson295189b2012-06-20 16:38:30 -070011344/*
Yue Madb90ac12013-04-04 13:39:13 -070011345 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -070011346 * Free memory.
11347 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -070011348 */
11349void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
11350{
11351 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11352
11353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11354 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11355
11356 if(NULL == pWdaParams)
11357 {
11358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11359 "%s: Invalid pWdaParams pointer", __func__);
11360 VOS_ASSERT(0);
11361 return;
11362 }
11363
11364 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11365 {
11366 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11367 vos_mem_free(pWdaParams->wdaMsgParam);
11368 vos_mem_free(pWdaParams);
11369 }
11370
11371 return;
11372}
11373/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011374 * FUNCTION: WDA_ProcessHostOffloadReq
11375 * Request to WDI to set the filter to minimize unnecessary host wakeup due
11376 * to broadcast traffic (sta mode).
11377 */
11378VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
11379 tSirHostOffloadReq *pHostOffloadParams)
11380{
11381 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011382 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011383 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
11384 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
11385 sizeof(WDI_HostOffloadReqParamsType)) ;
11386 tWDA_ReqParams *pWdaParams ;
11387
11388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011389 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -070011390
11391 if(NULL == wdiHostOffloadInfo)
11392 {
11393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011394 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011395 VOS_ASSERT(0);
11396 return VOS_STATUS_E_NOMEM;
11397 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011398 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11399 if(NULL == pWdaParams)
11400 {
11401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011402 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011403 VOS_ASSERT(0);
11404 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011405 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011406 return VOS_STATUS_E_NOMEM;
11407 }
11408
11409 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
11410 pHostOffloadParams->offloadType;
11411 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
11412 pHostOffloadParams->enableOrDisable;
11413
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011414 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
11415 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
11416
Jeff Johnson295189b2012-06-20 16:38:30 -070011417 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
11418 {
11419 case SIR_IPV4_ARP_REPLY_OFFLOAD:
11420 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
11421 pHostOffloadParams->params.hostIpv4Addr,
11422 4);
11423 break;
11424 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
11425 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
11426 pHostOffloadParams->params.hostIpv6Addr,
11427 16);
11428 break;
11429 case SIR_IPV6_NS_OFFLOAD:
11430 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
11431 pHostOffloadParams->params.hostIpv6Addr,
11432 16);
11433
11434#ifdef WLAN_NS_OFFLOAD
11435 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
11436 {
11437 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
11438 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
11439 16);
11440 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
11441 }
11442 else
11443 {
11444 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
11445 }
11446
11447 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
11448 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
11449 16);
11450 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
11451 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
11452 6);
11453
11454 //Only two are supported so let's go through them without a loop
11455 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
11456 {
11457 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
11458 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
11459 16);
11460 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
11461 }
11462 else
11463 {
11464 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
11465 }
11466
11467 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
11468 {
11469 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
11470 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
11471 16);
11472 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
11473 }
11474 else
11475 {
11476 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
11477 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +053011478 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
11479 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070011480 break;
11481#endif //WLAN_NS_OFFLOAD
11482 default:
11483 {
11484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11485 "No Handling for Offload Type %x in WDA "
11486 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
11487 //WDA_VOS_ASSERT(0) ;
11488 }
11489 }
Yue Madb90ac12013-04-04 13:39:13 -070011490 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
11491 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011492
Jeff Johnson295189b2012-06-20 16:38:30 -070011493 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011494 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011495 /* store Params pass it to WDI */
11496 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
11497 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011498
Jeff Johnson295189b2012-06-20 16:38:30 -070011499
Jeff Johnson43971f52012-07-17 12:26:56 -070011500 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -070011501 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011502
Jeff Johnson43971f52012-07-17 12:26:56 -070011503 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011504 {
11505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
c_hpothu86feba52014-10-28 15:51:18 +053011506 "Failure in host offload REQ WDI API, free all the memory %d",
11507 wstatus);
Jeff Johnson43971f52012-07-17 12:26:56 -070011508 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011509 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11510 vos_mem_free(pWdaParams->wdaMsgParam);
11511 vos_mem_free(pWdaParams) ;
11512 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011513 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011514
11515}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011516/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011517 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011518 *
11519 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011520void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011521{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011522 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
11523
Jeff Johnson295189b2012-06-20 16:38:30 -070011524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011525 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011526
11527 if(NULL == pWdaParams)
11528 {
11529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011530 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011531 VOS_ASSERT(0) ;
11532 return ;
11533 }
11534
11535 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11536 vos_mem_free(pWdaParams->wdaMsgParam);
11537 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -070011538
Jeff Johnson295189b2012-06-20 16:38:30 -070011539 //print a msg, nothing else to do
11540 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011541 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011542 return ;
11543}
Jeff Johnson295189b2012-06-20 16:38:30 -070011544/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011545 * FUNCTION: WDA_KeepAliveReqCallback
11546 * Free memory.
11547 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
11548 */
11549void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
11550{
11551 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11552
11553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11554 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11555
11556 if(NULL == pWdaParams)
11557 {
11558 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11559 "%s: pWdaParams received NULL", __func__);
11560 VOS_ASSERT(0);
11561 return;
11562 }
11563
11564 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11565 {
11566 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11567 vos_mem_free(pWdaParams->wdaMsgParam);
11568 vos_mem_free(pWdaParams);
11569 }
11570
11571 return;
11572}
11573/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011574 * FUNCTION: WDA_ProcessKeepAliveReq
11575 * Request to WDI to send Keep Alive packets to minimize unnecessary host
11576 * wakeup due to broadcast traffic (sta mode).
11577 */
11578VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
11579 tSirKeepAliveReq *pKeepAliveParams)
11580{
11581 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011582 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011583 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
11584 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
11585 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011586 tWDA_ReqParams *pWdaParams;
11587
Jeff Johnson295189b2012-06-20 16:38:30 -070011588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011589 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011590 if(NULL == wdiKeepAliveInfo)
11591 {
11592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011593 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011594 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011595 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011596 return VOS_STATUS_E_NOMEM;
11597 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011598
11599 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11600 if(NULL == pWdaParams)
11601 {
11602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011603 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011604 VOS_ASSERT(0);
11605 vos_mem_free(wdiKeepAliveInfo);
11606 vos_mem_free(pKeepAliveParams);
11607 return VOS_STATUS_E_NOMEM;
11608 }
11609
Jeff Johnson295189b2012-06-20 16:38:30 -070011610 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
11611 pKeepAliveParams->packetType;
11612 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
11613 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011614
11615 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
11616 pKeepAliveParams->bssId,
11617 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011618
11619 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
11620 {
11621 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
11622 pKeepAliveParams->hostIpv4Addr,
11623 SIR_IPV4_ADDR_LEN);
11624 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
11625 pKeepAliveParams->destIpv4Addr,
11626 SIR_IPV4_ADDR_LEN);
11627 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
11628 pKeepAliveParams->destMacAddr,
11629 SIR_MAC_ADDR_LEN);
11630 }
11631 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
11632 {
11633 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
11634 SIR_IPV4_ADDR_LEN,
11635 0);
11636 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
11637 SIR_IPV4_ADDR_LEN,
11638 0);
11639 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
11640 SIR_MAC_ADDR_LEN,
11641 0);
11642 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011643 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
11644 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011645
Jeff Johnson295189b2012-06-20 16:38:30 -070011646 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011647 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011648 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011649 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
11650 pWdaParams->pWdaContext = pWDA;
11651
Jeff Johnson295189b2012-06-20 16:38:30 -070011652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
11653 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
11654 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
11655 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
11656 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
11657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
11658 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
11659 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
11660 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
11661 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
11662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11663 "WDA DMAC : %d:%d:%d:%d:%d:%d",
11664 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
11665 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
11666 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
11667 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
11668 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
11669 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
11670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11671 "TimePeriod %d PacketType %d",
11672 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
11673 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -070011674 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011675 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011676
Jeff Johnson43971f52012-07-17 12:26:56 -070011677 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011678 {
11679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11680 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011681 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011682 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11683 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070011684 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011685 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011686 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011687
11688}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011689/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011690 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011691 *
11692 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011693void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011694 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
11695 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011696{
11697 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011699 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011700 if(NULL == pWdaParams)
11701 {
11702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011703 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011704 VOS_ASSERT(0) ;
11705 return ;
11706 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011707 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11708 vos_mem_free(pWdaParams->wdaMsgParam);
11709 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011710 return ;
11711}
Jeff Johnson295189b2012-06-20 16:38:30 -070011712/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011713 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
11714 * Free memory.
11715 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
11716 */
11717void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
11718{
11719 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11720
11721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11722 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11723
11724 if(NULL == pWdaParams)
11725 {
11726 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11727 "%s: pWdaParams received NULL", __func__);
11728 VOS_ASSERT(0);
11729 return;
11730 }
11731
11732 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11733 {
11734 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11735 vos_mem_free(pWdaParams->wdaMsgParam);
11736 vos_mem_free(pWdaParams);
11737 }
11738
11739 return;
11740}
11741
11742/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011743 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
11744 * Request to WDI to add WOWL Bcast pattern
11745 */
11746VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
11747 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
11748{
11749 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011750 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011751 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
11752 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
11753 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
11754 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011756 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011757 if(NULL == wdiWowlAddBcPtrnInfo)
11758 {
11759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011760 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011761 VOS_ASSERT(0);
11762 return VOS_STATUS_E_NOMEM;
11763 }
11764 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11765 if(NULL == pWdaParams)
11766 {
11767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011768 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011769 VOS_ASSERT(0);
11770 vos_mem_free(wdiWowlAddBcPtrnInfo);
11771 return VOS_STATUS_E_NOMEM;
11772 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011773 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
11774 pWowlAddBcPtrnParams->ucPatternId;
11775 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
11776 pWowlAddBcPtrnParams->ucPatternByteOffset;
11777 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
11778 pWowlAddBcPtrnParams->ucPatternMaskSize;
11779 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
11780 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -070011781 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
11782 {
11783 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
11784 pWowlAddBcPtrnParams->ucPattern,
11785 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
11786 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
11787 pWowlAddBcPtrnParams->ucPatternMask,
11788 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
11789 }
11790 else
11791 {
11792 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
11793 pWowlAddBcPtrnParams->ucPattern,
11794 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
11795 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
11796 pWowlAddBcPtrnParams->ucPatternMask,
11797 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
11798
11799 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
11800 pWowlAddBcPtrnParams->ucPatternExt,
11801 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
11802 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
11803 pWowlAddBcPtrnParams->ucPatternMaskExt,
11804 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
11805 }
11806
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011807 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
11808 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
11809
Yue Ma7f44bbe2013-04-12 11:47:39 -070011810 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
11811 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011812 /* Store param pointer as passed in by caller */
11813 /* store Params pass it to WDI */
11814 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
11815 pWdaParams->pWdaContext = pWDA;
11816 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070011817 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011818 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011819 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011820 {
11821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11822 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011823 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011824 vos_mem_free(pWdaParams->wdaMsgParam) ;
11825 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11826 vos_mem_free(pWdaParams) ;
11827 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011828 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011829
11830}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011831/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011832 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011833 *
11834 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011835void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011836 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
11837 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011838{
11839 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011841 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011842 if(NULL == pWdaParams)
11843 {
11844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011845 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011846 VOS_ASSERT(0) ;
11847 return ;
11848 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011849 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11850 vos_mem_free(pWdaParams->wdaMsgParam);
11851 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011852 return ;
11853}
Jeff Johnson295189b2012-06-20 16:38:30 -070011854/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011855 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
11856 * Free memory.
11857 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
11858 */
11859void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
11860{
11861 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11862
11863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11864 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11865
11866 if(NULL == pWdaParams)
11867 {
11868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11869 "%s: pWdaParams received NULL", __func__);
11870 VOS_ASSERT(0);
11871 return;
11872 }
11873
11874 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11875 {
11876 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11877 vos_mem_free(pWdaParams->wdaMsgParam);
11878 vos_mem_free(pWdaParams);
11879 }
11880
11881 return;
11882}
11883/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011884 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
11885 * Request to WDI to delete WOWL Bcast pattern
11886 */
11887VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
11888 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
11889{
11890 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011891 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011892 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
11893 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
11894 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
11895 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011897 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011898 if(NULL == wdiWowlDelBcPtrnInfo)
11899 {
11900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011901 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011902 VOS_ASSERT(0);
11903 return VOS_STATUS_E_NOMEM;
11904 }
11905 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11906 if(NULL == pWdaParams)
11907 {
11908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011909 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011910 VOS_ASSERT(0);
11911 vos_mem_free(wdiWowlDelBcPtrnInfo);
11912 return VOS_STATUS_E_NOMEM;
11913 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011914 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
11915 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011916
11917 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
11918 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
11919
Yue Ma7f44bbe2013-04-12 11:47:39 -070011920 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
11921 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011922 /* Store param pointer as passed in by caller */
11923 /* store Params pass it to WDI */
11924 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
11925 pWdaParams->pWdaContext = pWDA;
11926 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070011927 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011928 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011929 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011930 {
11931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11932 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011933 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011934 vos_mem_free(pWdaParams->wdaMsgParam) ;
11935 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11936 vos_mem_free(pWdaParams) ;
11937 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011938 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011939
11940}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011941/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011942 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011943 *
11944 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011945void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011946{
11947 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011948 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011949 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011951 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011952 if(NULL == pWdaParams)
11953 {
11954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011955 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011956 VOS_ASSERT(0) ;
11957 return ;
11958 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011959 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011960 if (NULL == pWDA)
11961 {
11962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11963 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053011964
11965 if(pWdaParams->wdaWdiApiMsgParam)
11966 {
11967 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11968 }
11969 vos_mem_free(pWdaParams);
11970
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011971 VOS_ASSERT(0);
11972 return ;
11973 }
11974
Jeff Johnson295189b2012-06-20 16:38:30 -070011975 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
11976
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011977 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
11978
Jeff Johnson295189b2012-06-20 16:38:30 -070011979 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11980 vos_mem_free(pWdaParams) ;
11981
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011982 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070011983 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011984 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011985 return ;
11986}
Jeff Johnson295189b2012-06-20 16:38:30 -070011987/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011988 * FUNCTION: WDA_WowlEnterReqCallback
11989 * Free memory and send WOWL Enter RSP back to PE.
11990 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
11991 */
11992void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
11993{
11994 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011995 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011996 tSirHalWowlEnterParams *pWowlEnterParams;
11997
11998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11999 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12000
12001 if(NULL == pWdaParams)
12002 {
12003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12004 "%s: pWdaParams received NULL", __func__);
12005 VOS_ASSERT(0);
12006 return;
12007 }
12008
12009 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012010 if (NULL == pWDA)
12011 {
12012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12013 "%s:pWDA is NULL", __func__);
12014 VOS_ASSERT(0);
12015 return ;
12016 }
12017
Yue Ma7f44bbe2013-04-12 11:47:39 -070012018 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
12019 pWowlEnterParams->status = wdiStatus;
12020
12021 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12022 {
12023 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12024 vos_mem_free(pWdaParams);
12025 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
12026 }
12027
12028 return;
12029}
12030/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012031 * FUNCTION: WDA_ProcessWowlEnterReq
12032 * Request to WDI to enter WOWL
12033 */
12034VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
12035 tSirHalWowlEnterParams *pWowlEnterParams)
12036{
12037 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012038 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012039 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
12040 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
12041 sizeof(WDI_WowlEnterReqParamsType)) ;
12042 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012044 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012045 if(NULL == wdiWowlEnterInfo)
12046 {
12047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012048 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012049 VOS_ASSERT(0);
12050 return VOS_STATUS_E_NOMEM;
12051 }
12052 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12053 if(NULL == pWdaParams)
12054 {
12055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012056 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012057 VOS_ASSERT(0);
12058 vos_mem_free(wdiWowlEnterInfo);
12059 return VOS_STATUS_E_NOMEM;
12060 }
Kumar Anandaca924e2013-07-22 14:35:34 -070012061
12062 vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
12063
Jeff Johnson295189b2012-06-20 16:38:30 -070012064 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
12065 pWowlEnterParams->magicPtrn,
12066 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012067 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
12068 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070012069 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
12070 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070012071 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
12072 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070012073 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
12074 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070012075 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
12076 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070012077 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
12078 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070012079 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
12080 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -070012081 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
12082 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -070012083#ifdef WLAN_WAKEUP_EVENTS
12084 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
12085 pWowlEnterParams->ucWoWEAPIDRequestEnable;
12086
12087 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
12088 pWowlEnterParams->ucWoWEAPOL4WayEnable;
12089
12090 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
12091 pWowlEnterParams->ucWowNetScanOffloadMatch;
12092
12093 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
12094 pWowlEnterParams->ucWowGTKRekeyError;
12095
12096 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
12097 pWowlEnterParams->ucWoWBSSConnLoss;
12098#endif // WLAN_WAKEUP_EVENTS
12099
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012100 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
12101 pWowlEnterParams->bssIdx;
12102
Yue Ma7f44bbe2013-04-12 11:47:39 -070012103 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
12104 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012105 /* Store param pointer as passed in by caller */
12106 /* store Params pass it to WDI */
12107 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
12108 pWdaParams->pWdaContext = pWDA;
12109 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070012110 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012111 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070012112 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012113 {
12114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12115 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012116 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070012117 vos_mem_free(pWdaParams->wdaMsgParam) ;
12118 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12119 vos_mem_free(pWdaParams) ;
12120 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012121 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012122
12123}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012124/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012125 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012126 *
12127 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012128void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012129{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012130 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012131 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012132 tSirHalWowlExitParams *pWowlExitParams;
12133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012134 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012135 if(NULL == pWdaParams)
12136 {
12137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012138 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012139 VOS_ASSERT(0) ;
12140 return ;
12141 }
12142 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012143 if (NULL == pWDA)
12144 {
12145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12146 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053012147
12148 if(pWdaParams->wdaWdiApiMsgParam)
12149 {
12150 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12151 }
12152 vos_mem_free(pWdaParams);
12153
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012154 VOS_ASSERT(0);
12155 return ;
12156 }
12157
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012158 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
12159
12160 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070012161 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012162
12163 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12164 vos_mem_free(pWdaParams) ;
12165
Jeff Johnson295189b2012-06-20 16:38:30 -070012166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012167 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012168 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012169 return ;
12170}
Jeff Johnson295189b2012-06-20 16:38:30 -070012171/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012172 * FUNCTION: WDA_WowlExitReqCallback
12173 * Free memory and send WOWL Exit RSP back to PE.
12174 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
12175 */
12176void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
12177{
12178 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012179 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012180 tSirHalWowlExitParams *pWowlExitParams;
12181
12182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12183 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12184
12185 if(NULL == pWdaParams)
12186 {
12187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12188 "%s: pWdaParams received NULL", __func__);
12189 VOS_ASSERT(0);
12190 return;
12191 }
12192
12193 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012194 if (NULL == pWDA)
12195 {
12196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12197 "%s:pWDA is NULL", __func__);
12198 VOS_ASSERT(0);
12199 return ;
12200 }
12201
Yue Ma7f44bbe2013-04-12 11:47:39 -070012202 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
12203 pWowlExitParams->status = wdiStatus;
12204
12205 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12206 {
12207 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12208 vos_mem_free(pWdaParams);
12209 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
12210 }
12211
12212 return;
12213}
12214/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012215 * FUNCTION: WDA_ProcessWowlExitReq
12216 * Request to WDI to add WOWL Bcast pattern
12217 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012218VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
12219 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070012220{
12221 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012222 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012223 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
12224 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
12225 sizeof(WDI_WowlExitReqParamsType)) ;
12226 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012227 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012228 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012229 if(NULL == wdiWowlExitInfo)
12230 {
12231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012232 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012233 VOS_ASSERT(0);
12234 return VOS_STATUS_E_NOMEM;
12235 }
12236 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12237 if(NULL == pWdaParams)
12238 {
12239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012240 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012241 VOS_ASSERT(0);
12242 vos_mem_free(wdiWowlExitInfo);
12243 return VOS_STATUS_E_NOMEM;
12244 }
12245
12246 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
12247 pWowlExitParams->bssIdx;
12248
Yue Ma7f44bbe2013-04-12 11:47:39 -070012249 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
12250 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012251
12252 /* Store param pointer as passed in by caller */
12253 /* store Params pass it to WDI */
12254 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
12255 pWdaParams->pWdaContext = pWDA;
12256 pWdaParams->wdaMsgParam = pWowlExitParams;
12257
12258 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012259 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012260
Jeff Johnson43971f52012-07-17 12:26:56 -070012261 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012262 {
12263 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12264 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012265 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012266 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12267 vos_mem_free(pWdaParams->wdaMsgParam);
12268 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012269 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012270 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012271}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012272/*
12273 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
12274 * Request to WDI to determine whether a given station is capable of
12275 * using HW-based frame translation
12276 */
12277v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
12278 tANI_U8 staIdx)
12279{
12280 return WDI_IsHwFrameTxTranslationCapable(staIdx);
12281}
Katya Nigam6201c3e2014-05-27 17:51:42 +053012282
12283/*
12284 * FUNCTION: WDA_IsSelfSTA
12285 * Request to WDI to determine whether a given STAID is self station
12286 * index.
12287 */
12288v_BOOL_t WDA_IsSelfSTA(v_PVOID_t pVosContext, tANI_U8 ucSTAIdx)
12289{
12290
12291 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
12292
Girish Gowli05cf44e2014-06-12 21:53:37 +053012293 if (NULL != pWDA)
12294 return WDI_IsSelfSTA(pWDA->pWdiContext,ucSTAIdx);
12295 else
12296 return VOS_TRUE;
Katya Nigam6201c3e2014-05-27 17:51:42 +053012297}
Jeff Johnson295189b2012-06-20 16:38:30 -070012298/*
12299 * FUNCTION: WDA_NvDownloadReqCallback
12300 * send NV Download RSP back to PE
12301 */
12302void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
12303 void* pUserData)
12304{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012305
12306 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012307 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012308
Jeff Johnson295189b2012-06-20 16:38:30 -070012309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012310 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012311
12312 if(NULL == pWdaParams)
12313 {
12314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012315 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012316 VOS_ASSERT(0) ;
12317 return ;
12318 }
12319
12320 pWDA = pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012321 if (NULL == pWDA)
12322 {
12323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12324 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053012325
12326 if(pWdaParams->wdaWdiApiMsgParam)
12327 {
12328 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12329 }
12330 vos_mem_free(pWdaParams);
12331
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012332 VOS_ASSERT(0);
12333 return ;
12334 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012335
Jeff Johnson295189b2012-06-20 16:38:30 -070012336 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012337 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12338 vos_mem_free(pWdaParams);
12339
Jeff Johnson295189b2012-06-20 16:38:30 -070012340 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070012341 return ;
12342}
Jeff Johnson295189b2012-06-20 16:38:30 -070012343/*
12344 * FUNCTION: WDA_ProcessNvDownloadReq
12345 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
12346 */
12347VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
12348{
12349 /* Initialize the local Variables*/
12350 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
12351 v_VOID_t *pNvBuffer=NULL;
12352 v_SIZE_t bufferSize = 0;
12353 WDI_Status status = WDI_STATUS_E_FAILURE;
12354 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012355 tWDA_ReqParams *pWdaParams ;
12356
Jeff Johnson295189b2012-06-20 16:38:30 -070012357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012358 "------> %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012359 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070012360 {
12361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012362 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012363 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070012364 return VOS_STATUS_E_FAILURE;
12365 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012366
Jeff Johnson295189b2012-06-20 16:38:30 -070012367 /* Get the NV structure base address and size from VOS */
Prasanna Kumarf6c94ae2013-04-11 20:05:21 -070012368 vos_nv_getNVEncodedBuffer(&pNvBuffer,&bufferSize);
12369
Jeff Johnson295189b2012-06-20 16:38:30 -070012370 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
12371 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012372 if(NULL == wdiNvDownloadReqParam)
12373 {
12374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012375 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012376 VOS_ASSERT(0);
12377 return VOS_STATUS_E_NOMEM;
12378 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012379 /* Copy Params to wdiNvDownloadReqParam*/
12380 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
12381 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012382
12383 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12384 if(NULL == pWdaParams)
12385 {
12386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012387 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012388 VOS_ASSERT(0);
12389 vos_mem_free(wdiNvDownloadReqParam);
12390 return VOS_STATUS_E_NOMEM;
12391 }
12392
Jeff Johnson295189b2012-06-20 16:38:30 -070012393 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012394 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
12395 pWdaParams->wdaMsgParam = NULL;
12396 pWdaParams->pWdaContext = pWDA;
12397
12398
Jeff Johnson295189b2012-06-20 16:38:30 -070012399 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012400
Jeff Johnson295189b2012-06-20 16:38:30 -070012401 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012402 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
12403
Jeff Johnson295189b2012-06-20 16:38:30 -070012404 if(IS_WDI_STATUS_FAILURE(status))
12405 {
12406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12407 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012408 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12409 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012410 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012411 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012412}
12413/*
12414 * FUNCTION: WDA_FlushAcReqCallback
12415 * send Flush AC RSP back to TL
12416 */
12417void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
12418{
12419 vos_msg_t wdaMsg = {0} ;
12420 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12421 tFlushACReq *pFlushACReqParams;
12422 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012424 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012425 if(NULL == pWdaParams)
12426 {
12427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012428 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012429 VOS_ASSERT(0) ;
12430 return ;
12431 }
12432
12433 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
12434 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
12435 if(NULL == pFlushACRspParams)
12436 {
12437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012438 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012439 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070012440 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012441 return ;
12442 }
12443 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
12444 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
12445 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
12446 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
12447 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070012448 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012449 vos_mem_free(pWdaParams->wdaMsgParam) ;
12450 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12451 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012452 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
12453 wdaMsg.bodyptr = (void *)pFlushACRspParams;
12454 // POST message to TL
12455 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
12456
Jeff Johnson295189b2012-06-20 16:38:30 -070012457 return ;
12458}
Jeff Johnson295189b2012-06-20 16:38:30 -070012459/*
12460 * FUNCTION: WDA_ProcessFlushAcReq
12461 * Request to WDI to Update the DELBA REQ params.
12462 */
12463VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
12464 tFlushACReq *pFlushAcReqParams)
12465{
12466 WDI_Status status = WDI_STATUS_SUCCESS ;
12467 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
12468 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
12469 sizeof(WDI_FlushAcReqParamsType)) ;
12470 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012471 if(NULL == wdiFlushAcReqParam)
12472 {
12473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012474 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012475 VOS_ASSERT(0);
12476 return VOS_STATUS_E_NOMEM;
12477 }
12478 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12479 if(NULL == pWdaParams)
12480 {
12481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012482 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012483 VOS_ASSERT(0);
12484 vos_mem_free(wdiFlushAcReqParam);
12485 return VOS_STATUS_E_NOMEM;
12486 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012488 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012489 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
12490 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
12491 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
12492 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -070012493 /* Store Flush AC pointer, as this will be used for response */
12494 /* store Params pass it to WDI */
12495 pWdaParams->pWdaContext = pWDA;
12496 pWdaParams->wdaMsgParam = pFlushAcReqParams;
12497 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012498 status = WDI_FlushAcReq(wdiFlushAcReqParam,
12499 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012500 if(IS_WDI_STATUS_FAILURE(status))
12501 {
12502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12503 "Failure in Flush AC REQ Params WDI API, free all the memory " );
12504 vos_mem_free(pWdaParams->wdaMsgParam) ;
12505 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12506 vos_mem_free(pWdaParams) ;
12507 //TODO: respond to TL with failure
12508 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012509 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012510}
Jeff Johnson295189b2012-06-20 16:38:30 -070012511/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012512 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012513 *
12514 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012515void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012516{
12517 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012518 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070012519 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012520
12521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012522 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012523 if(NULL == pWdaParams)
12524 {
12525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012526 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012527 VOS_ASSERT(0) ;
12528 return ;
12529 }
12530 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012531 if (NULL == pWDA)
12532 {
12533 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12534 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +053012535 vos_mem_free(pWdaParams->wdaMsgParam) ;
12536 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12537 vos_mem_free(pWdaParams) ;
12538
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012539 VOS_ASSERT(0);
12540 return ;
12541 }
12542
Jeff Johnson295189b2012-06-20 16:38:30 -070012543 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
12544 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
12545 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
12546 {
12547 pWDA->wdaAmpSessionOn = VOS_FALSE;
12548 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012549 vos_mem_free(pWdaParams->wdaMsgParam) ;
12550 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12551 vos_mem_free(pWdaParams) ;
12552 /*
12553 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
12554 * param here
12555 */
Jeff Johnson295189b2012-06-20 16:38:30 -070012556 return ;
12557}
Yue Ma7f44bbe2013-04-12 11:47:39 -070012558/*
12559 * FUNCTION: WDA_BtAmpEventReqCallback
12560 * Free memory.
12561 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
12562 */
12563void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
12564{
12565 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012566 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012567 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012568
Yue Ma7f44bbe2013-04-12 11:47:39 -070012569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12570 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12571
12572 if(NULL == pWdaParams)
12573 {
12574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12575 "%s: pWdaParams received NULL", __func__);
12576 VOS_ASSERT(0);
12577 return;
12578 }
12579
12580 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012581 if (NULL == pWDA)
12582 {
12583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12584 "%s:pWDA is NULL", __func__);
12585 VOS_ASSERT(0);
12586 return ;
12587 }
12588
Yue Ma7f44bbe2013-04-12 11:47:39 -070012589 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
12590
12591 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
12592 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
12593 {
12594 pWDA->wdaAmpSessionOn = VOS_FALSE;
12595 }
12596
12597 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12598 {
12599 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12600 vos_mem_free(pWdaParams->wdaMsgParam);
12601 vos_mem_free(pWdaParams);
12602 }
12603
12604 return;
12605}
Jeff Johnson295189b2012-06-20 16:38:30 -070012606/*
12607 * FUNCTION: WDA_ProcessBtAmpEventReq
12608 * Request to WDI to Update with BT AMP events.
12609 */
12610VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
12611 tSmeBtAmpEvent *pBtAmpEventParams)
12612{
12613 WDI_Status status = WDI_STATUS_SUCCESS ;
12614 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
12615 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
12616 sizeof(WDI_BtAmpEventParamsType)) ;
12617 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012619 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012620 if(NULL == wdiBtAmpEventParam)
12621 {
12622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012623 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012624 VOS_ASSERT(0);
12625 return VOS_STATUS_E_NOMEM;
12626 }
12627 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12628 if(NULL == pWdaParams)
12629 {
12630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012631 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012632 VOS_ASSERT(0);
12633 vos_mem_free(wdiBtAmpEventParam);
12634 return VOS_STATUS_E_NOMEM;
12635 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012636 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
12637 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012638 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
12639 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012640 /* Store BT AMP event pointer, as this will be used for response */
12641 /* store Params pass it to WDI */
12642 pWdaParams->pWdaContext = pWDA;
12643 pWdaParams->wdaMsgParam = pBtAmpEventParams;
12644 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012645 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012646 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012647 if(IS_WDI_STATUS_FAILURE(status))
12648 {
12649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12650 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
12651 vos_mem_free(pWdaParams->wdaMsgParam) ;
12652 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12653 vos_mem_free(pWdaParams) ;
12654 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012655 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
12656 {
12657 pWDA->wdaAmpSessionOn = VOS_TRUE;
12658 }
12659 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012660}
12661
Jeff Johnson295189b2012-06-20 16:38:30 -070012662/*
12663 * FUNCTION: WDA_FTMCommandReqCallback
12664 * Handle FTM CMD response came from HAL
12665 * Route responce to HDD FTM
12666 */
12667void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
12668 void *usrData)
12669{
12670 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012671 if((NULL == pWDA) || (NULL == ftmCmdRspData))
12672 {
12673 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053012674 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070012675 return;
12676 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012677 /* Release Current FTM Command Request */
12678 vos_mem_free(pWDA->wdaFTMCmdReq);
12679 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012680 /* Post FTM Responce to HDD FTM */
12681 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070012682 return;
12683}
Jeff Johnson295189b2012-06-20 16:38:30 -070012684/*
12685 * FUNCTION: WDA_ProcessFTMCommand
12686 * Send FTM command to WDI
12687 */
12688VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
12689 tPttMsgbuffer *pPTTFtmCmd)
12690{
12691 WDI_Status status = WDI_STATUS_SUCCESS;
12692 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012693 ftmCMDReq = (WDI_FTMCommandReqType *)
12694 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
12695 if(NULL == ftmCMDReq)
12696 {
12697 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12698 "WDA FTM Command buffer alloc fail");
12699 return VOS_STATUS_E_NOMEM;
12700 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012701 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
12702 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -070012703 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -070012704 /* Send command to WDI */
12705 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070012706 return status;
12707}
Jeff Johnsone7245742012-09-05 17:12:55 -070012708#ifdef FEATURE_OEM_DATA_SUPPORT
12709/*
12710 * FUNCTION: WDA_StartOemDataReqCallback
12711 *
12712 */
12713void WDA_StartOemDataReqCallback(
12714 WDI_oemDataRspParamsType *wdiOemDataRspParams,
12715 void* pUserData)
12716{
12717 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012718 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012719 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070012720 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012721
Jeff Johnsone7245742012-09-05 17:12:55 -070012722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012723 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012724
12725 if(NULL == pWdaParams)
12726 {
12727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012728 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012729 VOS_ASSERT(0) ;
12730 return ;
12731 }
12732 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
12733
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012734 if (NULL == pWDA)
Jeff Johnsone7245742012-09-05 17:12:55 -070012735 {
12736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012737 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070012738 VOS_ASSERT(0);
12739 return ;
12740 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012741
Jeff Johnsone7245742012-09-05 17:12:55 -070012742 /*
12743 * Allocate memory for response params sent to PE
12744 */
12745 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
12746
12747 // Check if memory is allocated for OemdataMeasRsp Params.
12748 if(NULL == pOemDataRspParams)
12749 {
12750 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12751 "OEM DATA WDA callback alloc fail");
12752 VOS_ASSERT(0) ;
12753 return;
12754 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012755
Jeff Johnsone7245742012-09-05 17:12:55 -070012756 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012757 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12758 vos_mem_free(pWdaParams->wdaMsgParam);
12759 vos_mem_free(pWdaParams) ;
12760
Jeff Johnsone7245742012-09-05 17:12:55 -070012761 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080012762 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -070012763 * Also, here success always means that we have atleast one BSSID.
12764 */
12765 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
12766
12767 //enable Tx
12768 status = WDA_ResumeDataTx(pWDA);
12769 if(status != VOS_STATUS_SUCCESS)
12770 {
12771 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
12772 }
12773 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
12774 return ;
12775}
12776/*
12777 * FUNCTION: WDA_ProcessStartOemDataReq
12778 * Send Start Oem Data Req to WDI
12779 */
12780VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
12781 tStartOemDataReq *pOemDataReqParams)
12782{
12783 WDI_Status status = WDI_STATUS_SUCCESS;
12784 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012785 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -070012786
12787 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
12788
12789 if(NULL == wdiOemDataReqParams)
12790 {
12791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012792 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070012793 VOS_ASSERT(0);
12794 return VOS_STATUS_E_NOMEM;
12795 }
12796
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012797 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
12798 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
12799 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
12800 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -070012801
12802 wdiOemDataReqParams->wdiReqStatusCB = NULL;
12803
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012804 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12805 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -070012806 {
12807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012808 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070012809 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012810 vos_mem_free(pOemDataReqParams);
12811 VOS_ASSERT(0);
12812 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -070012813 }
Jeff Johnsone7245742012-09-05 17:12:55 -070012814
Bernald44a1ae2013-01-09 08:30:39 -080012815 pWdaParams->pWdaContext = (void*)pWDA;
12816 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
12817 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012818
12819 status = WDI_StartOemDataReq(wdiOemDataReqParams,
12820 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070012821
12822 if(IS_WDI_STATUS_FAILURE(status))
12823 {
12824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12825 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012826 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12827 vos_mem_free(pWdaParams->wdaMsgParam);
12828 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070012829 }
12830 return CONVERT_WDI2VOS_STATUS(status) ;
12831}
12832#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070012833/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012834 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012835 *
12836 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012837void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012838{
12839 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012841 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012842 if(NULL == pWdaParams)
12843 {
12844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012845 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012846 VOS_ASSERT(0) ;
12847 return ;
12848 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012849
12850 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12851 vos_mem_free(pWdaParams->wdaMsgParam);
12852 vos_mem_free(pWdaParams);
12853
12854 return ;
12855}
12856/*
12857 * FUNCTION: WDA_SetTxPerTrackingReqCallback
12858 * Free memory.
12859 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
12860 */
12861void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
12862{
12863 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12864
12865 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12866 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12867
12868 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070012869 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070012870 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12871 "%s: pWdaParams received NULL", __func__);
12872 VOS_ASSERT(0);
12873 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070012874 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012875
12876 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012877 {
12878 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -070012879 vos_mem_free(pWdaParams->wdaMsgParam);
12880 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012881 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012882
12883 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070012884}
Jeff Johnson295189b2012-06-20 16:38:30 -070012885#ifdef WLAN_FEATURE_GTK_OFFLOAD
12886/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012887 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012888 *
12889 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012890void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012891 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012892{
12893 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12894
12895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012896 "<------ %s " ,__func__);
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080012897 if(NULL == pWdaParams)
12898 {
12899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12900 "%s: pWdaParams received NULL", __func__);
12901 VOS_ASSERT(0);
12902 return;
12903 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012904
Jeff Johnson295189b2012-06-20 16:38:30 -070012905 vos_mem_free(pWdaParams->wdaMsgParam) ;
12906 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12907 vos_mem_free(pWdaParams) ;
12908
12909 //print a msg, nothing else to do
12910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012911 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070012912
12913 return ;
12914}
Yue Ma7f44bbe2013-04-12 11:47:39 -070012915/*
12916 * FUNCTION: WDA_GTKOffloadReqCallback
12917 * Free memory.
12918 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
12919 */
12920void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
12921{
12922 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012923
Yue Ma7f44bbe2013-04-12 11:47:39 -070012924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12925 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12926
12927 if(NULL == pWdaParams)
12928 {
12929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12930 "%s: pWdaParams received NULL", __func__);
12931 VOS_ASSERT(0);
12932 return;
12933 }
12934
12935 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12936 {
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053012937 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
12938 sizeof(WDI_GtkOffloadReqMsg));
12939 vos_mem_zero(pWdaParams->wdaMsgParam,
12940 sizeof(tSirGtkOffloadParams));
Yue Ma7f44bbe2013-04-12 11:47:39 -070012941 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12942 vos_mem_free(pWdaParams->wdaMsgParam);
12943 vos_mem_free(pWdaParams);
12944 }
12945
12946 return;
12947}
Jeff Johnson295189b2012-06-20 16:38:30 -070012948/*
12949 * FUNCTION: WDA_ProcessGTKOffloadReq
12950 * Request to WDI to set the filter to minimize unnecessary host wakeup due
12951 * to broadcast traffic (sta mode).
12952 */
12953VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
12954 tpSirGtkOffloadParams pGtkOffloadParams)
12955{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053012956 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012957 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
12958 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
12959 sizeof(WDI_GtkOffloadReqMsg)) ;
12960 tWDA_ReqParams *pWdaParams ;
12961
12962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012963 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012964
12965 if(NULL == wdiGtkOffloadReqMsg)
12966 {
12967 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012968 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012969 VOS_ASSERT(0);
12970 return VOS_STATUS_E_NOMEM;
12971 }
12972
12973 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12974 if(NULL == pWdaParams)
12975 {
12976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012977 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012978 VOS_ASSERT(0);
12979 vos_mem_free(wdiGtkOffloadReqMsg);
12980 return VOS_STATUS_E_NOMEM;
12981 }
12982
12983 //
12984 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
12985 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012986
12987 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053012988 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012989
Jeff Johnson295189b2012-06-20 16:38:30 -070012990 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
12991 // Copy KCK
12992 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
12993 // Copy KEK
12994 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
12995 // Copy KeyReplayCounter
12996 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
12997 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
12998
Yue Ma7f44bbe2013-04-12 11:47:39 -070012999 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
13000 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013001
Jeff Johnson295189b2012-06-20 16:38:30 -070013002
13003 /* Store Params pass it to WDI */
13004 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
13005 pWdaParams->pWdaContext = pWDA;
13006 /* Store param pointer as passed in by caller */
13007 pWdaParams->wdaMsgParam = pGtkOffloadParams;
13008
Yue Ma7f44bbe2013-04-12 11:47:39 -070013009 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013010
13011 if(IS_WDI_STATUS_FAILURE(status))
13012 {
13013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13014 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053013015 vos_mem_zero(wdiGtkOffloadReqMsg, sizeof(WDI_GtkOffloadReqMsg));
13016 vos_mem_zero(pGtkOffloadParams, sizeof(tSirGtkOffloadParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070013017 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13018 vos_mem_free(pWdaParams->wdaMsgParam);
13019 vos_mem_free(pWdaParams);
13020 }
13021
13022 return CONVERT_WDI2VOS_STATUS(status) ;
13023}
13024
13025/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013026 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013027 *
13028 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013029void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013030 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013031{
13032 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13033 tWDA_CbContext *pWDA;
13034 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Nirav Shah374de6e2014-02-13 16:40:01 +053013035 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070013036 vos_msg_t vosMsg;
13037
13038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013039 "<------ %s " ,__func__);
Nirav Shah374de6e2014-02-13 16:40:01 +053013040
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080013041 if(NULL == pWdaParams)
13042 {
13043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13044 "%s: pWdaParams received NULL", __func__);
13045 VOS_ASSERT(0);
13046 return;
13047 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013048
Nirav Shah374de6e2014-02-13 16:40:01 +053013049 pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams));
13050 if(NULL == pGtkOffloadGetInfoRsp)
13051 {
13052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13053 "%s: vos_mem_malloc failed ", __func__);
13054 VOS_ASSERT(0);
13055 return;
13056 }
13057
Jeff Johnson295189b2012-06-20 16:38:30 -070013058 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
13059 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
13060
13061 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
13062 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
13063
13064 /* Message Header */
13065 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
Kiran Kumar Lokerefdf42412013-07-17 17:40:58 -070013066 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013067
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013068 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
13069 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
13070 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
13071 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
13072 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070013073
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013074 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
13075 pwdiGtkOffloadGetInfoRsparams->bssId,
13076 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013077 /* VOS message wrapper */
13078 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
13079 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
13080 vosMsg.bodyval = 0;
13081
13082 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13083 {
13084 /* free the mem and return */
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053013085 vos_mem_zero(pGtkOffloadGetInfoRsp,
13086 sizeof(tSirGtkOffloadGetInfoRspParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070013087 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
13088 }
13089
13090 vos_mem_free(pWdaParams->wdaMsgParam) ;
13091 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13092 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013093
13094 return;
13095}
13096/*
13097 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
13098 * Free memory and send RSP back to SME.
13099 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
13100 */
13101void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
13102{
13103 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13104 vos_msg_t vosMsg;
13105
13106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13107 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13108
13109 if(NULL == pWdaParams)
13110 {
13111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13112 "%s: pWdaParams received NULL", __func__);
13113 VOS_ASSERT(0);
13114 return;
13115 }
13116
13117 /* VOS message wrapper */
13118 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
13119 vosMsg.bodyptr = NULL;
13120 vosMsg.bodyval = 0;
13121
13122 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13123 {
13124 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13125 vos_mem_free(pWdaParams->wdaMsgParam);
13126 vos_mem_free(pWdaParams);
13127 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
13128 }
13129
13130 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070013131}
13132#endif
13133
13134/*
13135 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
13136 * Request to WDI to set Tx Per Tracking configurations
13137 */
13138VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
13139{
13140 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070013141 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070013142 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
13143 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
13144 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
13145 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013147 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013148 if(NULL == pwdiSetTxPerTrackingReqParams)
13149 {
13150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013151 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013152 vos_mem_free(pTxPerTrackingParams);
13153 VOS_ASSERT(0);
13154 return VOS_STATUS_E_NOMEM;
13155 }
13156 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13157 if(NULL == pWdaParams)
13158 {
13159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013160 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013161 vos_mem_free(pwdiSetTxPerTrackingReqParams);
13162 vos_mem_free(pTxPerTrackingParams);
13163 VOS_ASSERT(0);
13164 return VOS_STATUS_E_NOMEM;
13165 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013166 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
13167 pTxPerTrackingParams->ucTxPerTrackingEnable;
13168 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
13169 pTxPerTrackingParams->ucTxPerTrackingPeriod;
13170 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
13171 pTxPerTrackingParams->ucTxPerTrackingRatio;
13172 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
13173 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013174 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
13175 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013176 /* Store param pointer as passed in by caller */
13177 /* store Params pass it to WDI
13178 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
13179 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
13180 pWdaParams->pWdaContext = pWDA;
13181 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070013182 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013183 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070013184 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070013185 {
13186 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13187 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070013188 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070013189 vos_mem_free(pWdaParams->wdaMsgParam) ;
13190 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13191 vos_mem_free(pWdaParams) ;
13192 }
Jeff Johnson43971f52012-07-17 12:26:56 -070013193 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013194
13195}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070013196/*
13197 * FUNCTION: WDA_HALDumpCmdCallback
13198 * Send the VOS complete .
13199 */
13200void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
13201 void* pUserData)
13202{
13203 tANI_U8 *buffer = NULL;
13204 tWDA_CbContext *pWDA = NULL;
Siddharth Bhal68115602015-01-18 20:44:55 +053013205 tWDA_HalDumpReqParams *pWdaParams = (tWDA_HalDumpReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013206 if(NULL == pWdaParams)
13207 {
13208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013209 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013210 VOS_ASSERT(0) ;
13211 return ;
13212 }
13213
13214 pWDA = pWdaParams->pWdaContext;
13215 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070013216 if(wdiRspParams->usBufferLen > 0)
13217 {
13218 /*Copy the Resp data to UMAC supplied buffer*/
13219 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
13220 }
Siddharth Bhal68115602015-01-18 20:44:55 +053013221
13222 if (!pWdaParams->wdaHALDumpAsync)
13223 {/* Indicate VOSS about the start complete */
13224 vos_WDAComplete_cback(pWDA->pVosContext);
13225 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013226 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13227 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013228 return ;
13229}
13230
Jeff Johnson295189b2012-06-20 16:38:30 -070013231/*
13232 * FUNCTION: WDA_ProcessHALDumpCmdReq
13233 * Send Dump command to WDI
13234 */
13235VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
13236 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
Siddharth Bhal68115602015-01-18 20:44:55 +053013237 tANI_U32 arg4, tANI_U8 *pBuffer, wpt_boolean async)
Jeff Johnson295189b2012-06-20 16:38:30 -070013238{
13239 WDI_Status status = WDI_STATUS_SUCCESS;
13240 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
13241 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
Siddharth Bhal68115602015-01-18 20:44:55 +053013242 tWDA_HalDumpReqParams *pWdaParams ;
13243
Jeff Johnson295189b2012-06-20 16:38:30 -070013244 pVosContextType pVosContext = NULL;
13245 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070013246 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
13247 (void *)pMac);
Katya Nigame4bafe02014-02-28 15:37:57 +053013248 if(pVosContext)
13249 {
13250 if (pVosContext->isLogpInProgress)
13251 {
13252 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
13253 "%s:LOGP in Progress. Ignore!!!", __func__);
13254 return VOS_STATUS_E_BUSY;
13255 }
13256 }
13257 else
13258 {
13259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13260 "%s: VOS Context Null", __func__);
13261 return VOS_STATUS_E_RESOURCES;
13262 }
13263
Siddharth Bhal68115602015-01-18 20:44:55 +053013264 if (NULL == pVosContext->pWDAContext)
13265 {
13266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13267 "%s: WDA Context Null", __func__);
13268 return VOS_STATUS_E_RESOURCES;
13269 }
13270 pWdaParams = (tWDA_HalDumpReqParams *)vos_mem_malloc(sizeof(tWDA_HalDumpReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013271 if(NULL == pWdaParams)
13272 {
13273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013274 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013275 return VOS_STATUS_E_NOMEM;
13276 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013277 /* Allocate memory WDI request structure*/
13278 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
13279 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
13280 if(NULL == wdiHALDumpCmdReqParam)
13281 {
13282 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13283 "WDA HAL DUMP Command buffer alloc fail");
13284 vos_mem_free(pWdaParams);
13285 return WDI_STATUS_E_FAILURE;
13286 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013287 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070013288 /* Extract the arguments */
13289 wdiHalDumpCmdInfo->command = cmd;
13290 wdiHalDumpCmdInfo->argument1 = arg1;
13291 wdiHalDumpCmdInfo->argument2 = arg2;
13292 wdiHalDumpCmdInfo->argument3 = arg3;
13293 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070013294 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013295 pWdaParams->pWdaContext = pVosContext->pWDAContext;
Siddharth Bhal68115602015-01-18 20:44:55 +053013296 pWdaParams->wdaHALDumpAsync = async;
Jeff Johnson295189b2012-06-20 16:38:30 -070013297
13298 /* Response message will be passed through the buffer */
13299 pWdaParams->wdaMsgParam = (void *)pBuffer;
13300
13301 /* store Params pass it to WDI */
13302 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013303 /* Send command to WDI */
Siddharth Bhal68115602015-01-18 20:44:55 +053013304 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback,
13305 pWdaParams);
13306 /* For Sync event only wait for rsp until completion of wdaCompleteEvent*/
13307 if (!async)
Jeff Johnson295189b2012-06-20 16:38:30 -070013308 {
Siddharth Bhal68115602015-01-18 20:44:55 +053013309 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent),
13310 WDA_DUMPCMD_WAIT_TIMEOUT );
13311 if ( vStatus != VOS_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -070013312 {
Siddharth Bhal68115602015-01-18 20:44:55 +053013313 if ( vStatus == VOS_STATUS_E_TIMEOUT )
13314 {
13315 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
13316 "%s: Timeout occurred before WDA_HALDUMP complete",__func__);
13317 }
13318 else
13319 {
13320 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
13321 "%s: WDA_HALDUMP reporting other error",__func__);
13322 }
13323 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070013324 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013325 }
13326 return status;
13327}
Jeff Johnson295189b2012-06-20 16:38:30 -070013328#ifdef WLAN_FEATURE_GTK_OFFLOAD
13329/*
13330 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
13331 * Request to WDI to get GTK Offload Information
13332 */
13333VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
13334 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
13335{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013336 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013337 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
13338 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
13339 tWDA_ReqParams *pWdaParams ;
13340
13341 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
13342 {
13343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013344 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013345 VOS_ASSERT(0);
13346 return VOS_STATUS_E_NOMEM;
13347 }
13348
13349 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13350 if(NULL == pWdaParams)
13351 {
13352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013353 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013354 VOS_ASSERT(0);
13355 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
13356 return VOS_STATUS_E_NOMEM;
13357 }
13358
Yue Ma7f44bbe2013-04-12 11:47:39 -070013359 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
13360 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013361
Jeff Johnson295189b2012-06-20 16:38:30 -070013362 /* Store Params pass it to WDI */
13363 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
13364 pWdaParams->pWdaContext = pWDA;
13365 /* Store param pointer as passed in by caller */
13366 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
13367
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013368 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013369 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013370
Yue Ma7f44bbe2013-04-12 11:47:39 -070013371 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013372
13373 if(IS_WDI_STATUS_FAILURE(status))
13374 {
13375 /* failure returned by WDI API */
13376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13377 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
13378 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13379 vos_mem_free(pWdaParams) ;
13380 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
13381 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
13382 }
13383
13384 return CONVERT_WDI2VOS_STATUS(status) ;
13385}
13386#endif // WLAN_FEATURE_GTK_OFFLOAD
13387
13388/*
Yue Mab9c86f42013-08-14 15:59:08 -070013389 * FUNCTION: WDA_ProcessAddPeriodicTxPtrnInd
13390 *
13391 */
13392VOS_STATUS WDA_ProcessAddPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
13393 tSirAddPeriodicTxPtrn *pAddPeriodicTxPtrnParams)
13394{
13395 WDI_Status wdiStatus;
13396 WDI_AddPeriodicTxPtrnParamsType *addPeriodicTxPtrnParams;
13397
13398 addPeriodicTxPtrnParams =
13399 vos_mem_malloc(sizeof(WDI_AddPeriodicTxPtrnParamsType));
13400
13401 if (NULL == addPeriodicTxPtrnParams)
13402 {
13403 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13404 "%s: Not able to allocate memory for addPeriodicTxPtrnParams!",
13405 __func__);
13406
13407 return VOS_STATUS_E_NOMEM;
13408 }
13409
13410 vos_mem_copy(&(addPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams),
13411 pAddPeriodicTxPtrnParams, sizeof(tSirAddPeriodicTxPtrn));
13412
13413 addPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
13414 addPeriodicTxPtrnParams->pUserData = pWDA;
13415
13416 wdiStatus = WDI_AddPeriodicTxPtrnInd(addPeriodicTxPtrnParams);
13417
13418 if (WDI_STATUS_PENDING == wdiStatus)
13419 {
13420 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13421 "Pending received for %s:%d", __func__, __LINE__ );
13422 }
13423 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13424 {
13425 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13426 "Failure in %s:%d", __func__, __LINE__ );
13427 }
13428
13429 vos_mem_free(addPeriodicTxPtrnParams);
13430
13431 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13432}
13433
13434/*
13435 * FUNCTION: WDA_ProcessDelPeriodicTxPtrnInd
13436 *
13437 */
13438VOS_STATUS WDA_ProcessDelPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
13439 tSirDelPeriodicTxPtrn *pDelPeriodicTxPtrnParams)
13440{
13441 WDI_Status wdiStatus;
13442 WDI_DelPeriodicTxPtrnParamsType *delPeriodicTxPtrnParams;
13443
13444 delPeriodicTxPtrnParams =
13445 vos_mem_malloc(sizeof(WDI_DelPeriodicTxPtrnParamsType));
13446
13447 if (NULL == delPeriodicTxPtrnParams)
13448 {
13449 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13450 "%s: Not able to allocate memory for delPeriodicTxPtrnParams!",
13451 __func__);
13452
13453 return VOS_STATUS_E_NOMEM;
13454 }
13455
13456 vos_mem_copy(&(delPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams),
13457 pDelPeriodicTxPtrnParams, sizeof(tSirDelPeriodicTxPtrn));
13458
13459 delPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
13460 delPeriodicTxPtrnParams->pUserData = pWDA;
13461
13462 wdiStatus = WDI_DelPeriodicTxPtrnInd(delPeriodicTxPtrnParams);
13463
13464 if (WDI_STATUS_PENDING == wdiStatus)
13465 {
13466 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13467 "Pending received for %s:%d", __func__, __LINE__ );
13468 }
13469 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13470 {
13471 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13472 "Failure in %s:%d", __func__, __LINE__ );
13473 }
13474
13475 vos_mem_free(delPeriodicTxPtrnParams);
13476
13477 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13478}
13479
Rajeev79dbe4c2013-10-05 11:03:42 +053013480#ifdef FEATURE_WLAN_BATCH_SCAN
13481/*
13482 * FUNCTION: WDA_ProcessStopBatchScanInd
13483 *
13484 * DESCRIPTION: This function sends stop batch scan inidcation message to WDI
13485 *
13486 * PARAM:
13487 * pWDA: pointer to WDA context
13488 * pReq: pointer to stop batch scan request
13489 */
13490VOS_STATUS WDA_ProcessStopBatchScanInd(tWDA_CbContext *pWDA,
13491 tSirStopBatchScanInd *pReq)
13492{
13493 WDI_Status wdiStatus;
13494 WDI_StopBatchScanIndType wdiReq;
13495
13496 wdiReq.param = pReq->param;
13497
13498 wdiStatus = WDI_StopBatchScanInd(&wdiReq);
13499
13500 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13501 {
13502 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13503 "Stop batch scan ind failed %s:%d", __func__, wdiStatus);
13504 }
13505
13506 vos_mem_free(pReq);
13507
13508 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13509}
13510/*==========================================================================
13511 FUNCTION WDA_ProcessTriggerBatchScanResultInd
13512
13513 DESCRIPTION
13514 API to pull batch scan result from FW
13515
13516 PARAMETERS
13517 pWDA: Pointer to WDA context
13518 pGetBatchScanReq: Pointer to get batch scan result indication
13519
13520 RETURN VALUE
13521 NONE
13522
13523===========================================================================*/
13524VOS_STATUS WDA_ProcessTriggerBatchScanResultInd(tWDA_CbContext *pWDA,
13525 tSirTriggerBatchScanResultInd *pReq)
13526{
13527 WDI_Status wdiStatus;
13528 WDI_TriggerBatchScanResultIndType wdiReq;
13529
13530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13531 "------> %s " ,__func__);
13532
13533 wdiReq.param = pReq->param;
13534
13535 wdiStatus = WDI_TriggerBatchScanResultInd(&wdiReq);
13536
13537 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13538 {
13539 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13540 "Trigger batch scan result ind failed %s:%d",
13541 __func__, wdiStatus);
13542 }
13543
13544 vos_mem_free(pReq);
13545
13546 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13547}
13548
13549/*==========================================================================
13550 FUNCTION WDA_SetBatchScanRespCallback
13551
13552 DESCRIPTION
13553 API to process set batch scan response from FW
13554
13555 PARAMETERS
13556 pRsp: Pointer to set batch scan response
13557 pUserData: Pointer to user data
13558
13559 RETURN VALUE
13560 NONE
13561
13562===========================================================================*/
13563void WDA_SetBatchScanRespCallback
13564(
13565 WDI_SetBatchScanRspType *pRsp,
13566 void* pUserData
13567)
13568{
13569 tSirSetBatchScanRsp *pHddSetBatchScanRsp;
13570 tpAniSirGlobal pMac;
13571 void *pCallbackContext;
13572 tWDA_CbContext *pWDA = NULL ;
13573 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13574
13575
13576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13577 "<------ %s " ,__func__);
13578 if (NULL == pWdaParams)
13579 {
13580 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13581 "%s: pWdaParams received NULL", __func__);
13582 VOS_ASSERT(0) ;
13583 return ;
13584 }
13585
13586 /*extract WDA context*/
13587 pWDA = pWdaParams->pWdaContext;
13588 if (NULL == pWDA)
13589 {
13590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13591 "%s:pWDA is NULL can't invole HDD callback",
13592 __func__);
13593 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13594 vos_mem_free(pWdaParams->wdaMsgParam);
13595 vos_mem_free(pWdaParams);
13596 VOS_ASSERT(0);
13597 return;
13598 }
13599
13600 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13601 vos_mem_free(pWdaParams->wdaMsgParam);
13602 vos_mem_free(pWdaParams);
13603
13604 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13605 if (NULL == pMac)
13606 {
13607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13608 "%s:pMac is NULL", __func__);
13609 VOS_ASSERT(0);
13610 return;
13611 }
13612
13613 pHddSetBatchScanRsp =
13614 (tSirSetBatchScanRsp *)vos_mem_malloc(sizeof(tSirSetBatchScanRsp));
13615 if (NULL == pHddSetBatchScanRsp)
13616 {
13617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13618 "%s: VOS MEM Alloc Failure can't invoke HDD callback", __func__);
13619 VOS_ASSERT(0);
13620 return;
13621 }
13622
13623 pHddSetBatchScanRsp->nScansToBatch = pRsp->nScansToBatch;
13624
13625 pCallbackContext = pMac->pmc.setBatchScanReqCallbackContext;
13626 /*call hdd callback with set batch scan response data*/
13627 if(pMac->pmc.setBatchScanReqCallback)
13628 {
13629 pMac->pmc.setBatchScanReqCallback(pCallbackContext, pHddSetBatchScanRsp);
13630 }
13631 else
13632 {
13633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13634 "%s:HDD callback is null", __func__);
13635 VOS_ASSERT(0);
13636 }
13637
13638 vos_mem_free(pHddSetBatchScanRsp);
13639 return ;
13640}
13641
13642/*==========================================================================
13643 FUNCTION WDA_ProcessSetBatchScanReq
13644
13645 DESCRIPTION
13646 API to send set batch scan request to WDI
13647
13648 PARAMETERS
13649 pWDA: Pointer to WDA context
13650 pSetBatchScanReq: Pointer to set batch scan req
13651
13652 RETURN VALUE
13653 NONE
13654
13655===========================================================================*/
13656VOS_STATUS WDA_ProcessSetBatchScanReq(tWDA_CbContext *pWDA,
13657 tSirSetBatchScanReq *pSetBatchScanReq)
13658{
13659 WDI_Status status;
13660 tWDA_ReqParams *pWdaParams ;
13661 WDI_SetBatchScanReqType *pWdiSetBatchScanReq;
13662
13663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13664 "------> %s " ,__func__);
13665
13666 pWdiSetBatchScanReq =
13667 (WDI_SetBatchScanReqType *)vos_mem_malloc(sizeof(WDI_SetBatchScanReqType));
13668 if (NULL == pWdiSetBatchScanReq)
13669 {
13670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13671 "%s: VOS MEM Alloc Failure", __func__);
13672 vos_mem_free(pSetBatchScanReq);
13673 VOS_ASSERT(0);
13674 return VOS_STATUS_E_NOMEM;
13675 }
13676
13677 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
13678 if (NULL == pWdaParams)
13679 {
13680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13681 "%s: VOS MEM Alloc Failure", __func__);
13682 VOS_ASSERT(0);
13683 vos_mem_free(pSetBatchScanReq);
13684 vos_mem_free(pWdiSetBatchScanReq);
13685 return VOS_STATUS_E_NOMEM;
13686 }
13687
13688 pWdiSetBatchScanReq->scanFrequency = pSetBatchScanReq->scanFrequency;
13689 pWdiSetBatchScanReq->numberOfScansToBatch =
13690 pSetBatchScanReq->numberOfScansToBatch;
13691 pWdiSetBatchScanReq->bestNetwork = pSetBatchScanReq->bestNetwork;
13692 pWdiSetBatchScanReq->rfBand = pSetBatchScanReq->rfBand;
13693 pWdiSetBatchScanReq->rtt = pSetBatchScanReq->rtt;
13694
13695 pWdaParams->wdaWdiApiMsgParam = pWdiSetBatchScanReq;
13696 pWdaParams->pWdaContext = pWDA;
13697 pWdaParams->wdaMsgParam = pSetBatchScanReq;
13698
13699 status = WDI_SetBatchScanReq(pWdiSetBatchScanReq, pWdaParams,
13700 (WDI_SetBatchScanCb)WDA_SetBatchScanRespCallback);
13701 if (IS_WDI_STATUS_FAILURE(status))
13702 {
13703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13704 "Failure in Set Batch Scan REQ WDI API, free all the memory " );
13705 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13706 vos_mem_free(pWdaParams->wdaMsgParam);
13707 vos_mem_free(pWdaParams);
13708 }
13709 return CONVERT_WDI2VOS_STATUS(status);
13710}
13711
13712#endif
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053013713/*
13714 * FUNCTION: WDA_ProcessHT40OBSSScanInd
13715 *
13716 * DESCRIPTION: This function sends start/update OBSS scan
13717 * inidcation message to WDI
13718 *
13719 * PARAM:
13720 * pWDA: pointer to WDA context
13721 * pReq: pointer to start OBSS scan request
13722 */
13723VOS_STATUS WDA_ProcessHT40OBSSScanInd(tWDA_CbContext *pWDA,
13724 tSirHT40OBSSScanInd *pReq)
13725{
13726 WDI_Status status;
13727 WDI_HT40ObssScanParamsType wdiOBSSScanParams;
13728 WDI_HT40ObssScanIndType *pWdiOBSSScanInd;
Rajeev79dbe4c2013-10-05 11:03:42 +053013729
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053013730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13731 "------> %s " ,__func__);
13732 wdiOBSSScanParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
13733 wdiOBSSScanParams.pUserData = pWDA;
13734
13735 pWdiOBSSScanInd = &(wdiOBSSScanParams.wdiHT40ObssScanParam);
13736 pWdiOBSSScanInd->cmdType = pReq->cmdType;
13737 pWdiOBSSScanInd->scanType = pReq->scanType;
13738 pWdiOBSSScanInd->OBSSScanActiveDwellTime =
13739 pReq->OBSSScanActiveDwellTime;
13740 pWdiOBSSScanInd->OBSSScanPassiveDwellTime =
13741 pReq->OBSSScanPassiveDwellTime;
13742 pWdiOBSSScanInd->BSSChannelWidthTriggerScanInterval =
13743 pReq->BSSChannelWidthTriggerScanInterval;
13744 pWdiOBSSScanInd->BSSWidthChannelTransitionDelayFactor =
13745 pReq->BSSWidthChannelTransitionDelayFactor;
13746 pWdiOBSSScanInd->OBSSScanActiveTotalPerChannel =
13747 pReq->OBSSScanActiveTotalPerChannel;
13748 pWdiOBSSScanInd->OBSSScanPassiveTotalPerChannel =
13749 pReq->OBSSScanPassiveTotalPerChannel;
13750 pWdiOBSSScanInd->OBSSScanActivityThreshold =
13751 pReq->OBSSScanActivityThreshold;
13752 pWdiOBSSScanInd->channelCount = pReq->channelCount;
13753 vos_mem_copy(pWdiOBSSScanInd->channels,
13754 pReq->channels,
13755 pReq->channelCount);
13756 pWdiOBSSScanInd->selfStaIdx = pReq->selfStaIdx;
13757 pWdiOBSSScanInd->fortyMHZIntolerent = pReq->fortyMHZIntolerent;
13758 pWdiOBSSScanInd->bssIdx = pReq->bssIdx;
13759 pWdiOBSSScanInd->currentOperatingClass = pReq->currentOperatingClass;
13760 pWdiOBSSScanInd->ieFieldLen = pReq->ieFieldLen;
13761
13762 vos_mem_copy(pWdiOBSSScanInd->ieField,
13763 pReq->ieField,
13764 pReq->ieFieldLen);
13765
13766 status = WDI_HT40OBSSScanInd(&wdiOBSSScanParams);
13767 if (WDI_STATUS_PENDING == status)
13768 {
13769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13770 "Pending received for %s:%d ",__func__,__LINE__ );
13771 }
13772 else if (WDI_STATUS_SUCCESS_SYNC != status)
13773 {
13774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13775 "Failure in %s:%d ",__func__,__LINE__ );
13776 }
13777 return CONVERT_WDI2VOS_STATUS(status) ;
13778}
13779/*
13780 * FUNCTION: WDA_ProcessHT40OBSSStopScanInd
13781 *
13782 * DESCRIPTION: This function sends stop OBSS scan inidcation message to WDI
13783 *
13784 * PARAM:
13785 * pWDA: pointer to WDA context
13786 * pReq: pointer to stop batch scan request
13787 */
13788VOS_STATUS WDA_ProcessHT40OBSSStopScanInd(tWDA_CbContext *pWDA,
13789 tANI_U8 *bssIdx)
13790{
13791 WDI_Status status;
13792
13793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13794 "------> %s " ,__func__);
13795
13796 status = WDI_HT40OBSSStopScanInd(*bssIdx);
13797 if (WDI_STATUS_PENDING == status)
13798 {
13799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13800 "Pending received for %s:%d ",__func__,__LINE__ );
13801 }
13802 else if (WDI_STATUS_SUCCESS_SYNC != status)
13803 {
13804 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13805 "Failure in %s:%d ",__func__,__LINE__ );
13806 }
13807 return CONVERT_WDI2VOS_STATUS(status) ;
13808}
Yue Mab9c86f42013-08-14 15:59:08 -070013809/*
Chittajit Mitraf5413a42013-10-18 14:20:08 -070013810 * FUNCTION: WDA_ProcessRateUpdateInd
13811 *
13812 */
13813VOS_STATUS WDA_ProcessRateUpdateInd(tWDA_CbContext *pWDA,
13814 tSirRateUpdateInd *pRateUpdateParams)
13815{
13816 WDI_Status wdiStatus;
13817 WDI_RateUpdateIndParams rateUpdateParams;
13818
13819 vos_mem_copy(rateUpdateParams.bssid,
13820 pRateUpdateParams->bssid, sizeof(tSirMacAddr));
13821
13822 rateUpdateParams.ucastDataRateTxFlag =
13823 pRateUpdateParams->ucastDataRateTxFlag;
13824 rateUpdateParams.reliableMcastDataRateTxFlag =
13825 pRateUpdateParams->reliableMcastDataRateTxFlag;
13826 rateUpdateParams.mcastDataRate24GHzTxFlag =
13827 pRateUpdateParams->mcastDataRate24GHzTxFlag;
13828 rateUpdateParams.mcastDataRate5GHzTxFlag =
13829 pRateUpdateParams->mcastDataRate5GHzTxFlag;
13830
13831 rateUpdateParams.ucastDataRate = pRateUpdateParams->ucastDataRate;
13832 rateUpdateParams.reliableMcastDataRate =
13833 pRateUpdateParams->reliableMcastDataRate;
13834 rateUpdateParams.mcastDataRate24GHz = pRateUpdateParams->mcastDataRate24GHz;
13835 rateUpdateParams.mcastDataRate5GHz = pRateUpdateParams->mcastDataRate5GHz;
13836
13837 rateUpdateParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
13838 rateUpdateParams.pUserData = pWDA;
13839
13840 wdiStatus = WDI_RateUpdateInd(&rateUpdateParams);
13841
13842 if (WDI_STATUS_PENDING == wdiStatus)
13843 {
13844 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13845 "Pending received for %s:%d", __func__, __LINE__ );
13846 }
13847 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13848 {
13849 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13850 "Failure in %s:%d", __func__, __LINE__ );
13851 }
13852
13853 vos_mem_free(pRateUpdateParams);
13854
13855 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13856}
13857
13858/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013859 * -------------------------------------------------------------------------
13860 * DATA interface with WDI for Mgmt Frames
13861 * -------------------------------------------------------------------------
13862 */
Jeff Johnson295189b2012-06-20 16:38:30 -070013863/*
13864 * FUNCTION: WDA_TxComplete
13865 * Callback function for the WDA_TxPacket
13866 */
13867VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
13868 VOS_STATUS status )
13869{
13870
13871 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
13872 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Anjaneedevi Kapparapuf4883a72015-11-12 18:18:35 +053013873 tANI_U64 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013874
Mihir Shete63341222015-03-24 15:39:18 +053013875 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Enter:%s", __func__);
13876
Jeff Johnson295189b2012-06-20 16:38:30 -070013877 if(NULL == wdaContext)
13878 {
13879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13880 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013881 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013882 VOS_ASSERT(0);
Sushant Kaushik8355d202014-12-17 16:48:10 +053013883 vos_pkt_return_packet(pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070013884 return VOS_STATUS_E_FAILURE;
13885 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070013886
13887 /*Check if frame was timed out or not*/
13888 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
13889 (v_PVOID_t)&uUserData);
13890
13891 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
13892 {
13893 /*Discard frame - no further processing is needed*/
Mihir Shete63341222015-03-24 15:39:18 +053013894 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
13895 "%s: MGMT Frame Tx timed out",
13896 __func__);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070013897 vos_pkt_return_packet(pData);
13898 return VOS_STATUS_SUCCESS;
13899 }
13900
Jeff Johnson295189b2012-06-20 16:38:30 -070013901 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
13902 if( NULL!=wdaContext->pTxCbFunc)
13903 {
13904 /*check if packet is freed already*/
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053013905 if(vos_atomic_set((uintptr_t*)&wdaContext->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED) == (uintptr_t)pData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013906 {
13907 wdaContext->pTxCbFunc(pMac, pData);
13908 }
13909 else
13910 {
13911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053013912 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013913 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070013914 //Return from here since we reaching here because the packet already timeout
13915 return status;
13916 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013917 }
13918
13919 /*
13920 * Trigger the event to bring the HAL TL Tx complete function to come
13921 * out of wait
13922 * Let the coe above to complete the packet first. When this event is set,
13923 * the thread waiting for the event may run and set Vospacket_freed causing the original
13924 * packet not being freed.
13925 */
13926 status = vos_event_set(&wdaContext->txFrameEvent);
13927 if(!VOS_IS_STATUS_SUCCESS(status))
13928 {
13929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013930 "NEW VOS Event Set failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070013931 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013932 return status;
13933}
Jeff Johnson295189b2012-06-20 16:38:30 -070013934/*
13935 * FUNCTION: WDA_TxPacket
13936 * Forward TX management frame to WDI
13937 */
13938VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
13939 void *pFrmBuf,
13940 tANI_U16 frmLen,
13941 eFrameType frmType,
13942 eFrameTxDir txDir,
13943 tANI_U8 tid,
13944 pWDATxRxCompFunc pCompFunc,
13945 void *pData,
13946 pWDAAckFnTxComp pAckTxComp,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053013947 tANI_U32 txFlag,
13948 tANI_U32 txBdToken
13949 )
Jeff Johnson295189b2012-06-20 16:38:30 -070013950{
13951 VOS_STATUS status = VOS_STATUS_SUCCESS ;
13952 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
13953 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
13954 tANI_U8 eventIdx = 0;
13955 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
13956 tpAniSirGlobal pMac;
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053013957 tpSirTxBdStatus txBdStatus = {0};
Abhishek Singh447839d2015-11-30 14:22:10 +053013958 v_TIME_t time_snapshot;
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053013959
Jeff Johnson295189b2012-06-20 16:38:30 -070013960 if((NULL == pWDA)||(NULL == pFrmBuf))
13961 {
13962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053013963 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013964 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070013965 VOS_ASSERT(0);
13966 return VOS_STATUS_E_FAILURE;
13967 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013968
Jeff Johnson295189b2012-06-20 16:38:30 -070013969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053013970 "Tx Mgmt Frame Subtype: %d alloc(%p) txBdToken = %u",
13971 pFc->subType, pFrmBuf, txBdToken);
Jeff Johnson295189b2012-06-20 16:38:30 -070013972 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13973 if(NULL == pMac)
13974 {
13975 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013976 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013977 VOS_ASSERT(0);
13978 return VOS_STATUS_E_FAILURE;
13979 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013980
Jeff Johnson295189b2012-06-20 16:38:30 -070013981 /* store the call back function in WDA context */
13982 pWDA->pTxCbFunc = pCompFunc;
13983 /* store the call back for the function of ackTxComplete */
13984 if( pAckTxComp )
13985 {
Jeff Johnsone7245742012-09-05 17:12:55 -070013986 if( NULL != pWDA->pAckTxCbFunc )
13987 {
13988 /* Already TxComp is active no need to active again */
Agarwal Ashish3b3f3cb2015-07-02 16:43:47 +053013989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013990 "There is already one request pending for tx complete");
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053013991 pWDA->pAckTxCbFunc( pMac, &txBdStatus);
Jeff Johnsone7245742012-09-05 17:12:55 -070013992 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070013993
Jeff Johnsone7245742012-09-05 17:12:55 -070013994 if( VOS_STATUS_SUCCESS !=
13995 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
13996 {
13997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13998 "Tx Complete timeout Timer Stop Failed ");
13999 }
14000 else
14001 {
Agarwal Ashish3b3f3cb2015-07-02 16:43:47 +053014002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080014003 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070014004 }
14005 }
14006
14007 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
14008 pWDA->pAckTxCbFunc = pAckTxComp;
14009 if( VOS_STATUS_SUCCESS !=
14010 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
14011 {
14012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14013 "Tx Complete Timer Start Failed ");
14014 pWDA->pAckTxCbFunc = NULL;
14015 return eHAL_STATUS_FAILURE;
14016 }
14017 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014018 /* Reset the event to be not signalled */
14019 status = vos_event_reset(&pWDA->txFrameEvent);
14020 if(!VOS_IS_STATUS_SUCCESS(status))
14021 {
14022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014023 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014024 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
14025 if( pAckTxComp )
14026 {
14027 pWDA->pAckTxCbFunc = NULL;
14028 if( VOS_STATUS_SUCCESS !=
14029 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14030 {
14031 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14032 "Tx Complete timeout Timer Stop Failed ");
14033 }
14034 }
14035 return VOS_STATUS_E_FAILURE;
14036 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014037
14038 /* If Peer Sta mask is set don't overwrite to self sta */
14039 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070014040 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014041 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070014042 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014043 else
14044 {
Ganesh K08bce952012-12-13 15:04:41 -080014045 /* Get system role, use the self station if in unknown role or STA role */
14046 systemRole = wdaGetGlobalSystemRole(pMac);
14047 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
14048 (( eSYSTEM_STA_ROLE == systemRole )
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080014049#if defined FEATURE_WLAN_ESE || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080014050 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014051#endif
Ganesh K08bce952012-12-13 15:04:41 -080014052 ))
14053 {
14054 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
14055 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080014056 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014057
Jeff Johnsone7245742012-09-05 17:12:55 -070014058 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
14059 disassoc frame reaches the HW, HAL has already deleted the peer station */
14060 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070014061 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080014062 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070014063 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070014064 {
Jeff Johnson295189b2012-06-20 16:38:30 -070014065 /*Send Probe request frames on self sta idx*/
14066 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070014067 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014068 /* Since we donot want probe responses to be retried, send probe responses
14069 through the NO_ACK queues */
14070 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
14071 {
14072 //probe response is sent out using self station and no retries options.
14073 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
14074 }
14075 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
14076 {
14077 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
14078 }
14079 }
Pradeep Reddy POTTETI01710062015-06-29 13:35:53 +053014080#ifdef FEATURE_WLAN_TDLS
14081 /* TDLS Management frames are sent using Peer Sta mask */
14082 else if ((pFc->type == SIR_MAC_DATA_FRAME) &&
14083 (txFlag & HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME))
14084 {
14085 txFlag |= HAL_USE_PEER_STA_REQUESTED_MASK;
14086
14087 }
14088#endif
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053014089 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
Jeff Johnson295189b2012-06-20 16:38:30 -070014090
14091 /*Set frame tag to 0
14092 We will use the WDA user data in order to tag a frame as expired*/
14093 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
14094 (v_PVOID_t)0);
14095
14096
14097 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053014098 frmLen, ucTypeSubType, tid, WDA_TxComplete, NULL, txFlag,
14099 txBdToken))!= VOS_STATUS_SUCCESS)
Jeff Johnson295189b2012-06-20 16:38:30 -070014100 {
14101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014102 "Sending Mgmt Frame failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014103 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053014104 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 -070014105 if( pAckTxComp )
14106 {
14107 pWDA->pAckTxCbFunc = NULL;
14108 if( VOS_STATUS_SUCCESS !=
14109 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14110 {
14111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14112 "Tx Complete timeout Timer Stop Failed ");
14113 }
14114 }
14115 return VOS_STATUS_E_FAILURE;
14116 }
Abhishek Singh447839d2015-11-30 14:22:10 +053014117 time_snapshot = vos_timer_get_system_time();
Jeff Johnson295189b2012-06-20 16:38:30 -070014118 /*
14119 * Wait for the event to be set by the TL, to get the response of TX
14120 * complete, this event should be set by the Callback function called by TL
14121 */
14122 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
14123 &eventIdx);
14124 if(!VOS_IS_STATUS_SUCCESS(status))
14125 {
14126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14127 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014128 __func__, status);
Sushant Kaushik8355d202014-12-17 16:48:10 +053014129
14130 /*Tag Frame as timed out for later deletion*/
14131 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
14132 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
Jeff Johnson295189b2012-06-20 16:38:30 -070014133 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
14134 after the packet gets completed(packet freed once)*/
14135
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070014136 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
Katya Nigam53677462014-08-04 11:37:28 +053014137 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070014138
Jeff Johnson295189b2012-06-20 16:38:30 -070014139 /* check whether the packet was freed already,so need not free again when
14140 * TL calls the WDA_Txcomplete routine
14141 */
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053014142 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED);
14143 /*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 -070014144 {
14145 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070014146 } */
Abhishek Singhb74bfc02015-11-26 16:53:47 +053014147
14148 WLANTL_TLDebugMessage(WLANTL_DEBUG_FW_CLEANUP);
14149
Abhishek Singh837adf22015-10-01 17:37:37 +053014150 if (vos_isFatalEventEnabled())
14151 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
14152 WLAN_LOG_INDICATOR_HOST_DRIVER,
14153 WLAN_LOG_REASON_MGMT_FRAME_TIMEOUT,
14154 FALSE, TRUE);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070014155
Jeff Johnson295189b2012-06-20 16:38:30 -070014156 if( pAckTxComp )
14157 {
14158 pWDA->pAckTxCbFunc = NULL;
14159 if( VOS_STATUS_SUCCESS !=
14160 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14161 {
14162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14163 "Tx Complete timeout Timer Stop Failed ");
14164 }
14165 }
Abhishek Singh447839d2015-11-30 14:22:10 +053014166 pWDA->mgmtTxfailureCnt++;
14167
14168 /* SSR if timeout continously for
14169 * WDA_TX_FAILURE_RECOVERY_THRESHOLD times.
14170 */
14171 if (WDA_TX_FAILURE_RECOVERY_THRESHOLD ==
14172 pWDA->mgmtTxfailureCnt)
14173 {
14174 vos_wlanRestart();
14175 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014176 status = VOS_STATUS_E_FAILURE;
14177 }
Abhishek Singh447839d2015-11-30 14:22:10 +053014178
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +053014179#ifdef WLAN_DUMP_MGMTFRAMES
14180 if (VOS_IS_STATUS_SUCCESS(status))
14181 {
14182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14183 "%s() TX packet : SubType %d", __func__,pFc->subType);
14184 VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14185 pData, frmLen);
14186 }
14187#endif
14188
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080014189 if (VOS_IS_STATUS_SUCCESS(status))
14190 {
Abhishek Singh447839d2015-11-30 14:22:10 +053014191 pWDA->mgmtTxfailureCnt = 0;
14192 if ((vos_timer_get_system_time() - time_snapshot) >=
14193 WDA_TX_TIME_THRESHOLD)
14194 {
14195 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14196 "Tx Complete took %lu ms",
14197 vos_timer_get_system_time() - time_snapshot);
14198 }
14199
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080014200 if (pMac->fEnableDebugLog & 0x1)
14201 {
14202 if ((pFc->type == SIR_MAC_MGMT_FRAME) &&
14203 (pFc->subType != SIR_MAC_MGMT_PROBE_REQ) &&
14204 (pFc->subType != SIR_MAC_MGMT_PROBE_RSP))
14205 {
14206 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "TX MGMT - Type %hu, SubType %hu",
14207 pFc->type, pFc->subType);
14208 }
14209 }
14210 }
14211
14212
Jeff Johnson295189b2012-06-20 16:38:30 -070014213 return status;
14214}
Jeff Johnson295189b2012-06-20 16:38:30 -070014215/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014216 * FUNCTION: WDA_ProcessDHCPStartInd
14217 * Forward DHCP Start to WDI
14218 */
14219static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
14220 tAniDHCPInd *dhcpStartInd)
14221{
14222 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053014223 WDI_DHCPInd wdiDHCPInd;
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014224
c_hpothu0b0cab72014-02-13 21:52:40 +053014225 wdiDHCPInd.device_mode = dhcpStartInd->device_mode;
14226 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStartInd->macAddr,
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014227 sizeof(tSirMacAddr));
14228
c_hpothu0b0cab72014-02-13 21:52:40 +053014229 status = WDI_dhcpStartInd(&wdiDHCPInd);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014230
c_hpothu0b0cab72014-02-13 21:52:40 +053014231 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014232 {
c_hpothu0b0cab72014-02-13 21:52:40 +053014233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14234 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014235 }
c_hpothu0b0cab72014-02-13 21:52:40 +053014236 else if (WDI_STATUS_SUCCESS_SYNC != status)
14237 {
14238 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14239 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
14240 }
14241
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014242 vos_mem_free(dhcpStartInd);
14243 return CONVERT_WDI2VOS_STATUS(status) ;
14244}
14245
14246 /*
14247 * FUNCTION: WDA_ProcessDHCPStopInd
14248 * Forward DHCP Stop to WDI
14249 */
14250 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
14251 tAniDHCPInd *dhcpStopInd)
14252 {
14253 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053014254 WDI_DHCPInd wdiDHCPInd;
14255
14256 wdiDHCPInd.device_mode = dhcpStopInd->device_mode;
14257 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
14258
14259 status = WDI_dhcpStopInd(&wdiDHCPInd);
14260
14261 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)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014267 {
c_hpothu0b0cab72014-02-13 21:52:40 +053014268 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14269 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014270 }
c_hpothu0b0cab72014-02-13 21:52:40 +053014271
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014272 vos_mem_free(dhcpStopInd);
c_hpothu0b0cab72014-02-13 21:52:40 +053014273
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014274 return CONVERT_WDI2VOS_STATUS(status) ;
14275 }
14276
14277/*
Siddharth Bhal171788a2014-09-29 21:02:40 +053014278 * FUNCTION: WDA_ProcessSetSpoofMacAddrReq
14279 *
14280 * DESCRIPTION: This function sends Spoof Mac Addr Req to WDI
14281 *
14282 * PARAM:
14283 * pWDA: pointer to WDA context
14284 * pReq: pointer to stop batch scan request
14285 */
14286VOS_STATUS WDA_ProcessSetSpoofMacAddrReq(tWDA_CbContext *pWDA,
14287 tpSpoofMacAddrReqParams pReq)
14288{
14289 WDI_Status wdiStatus;
14290 WDI_SpoofMacAddrInfoType *WDI_SpoofMacAddrInfoParams;
14291 tWDA_ReqParams *pWdaParams;
14292
14293 WDI_SpoofMacAddrInfoParams = (WDI_SpoofMacAddrInfoType *)vos_mem_malloc(
14294 sizeof(WDI_SpoofMacAddrInfoType));
14295 if(NULL == WDI_SpoofMacAddrInfoParams) {
14296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14297 "%s: VOS MEM Alloc Failure in Spoof Req", __func__);
14298 VOS_ASSERT(0);
14299 return VOS_STATUS_E_NOMEM;
14300 }
14301 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14302 if(NULL == pWdaParams) {
14303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14304 "%s: VOS MEM Alloc Failure", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +053014305 vos_mem_free(WDI_SpoofMacAddrInfoParams);
Siddharth Bhal171788a2014-09-29 21:02:40 +053014306 VOS_ASSERT(0);
14307 return VOS_STATUS_E_NOMEM;
14308 }
14309
14310 vos_mem_copy(WDI_SpoofMacAddrInfoParams->macAddr,
14311 pReq->macAddr, VOS_MAC_ADDRESS_LEN);
14312
14313 pWdaParams->pWdaContext = pWDA;
14314 /* Store Upper layer req pointer, as this will be used for response */
Siddharth Bhal029d6732014-10-09 21:31:23 +053014315 pWdaParams->wdaMsgParam = (void *)pReq;
14316
14317 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, WDA_MAC_ADDRESS_STR,
14318 WDA_MAC_ADDR_ARRAY(WDI_SpoofMacAddrInfoParams->macAddr));
14319
Siddharth Bhal171788a2014-09-29 21:02:40 +053014320 /* store Params pass it to WDI */
14321 pWdaParams->wdaWdiApiMsgParam = (void *)WDI_SpoofMacAddrInfoParams ;
14322
14323 wdiStatus = WDI_SetSpoofMacAddrReq(WDI_SpoofMacAddrInfoParams,
Siddharth Bhal029d6732014-10-09 21:31:23 +053014324 (WDI_SetSpoofMacAddrRspCb) WDA_SpoofMacAddrRspCallback,
14325 pWdaParams );
Siddharth Bhal171788a2014-09-29 21:02:40 +053014326
14327 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14328 {
14329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14330 "Failure in SetSpoofMacAddrReq Params WDI API, free all the memory " );
14331 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14332 vos_mem_free(pWdaParams->wdaMsgParam);
14333 vos_mem_free(pWdaParams);
14334 }
14335
14336 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
14337}
14338
c_manjeecfd1efb2015-09-25 19:32:34 +053014339
14340/*
14341 * FUNCTION: WDA_FwrMemDumpRespCallback
14342 * recieves Mgmt Logging init response from FW
14343 */
14344 void WDA_FwrMemDumpRespCallback(WDI_FwrMemDumpRsp* wdiRsp,
14345 void* pUserData)
14346{
14347 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14348 tAniFwrDumpReq *pFwrMemDumpReq;
14349 tAniFwrDumpRsp *pFwrMemDumpRsp;
14350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14351 "<------ %s " ,__func__);
14352
14353 if(NULL == pWdaParams)
14354 {
14355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14356 "%s: pWdaParams received NULL", __func__);
14357 VOS_ASSERT(0);
14358 return ;
14359 }
14360
14361 if(NULL == pWdaParams->wdaMsgParam)
14362 {
14363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14364 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
14365 VOS_ASSERT(0);
14366 vos_mem_free(pWdaParams);
14367 return ;
14368 }
14369
14370 pFwrMemDumpRsp = (tAniFwrDumpRsp *)vos_mem_malloc(sizeof(tAniFwrDumpRsp));
14371 if(pFwrMemDumpRsp == NULL)
14372 {
14373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14374 "%s: pFwrMemDumpRsp is NULL", __func__);
14375 VOS_ASSERT(0);
14376 vos_mem_free(pWdaParams);
14377 return ;
14378 }
14379
14380 pFwrMemDumpRsp->dump_status = wdiRsp->dump_status;
14381 pFwrMemDumpReq = (tAniFwrDumpReq *)pWdaParams->wdaMsgParam;
14382
14383 if(pFwrMemDumpReq->fwMemDumpReqCallback)
14384 {
14385 pFwrMemDumpReq->fwMemDumpReqCallback(
14386 pFwrMemDumpReq->fwMemDumpReqContext,
14387 pFwrMemDumpRsp);
14388 }
14389 else
14390 {
14391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14392 "%s: FwrMemDump callback is NULL", __func__);
14393 }
14394
14395 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14396 vos_mem_free(pWdaParams->wdaMsgParam);
14397 vos_mem_free(pWdaParams);
14398 vos_mem_free(pFwrMemDumpRsp);
14399
14400 return ;
14401}
14402
14403VOS_STATUS WDA_ProcessFwrMemDumpReq(tWDA_CbContext * pWDA,
14404 tAniFwrDumpReq* pFwrMemDumpReq)
14405{
14406 VOS_STATUS status = VOS_STATUS_SUCCESS;
14407 WDI_Status wstatus;
14408 WDI_FwrMemDumpReqType * pWdiFwrMemDumpReq;
14409 tWDA_ReqParams *pWdaParams ;
14410
14411 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14412 "------> %s " ,__func__);
14413 /* Sanity Check*/
14414 if(NULL == pFwrMemDumpReq)
14415 {
14416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14417 "%s: pFwrMemDumpReq received NULL", __func__);
14418 VOS_ASSERT(0) ;
14419 return VOS_STATUS_E_FAULT;
14420 }
14421
14422 pWdiFwrMemDumpReq = (WDI_FwrMemDumpReqType *)vos_mem_malloc(sizeof(WDI_FwrMemDumpReqType));
14423 if(NULL == pWdiFwrMemDumpReq)
14424 {
14425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14426 "%s: pWdiFwrMemDumpReq Alloc Failure", __func__);
14427 VOS_ASSERT(0);
14428 return VOS_STATUS_E_NOMEM;
14429 }
14430
14431 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14432 if(NULL == pWdaParams)
14433 {
14434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14435 "%s: pWdaParams Alloc Failure", __func__);
14436 VOS_ASSERT(0);
14437 vos_mem_free(pWdiFwrMemDumpReq);
14438 return VOS_STATUS_E_NOMEM;
14439 }
14440
14441 /* Store Params pass it to WDI */
14442 pWdaParams->wdaWdiApiMsgParam = (void *)pWdiFwrMemDumpReq;
14443 pWdaParams->pWdaContext = pWDA;
14444 /* Store param pointer as passed in by caller */
14445 pWdaParams->wdaMsgParam = pFwrMemDumpReq;
14446
14447 status = WDI_FwrMemDumpReq(pWdiFwrMemDumpReq,
14448 (WDI_FwrMemDumpCb)WDA_FwrMemDumpRespCallback,
14449 pWdaParams);
14450
14451 if(IS_WDI_STATUS_FAILURE(wstatus))
14452 {
14453 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14454 FL("Fwr Mem Dump Req failed, free all the memory"));
14455 status = CONVERT_WDI2VOS_STATUS(wstatus);
14456 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14457 vos_mem_free(pWdaParams->wdaMsgParam);
14458 vos_mem_free(pWdaParams);
14459 pWdaParams->wdaWdiApiMsgParam = NULL;
14460 pWdaParams->wdaMsgParam = NULL;
14461 }
14462
14463 return status;
14464
14465}
14466
14467
14468
Siddharth Bhal171788a2014-09-29 21:02:40 +053014469/*
Jeff Johnson295189b2012-06-20 16:38:30 -070014470 * FUNCTION: WDA_McProcessMsg
14471 * Trigger DAL-AL to start CFG download
14472 */
14473VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
14474{
14475 VOS_STATUS status = VOS_STATUS_SUCCESS;
14476 tWDA_CbContext *pWDA = NULL ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014477 if(NULL == pMsg)
Jeff Johnson295189b2012-06-20 16:38:30 -070014478 {
14479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014480 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014481 VOS_ASSERT(0);
14482 return VOS_STATUS_E_FAILURE;
14483 }
14484
14485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014486 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070014487
14488 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
14489 if(NULL == pWDA )
14490 {
14491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014492 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014493 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070014494 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070014495 return VOS_STATUS_E_FAILURE;
14496 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014497 /* Process all the WDA messages.. */
14498 switch( pMsg->type )
14499 {
14500 case WNI_CFG_DNLD_REQ:
14501 {
14502 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070014503 /* call WDA complete event if config download success */
14504 if( VOS_IS_STATUS_SUCCESS(status) )
14505 {
14506 vos_WDAComplete_cback(pVosContext);
14507 }
14508 else
14509 {
14510 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14511 "WDA Config Download failure" );
14512 }
14513 break ;
14514 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014515 /*
14516 * Init SCAN request from PE, convert it into DAL format
14517 * and send it to DAL
14518 */
14519 case WDA_INIT_SCAN_REQ:
14520 {
14521 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
14522 break ;
14523 }
14524 /* start SCAN request from PE */
14525 case WDA_START_SCAN_REQ:
14526 {
14527 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
14528 break ;
14529 }
14530 /* end SCAN request from PE */
14531 case WDA_END_SCAN_REQ:
14532 {
14533 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
14534 break ;
14535 }
14536 /* end SCAN request from PE */
14537 case WDA_FINISH_SCAN_REQ:
14538 {
14539 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
14540 break ;
14541 }
14542 /* join request from PE */
14543 case WDA_CHNL_SWITCH_REQ:
14544 {
14545 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
14546 {
14547 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
14548 }
14549 else
14550 {
Kalikinkar dhara1e83b772014-02-06 12:59:22 -080014551 if (IS_FEATURE_SUPPORTED_BY_FW(CH_SWITCH_V1) &&
14552 eHAL_CHANNEL_SWITCH_SOURCE_CSA ==
14553 ((tSwitchChannelParams*)pMsg->bodyptr)->channelSwitchSrc )
14554 {
14555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14556 "call ProcessChannelSwitchReq_V1" );
14557 WDA_ProcessChannelSwitchReq_V1(pWDA,
14558 (tSwitchChannelParams*)pMsg->bodyptr) ;
14559 }
14560 else
14561 {
14562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14563 "call ProcessChannelSwitchReq" );
14564 WDA_ProcessChannelSwitchReq(pWDA,
14565 (tSwitchChannelParams*)pMsg->bodyptr) ;
14566 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014567 }
14568 break ;
14569 }
14570 /* ADD BSS request from PE */
14571 case WDA_ADD_BSS_REQ:
14572 {
14573 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
14574 break ;
14575 }
14576 case WDA_ADD_STA_REQ:
14577 {
14578 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
14579 break ;
14580 }
14581 case WDA_DELETE_BSS_REQ:
14582 {
Jeff Johnson295189b2012-06-20 16:38:30 -070014583 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
14584 break ;
14585 }
14586 case WDA_DELETE_STA_REQ:
14587 {
Jeff Johnson295189b2012-06-20 16:38:30 -070014588 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
14589 break ;
14590 }
14591 case WDA_CONFIG_PARAM_UPDATE_REQ:
14592 {
14593 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
14594 break ;
14595 }
14596 case WDA_SET_BSSKEY_REQ:
14597 {
14598 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
14599 break ;
14600 }
14601 case WDA_SET_STAKEY_REQ:
14602 {
14603 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
14604 break ;
14605 }
14606 case WDA_SET_STA_BCASTKEY_REQ:
14607 {
14608 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
14609 break ;
14610 }
14611 case WDA_REMOVE_BSSKEY_REQ:
14612 {
14613 WDA_ProcessRemoveBssKeyReq(pWDA,
14614 (tRemoveBssKeyParams *)pMsg->bodyptr);
14615 break ;
14616 }
14617 case WDA_REMOVE_STAKEY_REQ:
14618 {
14619 WDA_ProcessRemoveStaKeyReq(pWDA,
14620 (tRemoveStaKeyParams *)pMsg->bodyptr);
14621 break ;
14622 }
14623 case WDA_REMOVE_STA_BCASTKEY_REQ:
14624 {
14625 /* TODO: currently UMAC is not sending this request, Add the code for
14626 handling this request when UMAC supports */
14627 break;
14628 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080014629#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -070014630 case WDA_TSM_STATS_REQ:
14631 {
Srinivas Girigowda5cecb202013-10-08 09:13:25 -070014632 WDA_ProcessTsmStatsReq(pWDA, (tpAniGetTsmStatsReq)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070014633 break;
14634 }
14635#endif
14636 case WDA_UPDATE_EDCA_PROFILE_IND:
14637 {
14638 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
14639 break;
14640 }
14641 case WDA_ADD_TS_REQ:
14642 {
14643 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
14644 break;
14645 }
14646 case WDA_DEL_TS_REQ:
14647 {
14648 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
14649 break;
14650 }
14651 case WDA_ADDBA_REQ:
14652 {
14653 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
14654 break;
14655 }
14656 case WDA_DELBA_IND:
14657 {
14658 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
14659 break;
14660 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080014661 case WDA_UPDATE_CHAN_LIST_REQ:
14662 {
14663 WDA_ProcessUpdateChannelList(pWDA,
14664 (tSirUpdateChanList *)pMsg->bodyptr);
14665 break;
14666 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014667 case WDA_SET_LINK_STATE:
14668 {
14669 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
14670 break;
14671 }
14672 case WDA_GET_STATISTICS_REQ:
14673 {
14674 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
14675 break;
14676 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080014677#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080014678 case WDA_GET_ROAM_RSSI_REQ:
14679 {
14680 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
14681 break;
14682 }
14683#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070014684 case WDA_PWR_SAVE_CFG:
14685 {
14686 if(pWDA->wdaState == WDA_READY_STATE)
14687 {
14688 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
14689 }
14690 else
14691 {
14692 if(NULL != pMsg->bodyptr)
14693 {
14694 vos_mem_free(pMsg->bodyptr);
14695 }
14696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14697 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
14698 }
14699 break;
14700 }
14701 case WDA_ENTER_IMPS_REQ:
14702 {
14703 if(pWDA->wdaState == WDA_READY_STATE)
14704 {
14705 WDA_ProcessEnterImpsReq(pWDA);
14706 }
14707 else
14708 {
14709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14710 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
14711 }
14712 break;
14713 }
14714 case WDA_EXIT_IMPS_REQ:
14715 {
14716 if(pWDA->wdaState == WDA_READY_STATE)
14717 {
14718 WDA_ProcessExitImpsReq(pWDA);
14719 }
14720 else
14721 {
14722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14723 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
14724 }
14725 break;
14726 }
14727 case WDA_ENTER_BMPS_REQ:
14728 {
14729 if(pWDA->wdaState == WDA_READY_STATE)
14730 {
14731 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
14732 }
14733 else
14734 {
14735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14736 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
14737 }
14738 break;
14739 }
14740 case WDA_EXIT_BMPS_REQ:
14741 {
14742 if(pWDA->wdaState == WDA_READY_STATE)
14743 {
14744 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
14745 }
14746 else
14747 {
14748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14749 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
14750 }
14751 break;
14752 }
14753 case WDA_ENTER_UAPSD_REQ:
14754 {
14755 if(pWDA->wdaState == WDA_READY_STATE)
14756 {
14757 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
14758 }
14759 else
14760 {
14761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14762 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
14763 }
14764 break;
14765 }
14766 case WDA_EXIT_UAPSD_REQ:
14767 {
14768 if(pWDA->wdaState == WDA_READY_STATE)
14769 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014770 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070014771 }
14772 else
14773 {
14774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14775 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
14776 }
14777 break;
14778 }
14779 case WDA_UPDATE_UAPSD_IND:
14780 {
14781 if(pWDA->wdaState == WDA_READY_STATE)
14782 {
14783 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
14784 }
14785 else
14786 {
14787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14788 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
14789 }
14790 break;
14791 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014792 case WDA_REGISTER_PE_CALLBACK :
14793 {
14794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
14795 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
14796 /*TODO: store the PE callback */
14797 /* Do Nothing? MSG Body should be freed at here */
14798 if(NULL != pMsg->bodyptr)
14799 {
14800 vos_mem_free(pMsg->bodyptr);
14801 }
14802 break;
14803 }
14804 case WDA_SYS_READY_IND :
14805 {
14806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
14807 "Handling msg type WDA_SYS_READY_IND " );
14808 pWDA->wdaState = WDA_READY_STATE;
14809 if(NULL != pMsg->bodyptr)
14810 {
14811 vos_mem_free(pMsg->bodyptr);
14812 }
14813 break;
14814 }
14815 case WDA_BEACON_FILTER_IND :
14816 {
14817 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
14818 break;
14819 }
14820 case WDA_BTC_SET_CFG:
14821 {
14822 /*TODO: handle this while dealing with BTC */
14823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
14824 "Handling msg type WDA_BTC_SET_CFG " );
14825 /* Do Nothing? MSG Body should be freed at here */
14826 if(NULL != pMsg->bodyptr)
14827 {
14828 vos_mem_free(pMsg->bodyptr);
14829 }
14830 break;
14831 }
14832 case WDA_SIGNAL_BT_EVENT:
14833 {
14834 /*TODO: handle this while dealing with BTC */
14835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
14836 "Handling msg type WDA_SIGNAL_BT_EVENT " );
14837 /* Do Nothing? MSG Body should be freed at here */
14838 if(NULL != pMsg->bodyptr)
14839 {
14840 vos_mem_free(pMsg->bodyptr);
14841 }
14842 break;
14843 }
14844 case WDA_CFG_RXP_FILTER_REQ:
14845 {
14846 WDA_ProcessConfigureRxpFilterReq(pWDA,
14847 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
14848 break;
14849 }
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053014850 case WDA_MGMT_LOGGING_INIT_REQ:
14851 {
Siddharth Bhald1be97f2015-05-27 22:39:59 +053014852 WDA_ProcessFWLoggingInitReq(pWDA,
14853 (tSirFWLoggingInitParam *)pMsg->bodyptr);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053014854 break;
14855 }
Siddharth Bhal64246172015-02-27 01:04:37 +053014856 case WDA_GET_FRAME_LOG_REQ:
14857 {
14858 WDA_ProcessGetFrameLogReq(pWDA,
14859 (tAniGetFrameLogReq *)pMsg->bodyptr);
14860 break;
14861 }
Gupta, Kapil7c34b322015-09-30 13:12:35 +053014862 case WDA_START_RSSI_MONITOR_REQ:
14863 {
14864 WDA_ProcessStartRssiMonitorReq(pWDA,(tSirRssiMonitorReq *)pMsg->bodyptr);
14865 break;
14866 }
14867 case WDA_STOP_RSSI_MONITOR_REQ:
14868 {
14869 WDA_ProcessStopRssiMonitorReq(pWDA,(tSirRssiMonitorReq *)pMsg->bodyptr);
14870 break;
14871 }
Karthick Sa35b0692015-08-21 15:57:05 +053014872 case WDA_SEND_LOG_DONE_IND:
14873 {
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053014874 WDA_FWLoggingDXEdoneInd(pMsg->bodyval);
Karthick Sa35b0692015-08-21 15:57:05 +053014875 break;
14876 }
Sachin Ahuja715aafc2015-07-21 23:35:10 +053014877 case WDA_FATAL_EVENT_LOGS_REQ:
14878 {
14879 WDA_ProcessFatalEventLogsReq(pWDA,
14880 (tSirFatalEventLogsReqParam *)pMsg->bodyptr);
14881 break;
14882 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014883 case WDA_SET_HOST_OFFLOAD:
14884 {
14885 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
14886 break;
14887 }
14888 case WDA_SET_KEEP_ALIVE:
14889 {
14890 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
14891 break;
14892 }
14893#ifdef WLAN_NS_OFFLOAD
14894 case WDA_SET_NS_OFFLOAD:
14895 {
14896 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
14897 break;
14898 }
14899#endif //WLAN_NS_OFFLOAD
14900 case WDA_ADD_STA_SELF_REQ:
14901 {
14902 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
14903 break;
14904 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014905 case WDA_DEL_STA_SELF_REQ:
14906 {
14907 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
14908 break;
14909 }
14910 case WDA_WOWL_ADD_BCAST_PTRN:
14911 {
14912 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
14913 break;
14914 }
14915 case WDA_WOWL_DEL_BCAST_PTRN:
14916 {
14917 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
14918 break;
14919 }
14920 case WDA_WOWL_ENTER_REQ:
14921 {
14922 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
14923 break;
14924 }
14925 case WDA_WOWL_EXIT_REQ:
14926 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014927 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070014928 break;
14929 }
14930 case WDA_TL_FLUSH_AC_REQ:
14931 {
14932 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
14933 break;
14934 }
14935 case WDA_SIGNAL_BTAMP_EVENT:
14936 {
14937 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
14938 break;
14939 }
Abhishek Singh85b74712014-10-08 11:38:19 +053014940 case WDA_FW_STATS_GET_REQ:
14941 {
14942 WDA_ProcessFWStatsGetReq(pWDA,
14943 (tSirFWStatsGetReq *)pMsg->bodyptr);
14944 break;
14945 }
Sunil Duttbd736ed2014-05-26 21:19:41 +053014946#ifdef WLAN_FEATURE_LINK_LAYER_STATS
14947 case WDA_LINK_LAYER_STATS_SET_REQ:
14948 {
14949 WDA_ProcessLLStatsSetReq(pWDA, (tSirLLStatsSetReq *)pMsg->bodyptr);
14950 break;
14951 }
14952 case WDA_LINK_LAYER_STATS_GET_REQ:
14953 {
14954 WDA_ProcessLLStatsGetReq(pWDA, (tSirLLStatsGetReq *)pMsg->bodyptr);
14955 break;
14956 }
14957 case WDA_LINK_LAYER_STATS_CLEAR_REQ:
14958 {
14959 WDA_ProcessLLStatsClearReq(pWDA, (tSirLLStatsClearReq *)pMsg->bodyptr);
14960 break;
14961 }
14962#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Dino Mycle41bdc942014-06-10 11:30:24 +053014963#ifdef WLAN_FEATURE_EXTSCAN
14964 case WDA_EXTSCAN_GET_CAPABILITIES_REQ:
14965 {
14966 WDA_ProcessEXTScanGetCapabilitiesReq(pWDA,
14967 (tSirGetEXTScanCapabilitiesReqParams *)pMsg->bodyptr);
14968 break;
14969 }
14970 case WDA_EXTSCAN_START_REQ:
14971 {
14972 WDA_ProcessEXTScanStartReq(pWDA,
14973 (tSirEXTScanStartReqParams *)pMsg->bodyptr);
14974 break;
14975 }
14976 case WDA_EXTSCAN_STOP_REQ:
14977 {
14978 WDA_ProcessEXTScanStopReq(pWDA,
14979 (tSirEXTScanStopReqParams *)pMsg->bodyptr);
14980 break;
14981 }
14982 case WDA_EXTSCAN_GET_CACHED_RESULTS_REQ:
14983 {
14984 WDA_ProcessEXTScanGetCachedResultsReq(pWDA,
14985 (tSirEXTScanGetCachedResultsReqParams *)pMsg->bodyptr);
14986 break;
14987 }
14988 case WDA_EXTSCAN_SET_BSSID_HOTLIST_REQ:
14989 {
14990 WDA_ProcessEXTScanSetBSSIDHotlistReq(pWDA,
14991 (tSirEXTScanSetBssidHotListReqParams *)pMsg->bodyptr);
14992 break;
14993 }
14994 case WDA_EXTSCAN_RESET_BSSID_HOTLIST_REQ:
14995 {
14996 WDA_ProcessEXTScanResetBSSIDHotlistReq(pWDA,
14997 (tSirEXTScanResetBssidHotlistReqParams *)pMsg->bodyptr);
14998 break;
14999 }
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053015000 case WDA_EXTSCAN_SET_SSID_HOTLIST_REQ:
15001 {
15002 WDA_ProcessEXTScanSetSSIDHotlistReq(pWDA,
15003 (tSirEXTScanSetSsidHotListReqParams *)pMsg->bodyptr);
15004 break;
15005 }
15006 case WDA_EXTSCAN_RESET_SSID_HOTLIST_REQ:
15007 {
15008 WDA_ProcessEXTScanResetSSIDHotlistReq(pWDA,
15009 (tSirEXTScanResetSsidHotlistReqParams *)pMsg->bodyptr);
15010 break;
15011 }
Padma, Santhosh Kumarc1f7f052015-08-26 12:29:01 +053015012 case WDA_HIGH_PRIORITY_DATA_INFO_IND:
15013 {
15014 WDA_ProcessHighPriorityDataInfoInd(pWDA,
15015 (tSirHighPriorityDataInfoInd *)pMsg->bodyptr);
15016 break;
15017 }
Dino Mycle41bdc942014-06-10 11:30:24 +053015018#endif /* WLAN_FEATURE_EXTSCAN */
Jeff Johnson295189b2012-06-20 16:38:30 -070015019#ifdef WDA_UT
15020 case WDA_WDI_EVENT_MSG:
15021 {
15022 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
15023 break ;
15024 }
15025#endif
15026 case WDA_UPDATE_BEACON_IND:
15027 {
15028 WDA_ProcessUpdateBeaconParams(pWDA,
15029 (tUpdateBeaconParams *)pMsg->bodyptr);
15030 break;
15031 }
15032 case WDA_SEND_BEACON_REQ:
15033 {
15034 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
15035 break;
15036 }
15037 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
15038 {
15039 WDA_ProcessUpdateProbeRspTemplate(pWDA,
15040 (tSendProbeRespParams *)pMsg->bodyptr);
15041 break;
15042 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015043#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -070015044 case WDA_SET_MAX_TX_POWER_REQ:
15045 {
15046 WDA_ProcessSetMaxTxPowerReq(pWDA,
15047 (tMaxTxPowerParams *)pMsg->bodyptr);
15048 break;
15049 }
15050#endif
Arif Hussaina5ebce02013-08-09 15:09:58 -070015051 case WDA_SET_MAX_TX_POWER_PER_BAND_REQ:
15052 {
15053 WDA_ProcessSetMaxTxPowerPerBandReq(pWDA, (tMaxTxPowerPerBandParams *)
15054 pMsg->bodyptr);
15055 break;
15056 }
schang86c22c42013-03-13 18:41:24 -070015057 case WDA_SET_TX_POWER_REQ:
15058 {
15059 WDA_ProcessSetTxPowerReq(pWDA,
15060 (tSirSetTxPowerReq *)pMsg->bodyptr);
15061 break;
15062 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015063 case WDA_SET_P2P_GO_NOA_REQ:
15064 {
15065 WDA_ProcessSetP2PGONOAReq(pWDA,
15066 (tP2pPsParams *)pMsg->bodyptr);
15067 break;
15068 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015069 /* timer related messages */
15070 case WDA_TIMER_BA_ACTIVITY_REQ:
15071 {
15072 WDA_BaCheckActivity(pWDA) ;
15073 break ;
15074 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015075
15076 /* timer related messages */
15077 case WDA_TIMER_TRAFFIC_STATS_IND:
15078 {
15079 WDA_TimerTrafficStatsInd(pWDA);
15080 break;
15081 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015082#ifdef WLAN_FEATURE_VOWIFI_11R
15083 case WDA_AGGR_QOS_REQ:
15084 {
15085 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
15086 break;
15087 }
15088#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070015089 case WDA_FTM_CMD_REQ:
15090 {
15091 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
15092 break ;
15093 }
Jeff Johnsone7245742012-09-05 17:12:55 -070015094#ifdef FEATURE_OEM_DATA_SUPPORT
15095 case WDA_START_OEM_DATA_REQ:
15096 {
15097 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
15098 break;
15099 }
15100#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070015101 /* Tx Complete Time out Indication */
15102 case WDA_TX_COMPLETE_TIMEOUT_IND:
15103 {
15104 WDA_ProcessTxCompleteTimeOutInd(pWDA);
15105 break;
15106 }
15107 case WDA_WLAN_SUSPEND_IND:
15108 {
15109 WDA_ProcessWlanSuspendInd(pWDA,
15110 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
15111 break;
15112 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015113 case WDA_WLAN_RESUME_REQ:
15114 {
15115 WDA_ProcessWlanResumeReq(pWDA,
15116 (tSirWlanResumeParam *)pMsg->bodyptr) ;
15117 break;
15118 }
15119
15120 case WDA_UPDATE_CF_IND:
15121 {
15122 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
15123 pMsg->bodyptr = NULL;
15124 break;
15125 }
15126#ifdef FEATURE_WLAN_SCAN_PNO
15127 case WDA_SET_PNO_REQ:
15128 {
15129 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
15130 break;
15131 }
15132 case WDA_UPDATE_SCAN_PARAMS_REQ:
15133 {
15134 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
15135 break;
15136 }
15137 case WDA_SET_RSSI_FILTER_REQ:
15138 {
15139 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
15140 break;
15141 }
15142#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015143#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015144 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015145 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015146 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015147 break;
15148 }
15149#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070015150 case WDA_SET_TX_PER_TRACKING_REQ:
15151 {
15152 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
15153 break;
15154 }
15155
15156#ifdef WLAN_FEATURE_PACKET_FILTERING
15157 case WDA_8023_MULTICAST_LIST_REQ:
15158 {
15159 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
15160 break;
15161 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015162 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
15163 {
15164 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
15165 break;
15166 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015167 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
15168 {
15169 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
15170 break;
15171 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015172 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
15173 {
15174 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
15175 break;
15176 }
15177#endif // WLAN_FEATURE_PACKET_FILTERING
15178
15179
15180 case WDA_TRANSMISSION_CONTROL_IND:
15181 {
15182 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
15183 break;
15184 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015185 case WDA_SET_POWER_PARAMS_REQ:
15186 {
15187 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
15188 break;
15189 }
c_manjeecfd1efb2015-09-25 19:32:34 +053015190 case WDA_FW_MEM_DUMP_REQ:
15191 {
15192 WDA_ProcessFwrMemDumpReq(pWDA, (tAniFwrDumpReq*)pMsg->bodyptr);
15193 break;
15194 }
15195
Jeff Johnson295189b2012-06-20 16:38:30 -070015196#ifdef WLAN_FEATURE_GTK_OFFLOAD
15197 case WDA_GTK_OFFLOAD_REQ:
15198 {
15199 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
15200 break;
15201 }
15202
15203 case WDA_GTK_OFFLOAD_GETINFO_REQ:
15204 {
15205 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
15206 break;
15207 }
15208#endif //WLAN_FEATURE_GTK_OFFLOAD
15209
15210 case WDA_SET_TM_LEVEL_REQ:
15211 {
15212 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
15213 break;
15214 }
Sandeep Puligilla60342762014-01-30 21:05:37 +053015215
Mohit Khanna4a70d262012-09-11 16:30:12 -070015216 case WDA_UPDATE_OP_MODE:
15217 {
Sandeep Puligilla60342762014-01-30 21:05:37 +053015218 if(WDA_getHostWlanFeatCaps(HT40_OBSS_SCAN) &&
15219 WDA_getFwWlanFeatCaps(HT40_OBSS_SCAN))
15220 {
15221 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
15222 }
15223 else if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
Mohit Khanna4a70d262012-09-11 16:30:12 -070015224 {
15225 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
15226 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
15227 else
15228 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015229 " VHT OpMode Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070015230 }
15231 else
15232 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015233 " 11AC Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070015234 break;
15235 }
Chet Lanctot186b5732013-03-18 10:26:30 -070015236#ifdef WLAN_FEATURE_11W
15237 case WDA_EXCLUDE_UNENCRYPTED_IND:
15238 {
15239 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
15240 break;
15241 }
15242#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053015243#ifdef FEATURE_WLAN_TDLS
15244 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
15245 {
15246 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
15247 break;
15248 }
15249#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015250 case WDA_DHCP_START_IND:
15251 {
15252 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
15253 break;
15254 }
15255 case WDA_DHCP_STOP_IND:
15256 {
15257 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
15258 break;
15259 }
Leo Chang9056f462013-08-01 19:21:11 -070015260#ifdef FEATURE_WLAN_LPHB
15261 case WDA_LPHB_CONF_REQ:
15262 {
15263 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
15264 break;
15265 }
15266#endif
Yue Mab9c86f42013-08-14 15:59:08 -070015267 case WDA_ADD_PERIODIC_TX_PTRN_IND:
15268 {
15269 WDA_ProcessAddPeriodicTxPtrnInd(pWDA,
15270 (tSirAddPeriodicTxPtrn *)pMsg->bodyptr);
15271 break;
15272 }
15273 case WDA_DEL_PERIODIC_TX_PTRN_IND:
15274 {
15275 WDA_ProcessDelPeriodicTxPtrnInd(pWDA,
15276 (tSirDelPeriodicTxPtrn *)pMsg->bodyptr);
15277 break;
15278 }
15279
Rajeev79dbe4c2013-10-05 11:03:42 +053015280#ifdef FEATURE_WLAN_BATCH_SCAN
15281 case WDA_SET_BATCH_SCAN_REQ:
15282 {
15283 WDA_ProcessSetBatchScanReq(pWDA,
15284 (tSirSetBatchScanReq *)pMsg->bodyptr);
15285 break;
15286 }
Chittajit Mitraf5413a42013-10-18 14:20:08 -070015287 case WDA_RATE_UPDATE_IND:
15288 {
15289 WDA_ProcessRateUpdateInd(pWDA, (tSirRateUpdateInd *)pMsg->bodyptr);
15290 break;
15291 }
Rajeev79dbe4c2013-10-05 11:03:42 +053015292 case WDA_TRIGGER_BATCH_SCAN_RESULT_IND:
15293 {
15294 WDA_ProcessTriggerBatchScanResultInd(pWDA,
15295 (tSirTriggerBatchScanResultInd *)pMsg->bodyptr);
15296 break;
15297 }
15298 case WDA_STOP_BATCH_SCAN_IND:
15299 {
15300 WDA_ProcessStopBatchScanInd(pWDA,
15301 (tSirStopBatchScanInd *)pMsg->bodyptr);
15302 break;
15303 }
c_hpothu92367912014-05-01 15:18:17 +053015304 case WDA_GET_BCN_MISS_RATE_REQ:
15305 WDA_ProcessGetBcnMissRateReq(pWDA,
15306 (tSirBcnMissRateReq *)pMsg->bodyptr);
15307 break;
Rajeev79dbe4c2013-10-05 11:03:42 +053015308#endif
15309
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053015310 case WDA_HT40_OBSS_SCAN_IND:
15311 {
15312 WDA_ProcessHT40OBSSScanInd(pWDA,
15313 (tSirHT40OBSSScanInd *)pMsg->bodyptr);
15314 break;
15315 }
15316 case WDA_HT40_OBSS_STOP_SCAN_IND:
15317 {
15318 WDA_ProcessHT40OBSSStopScanInd(pWDA,
15319 (tANI_U8*)pMsg->bodyptr);
15320 break;
15321 }
Atul Mittalc0f739f2014-07-31 13:47:47 +053015322// tdlsoffchan
15323#ifdef FEATURE_WLAN_TDLS
15324 case WDA_SET_TDLS_CHAN_SWITCH_REQ:
15325 {
15326 WDA_ProcessSetTdlsChanSwitchReq(pWDA, (tTdlsChanSwitchParams *)pMsg->bodyptr);
15327 break;
15328 }
15329#endif
Siddharth Bhal171788a2014-09-29 21:02:40 +053015330 case WDA_SPOOF_MAC_ADDR_REQ:
15331 {
15332 WDA_ProcessSetSpoofMacAddrReq(pWDA, (tpSpoofMacAddrReqParams)pMsg->bodyptr);
15333 break;
15334 }
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053015335 case WDA_ENCRYPT_MSG_REQ:
15336 {
15337 WDA_ProcessEncryptMsgReq(pWDA, (u8 *)pMsg->bodyptr);
15338 break;
15339 }
Srinivas Dasari32a79262015-02-19 13:04:49 +053015340
15341 case WDA_NAN_REQUEST:
15342 {
15343 WDA_ProcessNanRequest( pWDA, (tNanRequest *)pMsg->bodyptr);
15344 break;
15345 }
Abhishek Singh41988ba2015-05-25 19:42:29 +053015346 case WDA_SET_RTS_CTS_HTVHT:
15347 {
15348 WDA_ProcessSetRtsCtsHTVhtInd( pWDA, pMsg->bodyval);
15349 break;
15350 }
Katya Nigamf0511f62015-05-05 16:40:57 +053015351
15352 case WDA_MON_START_REQ:
15353 {
15354 WDA_ProcessMonStartReq(pWDA,(v_PVOID_t)pMsg->bodyptr);
15355 break;
15356 }
15357 case WDA_MON_STOP_REQ:
15358 {
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053015359 WDA_ProcessMonStopReq(pWDA, (v_PVOID_t)pMsg->bodyptr);
Katya Nigamf0511f62015-05-05 16:40:57 +053015360 break;
15361 }
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +053015362 case WDA_SEND_FREQ_RANGE_CONTROL_IND:
15363 {
15364 WDA_ProcessEnableDisableCAEventInd(pWDA, pMsg->bodyval);
15365 break;
15366 }
Arun Khandavalli7eeb1592015-10-19 21:36:57 +053015367 case WDA_WIFI_CONFIG_REQ:
15368 {
15369 WDA_ProcessWifiConfigReq(pWDA,(tSetWifiConfigParams *)pMsg->bodyptr);
15370 break;
15371 }
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053015372#ifdef FEATURE_OEM_DATA_SUPPORT
15373 case WDA_START_OEM_DATA_REQ_IND_NEW:
15374 {
15375 WDA_ProcessStartOemDataReqIndNew(pWDA,
15376 (tOemDataReqNewConfig *)pMsg->bodyptr);
15377 break;
15378 }
15379#endif
Mahesh A Saptasagarb63b3e22015-12-22 15:06:10 +053015380 case WDA_ANTENNA_DIVERSITY_SELECTION_REQ:
15381 {
15382 WDA_ProcessAntennaDiversitySelectionReq(pWDA,
15383 (tSirAntennaDiversitySelectionReq *)pMsg->bodyptr);
15384 break;
15385 }
Mahesh A Saptasagar41f9ddd2016-02-09 14:01:03 +053015386 case WDA_MODIFY_ROAM_PARAMS_IND:
15387 {
15388 WDA_ProcessBcnMissPenaltyCount(pWDA,
15389 (tModifyRoamParamsReqParams *)pMsg->bodyptr);
15390 break;
15391 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015392 default:
15393 {
Agarwal Ashishbf98caf2014-03-25 13:29:11 +053015394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070015395 "No Handling for msg type %x in WDA "
15396 ,pMsg->type);
15397 /* Do Nothing? MSG Body should be freed at here */
15398 if(NULL != pMsg->bodyptr)
15399 {
15400 vos_mem_free(pMsg->bodyptr);
15401 }
15402 //WDA_VOS_ASSERT(0) ;
15403 }
15404 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015405 return status ;
15406}
15407
Jeff Johnson295189b2012-06-20 16:38:30 -070015408/*
15409 * FUNCTION: WDA_LowLevelIndCallback
15410 * IND API callback from WDI, send Ind to PE
15411 */
15412void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
15413 void* pUserData )
15414{
15415 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
15416#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
15417 tSirRSSINotification rssiNotification;
15418#endif
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053015419 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070015420 {
15421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053015422 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015423 VOS_ASSERT(0);
15424 return ;
15425 }
15426
15427 switch(wdiLowLevelInd->wdiIndicationType)
15428 {
15429 case WDI_RSSI_NOTIFICATION_IND:
15430 {
15431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15432 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070015433#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
15434 rssiNotification.bReserved =
15435 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
15436 rssiNotification.bRssiThres1NegCross =
15437 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
15438 rssiNotification.bRssiThres1PosCross =
15439 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
15440 rssiNotification.bRssiThres2NegCross =
15441 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
15442 rssiNotification.bRssiThres2PosCross =
15443 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
15444 rssiNotification.bRssiThres3NegCross =
15445 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
15446 rssiNotification.bRssiThres3PosCross =
15447 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080015448 rssiNotification.avgRssi = (v_S7_t)
15449 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070015450 WLANTL_BMPSRSSIRegionChangedNotification(
15451 pWDA->pVosContext,
15452 &rssiNotification);
15453#endif
15454 break ;
15455 }
15456 case WDI_MISSED_BEACON_IND:
15457 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080015458 tpSirSmeMissedBeaconInd pMissBeacInd =
15459 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070015460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15461 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070015462 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080015463 if(NULL == pMissBeacInd)
15464 {
15465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15466 "%s: VOS MEM Alloc Failure", __func__);
15467 break;
15468 }
15469 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
15470 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
15471 pMissBeacInd->bssIdx =
15472 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
15473 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015474 break ;
15475 }
15476 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
15477 {
15478 /* TODO: Decode Ind and send Ind to PE */
15479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15480 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
15481 break ;
15482 }
15483
15484 case WDI_MIC_FAILURE_IND:
15485 {
15486 tpSirSmeMicFailureInd pMicInd =
15487 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
15488
15489 if(NULL == pMicInd)
15490 {
15491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015492 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015493 break;
15494 }
15495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15496 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070015497 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
15498 pMicInd->length = sizeof(tSirSmeMicFailureInd);
15499 vos_mem_copy(pMicInd->bssId,
15500 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
15501 sizeof(tSirMacAddr));
15502 vos_mem_copy(pMicInd->info.srcMacAddr,
15503 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
15504 sizeof(tSirMacAddr));
15505 vos_mem_copy(pMicInd->info.taMacAddr,
15506 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
15507 sizeof(tSirMacAddr));
15508 vos_mem_copy(pMicInd->info.dstMacAddr,
15509 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
15510 sizeof(tSirMacAddr));
15511 vos_mem_copy(pMicInd->info.rxMacAddr,
15512 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
15513 sizeof(tSirMacAddr));
15514 pMicInd->info.multicast =
15515 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
15516 pMicInd->info.keyId=
15517 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
15518 pMicInd->info.IV1=
15519 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
15520 vos_mem_copy(pMicInd->info.TSC,
15521 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070015522 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
15523 (void *)pMicInd , 0) ;
15524 break ;
15525 }
15526 case WDI_FATAL_ERROR_IND:
15527 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070015528 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070015529 /* TODO: Decode Ind and send Ind to PE */
15530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15531 "Received WDI_FATAL_ERROR_IND from WDI ");
15532 break ;
15533 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015534 case WDI_DEL_STA_IND:
15535 {
Jeff Johnson295189b2012-06-20 16:38:30 -070015536 tpDeleteStaContext pDelSTACtx =
15537 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
15538
15539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15540 "Received WDI_DEL_STA_IND from WDI ");
15541 if(NULL == pDelSTACtx)
15542 {
15543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015544 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015545 break;
15546 }
15547 vos_mem_copy(pDelSTACtx->addr2,
15548 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
15549 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070015550 vos_mem_copy(pDelSTACtx->bssId,
15551 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
15552 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070015553 pDelSTACtx->assocId =
15554 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
15555 pDelSTACtx->reasonCode =
15556 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
15557 pDelSTACtx->staId =
15558 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070015559 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
15560 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015561 break ;
15562 }
15563 case WDI_COEX_IND:
15564 {
15565 tANI_U32 index;
15566 vos_msg_t vosMsg;
c_hpothub3458992014-09-19 19:58:57 +053015567 tSirSmeCoexInd *pSmeCoexInd;
15568
15569 if (SIR_COEX_IND_TYPE_CXM_FEATURES_NOTIFICATION ==
15570 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType)
15571 {
15572 if(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData)
15573 {
15574 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15575 FL("Coex state: 0x%x coex feature: 0x%x"),
15576 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[0],
15577 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[1]);
15578
15579 if (wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2] << 16)
15580 {
15581 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, FL("power limit: 0x%x"),
15582 (tANI_U16)(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2]));
15583 }
15584 }
15585 break;
15586 }
15587
15588 pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070015589 if(NULL == pSmeCoexInd)
15590 {
15591 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015592 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015593 break;
15594 }
15595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15596 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070015597 /* Message Header */
15598 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
15599 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070015600 /* Info from WDI Indication */
15601 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
15602 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
15603 {
15604 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
15605 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015606 /* VOS message wrapper */
15607 vosMsg.type = eWNI_SME_COEX_IND;
15608 vosMsg.bodyptr = (void *)pSmeCoexInd;
15609 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070015610 /* Send message to SME */
15611 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15612 {
15613 /* free the mem and return */
15614 vos_mem_free((v_VOID_t *)pSmeCoexInd);
15615 }
15616 else
15617 {
15618 /* DEBUG */
15619 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15620 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
15621 pSmeCoexInd->coexIndType,
15622 pSmeCoexInd->coexIndData[0],
15623 pSmeCoexInd->coexIndData[1],
15624 pSmeCoexInd->coexIndData[2],
15625 pSmeCoexInd->coexIndData[3]);
15626 }
15627 break;
15628 }
15629 case WDI_TX_COMPLETE_IND:
15630 {
15631 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
15632 /* Calling TxCompleteAck Indication from wda context*/
15633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15634 "Complete Indication received from HAL");
15635 if( pWDA->pAckTxCbFunc )
15636 {
15637 if( VOS_STATUS_SUCCESS !=
15638 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
15639 {
15640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15641 "Tx Complete timeout Timer Stop Failed ");
Ganesh Kondabattinib18b3292015-03-16 16:59:26 +053015642 }
Ganesh Kondabattinie1accae2015-06-11 17:18:00 +053015643 if (!IS_FEATURE_SUPPORTED_BY_FW(ENHANCED_TXBD_COMPLETION))
Ganesh Kondabattinib18b3292015-03-16 16:59:26 +053015644 pWDA->pAckTxCbFunc( pMac, &wdiLowLevelInd->wdiIndicationData.tx_complete_status);
15645 else
15646 pWDA->pAckTxCbFunc( pMac, &wdiLowLevelInd->wdiIndicationData.wdiTxBdInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070015647 pWDA->pAckTxCbFunc = NULL;
15648 }
15649 else
15650 {
Ratheesh S P36dbc932015-08-07 14:28:57 +053015651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070015652 "Tx Complete Indication is received after timeout ");
15653 }
15654 break;
15655 }
Viral Modid86bde22012-12-10 13:09:21 -080015656 case WDI_P2P_NOA_START_IND :
15657 {
15658 tSirP2PNoaStart *pP2pNoaStart =
15659 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
15660
15661 if (NULL == pP2pNoaStart)
15662 {
15663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15664 "Memory allocation failure, "
15665 "WDI_P2P_NOA_START_IND not forwarded");
15666 break;
15667 }
15668 pP2pNoaStart->status =
15669 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
15670 pP2pNoaStart->bssIdx =
15671 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
15672 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
15673 (void *)pP2pNoaStart , 0) ;
15674 break;
15675 }
15676
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053015677#ifdef FEATURE_WLAN_TDLS
15678 case WDI_TDLS_IND :
15679 {
15680 tSirTdlsInd *pTdlsInd =
15681 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
15682
15683 if (NULL == pTdlsInd)
15684 {
15685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15686 "Memory allocation failure, "
15687 "WDI_TDLS_IND not forwarded");
15688 break;
15689 }
15690 pTdlsInd->status =
15691 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
15692 pTdlsInd->assocId =
15693 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
15694 pTdlsInd->staIdx =
15695 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
15696 pTdlsInd->reasonCode =
15697 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
15698 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
15699 (void *)pTdlsInd , 0) ;
15700 break;
15701 }
15702#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070015703 case WDI_P2P_NOA_ATTR_IND :
15704 {
15705 tSirP2PNoaAttr *pP2pNoaAttr =
15706 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070015707 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15708 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070015709 if (NULL == pP2pNoaAttr)
15710 {
15711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15712 "Memory allocation failure, "
15713 "WDI_P2P_NOA_ATTR_IND not forwarded");
15714 break;
15715 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015716 pP2pNoaAttr->index =
15717 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
15718 pP2pNoaAttr->oppPsFlag =
15719 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
15720 pP2pNoaAttr->ctWin =
15721 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
15722
15723 pP2pNoaAttr->uNoa1IntervalCnt =
15724 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
15725 pP2pNoaAttr->uNoa1Duration =
15726 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
15727 pP2pNoaAttr->uNoa1Interval =
15728 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
15729 pP2pNoaAttr->uNoa1StartTime =
15730 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070015731 pP2pNoaAttr->uNoa2IntervalCnt =
15732 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
15733 pP2pNoaAttr->uNoa2Duration =
15734 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
15735 pP2pNoaAttr->uNoa2Interval =
15736 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
15737 pP2pNoaAttr->uNoa2StartTime =
15738 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070015739 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
15740 (void *)pP2pNoaAttr , 0) ;
15741 break;
15742 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015743#ifdef FEATURE_WLAN_SCAN_PNO
15744 case WDI_PREF_NETWORK_FOUND_IND:
15745 {
15746 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070015747 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
15748 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
15749 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
15750 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
15751
Jeff Johnson295189b2012-06-20 16:38:30 -070015752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15753 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070015754 if (NULL == pPrefNetworkFoundInd)
15755 {
15756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15757 "Memory allocation failure, "
15758 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
Kiet Lamb537cfb2013-11-07 12:56:49 +053015759 if (NULL !=
15760 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
15761 {
15762 wpalMemoryFree(
15763 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData
15764 );
15765 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
15766 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015767 break;
15768 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015769 /* Message Header */
15770 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070015771 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070015772
15773 /* Info from WDI Indication */
15774 pPrefNetworkFoundInd->ssId.length =
15775 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070015776 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070015777 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
15778 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
15779 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070015780 if (NULL !=
15781 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
15782 {
15783 pPrefNetworkFoundInd->frameLength =
15784 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
15785 vos_mem_copy( pPrefNetworkFoundInd->data,
15786 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
15787 pPrefNetworkFoundInd->frameLength);
15788 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
15789 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
15790 }
15791 else
15792 {
15793 pPrefNetworkFoundInd->frameLength = 0;
15794 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015795 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070015796 /* VOS message wrapper */
15797 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
15798 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
15799 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070015800 /* Send message to SME */
15801 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15802 {
15803 /* free the mem and return */
15804 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
15805 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015806 break;
15807 }
15808#endif // FEATURE_WLAN_SCAN_PNO
15809
15810#ifdef WLAN_WAKEUP_EVENTS
15811 case WDI_WAKE_REASON_IND:
15812 {
15813 vos_msg_t vosMsg;
15814 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
15815 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
15816 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
15817
15818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Sushant Kaushik1b645382014-10-13 16:39:36 +053015819 "[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 -070015820 wdiLowLevelInd->wdiIndicationType,
15821 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
15822 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
15823 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
15824
15825 if (NULL == pWakeReasonInd)
15826 {
15827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15828 "Memory allocation failure, "
15829 "WDI_WAKE_REASON_IND not forwarded");
15830 break;
15831 }
15832
15833 vos_mem_zero(pWakeReasonInd, allocSize);
15834
15835 /* Message Header */
15836 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
15837 pWakeReasonInd->mesgLen = allocSize;
15838
15839 /* Info from WDI Indication */
15840 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
15841 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
15842 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
15843 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
15844 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
15845 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
15846 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
15847 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
15848
15849 /* VOS message wrapper */
15850 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
15851 vosMsg.bodyptr = (void *) pWakeReasonInd;
15852 vosMsg.bodyval = 0;
15853
15854 /* Send message to SME */
15855 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15856 {
15857 /* free the mem and return */
15858 vos_mem_free((v_VOID_t *) pWakeReasonInd);
15859 }
15860
15861 break;
15862 }
15863#endif // WLAN_WAKEUP_EVENTS
15864
15865 case WDI_TX_PER_HIT_IND:
15866 {
15867 vos_msg_t vosMsg;
15868 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
15869 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
15870 /* VOS message wrapper */
15871 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
15872 vosMsg.bodyptr = NULL;
15873 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070015874 /* Send message to SME */
15875 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15876 {
15877 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
15878 }
15879 break;
15880 }
15881
Leo Chang9056f462013-08-01 19:21:11 -070015882#ifdef FEATURE_WLAN_LPHB
Leo Changd9df8aa2013-09-26 13:32:26 -070015883 case WDI_LPHB_IND:
Leo Chang9056f462013-08-01 19:21:11 -070015884 {
Leo Changd9df8aa2013-09-26 13:32:26 -070015885 vos_msg_t vosMsg;
15886 tSirLPHBInd *lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070015887
Leo Changd9df8aa2013-09-26 13:32:26 -070015888 lphbInd =
15889 (tSirLPHBInd *)vos_mem_malloc(sizeof(tSirLPHBInd));
15890 if (NULL == lphbInd)
Leo Chang9056f462013-08-01 19:21:11 -070015891 {
15892 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15893 "%s: LPHB IND buffer alloc Fail", __func__);
15894 return ;
15895 }
15896
Leo Changd9df8aa2013-09-26 13:32:26 -070015897 lphbInd->sessionIdx =
Leo Chang9056f462013-08-01 19:21:11 -070015898 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
Leo Changd9df8aa2013-09-26 13:32:26 -070015899 lphbInd->protocolType =
Leo Chang9056f462013-08-01 19:21:11 -070015900 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
Leo Changd9df8aa2013-09-26 13:32:26 -070015901 lphbInd->eventReason =
Leo Chang9056f462013-08-01 19:21:11 -070015902 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
15903
15904 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Leo Changd9df8aa2013-09-26 13:32:26 -070015905 "Get WDI_LPHB_IND bssIdx %d",
Leo Chang9056f462013-08-01 19:21:11 -070015906 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
15907
Leo Changd9df8aa2013-09-26 13:32:26 -070015908 vosMsg.type = eWNI_SME_LPHB_IND;
15909 vosMsg.bodyptr = lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070015910 vosMsg.bodyval = 0;
15911 /* Send message to SME */
15912 if (VOS_STATUS_SUCCESS !=
15913 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15914 {
15915 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
15916 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
Leo Changd9df8aa2013-09-26 13:32:26 -070015917 vos_mem_free(lphbInd);
Leo Chang9056f462013-08-01 19:21:11 -070015918 }
15919 break;
15920 }
15921#endif /* FEATURE_WLAN_LPHB */
Yue Mab9c86f42013-08-14 15:59:08 -070015922 case WDI_PERIODIC_TX_PTRN_FW_IND:
15923 {
15924 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15925 "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, "
15926 "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__,
15927 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx,
15928 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx,
15929 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status,
15930 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap);
15931
15932 break;
15933 }
Leo Chang9056f462013-08-01 19:21:11 -070015934
Ravi Joshid2ca7c42013-07-23 08:37:49 -070015935 case WDI_IBSS_PEER_INACTIVITY_IND:
15936 {
15937 tSirIbssPeerInactivityInd *pIbssInd =
15938 (tSirIbssPeerInactivityInd *)
15939 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
15940
15941 if (NULL == pIbssInd)
15942 {
15943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15944 "Memory allocation failure, "
15945 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
15946 break;
15947 }
15948
15949 pIbssInd->bssIdx =
15950 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
15951 pIbssInd->staIdx =
15952 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
15953 vos_mem_copy(pIbssInd->peerAddr,
15954 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
15955 sizeof(tSirMacAddr));
15956 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
15957 break;
15958 }
15959
Rajeev79dbe4c2013-10-05 11:03:42 +053015960#ifdef FEATURE_WLAN_BATCH_SCAN
15961 case WDI_BATCH_SCAN_RESULT_IND:
15962 {
15963 void *pBatchScanResult;
15964 void *pCallbackContext;
15965 tpAniSirGlobal pMac;
15966
15967 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
15968 "Received WDI_BATCHSCAN_RESULT_IND from FW");
15969
15970 /*sanity check*/
Sunil Duttbd736ed2014-05-26 21:19:41 +053015971 if (NULL == pWDA)
Rajeev79dbe4c2013-10-05 11:03:42 +053015972 {
15973 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15974 "%s:pWDA is NULL", __func__);
15975 VOS_ASSERT(0);
15976 return;
15977 }
15978
15979 pBatchScanResult =
15980 (void *)wdiLowLevelInd->wdiIndicationData.pBatchScanResult;
15981 if (NULL == pBatchScanResult)
15982 {
15983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15984 "%s:Batch scan result from FW is null can't invoke HDD callback",
15985 __func__);
15986 VOS_ASSERT(0);
15987 return;
15988 }
15989
15990 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
15991 if (NULL == pMac)
15992 {
15993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15994 "%s:pMac is NULL", __func__);
15995 VOS_ASSERT(0);
15996 return;
15997 }
15998
15999 pCallbackContext = pMac->pmc.batchScanResultCallbackContext;
16000 /*call hdd callback with set batch scan response data*/
16001 if(pMac->pmc.batchScanResultCallback)
16002 {
16003 pMac->pmc.batchScanResultCallback(pCallbackContext,
16004 pBatchScanResult);
16005 }
16006 else
16007 {
16008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16009 "%s:HDD callback is null", __func__);
16010 VOS_ASSERT(0);
16011 }
16012 break;
16013 }
16014#endif
16015
Leo Chang0b0e45a2013-12-15 15:18:55 -080016016#ifdef FEATURE_WLAN_CH_AVOID
16017 case WDI_CH_AVOID_IND:
16018 {
16019 vos_msg_t vosMsg;
16020 tSirChAvoidIndType *chAvoidInd;
16021
16022 chAvoidInd =
16023 (tSirChAvoidIndType *)vos_mem_malloc(sizeof(tSirChAvoidIndType));
16024 if (NULL == chAvoidInd)
16025 {
16026 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16027 "%s: CH_AVOID IND buffer alloc Fail", __func__);
16028 return ;
16029 }
16030
16031 chAvoidInd->avoidRangeCount =
16032 wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidRangeCount;
16033 wpalMemoryCopy((void *)chAvoidInd->avoidFreqRange,
16034 (void *)wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidFreqRange,
16035 chAvoidInd->avoidRangeCount * sizeof(tSirChAvoidFreqType));
16036
16037 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16038 "%s : WDA CH avoid notification", __func__);
16039
16040 vosMsg.type = eWNI_SME_CH_AVOID_IND;
16041 vosMsg.bodyptr = chAvoidInd;
16042 vosMsg.bodyval = 0;
16043 /* Send message to SME */
16044 if (VOS_STATUS_SUCCESS !=
16045 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16046 {
16047 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16048 "post eWNI_SME_CH_AVOID_IND to SME Failed");
16049 vos_mem_free(chAvoidInd);
16050 }
16051 break;
16052 }
16053#endif /* FEATURE_WLAN_CH_AVOID */
16054
Sunil Duttbd736ed2014-05-26 21:19:41 +053016055#ifdef WLAN_FEATURE_LINK_LAYER_STATS
16056 case WDI_LL_STATS_RESULTS_IND:
16057 {
16058 void *pLinkLayerStatsInd;
Sunil Duttbd736ed2014-05-26 21:19:41 +053016059 tpAniSirGlobal pMac;
16060
16061 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16062 "Received WDI_LL_STATS_RESULTS_IND from FW");
16063
16064 /*sanity check*/
16065 if (NULL == pWDA)
16066 {
16067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16068 "%s:pWDA is NULL", __func__);
16069 VOS_ASSERT(0);
16070 return;
16071 }
16072
16073 pLinkLayerStatsInd =
Dino Mycled3d50022014-07-07 12:58:25 +053016074 (void *)wdiLowLevelInd->
16075 wdiIndicationData.wdiLinkLayerStatsResults.pLinkLayerStatsResults;
Sunil Duttbd736ed2014-05-26 21:19:41 +053016076 if (NULL == pLinkLayerStatsInd)
16077 {
16078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16079 "%s:Link Layer Statistics from FW is null can't invoke HDD callback",
16080 __func__);
16081 VOS_ASSERT(0);
16082 return;
16083 }
16084
16085 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16086 if (NULL == pMac)
16087 {
16088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16089 "%s:pMac is NULL", __func__);
16090 VOS_ASSERT(0);
16091 return;
16092 }
16093
Dino Mycled3d50022014-07-07 12:58:25 +053016094 /* call hdd callback with Link Layer Statistics.
16095 * vdev_id/ifacId in link_stats_results will be
16096 * used to retrieve the correct HDD context
16097 */
Sunil Duttbd736ed2014-05-26 21:19:41 +053016098 if (pMac->sme.pLinkLayerStatsIndCallback)
16099 {
Dino Mycled3d50022014-07-07 12:58:25 +053016100 pMac->sme.pLinkLayerStatsIndCallback(pMac->pAdapter,
Sunil Duttbd736ed2014-05-26 21:19:41 +053016101 WDA_LINK_LAYER_STATS_RESULTS_RSP,
Dino Mycled3d50022014-07-07 12:58:25 +053016102 pLinkLayerStatsInd,
16103 wdiLowLevelInd->
16104 wdiIndicationData.wdiLinkLayerStatsResults.macAddr);
Sunil Duttbd736ed2014-05-26 21:19:41 +053016105 }
16106 else
16107 {
16108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16109 "%s:HDD callback is null", __func__);
16110 }
16111 break;
16112 }
16113#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
16114
Dino Mycle41bdc942014-06-10 11:30:24 +053016115#ifdef WLAN_FEATURE_EXTSCAN
16116 case WDI_EXTSCAN_PROGRESS_IND:
16117 case WDI_EXTSCAN_SCAN_AVAILABLE_IND:
16118 case WDI_EXTSCAN_SCAN_RESULT_IND:
16119 case WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND:
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053016120 case WDI_EXTSCAN_SSID_HOTLIST_RESULT_IND:
Dino Mycle41bdc942014-06-10 11:30:24 +053016121 {
16122 void *pEXTScanData;
16123 void *pCallbackContext;
16124 tpAniSirGlobal pMac;
16125 tANI_U16 indType;
16126
16127 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16128 "Received WDI_EXTSCAN Indications from FW");
16129 /*sanity check*/
16130 if (NULL == pWDA)
16131 {
16132 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16133 "%s:pWDA is NULL", __func__);
16134 VOS_ASSERT(0);
16135 return;
16136 }
16137 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_PROGRESS_IND)
16138 {
16139 indType = WDA_EXTSCAN_PROGRESS_IND;
16140
16141 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16142 "WDI_EXTSCAN Indication is WDI_EXTSCAN_PROGRESS_IND");
16143 }
16144 if (wdiLowLevelInd->wdiIndicationType ==
16145 WDI_EXTSCAN_SCAN_AVAILABLE_IND)
16146 {
16147 indType = WDA_EXTSCAN_SCAN_AVAILABLE_IND;
16148
16149 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16150 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_AVAILABLE_IND");
16151 }
16152 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_SCAN_RESULT_IND)
16153 {
16154 indType = WDA_EXTSCAN_SCAN_RESULT_IND;
16155
16156 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16157 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_RESULT_IND");
16158 }
16159 if (wdiLowLevelInd->wdiIndicationType ==
16160 WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND)
16161 {
16162 indType = WDA_EXTSCAN_BSSID_HOTLIST_RESULT_IND;
16163
16164 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16165 "WDI_EXTSCAN Indication is WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND");
16166 }
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053016167 if (wdiLowLevelInd->wdiIndicationType ==
16168 WDI_EXTSCAN_SSID_HOTLIST_RESULT_IND)
16169 {
16170 indType = WDA_EXTSCAN_SSID_HOTLIST_RESULT_IND;
16171
16172 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16173 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SSID_HOTLIST_RESULT_IND");
16174 }
Dino Mycle41bdc942014-06-10 11:30:24 +053016175
16176 pEXTScanData =
16177 (void *)wdiLowLevelInd->wdiIndicationData.pEXTScanIndData;
16178 if (NULL == pEXTScanData)
16179 {
16180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16181 "%s: EXTSCAN Indication Data is null, can't invoke HDD callback",
16182 __func__);
16183 VOS_ASSERT(0);
16184 return;
16185 }
16186
16187 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16188 if (NULL == pMac)
16189 {
16190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16191 "%s:pMac is NULL", __func__);
16192 VOS_ASSERT(0);
16193 return;
16194 }
16195
16196 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
16197
16198 if(pMac->sme.pEXTScanIndCb)
16199 {
16200 pMac->sme.pEXTScanIndCb(pCallbackContext,
16201 indType,
16202 pEXTScanData);
16203 }
16204 else
16205 {
16206 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16207 "%s:HDD callback is null", __func__);
16208 }
16209 break;
16210 }
16211#endif /* WLAN_FEATURE_EXTSCAN */
Abhishek Singh66c16762014-08-14 19:13:19 +053016212 case WDI_DEL_BA_IND:
16213 {
16214 tpBADeleteParams pDelBAInd =
Sunkad, Anand Ningappacc2c7882016-02-05 15:32:22 +053016215 (tpBADeleteParams)vos_mem_malloc(sizeof(*pDelBAInd));
Abhishek Singh66c16762014-08-14 19:13:19 +053016216
16217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16218 "Received WDI_DEL_BA_IND from WDI ");
16219 if(NULL == pDelBAInd)
16220 {
16221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16222 "%s: VOS MEM Alloc Failure", __func__);
16223 break;
16224 }
16225 vos_mem_copy(pDelBAInd->peerMacAddr,
16226 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.peerMacAddr,
16227 sizeof(tSirMacAddr));
16228 vos_mem_copy(pDelBAInd->bssId,
16229 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.bssId,
16230 sizeof(tSirMacAddr));
16231 pDelBAInd->staIdx =
16232 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.staIdx;
16233 pDelBAInd->baTID =
16234 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baTID;
16235 pDelBAInd->baDirection =
16236 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baDirection;
16237 pDelBAInd->reasonCode =
16238 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.reasonCode;
16239
16240 WDA_SendMsg(pWDA, SIR_LIM_DEL_BA_IND,
16241 (void *)pDelBAInd , 0) ;
16242 break;
16243 }
Srinivas Dasari32a79262015-02-19 13:04:49 +053016244 case WDI_NAN_EVENT_IND:
16245 {
16246 vos_msg_t vosMsg;
16247 tpSirNanEvent pSirNanEvent = NULL;
16248
16249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16250 "Received WDI_NAN_EVENT");
16251
16252 pSirNanEvent = (tpSirNanEvent)vos_mem_malloc( sizeof( tSirNanEvent )
16253 - sizeof( pSirNanEvent->event_data)
16254 + wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len);
16255
16256 if (NULL == pSirNanEvent)
16257 {
16258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16259 "%s: VOS MEM Alloc Failure", __func__);
16260 VOS_ASSERT(0) ;
16261 break;
16262 }
16263
16264 pSirNanEvent->event_data_len =
16265 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len;
16266
16267 if (wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len)
16268 {
16269 vos_mem_copy( pSirNanEvent->event_data,
16270 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data,
16271 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len);
16272 }
16273
16274 /* VOS message wrapper */
16275 vosMsg.type = eWNI_SME_NAN_EVENT;
16276 vosMsg.bodyptr = pSirNanEvent;
16277 vosMsg.bodyval = 0;
16278
16279 /* Send message to SME */
16280 if (VOS_STATUS_SUCCESS
16281 != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16282 {
16283 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
16284 "post eWNI_SME_NAN_EVENT to SME Failed");
16285 vos_mem_free(pSirNanEvent);
16286 }
16287 break;
16288 }
Sachin Ahuja3d47fcd2015-08-28 16:02:06 +053016289 case WDI_LOST_LINK_PARAMS_IND:
16290 {
16291 tpSirSmeLostLinkParamsInd pLostLinkParamInd =
16292 (tpSirSmeLostLinkParamsInd)vos_mem_malloc(sizeof(tSirSmeLostLinkParamsInd));
Dino Mycle41bdc942014-06-10 11:30:24 +053016293
Sachin Ahuja3d47fcd2015-08-28 16:02:06 +053016294 if (NULL == pLostLinkParamInd)
16295 {
16296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16297 "%s: VOS MEM Alloc Failure", __func__);
16298 break;
16299 }
16300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16301 "Received WDI_LOST_LINK_PARAMS_IND from WDI ");
16302
16303 pLostLinkParamInd->messageType = eWNI_SME_LOST_LINK_PARAMS_IND;
16304 pLostLinkParamInd->length = sizeof(tSirSmeMicFailureInd);
16305 pLostLinkParamInd->info.bssIdx =
16306 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.bssIdx;
16307 pLostLinkParamInd->info.rssi =
16308 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.rssi;
16309 vos_mem_copy(pLostLinkParamInd->info.selfMacAddr,
16310 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.selfMacAddr,
16311 sizeof(tSirMacAddr));
16312 pLostLinkParamInd->info.linkFlCnt =
16313 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.linkFlCnt;
16314 pLostLinkParamInd->info.linkFlTx =
16315 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.linkFlTx;
16316 pLostLinkParamInd->info.lastDataRate =
16317 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.lastDataRate;
16318 pLostLinkParamInd->info.rsvd1 =
16319 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.rsvd1;
16320 pLostLinkParamInd->info.rsvd2 =
16321 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.rsvd2;
16322 WDA_SendMsg(pWDA, SIR_HAL_LOST_LINK_PARAMS_IND,
16323 (void *)pLostLinkParamInd , 0) ;
16324 break;
16325 }
Gupta, Kapil7c34b322015-09-30 13:12:35 +053016326 case WDI_RSSI_BREACHED_IND:
16327 {
16328 WDI_RssiBreachedIndType *pRssiBreachedInd;
16329 tpAniSirGlobal pMac;
16330
16331 pRssiBreachedInd =
16332 (WDI_RssiBreachedIndType *)vos_mem_malloc(sizeof(WDI_RssiBreachedIndType));
16333 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16334 "Received WDI_RSSI_BREACHED_IND from FW");
16335
16336 vos_mem_copy(pRssiBreachedInd,
16337 &wdiLowLevelInd->wdiIndicationData.wdiRssiBreachedInd,
16338 sizeof(WDI_RssiBreachedIndType));
16339
16340 /*sanity check*/
16341 if (NULL == pWDA)
16342 {
16343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16344 "%s:pWDA is NULL", __func__);
16345 vos_mem_free(pRssiBreachedInd);
16346 VOS_ASSERT(0);
16347 return;
16348 }
16349
16350 if (NULL == pRssiBreachedInd)
16351 {
16352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16353 "%s:Breach indication from FW is null can't invoke HDD callback",
16354 __func__);
16355 VOS_ASSERT(0);
16356 return;
16357 }
16358
16359 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16360 if (NULL == pMac)
16361 {
16362 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16363 "%s:pMac is NULL", __func__);
16364 VOS_ASSERT(0);
16365 vos_mem_free(pRssiBreachedInd);
16366 return;
16367 }
16368
16369 if (pMac->sme.rssiThresholdBreachedCb)
16370 {
16371 pMac->sme.rssiThresholdBreachedCb(pMac->pAdapter, (void *)pRssiBreachedInd);
16372 }
16373 else
16374 {
16375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16376 "%s:HDD callback is null", __func__);
16377 }
16378 vos_mem_free(pRssiBreachedInd);
16379 break;
16380 }
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053016381#ifdef FEATURE_OEM_DATA_SUPPORT
16382 case WDI_START_OEM_DATA_RSP_IND_NEW:
16383 {
16384 void *pCallbackContext;
16385 tpAniSirGlobal pMac;
16386 tANI_U16 indType;
16387 void *pOemRspNewIndData;
Padma, Santhosh Kumarf75c37b2016-01-25 10:36:08 +053016388 tANI_U32 OemRspNewLen;
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053016389
16390 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16391 "Received WDI_START_OEM_DATA_RSP_IND_NEW Indications from FW");
16392
16393 /*sanity check*/
16394 if (NULL == pWDA)
16395 {
16396 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16397 "%s:pWDA is NULL", __func__);
16398 VOS_ASSERT(0);
16399 return;
16400 }
16401
16402 indType = WDA_START_OEM_DATA_RSP_IND_NEW;
16403 pOemRspNewIndData =
Padma, Santhosh Kumarf75c37b2016-01-25 10:36:08 +053016404 (void *)wdiLowLevelInd->wdiIndicationData.wdiOemDataRspNew.
16405 pOemRspNewIndData;
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053016406 if (NULL == pOemRspNewIndData)
16407 {
16408 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16409 "%s: OEM_DATA_RSP_IND_NEW Indication Data is null, can't invoke HDD callback",
16410 __func__);
16411 VOS_ASSERT(0);
16412 return;
16413 }
16414
Padma, Santhosh Kumarf75c37b2016-01-25 10:36:08 +053016415 OemRspNewLen = wdiLowLevelInd->wdiIndicationData.wdiOemDataRspNew.
16416 OemRspNewLen;
16417
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053016418 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16419 if (NULL == pMac)
16420 {
16421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16422 "%s:pMac is NULL", __func__);
16423 VOS_ASSERT(0);
16424 return;
16425 }
16426
16427 pCallbackContext = pMac->sme.pOemDataCallbackContext;
16428
Padma, Santhosh Kumarf75c37b2016-01-25 10:36:08 +053016429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16430 "%s: OemRspNewLen: %d", __func__, OemRspNewLen);
16431
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053016432 if(pMac->sme.pOemDataIndCb)
16433 {
16434 pMac->sme.pOemDataIndCb(pCallbackContext,
16435 indType,
Padma, Santhosh Kumarf75c37b2016-01-25 10:36:08 +053016436 pOemRspNewIndData,
16437 OemRspNewLen);
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053016438 }
16439 else
16440 {
16441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16442 "%s:HDD callback is null", __func__);
16443 }
16444 break;
16445 }
16446#endif /* FEATURE_OEM_DATA_SUPPORT */
16447
Jeff Johnson295189b2012-06-20 16:38:30 -070016448 default:
16449 {
16450 /* TODO error */
16451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16452 "Received UNKNOWN Indication from WDI ");
16453 }
16454 }
16455 return ;
16456}
16457
Jeff Johnson295189b2012-06-20 16:38:30 -070016458/*
16459 * BA related processing in WDA.
16460 */
Jeff Johnson295189b2012-06-20 16:38:30 -070016461void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
16462 void* pUserData)
16463{
16464 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16465 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070016466 if(NULL == pWdaParams)
16467 {
16468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016469 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016470 VOS_ASSERT(0) ;
16471 return ;
16472 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016473 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070016474 vos_mem_free(pWdaParams->wdaMsgParam) ;
16475 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16476 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016477 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016478 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016479 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
16480 {
16481 tANI_U8 i = 0 ;
16482 tBaActivityInd *baActivityInd = NULL ;
16483 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
16484 tANI_U8 allocSize = sizeof(tBaActivityInd)
16485 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
16486 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
16487 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016488 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016489 if(NULL == baActivityInd)
16490 {
16491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016492 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016493 VOS_ASSERT(0) ;
16494 return;
16495 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016496 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
16497 sizeof(tSirMacAddr)) ;
16498 baActivityInd->baCandidateCnt = baCandidateCount ;
16499
16500 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
16501 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
16502
16503 for(i = 0 ; i < baCandidateCount ; i++)
16504 {
16505 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016506 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
16507 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016508 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
16509 {
16510 baCandidate->baInfo[tid].fBaEnable =
16511 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
16512 baCandidate->baInfo[tid].startingSeqNum =
16513 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
16514 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070016515 wdiBaCandidate++ ;
16516 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016517 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016518 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
16519 }
16520 else
16521 {
16522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16523 "BA Trigger RSP with Failure received ");
16524 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016525 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016526}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080016527
16528
16529/*
16530 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
16531 * during MCC
16532 */
16533void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
16534{
16535 wpt_uint32 enabled;
16536 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
16537 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
16538 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
16539
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053016540 if (NULL == pMac )
16541 {
16542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16543 "%s: Invoked with invalid MAC context ", __func__ );
16544 VOS_ASSERT(0);
16545 return;
16546 }
16547
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080016548 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
16549 != eSIR_SUCCESS)
16550 {
16551 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16552 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
16553 return;
16554 }
16555
16556 if(!enabled)
16557 {
16558 return;
16559 }
16560
16561 if(NULL == pWDA)
16562 {
16563 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16564 "%s:WDA context is NULL", __func__);
16565 VOS_ASSERT(0);
16566 return;
16567 }
16568
16569 if(activate)
16570 {
16571 if( VOS_STATUS_SUCCESS !=
16572 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
16573 {
16574 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16575 "Traffic Stats Timer Start Failed ");
16576 return;
16577 }
16578 WDI_DS_ActivateTrafficStats();
16579 }
16580 else
16581 {
16582 WDI_DS_DeactivateTrafficStats();
16583 WDI_DS_ClearTrafficStats();
16584
16585 if( VOS_STATUS_SUCCESS !=
16586 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
16587 {
16588 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16589 "Traffic Stats Timer Stop Failed ");
16590 return;
16591 }
16592 }
16593}
16594
16595/*
16596 * Traffic Stats Timer handler
16597 */
16598void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
16599{
16600 WDI_Status wdiStatus;
16601 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
16602 WDI_TrafficStatsIndType trafficStatsIndParams;
16603 wpt_uint32 length, enabled;
16604 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16605
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053016606 if (NULL == pMac )
16607 {
16608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16609 "%s: Invoked with invalid MAC context ", __func__ );
16610 VOS_ASSERT(0);
16611 return;
16612 }
16613
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080016614 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
16615 != eSIR_SUCCESS)
16616 {
16617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16618 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
16619 return;
16620 }
16621
16622 if(!enabled)
16623 {
16624 WDI_DS_DeactivateTrafficStats();
16625 return;
16626 }
16627
16628 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
16629
16630 if(pWdiTrafficStats != NULL)
16631 {
16632 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
16633 trafficStatsIndParams.length = length;
16634 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080016635 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080016636 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
16637 trafficStatsIndParams.pUserData = pWDA;
16638
16639 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
16640
16641 if(WDI_STATUS_PENDING == wdiStatus)
16642 {
16643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16644 "Pending received for %s:%d ",__func__,__LINE__ );
16645 }
16646 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
16647 {
16648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16649 "Failure in %s:%d ",__func__,__LINE__ );
16650 }
16651
16652 WDI_DS_ClearTrafficStats();
16653 }
16654 else
16655 {
16656 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
16657 "pWdiTrafficStats is Null");
16658 }
16659
16660 if( VOS_STATUS_SUCCESS !=
16661 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
16662 {
16663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
16664 "Traffic Stats Timer Start Failed ");
16665 return;
16666 }
16667}
16668
Jeff Johnson295189b2012-06-20 16:38:30 -070016669/*
16670 * BA Activity check timer handler
16671 */
16672void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
16673{
16674 tANI_U8 curSta = 0 ;
16675 tANI_U8 tid = 0 ;
16676 tANI_U8 size = 0 ;
16677 tANI_U8 baCandidateCount = 0 ;
16678 tANI_U8 newBaCandidate = 0 ;
Abhishek Singh0644e482014-10-06 18:38:23 +053016679 tANI_U32 val;
Jeff Johnson295189b2012-06-20 16:38:30 -070016680 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
Abhishek Singh0644e482014-10-06 18:38:23 +053016681 tpAniSirGlobal pMac;
16682
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053016683 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070016684 {
16685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053016686 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016687 VOS_ASSERT(0);
16688 return ;
16689 }
16690 if(WDA_MAX_STA < pWDA->wdaMaxSta)
16691 {
16692 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16693 "Inconsistent STA entries in WDA");
16694 VOS_ASSERT(0) ;
Abhishek Singh0644e482014-10-06 18:38:23 +053016695 }
16696 if(NULL == pWDA->pVosContext)
16697 {
16698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16699 "%s: pVosContext is NULL",__func__);
16700 VOS_ASSERT(0);
16701 return ;
16702 }
16703 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Abhishek Singh68883952014-10-14 11:59:05 +053016704 if(NULL == pMac)
16705 {
16706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16707 "%s: pMac is NULL",__func__);
16708 VOS_ASSERT(0);
16709 return ;
16710 }
16711
Abhishek Singh0644e482014-10-06 18:38:23 +053016712 if (wlan_cfgGetInt(pMac,
16713 WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC, &val) !=
16714 eSIR_SUCCESS)
16715 {
16716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16717 "Unable to get WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC");
16718 val = 0;
16719 }
16720
Jeff Johnson295189b2012-06-20 16:38:30 -070016721 /* walk through all STA entries and find out TX packet count */
16722 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
16723 {
Abhishek Singh0644e482014-10-06 18:38:23 +053016724 tANI_U32 currentOperChan = pWDA->wdaStaInfo[curSta].currentOperChan;
Gopichand Nakkala976e3252013-01-03 15:45:56 -080016725#ifdef WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053016726 // We can only do BA on "hard" STAs.
16727 if (!(IS_HWSTA_IDX(curSta)))
16728 {
16729 continue;
16730 }
Gopichand Nakkala976e3252013-01-03 15:45:56 -080016731#endif //WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053016732 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
16733 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070016734 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016735 tANI_U32 txPktCount = 0 ;
16736 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016737 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070016738 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
16739 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070016740 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
16741 curSta, tid, &txPktCount)))
16742 {
16743#if 0
16744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
16745 "************* %d:%d, %d ",curSta, txPktCount,
16746 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
16747#endif
Abhishek Singh0644e482014-10-06 18:38:23 +053016748 if(val && ( (currentOperChan >= SIR_11B_CHANNEL_BEGIN) &&
16749 (currentOperChan <= SIR_11B_CHANNEL_END)))
16750 {
16751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16752 "%s: BTC disabled aggregation - dont start "
16753 "TX ADDBA req",__func__);
16754 }
16755 else if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070016756 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Abhishek Singh424ae432014-12-05 11:54:54 +053016757 && (((eSYSTEM_STA_IN_IBSS_ROLE ==
16758 pWDA->wdaGlobalSystemRole) && txPktCount )
16759 || (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
16760 curSta, tid))))
Jeff Johnson295189b2012-06-20 16:38:30 -070016761 {
16762 /* get prepare for sending message to HAL */
16763 //baCandidate[baCandidateCount].staIdx = curSta ;
16764 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
16765 newBaCandidate = WDA_ENABLE_BA ;
16766 }
16767 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
16768 }
16769 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016770 /* fill the entry for all the sta with given TID's */
16771 if(WDA_ENABLE_BA == newBaCandidate)
16772 {
16773 /* move to next BA candidate */
16774 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
16775 size += sizeof(WDI_TriggerBAReqCandidateType) ;
16776 baCandidateCount++ ;
16777 newBaCandidate = WDA_DISABLE_BA ;
16778 }
16779 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016780 /* prepare and send message to hal */
16781 if( 0 < baCandidateCount)
16782 {
16783 WDI_Status status = WDI_STATUS_SUCCESS ;
16784 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
16785 tWDA_ReqParams *pWdaParams =
16786 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016787 if(NULL == pWdaParams)
16788 {
16789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016790 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016791 VOS_ASSERT(0) ;
16792 return;
16793 }
16794 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
16795 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
16796 if(NULL == wdiTriggerBaReq)
16797 {
16798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016799 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016800 VOS_ASSERT(0) ;
16801 vos_mem_free(pWdaParams);
16802 return;
16803 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016804 do
16805 {
16806 WDI_TriggerBAReqinfoType *triggerBaInfo =
16807 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
16808 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
16809 /* TEMP_FIX: Need to see if WDI need check for assoc session for
16810 * for each request */
16811 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
16812 triggerBaInfo->ucBASessionID = 0;
16813 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
16814 } while(0) ;
16815 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
16816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016817 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016818 pWdaParams->pWdaContext = pWDA;
16819 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
16820 pWdaParams->wdaMsgParam = NULL;
Abhishek Singhe5066502016-02-05 18:07:41 +053016821 status = WDI_TriggerBAReq(wdiTriggerBaReq, size,
Jeff Johnson295189b2012-06-20 16:38:30 -070016822 WDA_TriggerBaReqCallback, pWdaParams) ;
16823 if(IS_WDI_STATUS_FAILURE(status))
16824 {
16825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16826 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
16827 vos_mem_free(pWdaParams->wdaMsgParam) ;
16828 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16829 vos_mem_free(pWdaParams) ;
16830 }
16831 }
16832 else
16833 {
16834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
16835 "There is no TID for initiating BA");
16836 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016837 if( VOS_STATUS_SUCCESS !=
16838 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
16839 {
16840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16841 "BA Activity Timer Stop Failed ");
16842 return ;
16843 }
16844 if( VOS_STATUS_SUCCESS !=
16845 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
16846 {
16847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16848 "BA Activity Timer Start Failed ");
16849 return;
16850 }
16851 return ;
16852}
Jeff Johnson295189b2012-06-20 16:38:30 -070016853/*
16854 * WDA common routine to create timer used by WDA.
16855 */
16856static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
16857{
Jeff Johnson295189b2012-06-20 16:38:30 -070016858 VOS_STATUS status = VOS_STATUS_SUCCESS ;
16859 tANI_U32 val = 0 ;
16860 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16861
16862 if(NULL == pMac)
16863 {
16864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016865 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016866 VOS_ASSERT(0);
16867 return VOS_STATUS_E_FAILURE;
16868 }
16869 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
16870 != eSIR_SUCCESS)
16871 {
16872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16873 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
16874 return VOS_STATUS_E_FAILURE;
16875 }
16876 val = SYS_MS_TO_TICKS(val) ;
16877
16878 /* BA activity check timer */
16879 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
16880 "BA Activity Check timer", WDA_TimerHandler,
16881 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
16882 if(status != TX_SUCCESS)
16883 {
16884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16885 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080016886 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016887 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016888 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016889 /* Tx Complete Timeout timer */
16890 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
16891 "Tx Complete Check timer", WDA_TimerHandler,
16892 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016893 if(status != TX_SUCCESS)
16894 {
16895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16896 "Unable to create Tx Complete Timeout timer");
16897 /* Destroy timer of BA activity check timer */
16898 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
16899 if(status != TX_SUCCESS)
16900 {
16901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16902 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080016903 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016904 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080016905 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016906 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080016907
16908 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
16909
16910 /* Traffic Stats timer */
16911 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
16912 "Traffic Stats timer", WDA_TimerHandler,
16913 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
16914 if(status != TX_SUCCESS)
16915 {
16916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16917 "Unable to create traffic stats timer");
16918 /* Destroy timer of BA activity check timer */
16919 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
16920 if(status != TX_SUCCESS)
16921 {
16922 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16923 "Unable to Destroy BA activity timer");
16924 }
16925 /* Destroy timer of tx complete timer */
16926 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
16927 if(status != TX_SUCCESS)
16928 {
16929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16930 "Unable to Tx complete timer");
16931 }
16932 return VOS_STATUS_E_FAILURE ;
16933 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080016934 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016935}
Jeff Johnson295189b2012-06-20 16:38:30 -070016936/*
16937 * WDA common routine to destroy timer used by WDA.
16938 */
16939static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
16940{
16941 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016942 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
16943 if(status != TX_SUCCESS)
16944 {
16945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16946 "Unable to Destroy Tx Complete Timeout timer");
16947 return eSIR_FAILURE ;
16948 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016949 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
16950 if(status != TX_SUCCESS)
16951 {
16952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16953 "Unable to Destroy BA activity timer");
16954 return eSIR_FAILURE ;
16955 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080016956 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
16957 if(status != TX_SUCCESS)
16958 {
16959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16960 "Unable to Destroy traffic stats timer");
16961 return eSIR_FAILURE ;
16962 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016963 return eSIR_SUCCESS ;
16964}
Jeff Johnson295189b2012-06-20 16:38:30 -070016965/*
16966 * WDA timer handler.
16967 */
16968void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
16969{
16970 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
16971 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016972 /*
16973 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
16974 */
16975 wdaMsg.type = timerInfo ;
16976 wdaMsg.bodyptr = NULL;
16977 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070016978 /* post the message.. */
16979 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
16980 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
16981 {
16982 vosStatus = VOS_STATUS_E_BADMSG;
16983 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016984}
Jeff Johnson295189b2012-06-20 16:38:30 -070016985/*
16986 * WDA Tx Complete timeout Indication.
16987 */
16988void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
16989{
16990 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053016991 tpSirTxBdStatus txBdStatus = {0};
16992
Jeff Johnson295189b2012-06-20 16:38:30 -070016993 if( pWDA->pAckTxCbFunc )
16994 {
16995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016996 "TxComplete timer expired");
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053016997 /*Indicate failure*/
16998 pWDA->pAckTxCbFunc( pMac, &txBdStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070016999 pWDA->pAckTxCbFunc = NULL;
17000 }
17001 else
17002 {
17003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017004 "There is no request pending for TxComplete and wait timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070017005 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017006}
Jeff Johnson295189b2012-06-20 16:38:30 -070017007/*
17008 * WDA Set REG Domain to VOS NV
17009 */
Abhishek Singha306a442013-11-07 18:39:01 +053017010eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId,
17011 tAniBool sendRegHint)
Jeff Johnson295189b2012-06-20 16:38:30 -070017012{
Abhishek Singha306a442013-11-07 18:39:01 +053017013 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId, sendRegHint))
Jeff Johnson295189b2012-06-20 16:38:30 -070017014 {
17015 return eHAL_STATUS_INVALID_PARAMETER;
17016 }
17017 return eHAL_STATUS_SUCCESS;
17018}
Jeff Johnson295189b2012-06-20 16:38:30 -070017019
Jeff Johnson295189b2012-06-20 16:38:30 -070017020#ifdef FEATURE_WLAN_SCAN_PNO
17021/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017022 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070017023 *
17024 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070017025void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070017026{
17027 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053017028 tSirPNOScanReq *pPNOScanReqParams;
17029
Jeff Johnson295189b2012-06-20 16:38:30 -070017030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053017031 "<------ %s, wdiStatus: %d",__func__, status);
Yue Ma7f44bbe2013-04-12 11:47:39 -070017032 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070017033 {
17034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017035 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017036 VOS_ASSERT(0) ;
17037 return ;
17038 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017039
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053017040 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
17041 if(pPNOScanReqParams->statusCallback)
17042 {
17043 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
17044 (status == WDI_STATUS_SUCCESS) ?
17045 VOS_STATUS_SUCCESS : VOS_STATUS_E_FAILURE);
17046 }
17047
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053017048 if (pPNOScanReqParams->enable == 1)
17049 {
17050 if (pPNOScanReqParams->aNetworks)
17051 vos_mem_free(pPNOScanReqParams->aNetworks);
17052 if (pPNOScanReqParams->p24GProbeTemplate)
17053 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
17054 if (pPNOScanReqParams->p5GProbeTemplate)
17055 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
17056 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070017057 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17058 vos_mem_free(pWdaParams->wdaMsgParam);
17059 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070017060
17061 return ;
17062}
Jeff Johnson295189b2012-06-20 16:38:30 -070017063/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017064 * FUNCTION: WDA_PNOScanReqCallback
17065 * Free memory.
17066 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
17067 */
17068void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070017069{
Yue Ma7f44bbe2013-04-12 11:47:39 -070017070 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053017071 tSirPNOScanReq *pPNOScanReqParams;
Yue Ma7f44bbe2013-04-12 11:47:39 -070017072
17073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17074 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
17075
17076 if(NULL == pWdaParams)
17077 {
17078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17079 "%s: pWdaParams received NULL", __func__);
17080 VOS_ASSERT(0);
17081 return;
17082 }
17083
17084 if(IS_WDI_STATUS_FAILURE(wdiStatus))
17085 {
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053017086 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
17087 if(pPNOScanReqParams->statusCallback)
17088 {
17089 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
17090 VOS_STATUS_E_FAILURE);
17091 }
17092
Hanumantha Reddy Pothula06e87b22015-03-02 18:02:23 +053017093 if (pPNOScanReqParams->enable == 1)
17094 {
17095 if (pPNOScanReqParams->aNetworks)
17096 vos_mem_free(pPNOScanReqParams->aNetworks);
17097 if (pPNOScanReqParams->p24GProbeTemplate)
17098 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
17099 if (pPNOScanReqParams->p5GProbeTemplate)
17100 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
17101 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070017102 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17103 vos_mem_free(pWdaParams->wdaMsgParam);
17104 vos_mem_free(pWdaParams);
17105 }
17106
17107 return;
17108}
17109/*
17110 * FUNCTION: WDA_UpdateScanParamsRespCallback
17111 *
17112 */
17113void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
17114{
17115 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070017116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017117 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070017118 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070017119 {
17120 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017121 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017122 VOS_ASSERT(0) ;
17123 return ;
17124 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070017125
17126 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17127 vos_mem_free(pWdaParams->wdaMsgParam);
17128 vos_mem_free(pWdaParams);
17129
Jeff Johnson295189b2012-06-20 16:38:30 -070017130 return ;
17131}
Jeff Johnson295189b2012-06-20 16:38:30 -070017132/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017133 * FUNCTION: WDA_UpdateScanParamsReqCallback
17134 * Free memory.
17135 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
17136 */
17137void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
17138{
17139 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17140
17141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17142 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
17143
17144 if(NULL == pWdaParams)
17145 {
17146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17147 "%s: pWdaParams received NULL", __func__);
17148 VOS_ASSERT(0);
17149 return;
17150 }
17151
17152 if(IS_WDI_STATUS_FAILURE(wdiStatus))
17153 {
17154 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17155 vos_mem_free(pWdaParams->wdaMsgParam);
17156 vos_mem_free(pWdaParams);
17157 }
17158
17159 return;
17160}
17161/*
Jeff Johnson295189b2012-06-20 16:38:30 -070017162 * FUNCTION: WDA_ProcessSetPreferredNetworkList
17163 * Request to WDI to set Preferred Network List.Offload
17164 */
17165VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
17166 tSirPNOScanReq *pPNOScanReqParams)
17167{
Jeff Johnson43971f52012-07-17 12:26:56 -070017168 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070017169 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
17170 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
17171 tWDA_ReqParams *pWdaParams ;
17172 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070017173 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017174 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017175 if(NULL == pwdiPNOScanReqInfo)
17176 {
17177 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017178 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017179 VOS_ASSERT(0);
17180 return VOS_STATUS_E_NOMEM;
17181 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017182 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17183 if(NULL == pWdaParams)
17184 {
17185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017186 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017187 VOS_ASSERT(0);
17188 vos_mem_free(pwdiPNOScanReqInfo);
17189 return VOS_STATUS_E_NOMEM;
17190 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017191 //
17192 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
17193 //
17194 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
17195 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070017196 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
17197 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
17198 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017199 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
17200 {
17201 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
17202 &pPNOScanReqParams->aNetworks[i],
17203 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
17204 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017205 /*Scan timer intervals*/
17206 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
17207 &pPNOScanReqParams->scanTimers,
17208 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070017209 /*Probe template for 2.4GHz band*/
17210 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
17211 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
17212 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070017213 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
17214 pPNOScanReqParams->p24GProbeTemplate,
17215 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070017216 /*Probe template for 5GHz band*/
17217 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
17218 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
17219 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070017220 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
17221 pPNOScanReqParams->p5GProbeTemplate,
17222 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070017223 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
17224 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070017225
Jeff Johnson295189b2012-06-20 16:38:30 -070017226 /* Store Params pass it to WDI */
17227 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
17228 pWdaParams->pWdaContext = pWDA;
17229 /* Store param pointer as passed in by caller */
17230 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070017231 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070017232 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070017233 if(IS_WDI_STATUS_FAILURE(status))
17234 {
17235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17236 "Failure in Set PNO REQ WDI API, free all the memory " );
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053017237 if(pPNOScanReqParams->statusCallback)
17238 {
17239 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
17240 VOS_STATUS_E_FAILURE);
17241 }
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053017242 if (pPNOScanReqParams->enable == 1)
17243 {
17244 if (pPNOScanReqParams->aNetworks)
17245 vos_mem_free(pPNOScanReqParams->aNetworks);
17246 if (pPNOScanReqParams->p24GProbeTemplate)
17247 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
17248 if (pPNOScanReqParams->p5GProbeTemplate)
17249 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
17250 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017251 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
17252 vos_mem_free(pWdaParams->wdaMsgParam);
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053017253
Jeff Johnson295189b2012-06-20 16:38:30 -070017254 pWdaParams->wdaWdiApiMsgParam = NULL;
17255 pWdaParams->wdaMsgParam = NULL;
17256 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017257 return CONVERT_WDI2VOS_STATUS(status) ;
17258}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017259
17260#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
17261
17262void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
17263{
17264 /*Convert the CSR Auth types to WDI Auth types */
17265 switch (csrAuthType)
17266 {
17267 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
17268 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
17269 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080017270#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017271 case eCSR_AUTH_TYPE_CCKM_WPA:
17272 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
17273 break;
17274#endif
17275 case eCSR_AUTH_TYPE_WPA:
17276 *AuthType = eWDA_AUTH_TYPE_WPA;
17277 break;
17278 case eCSR_AUTH_TYPE_WPA_PSK:
17279 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
17280 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080017281#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017282 case eCSR_AUTH_TYPE_CCKM_RSN:
17283 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
17284 break;
17285#endif
17286 case eCSR_AUTH_TYPE_RSN:
17287 *AuthType = eWDA_AUTH_TYPE_RSN;
17288 break;
17289 case eCSR_AUTH_TYPE_RSN_PSK:
17290 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
17291 break;
17292#if defined WLAN_FEATURE_VOWIFI_11R
17293 case eCSR_AUTH_TYPE_FT_RSN:
17294 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
17295 break;
17296 case eCSR_AUTH_TYPE_FT_RSN_PSK:
17297 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
17298 break;
17299#endif
17300#ifdef FEATURE_WLAN_WAPI
17301 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
17302 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
17303 break;
17304 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
17305 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
17306 break;
17307#endif /* FEATURE_WLAN_WAPI */
17308 case eCSR_AUTH_TYPE_SHARED_KEY:
17309 case eCSR_AUTH_TYPE_AUTOSWITCH:
17310 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
17311 break;
Kanchanapally, Vidyullatha3355dd32015-06-09 14:56:56 +053017312#ifdef WLAN_FEATURE_11W
17313 case eCSR_AUTH_TYPE_RSN_PSK_SHA256:
17314 *AuthType = eWDA_AUTH_TYPE_RSN_PSK_SHA256;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017315 break;
Kanchanapally, Vidyullatha3355dd32015-06-09 14:56:56 +053017316 case eCSR_AUTH_TYPE_RSN_8021X_SHA256:
17317 *AuthType = eWDA_AUTH_TYPE_RSN_8021X_SHA256;
17318 break;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017319#endif
17320 default:
Deepthi Gowribfd17132014-11-14 17:59:04 +053017321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017322 "%s: Unknown Auth Type", __func__);
17323 break;
17324 }
17325}
17326void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
17327{
17328 switch (csrEncrType)
17329 {
17330 case eCSR_ENCRYPT_TYPE_NONE:
17331 *EncrType = WDI_ED_NONE;
17332 break;
17333 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
17334 case eCSR_ENCRYPT_TYPE_WEP40:
17335 *EncrType = WDI_ED_WEP40;
17336 break;
17337 case eCSR_ENCRYPT_TYPE_WEP104:
17338 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
17339 *EncrType = WDI_ED_WEP104;
17340 break;
17341 case eCSR_ENCRYPT_TYPE_TKIP:
17342 *EncrType = WDI_ED_TKIP;
17343 break;
17344 case eCSR_ENCRYPT_TYPE_AES:
17345 *EncrType = WDI_ED_CCMP;
17346 break;
17347#ifdef WLAN_FEATURE_11W
17348 case eCSR_ENCRYPT_TYPE_AES_CMAC:
17349 *EncrType = WDI_ED_AES_128_CMAC;
17350 break;
17351#endif
17352#ifdef FEATURE_WLAN_WAPI
17353 case eCSR_ENCRYPT_TYPE_WPI:
17354 *EncrType = WDI_ED_WPI;
17355 break;
17356#endif
17357 case eCSR_ENCRYPT_TYPE_ANY:
17358 *EncrType = WDI_ED_ANY;
17359 break;
17360
17361 default:
17362 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17363 "%s: Unknown Encryption Type", __func__);
17364 break;
17365 }
17366}
17367
17368/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017369 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017370 * Request to WDI to set Roam Offload Scan
17371 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017372VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017373 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
17374{
17375 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017376 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
17377 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017378 tWDA_ReqParams *pWdaParams ;
17379 v_U8_t csrAuthType;
17380 WDI_RoamNetworkType *pwdiRoamNetworkType;
17381 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
17382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17383 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017384 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017385 {
17386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17387 "%s: VOS MEM Alloc Failure", __func__);
17388 VOS_ASSERT(0);
17389 return VOS_STATUS_E_NOMEM;
17390 }
17391 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17392 if (NULL == pWdaParams)
17393 {
17394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17395 "%s: VOS MEM Alloc Failure", __func__);
17396 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017397 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017398 return VOS_STATUS_E_NOMEM;
17399 }
17400
17401 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017402 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017403 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017404 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
17405 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017406 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
17407 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
17408 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
17409 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
17410 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
17411 sizeof(pwdiRoamNetworkType->currAPbssid));
17412 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
17413 csrAuthType);
17414 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
17415 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
17416 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
17417 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
17418 pwdiRoamOffloadScanInfo->LookupThreshold =
17419 pRoamOffloadScanReqParams->LookupThreshold ;
Varun Reddy Yeturu6c5e25c2014-01-09 21:55:37 -080017420 pwdiRoamOffloadScanInfo->RxSensitivityThreshold =
17421 pRoamOffloadScanReqParams->RxSensitivityThreshold;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017422 pwdiRoamOffloadScanInfo->RoamRssiDiff =
17423 pRoamOffloadScanReqParams->RoamRssiDiff ;
Sameer Thalappil4ae66ec2013-11-05 14:17:35 -080017424 pwdiRoamOffloadScanInfo->MAWCEnabled =
17425 pRoamOffloadScanReqParams->MAWCEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017426 pwdiRoamOffloadScanInfo->Command =
17427 pRoamOffloadScanReqParams->Command ;
17428 pwdiRoamOffloadScanInfo->StartScanReason =
17429 pRoamOffloadScanReqParams->StartScanReason ;
17430 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
17431 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
17432 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
17433 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
17434 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
17435 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
17436 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
17437 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
17438 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
17439 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080017440 pwdiRoamOffloadScanInfo->IsESEEnabled =
17441 pRoamOffloadScanReqParams->IsESEEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017442 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
17443 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
17444 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
17445 pwdiRoamNetworkType->ssId.ucLength =
17446 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
17447 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
17448 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
17449 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
17450 pwdiRoamNetworkType->ChannelCount =
17451 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
17452 pwdiRoamOffloadScanInfo->ChannelCacheType =
17453 pRoamOffloadScanReqParams->ChannelCacheType;
17454 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
17455 pRoamOffloadScanReqParams->ValidChannelList,
17456 pRoamOffloadScanReqParams->ValidChannelCount);
17457 pwdiRoamOffloadScanInfo->ValidChannelCount =
17458 pRoamOffloadScanReqParams->ValidChannelCount;
17459 pwdiRoamOffloadScanInfo->us24GProbeSize =
17460 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
17461 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
17462 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
17463 pRoamOffloadScanReqParams->p24GProbeTemplate,
17464 pwdiRoamOffloadScanInfo->us24GProbeSize);
17465 pwdiRoamOffloadScanInfo->us5GProbeSize =
17466 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
17467 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
17468 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
17469 pRoamOffloadScanReqParams->p5GProbeTemplate,
17470 pwdiRoamOffloadScanInfo->us5GProbeSize);
17471 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
17472 pRoamOffloadScanReqParams->MDID.mdiePresent;
17473 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
17474 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017475 pwdiRoamOffloadScanInfo->nProbes =
17476 pRoamOffloadScanReqParams->nProbes;
17477 pwdiRoamOffloadScanInfo->HomeAwayTime =
17478 pRoamOffloadScanReqParams->HomeAwayTime;
17479 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017480 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017481 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017482 pWdaParams->pWdaContext = pWDA;
17483 /* Store param pointer as passed in by caller */
17484 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017485 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017486 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
17487 if(IS_WDI_STATUS_FAILURE(status))
17488 {
17489 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17490 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
17491 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
17492 vos_mem_free(pWdaParams->wdaMsgParam);
17493 pWdaParams->wdaWdiApiMsgParam = NULL;
17494 pWdaParams->wdaMsgParam = NULL;
17495 }
17496 return CONVERT_WDI2VOS_STATUS(status) ;
17497}
17498#endif
17499
Jeff Johnson295189b2012-06-20 16:38:30 -070017500/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017501 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070017502 *
17503 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070017504void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070017505{
17506 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17507
17508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017509 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017510
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053017511 if(NULL == pWdaParams)
17512 {
17513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070017514 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053017515 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070017516 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053017517 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070017518
Jeff Johnson295189b2012-06-20 16:38:30 -070017519 vos_mem_free(pWdaParams->wdaMsgParam) ;
17520 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17521 vos_mem_free(pWdaParams) ;
17522
17523 return ;
17524}
17525/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017526 * FUNCTION: WDA_RssiFilterReqCallback
17527 * Free memory.
17528 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
17529 */
17530void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
17531{
17532 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17533
17534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17535 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
17536
17537 if(NULL == pWdaParams)
17538 {
17539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17540 "%s: pWdaParams received NULL", __func__);
17541 VOS_ASSERT(0);
17542 return;
17543 }
17544
17545 if(IS_WDI_STATUS_FAILURE(wdiStatus))
17546 {
17547 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17548 vos_mem_free(pWdaParams->wdaMsgParam);
17549 vos_mem_free(pWdaParams);
17550 }
17551
17552 return;
17553}
17554/*
Hanumantha Reddy Pothula1e687da2015-03-31 13:44:31 +053017555 * FUNCTION: WDA_ProcessSetRssiFilterReq
Jeff Johnson295189b2012-06-20 16:38:30 -070017556 * Request to WDI to set Preferred Network List.Offload
17557 */
17558VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
17559 tSirSetRSSIFilterReq* pRssiFilterParams)
17560{
Jeff Johnson43971f52012-07-17 12:26:56 -070017561 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070017562 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
17563 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
17564 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017565 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017566 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017567 if(NULL == pwdiSetRssiFilterReqInfo)
17568 {
17569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017570 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017571 VOS_ASSERT(0);
17572 return VOS_STATUS_E_NOMEM;
17573 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017574 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17575 if(NULL == pWdaParams)
17576 {
17577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017578 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017579 VOS_ASSERT(0);
17580 vos_mem_free(pwdiSetRssiFilterReqInfo);
17581 return VOS_STATUS_E_NOMEM;
17582 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017583 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070017584 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
17585 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070017586
Jeff Johnson295189b2012-06-20 16:38:30 -070017587 /* Store Params pass it to WDI */
17588 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
17589 pWdaParams->pWdaContext = pWDA;
17590 /* Store param pointer as passed in by caller */
17591 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070017592 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070017593 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070017594 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070017595 if(IS_WDI_STATUS_FAILURE(status))
17596 {
17597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17598 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
17599 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
17600 vos_mem_free(pWdaParams->wdaMsgParam);
17601 pWdaParams->wdaWdiApiMsgParam = NULL;
17602 pWdaParams->wdaMsgParam = NULL;
17603 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017604 return CONVERT_WDI2VOS_STATUS(status) ;
17605}
17606
Jeff Johnson295189b2012-06-20 16:38:30 -070017607/*
17608 * FUNCTION: WDA_ProcessUpdateScanParams
17609 * Request to WDI to update Scan Parameters
17610 */
17611VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
17612 tSirUpdateScanParams *pUpdateScanParams)
17613{
Jeff Johnson43971f52012-07-17 12:26:56 -070017614 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070017615 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
17616 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
17617 sizeof(WDI_UpdateScanParamsInfoType)) ;
17618 tWDA_ReqParams *pWdaParams ;
17619 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070017620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017621 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017622 if(NULL == wdiUpdateScanParamsInfoType)
17623 {
17624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017625 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017626 VOS_ASSERT(0);
17627 return VOS_STATUS_E_NOMEM;
17628 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017629 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17630 if ( NULL == pWdaParams )
17631 {
17632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017633 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017634 VOS_ASSERT(0);
17635 vos_mem_free(wdiUpdateScanParamsInfoType);
17636 return VOS_STATUS_E_NOMEM;
17637 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017638 //
17639 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
17640 //
Jeff Johnson295189b2012-06-20 16:38:30 -070017641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17642 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
17643 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
17644 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
Jeff Johnson9a9ed0d2013-11-26 13:36:52 -080017645 "sir struct %zu wdi struct %zu",
Jeff Johnson295189b2012-06-20 16:38:30 -070017646 pUpdateScanParams->b11dEnabled,
17647 pUpdateScanParams->b11dResolved,
17648 pUpdateScanParams->ucChannelCount,
17649 pUpdateScanParams->usPassiveMinChTime,
17650 pUpdateScanParams->usPassiveMaxChTime,
17651 pUpdateScanParams->usActiveMinChTime,
17652 pUpdateScanParams->usActiveMaxChTime,
17653 sizeof(tSirUpdateScanParams),
17654 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
17655
Jeff Johnson295189b2012-06-20 16:38:30 -070017656 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
17657 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070017658 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
17659 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070017660 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
17661 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070017662 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
17663 pUpdateScanParams->usActiveMaxChTime;
17664 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
17665 pUpdateScanParams->usActiveMinChTime;
17666 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
17667 pUpdateScanParams->usPassiveMaxChTime;
17668 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
17669 pUpdateScanParams->usPassiveMinChTime;
17670
Jeff Johnson295189b2012-06-20 16:38:30 -070017671 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053017672 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
17673 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070017674
Jeff Johnson295189b2012-06-20 16:38:30 -070017675 for ( i = 0; i <
17676 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
17677 i++)
17678 {
17679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17680 "Update Scan Parameters channel: %d",
17681 pUpdateScanParams->aChannels[i]);
17682
17683 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
17684 pUpdateScanParams->aChannels[i];
17685 }
17686
Yue Ma7f44bbe2013-04-12 11:47:39 -070017687 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
17688 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070017689
Jeff Johnson295189b2012-06-20 16:38:30 -070017690 /* Store Params pass it to WDI */
17691 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
17692 pWdaParams->pWdaContext = pWDA;
17693 /* Store param pointer as passed in by caller */
17694 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070017695
Jeff Johnson295189b2012-06-20 16:38:30 -070017696
17697
17698 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070017699 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070017700 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070017701 if(IS_WDI_STATUS_FAILURE(status))
17702 {
17703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17704 "Failure in Update Scan Params EQ WDI API, free all the memory " );
17705 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
17706 vos_mem_free(pWdaParams->wdaMsgParam);
17707 vos_mem_free(pWdaParams);
17708 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017709 return CONVERT_WDI2VOS_STATUS(status) ;
17710}
17711#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017712
17713#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
17714/*
17715 * FUNCTION: WDA_RoamOffloadScanReqCallback
17716 *
17717 */
17718void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
17719{
17720 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070017721 vos_msg_t vosMsg;
17722 wpt_uint8 reason = 0;
17723
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070017724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017725 "<------ %s " ,__func__);
17726 if (NULL == pWdaParams)
17727 {
17728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17729 "%s: pWdaParams received NULL", __func__);
17730 VOS_ASSERT(0) ;
17731 return ;
17732 }
17733 if ( pWdaParams != NULL )
17734 {
17735 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
17736 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070017737 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017738 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17739 }
17740 if ( pWdaParams->wdaMsgParam != NULL)
17741 {
17742 vos_mem_free(pWdaParams->wdaMsgParam);
17743 }
17744
17745 vos_mem_free(pWdaParams) ;
17746 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070017747 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
17748 vosMsg.bodyptr = NULL;
17749 if (WDI_STATUS_SUCCESS != status)
17750 {
17751 reason = 0;
17752 }
17753 vosMsg.bodyval = reason;
17754 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
17755 {
17756 /* free the mem and return */
17757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsone384c822013-10-30 12:21:17 -070017758 "%s: Failed to post the rsp to UMAC", __func__);
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070017759 }
17760
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017761 return ;
17762}
17763#endif
17764
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080017765/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017766 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080017767 *
17768 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070017769void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080017770{
17771 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17772
17773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17774 "<------ %s " ,__func__);
17775
17776 if(NULL == pWdaParams)
17777 {
17778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17779 "%s: pWdaParams received NULL", __func__);
17780 VOS_ASSERT(0);
17781 return;
17782 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070017783
17784 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17785 vos_mem_free(pWdaParams->wdaMsgParam);
17786 vos_mem_free(pWdaParams);
17787
17788 return;
17789}
17790/*
17791 * FUNCTION: WDA_SetPowerParamsReqCallback
17792 * Free memory.
17793 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
17794 */
17795void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
17796{
17797 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17798
17799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17800 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
17801
17802 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080017803 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070017804 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17805 "%s: pWdaParams received NULL", __func__);
17806 VOS_ASSERT(0);
17807 return;
17808 }
17809
17810 if(IS_WDI_STATUS_FAILURE(wdiStatus))
17811 {
17812 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17813 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080017814 vos_mem_free(pWdaParams);
17815 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070017816
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080017817 return;
17818}
17819
Jeff Johnson295189b2012-06-20 16:38:30 -070017820#ifdef WLAN_FEATURE_PACKET_FILTERING
17821/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017822 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070017823 *
17824 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070017825void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070017826 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
17827 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070017828{
17829 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070017830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017831 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017832 if(NULL == pWdaParams)
17833 {
17834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017835 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017836 VOS_ASSERT(0) ;
17837 return ;
17838 }
17839
17840 vos_mem_free(pWdaParams->wdaMsgParam) ;
17841 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17842 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017843 //print a msg, nothing else to do
17844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070017845 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070017846 return ;
17847}
Jeff Johnson295189b2012-06-20 16:38:30 -070017848/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017849 * FUNCTION: WDA_8023MulticastListReqCallback
17850 * Free memory.
17851 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
17852 */
17853void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
17854{
17855 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17856
17857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17858 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
17859
17860 if(NULL == pWdaParams)
17861 {
17862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17863 "%s: pWdaParams received NULL", __func__);
17864 VOS_ASSERT(0);
17865 return;
17866 }
17867
17868 if(IS_WDI_STATUS_FAILURE(wdiStatus))
17869 {
17870 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17871 vos_mem_free(pWdaParams->wdaMsgParam);
17872 vos_mem_free(pWdaParams);
17873 }
17874
17875 return;
17876}
17877/*
Jeff Johnson295189b2012-06-20 16:38:30 -070017878 * FUNCTION: WDA_Process8023MulticastListReq
17879 * Request to WDI to add 8023 Multicast List
17880 */
17881VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
17882 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
17883{
Jeff Johnson43971f52012-07-17 12:26:56 -070017884 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070017885 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
17886 tWDA_ReqParams *pWdaParams ;
17887 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070017888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017889 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017890 pwdiFltPktSetMcListReqParamsType =
17891 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
17892 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
17893 ) ;
17894 if(NULL == pwdiFltPktSetMcListReqParamsType)
17895 {
17896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017897 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017898 return VOS_STATUS_E_NOMEM;
17899 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017900 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17901 if(NULL == pWdaParams)
17902 {
17903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017904 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017905 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
17906 return VOS_STATUS_E_NOMEM;
17907 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070017908
Jeff Johnson295189b2012-06-20 16:38:30 -070017909 //
17910 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
17911 //
17912 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070017913 pRcvFltMcAddrList->ulMulticastAddrCnt;
17914
17915 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
17916 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
17917 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
17918 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
17919
Jeff Johnson295189b2012-06-20 16:38:30 -070017920 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
17921 {
17922 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
17923 &(pRcvFltMcAddrList->multicastAddr[i]),
17924 sizeof(tSirMacAddr));
17925 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070017926 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
17927 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070017928
Jeff Johnson295189b2012-06-20 16:38:30 -070017929 /* Store Params pass it to WDI */
17930 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
17931 pWdaParams->pWdaContext = pWDA;
17932 /* Store param pointer as passed in by caller */
17933 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070017934 status = WDI_8023MulticastListReq(
17935 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070017936 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070017937 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070017938 if(IS_WDI_STATUS_FAILURE(status))
17939 {
17940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17941 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
17942 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
17943 vos_mem_free(pWdaParams->wdaMsgParam);
17944 vos_mem_free(pWdaParams);
17945 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017946 return CONVERT_WDI2VOS_STATUS(status) ;
17947}
Jeff Johnson295189b2012-06-20 16:38:30 -070017948/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080017949 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070017950 *
17951 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080017952void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070017953 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
17954 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070017955{
17956 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070017957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017958 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017959 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070017960 if(NULL == pWdaParams)
17961 {
17962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017963 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017964 VOS_ASSERT(0) ;
17965 return ;
17966 }
17967
17968 vos_mem_free(pWdaParams->wdaMsgParam) ;
17969 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17970 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017971 //print a msg, nothing else to do
17972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080017973 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070017974 return ;
17975}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080017976
17977/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017978 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
17979 * Free memory.
17980 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080017981 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070017982void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080017983 void* pUserData)
17984{
17985 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17986
17987 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17988 "<------ %s, wdiStatus: %d",
17989 __func__, wdiStatus);
17990
17991 if (NULL == pWdaParams)
17992 {
17993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17994 "%s: Invalid pWdaParams pointer", __func__);
17995 VOS_ASSERT(0);
17996 return;
17997 }
17998
17999 if (IS_WDI_STATUS_FAILURE(wdiStatus))
18000 {
18001 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18002 vos_mem_free(pWdaParams->wdaMsgParam);
18003 vos_mem_free(pWdaParams);
18004 }
18005
18006 return;
18007}
18008
Jeff Johnson295189b2012-06-20 16:38:30 -070018009/*
18010 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
18011 * Request to WDI to set Receive Filters
18012 */
18013VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
18014 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
18015{
Jeff Johnson43971f52012-07-17 12:26:56 -070018016 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070018017 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
18018 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
18019 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
18020 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
18021 tWDA_ReqParams *pWdaParams ;
18022 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070018023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018024 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018025 if(NULL == pwdiSetRcvPktFilterReqParamsType)
18026 {
18027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018028 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018029 VOS_ASSERT(0);
18030 return VOS_STATUS_E_NOMEM;
18031 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018032 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18033 if(NULL == pWdaParams)
18034 {
18035 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018036 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018037 VOS_ASSERT(0);
18038 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
18039 return VOS_STATUS_E_NOMEM;
18040 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018041 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
18042 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
18043 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
18044 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070018045 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
18046 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
18047
18048 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
18049 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070018050
18051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18052 "FID %d FT %d NParams %d CT %d",
18053 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
18054 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
18055 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
18056 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070018057 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
18058 {
18059 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
18060 &pRcvPktFilterCfg->paramsData[i],
18061 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070018062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080018063 "Proto %d Comp Flag %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070018064 pwdiSetRcvPktFilterReqParamsType->
18065 wdiPktFilterCfg.paramsData[i].protocolLayer,
18066 pwdiSetRcvPktFilterReqParamsType->
18067 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070018068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080018069 "Data Offset %d Data Len %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070018070 pwdiSetRcvPktFilterReqParamsType->
18071 wdiPktFilterCfg.paramsData[i].dataOffset,
18072 pwdiSetRcvPktFilterReqParamsType->
18073 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070018074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080018075 "CData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070018076 pwdiSetRcvPktFilterReqParamsType->
18077 wdiPktFilterCfg.paramsData[i].compareData[0],
18078 pwdiSetRcvPktFilterReqParamsType->
18079 wdiPktFilterCfg.paramsData[i].compareData[1],
18080 pwdiSetRcvPktFilterReqParamsType->
18081 wdiPktFilterCfg.paramsData[i].compareData[2],
18082 pwdiSetRcvPktFilterReqParamsType->
18083 wdiPktFilterCfg.paramsData[i].compareData[3],
18084 pwdiSetRcvPktFilterReqParamsType->
18085 wdiPktFilterCfg.paramsData[i].compareData[4],
18086 pwdiSetRcvPktFilterReqParamsType->
18087 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070018088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080018089 "MData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070018090 pwdiSetRcvPktFilterReqParamsType->
18091 wdiPktFilterCfg.paramsData[i].dataMask[0],
18092 pwdiSetRcvPktFilterReqParamsType->
18093 wdiPktFilterCfg.paramsData[i].dataMask[1],
18094 pwdiSetRcvPktFilterReqParamsType->
18095 wdiPktFilterCfg.paramsData[i].dataMask[2],
18096 pwdiSetRcvPktFilterReqParamsType->
18097 wdiPktFilterCfg.paramsData[i].dataMask[3],
18098 pwdiSetRcvPktFilterReqParamsType->
18099 wdiPktFilterCfg.paramsData[i].dataMask[4],
18100 pwdiSetRcvPktFilterReqParamsType->
18101 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070018102 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070018103 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018104 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070018105 /* Store Params pass it to WDI */
18106 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
18107 pWdaParams->pWdaContext = pWDA;
18108 /* Store param pointer as passed in by caller */
18109 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070018110 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018111 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070018112 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070018113 if(IS_WDI_STATUS_FAILURE(status))
18114 {
18115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18116 "Failure in SetFilter(),free all the memory,status %d ",status);
18117 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
18118 vos_mem_free(pWdaParams->wdaMsgParam);
18119 vos_mem_free(pWdaParams);
18120 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018121 return CONVERT_WDI2VOS_STATUS(status) ;
18122}
Jeff Johnson295189b2012-06-20 16:38:30 -070018123/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018124 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070018125 *
18126 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070018127void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070018128 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
18129 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070018130{
18131 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18132 tWDA_CbContext *pWDA;
18133 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
18134 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
18135 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
18136 tANI_U8 i;
18137 vos_msg_t vosMsg;
18138
18139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018140 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018141 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
18142
Jeff Johnsone7245742012-09-05 17:12:55 -070018143 if(NULL == pRcvFltPktMatchCntRsp)
18144 {
18145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018146 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070018147 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070018148 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070018149 return ;
18150 }
18151
Jeff Johnson295189b2012-06-20 16:38:30 -070018152 if(NULL == pWdaParams)
18153 {
18154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018155 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018156 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070018157 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070018158 return ;
18159 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018160 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
18161 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070018162 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
18163 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
18164
18165 /* Message Header */
18166 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
18167 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
18168
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070018169 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070018170
18171 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
18172 {
18173 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
18174 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
18175 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018176 /* VOS message wrapper */
18177 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
18178 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
18179 vosMsg.bodyval = 0;
18180 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
18181 {
18182 /* free the mem and return */
18183 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
18184 }
18185
18186 vos_mem_free(pWdaParams->wdaMsgParam) ;
18187 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18188 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070018189
18190 return;
18191}
18192/*
18193 * FUNCTION: WDA_FilterMatchCountReqCallback
18194 * Free memory and send RSP back to SME.
18195 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
18196 */
18197void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
18198{
18199 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18200 vos_msg_t vosMsg;
18201
18202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18203 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
18204
18205 if(NULL == pWdaParams)
18206 {
18207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18208 "%s: pWdaParams received NULL", __func__);
18209 VOS_ASSERT(0);
18210 return;
18211 }
18212
18213 /* VOS message wrapper */
18214 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
18215 vosMsg.bodyptr = NULL;
18216 vosMsg.bodyval = 0;
18217
18218 if(IS_WDI_STATUS_FAILURE(wdiStatus))
18219 {
18220 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18221 vos_mem_free(pWdaParams->wdaMsgParam);
18222 vos_mem_free(pWdaParams);
18223 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
18224 }
18225
18226 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070018227}
Jeff Johnson295189b2012-06-20 16:38:30 -070018228/*
18229 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
18230 * Request to WDI to get PC Filter Match Count
18231 */
18232VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
18233{
Jeff Johnson43971f52012-07-17 12:26:56 -070018234 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070018235 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
18236 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
18237 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018238 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018239 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018240 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
18241 {
18242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018243 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018244 VOS_ASSERT(0);
18245 return VOS_STATUS_E_NOMEM;
18246 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018247 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18248 if(NULL == pWdaParams)
18249 {
18250 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018251 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018252 VOS_ASSERT(0);
18253 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
18254 return VOS_STATUS_E_NOMEM;
18255 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070018256
Yue Ma7f44bbe2013-04-12 11:47:39 -070018257 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
18258 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070018259
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070018260 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
18261 pRcvFltPktMatchRsp->bssId,
18262 sizeof(wpt_macAddr));
18263
Jeff Johnson295189b2012-06-20 16:38:30 -070018264 /* Store Params pass it to WDI */
18265 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
18266 pWdaParams->pWdaContext = pWDA;
18267 /* Store param pointer as passed in by caller */
18268 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070018269 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070018270 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070018271 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070018272 if(IS_WDI_STATUS_FAILURE(status))
18273 {
18274 /* failure returned by WDI API */
18275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18276 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
18277 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18278 vos_mem_free(pWdaParams) ;
18279 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
18280 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
18281 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018282 return CONVERT_WDI2VOS_STATUS(status) ;
18283}
Jeff Johnson295189b2012-06-20 16:38:30 -070018284/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018285 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070018286 *
18287 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018288void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070018289 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
18290 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070018291{
18292 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070018293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018294 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018295/* WDA_VOS_ASSERT(NULL != pWdaParams); */
18296 if(NULL == pWdaParams)
18297 {
18298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018299 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018300 VOS_ASSERT(0) ;
18301 return ;
18302 }
18303
18304 vos_mem_free(pWdaParams->wdaMsgParam) ;
18305 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18306 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018307 //print a msg, nothing else to do
18308 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018309 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070018310 return ;
18311}
Jeff Johnson295189b2012-06-20 16:38:30 -070018312/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018313 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
18314 * Free memory.
18315 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
18316 */
18317void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
18318{
18319 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18320
18321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18322 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
18323
18324 if(NULL == pWdaParams)
18325 {
18326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18327 "%s: Invalid pWdaParams pointer", __func__);
18328 VOS_ASSERT(0);
18329 return;
18330 }
18331
18332 if(IS_WDI_STATUS_FAILURE(wdiStatus))
18333 {
18334 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18335 vos_mem_free(pWdaParams->wdaMsgParam);
18336 vos_mem_free(pWdaParams);
18337 }
18338
18339 return;
18340}
18341/*
Jeff Johnson295189b2012-06-20 16:38:30 -070018342 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
18343 * Request to WDI to clear Receive Filters
18344 */
18345VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
18346 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
18347{
Jeff Johnson43971f52012-07-17 12:26:56 -070018348 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070018349 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
18350 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
18351 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018353 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018354 if(NULL == pwdiRcvFltPktClearReqParamsType)
18355 {
18356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018357 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018358 VOS_ASSERT(0);
18359 return VOS_STATUS_E_NOMEM;
18360 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018361 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18362 if(NULL == pWdaParams)
18363 {
18364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018365 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018366 VOS_ASSERT(0);
18367 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
18368 return VOS_STATUS_E_NOMEM;
18369 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018370 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
18371 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070018372 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
18373 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
18374 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
18375 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070018376
Yue Ma7f44bbe2013-04-12 11:47:39 -070018377 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018378 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070018379 /* Store Params pass it to WDI */
18380 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
18381 pWdaParams->pWdaContext = pWDA;
18382 /* Store param pointer as passed in by caller */
18383 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070018384 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018385 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070018386 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070018387 if(IS_WDI_STATUS_FAILURE(status))
18388 {
18389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18390 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
18391 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080018392 vos_mem_free(pWdaParams->wdaMsgParam);
18393 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070018394 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018395 return CONVERT_WDI2VOS_STATUS(status) ;
18396}
18397#endif // WLAN_FEATURE_PACKET_FILTERING
18398
Jeff Johnson295189b2012-06-20 16:38:30 -070018399/*
18400 * FUNCTION: WDA_ProcessSetPowerParamsReq
18401 * Request to WDI to set power params
18402 */
18403VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
18404 tSirSetPowerParamsReq *pPowerParams)
18405{
Jeff Johnson43971f52012-07-17 12:26:56 -070018406 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070018407 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
18408 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018409 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018411 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018412 if(NULL == pwdiSetPowerParamsReqInfo)
18413 {
18414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018415 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018416 VOS_ASSERT(0);
18417 return VOS_STATUS_E_NOMEM;
18418 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018419 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18420 if(NULL == pWdaParams)
18421 {
18422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018423 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018424 VOS_ASSERT(0);
18425 vos_mem_free(pwdiSetPowerParamsReqInfo);
18426 return VOS_STATUS_E_NOMEM;
18427 }
Jeff Johnsone7245742012-09-05 17:12:55 -070018428
Jeff Johnson295189b2012-06-20 16:38:30 -070018429
18430 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
18431 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070018432 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
18433 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070018434 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
18435 pPowerParams->uListenInterval;
18436 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
18437 pPowerParams->uBcastMcastFilter;
18438 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
18439 pPowerParams->uEnableBET;
18440 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
18441 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070018442 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
18443 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070018444 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
18445 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070018446
Jeff Johnson295189b2012-06-20 16:38:30 -070018447 /* Store Params pass it to WDI */
18448 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
18449 pWdaParams->pWdaContext = pWDA;
18450 /* Store param pointer as passed in by caller */
18451 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070018452 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070018453 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070018454 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070018455 if(IS_WDI_STATUS_FAILURE(status))
18456 {
18457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18458 "Failure in Set power params REQ WDI API, free all the memory " );
18459 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
18460 vos_mem_free(pWdaParams->wdaMsgParam);
18461 pWdaParams->wdaWdiApiMsgParam = NULL;
18462 pWdaParams->wdaMsgParam = NULL;
18463 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018464 return CONVERT_WDI2VOS_STATUS(status) ;
18465}
18466
18467/*
18468 * FUNCTION: WDA_SetTmLevelRspCallback
18469 * Set TM Level response
18470 */
18471void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
18472{
18473 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18474
18475 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018476 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018477
18478 if(NULL == pWdaParams)
18479 {
18480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018481 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018482 VOS_ASSERT(0) ;
18483 return ;
18484 }
18485
18486 /* Dose not need to send notification to upper layer
18487 * Just free allocated resources */
18488 if( pWdaParams != NULL )
18489 {
18490 if( pWdaParams->wdaWdiApiMsgParam != NULL )
18491 {
18492 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18493 }
18494 vos_mem_free(pWdaParams->wdaMsgParam) ;
18495 vos_mem_free(pWdaParams) ;
18496 }
18497}
18498
18499/*
18500 * FUNCTION: WDA_ProcessSetTmLevelReq
18501 * Set TM Level request
18502 */
18503VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
18504 tAniSetTmLevelReq *setTmLevelReq)
18505{
18506 WDI_Status status = WDI_STATUS_SUCCESS ;
18507 tWDA_ReqParams *pWdaParams ;
18508 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
18509 (WDI_SetTmLevelReqType *)vos_mem_malloc(
18510 sizeof(WDI_SetTmLevelReqType)) ;
18511 if(NULL == wdiSetTmLevelReq)
18512 {
18513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018514 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018515 VOS_ASSERT(0);
18516 return VOS_STATUS_E_NOMEM;
18517 }
18518
18519 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18520 if(NULL == pWdaParams)
18521 {
18522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018523 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018524 VOS_ASSERT(0);
18525 vos_mem_free(wdiSetTmLevelReq);
18526 return VOS_STATUS_E_NOMEM;
18527 }
18528
18529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018530 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018531
18532 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
18533 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
18534
18535 pWdaParams->pWdaContext = pWDA;
18536 pWdaParams->wdaMsgParam = setTmLevelReq;
18537 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
18538
18539 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
18540 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
18541
18542 if(IS_WDI_STATUS_FAILURE(status))
18543 {
18544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080018545 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070018546 vos_mem_free(pWdaParams->wdaMsgParam) ;
18547 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18548 vos_mem_free(pWdaParams) ;
18549 }
18550
18551 return CONVERT_WDI2VOS_STATUS(status) ;
18552}
18553
18554VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
18555 tpTxControlParams pTxCtrlParam)
18556{
18557 VOS_STATUS wdaStatus;
18558
18559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018560 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018561 if( pTxCtrlParam == NULL )
18562 {
18563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018564 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018565 return VOS_STATUS_E_FAILURE;
18566 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018567 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
18568 {
18569 wdaStatus = WDA_SuspendDataTx(pWDA);
18570 }
18571 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
18572 {
18573 wdaStatus = WDA_ResumeDataTx(pWDA);
18574 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018575 return wdaStatus;
18576}
18577
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053018578void WDA_FWLoggingDXEdoneInd(v_U32_t logType)
Mihir Shete5affadc2015-05-29 20:54:57 +053018579{
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053018580 WDI_Status status;
18581 status = WDI_FWLoggingDXEdoneInd(logType);
18582
Hanumantha Reddy Pothula5e509402015-09-23 09:45:57 +053018583 if (!(WDI_STATUS_SUCCESS_SYNC == status || WDI_STATUS_PENDING == status))
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053018584 {
18585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18586 FL("Failure status %d"), status);
18587 }
Mihir Shete5affadc2015-05-29 20:54:57 +053018588}
18589
Jeff Johnson295189b2012-06-20 16:38:30 -070018590 /* FUNCTION WDA_featureCapsExchange
18591 * WDA API to invoke capability exchange between host and FW.
18592 */
18593void WDA_featureCapsExchange(v_PVOID_t pVosContext)
18594{
18595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018596 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070018597 WDI_featureCapsExchangeReq( NULL, pVosContext);
18598}
18599
Yathish9f22e662012-12-10 14:21:35 -080018600/* FUNCTION WDA_disableCapablityFeature
18601 * WDA API to diable Active mode offload in host.
18602 */
18603void WDA_disableCapablityFeature(tANI_U8 feature_index)
18604{
18605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18606 "%s:enter", __func__ );
18607 WDI_disableCapablityFeature(feature_index);
18608}
18609
Jeff Johnson295189b2012-06-20 16:38:30 -070018610 /* FUNCTION WDA_getHostWlanFeatCaps
18611 * Wrapper for WDI API, that will return if the feature (enum value).passed
18612 * to this API is supported or not in Host
18613 * return value
18614 * 0 - implies feature is NOT Supported
18615 * any non zero value - implies feature is SUPPORTED
18616 */
18617tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
18618{
18619 return WDI_getHostWlanFeatCaps(featEnumValue);
18620}
18621
18622 /* FUNCTION WDA_getFwWlanFeatCaps
18623 * Wrapper for WDI API, that will return if the feature (enum value).passed
18624 * to this API is supported or not in FW
18625 * return value
18626 * 0 - implies feature is NOT Supported
18627 * any non zero value - implies feature is SUPPORTED
18628 */
18629tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
18630{
18631 return WDI_getFwWlanFeatCaps(featEnumValue);
18632}
18633
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053018634
Jeff Johnson295189b2012-06-20 16:38:30 -070018635/*
18636 * FUNCTION: WDA_shutdown
18637 * Shutdown WDA/WDI without handshaking with Riva.
18638 * Synchronous function.
18639 */
18640VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
18641{
18642 WDI_Status wdiStatus;
18643 //tANI_U8 eventIdx = 0;
18644 VOS_STATUS status = VOS_STATUS_SUCCESS;
18645 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070018646 if (NULL == pWDA)
18647 {
18648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018649 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070018650 VOS_ASSERT(0);
18651 return VOS_STATUS_E_FAILURE;
18652 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018653 /* FTM mode stay START_STATE */
18654 if( (WDA_READY_STATE != pWDA->wdaState) &&
18655 (WDA_INIT_STATE != pWDA->wdaState) &&
18656 (WDA_START_STATE != pWDA->wdaState) )
18657 {
18658 VOS_ASSERT(0);
18659 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070018660
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053018661 if (eDRIVER_TYPE_MFG != pWDA->driverMode)
Jeff Johnson295189b2012-06-20 16:38:30 -070018662 {
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053018663 if(VOS_TRUE == pWDA->wdaTimersCreated)
18664 {
18665 wdaDestroyTimers(pWDA);
18666 pWDA->wdaTimersCreated = VOS_FALSE;
18667 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018668 }
Leo Chang9d76f622013-08-23 16:34:52 -070018669 else
18670 {
18671 vos_event_destroy(&pWDA->ftmStopDoneEvent);
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053018672 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070018673
Jeff Johnson295189b2012-06-20 16:38:30 -070018674 /* call WDI shutdown */
18675 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070018676 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
18677 {
18678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18679 "error in WDA Stop" );
18680 status = VOS_STATUS_E_FAILURE;
18681 }
18682 /* WDI stop is synchrnous, shutdown is complete when it returns */
18683 pWDA->wdaState = WDA_STOP_STATE;
18684
Jeff Johnson295189b2012-06-20 16:38:30 -070018685 /* shutdown should perform the stop & close actions. */
18686 /* Destroy the event */
18687 status = vos_event_destroy(&pWDA->txFrameEvent);
18688 if(!VOS_IS_STATUS_SUCCESS(status))
18689 {
18690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080018691 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070018692 status = VOS_STATUS_E_FAILURE;
18693 }
18694 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
18695 if(!VOS_IS_STATUS_SUCCESS(status))
18696 {
18697 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080018698 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070018699 status = VOS_STATUS_E_FAILURE;
18700 }
18701 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
18702 if(!VOS_IS_STATUS_SUCCESS(status))
18703 {
18704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080018705 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070018706 status = VOS_STATUS_E_FAILURE;
18707 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018708 /* free WDA context */
18709 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
18710 if ( !VOS_IS_STATUS_SUCCESS(status) )
18711 {
18712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18713 "error in WDA close " );
18714 status = VOS_STATUS_E_FAILURE;
18715 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018716 return status;
18717}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080018718
Jeff Johnsone7245742012-09-05 17:12:55 -070018719/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080018720 * FUNCTION: WDA_setNeedShutdown
18721 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070018722 */
18723
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080018724void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070018725{
18726 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070018727 if(pWDA == NULL)
18728 {
18729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18730 "Could not get the WDA Context pointer" );
18731 return;
18732 }
Jeff Johnsone7245742012-09-05 17:12:55 -070018733 pWDA->needShutdown = TRUE;
18734}
18735/*
18736 * FUNCTION: WDA_needShutdown
18737 * WDA needs a shutdown
18738 */
18739
18740v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
18741{
18742 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070018743 if(pWDA == NULL)
18744 {
18745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18746 "Could not get the WDA Context pointer" );
18747 return 0;
18748 }
18749 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070018750}
18751
Mohit Khanna4a70d262012-09-11 16:30:12 -070018752#ifdef WLAN_FEATURE_11AC
18753/*
18754 * FUNCTION: WDA_SetBeaconFilterReqCallback
18755 *
18756 */
18757void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
18758{
18759 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018761 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070018762 if(NULL == pWdaParams)
18763 {
18764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018765 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070018766 VOS_ASSERT(0) ;
18767 return ;
18768 }
Jeff Johnsone7245742012-09-05 17:12:55 -070018769
Mohit Khanna4a70d262012-09-11 16:30:12 -070018770 vos_mem_free(pWdaParams->wdaMsgParam) ;
18771 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18772 vos_mem_free(pWdaParams) ;
18773 /*
18774 * No respone required for SetBeaconFilter req so just free the request
18775 * param here
18776 */
18777
18778 return ;
18779}
18780
18781VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
18782 tUpdateVHTOpMode *pData)
18783{
18784 WDI_Status status = WDI_STATUS_SUCCESS ;
18785 tWDA_ReqParams *pWdaParams ;
18786 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
18787 sizeof(WDI_UpdateVHTOpMode)) ;
18788 if(NULL == wdiTemp)
18789 {
18790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018791 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070018792 VOS_ASSERT(0);
18793 return VOS_STATUS_E_NOMEM;
18794 }
18795 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18796 if(NULL == pWdaParams)
18797 {
18798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018799 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070018800 VOS_ASSERT(0);
18801 vos_mem_free(wdiTemp);
18802 return VOS_STATUS_E_NOMEM;
18803 }
Abhishek Singhdf8eb312014-11-15 00:49:28 +053018804 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18805 "------> %s Opmode = %d and staid = %d" ,
18806 __func__, pData->opMode, pData->staId);
Mohit Khanna4a70d262012-09-11 16:30:12 -070018807 wdiTemp->opMode = pData->opMode;
18808 wdiTemp->staId = pData->staId;
18809
18810 pWdaParams->pWdaContext = pWDA;
18811 /* Store Req pointer, as this will be used for response */
18812 pWdaParams->wdaMsgParam = (void *)pData;
18813 /* store Params pass it to WDI */
18814 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
18815
18816 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
18817
18818 if(IS_WDI_STATUS_FAILURE(status))
18819 {
18820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18821 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
18822 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
18823 vos_mem_free(pWdaParams->wdaMsgParam);
18824 vos_mem_free(pWdaParams);
18825 }
18826 return CONVERT_WDI2VOS_STATUS(status) ;
18827}
18828#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070018829
18830/*==========================================================================
18831 FUNCTION WDA_TransportChannelDebug
18832
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070018833 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070018834 Display Transport Channel debugging information
18835 User may request to display DXE channel snapshot
18836 Or if host driver detects any abnormal stcuk may display
18837
18838 PARAMETERS
schang6295e542013-03-12 15:31:23 -070018839 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080018840 displaySnapshot : Display DXE snapshot option
Mihir Shete40a55652014-03-02 14:14:47 +053018841 debugFlags : Enable stall detect features
18842 defined by WPAL_DeviceDebugFlags
18843 These features may effect
18844 data performance.
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070018845
18846 RETURN VALUE
18847 NONE
18848
18849===========================================================================*/
18850void WDA_TransportChannelDebug
18851(
schang6295e542013-03-12 15:31:23 -070018852 tpAniSirGlobal pMac,
18853 v_BOOL_t displaySnapshot,
Mihir Shete40a55652014-03-02 14:14:47 +053018854 v_U8_t debugFlags
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070018855)
18856{
Mihir Shete40a55652014-03-02 14:14:47 +053018857 WDI_TransportChannelDebug(displaySnapshot, debugFlags);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070018858 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070018859}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070018860
18861/*==========================================================================
Sravan Kumar Kairam6eac7522015-11-27 23:37:02 +053018862 FUNCTION WDA_TransportKickDxe
18863
18864 DESCRIPTION
18865 Request Kick Dxe when first hdd TX time out
18866 happens
18867
18868 PARAMETERS
18869 NONE
18870
18871 RETURN VALUE
18872 NONE
18873
18874===========================================================================*/
18875void WDA_TransportKickDxe()
18876{
18877 WDI_TransportKickDxe();
18878 return;
18879}
18880
18881
18882/*==========================================================================
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070018883 FUNCTION WDA_SetEnableSSR
18884
18885 DESCRIPTION
18886 API to enable/disable SSR on WDI timeout
18887
18888 PARAMETERS
18889 enableSSR : enable/disable SSR
18890
18891 RETURN VALUE
18892 NONE
18893
18894===========================================================================*/
18895void WDA_SetEnableSSR(v_BOOL_t enableSSR)
18896{
18897 WDI_SetEnableSSR(enableSSR);
18898}
Leo Chang9056f462013-08-01 19:21:11 -070018899
18900#ifdef FEATURE_WLAN_LPHB
18901/*
18902 * FUNCTION: WDA_LPHBconfRspCallback
18903 *
18904 */
18905void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
18906{
18907 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18908
18909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18910 "<------ %s " ,__func__);
18911 if (NULL == pWdaParams)
18912 {
18913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18914 "%s: pWdaParams received NULL", __func__);
18915 VOS_ASSERT(0) ;
18916 return ;
18917 }
18918
18919 /* Do not need to send notification to upper layer
18920 * Just free allocated resources */
18921 if (pWdaParams != NULL)
18922 {
18923 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18924 {
18925 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18926 }
18927 vos_mem_free(pWdaParams->wdaMsgParam) ;
18928 vos_mem_free(pWdaParams) ;
18929 }
18930
18931 return;
18932}
18933
18934/*
18935 * FUNCTION: WDA_ProcessLPHBConfReq
18936 *
18937 */
18938VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
18939 tSirLPHBReq *pData)
18940{
18941 WDI_Status wdiStatus;
18942 tWDA_ReqParams *pWdaParams ;
18943
18944 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18945 "------> %s " , __func__);
18946
18947 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18948 if (NULL == pWdaParams)
18949 {
18950 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18951 "%s: VOS MEM Alloc Failure", __func__);
18952 VOS_ASSERT(0);
18953 vos_mem_free(pData);
18954 return VOS_STATUS_E_NOMEM;
18955 }
18956
18957 pWdaParams->pWdaContext = pWDA;
18958 pWdaParams->wdaMsgParam = (void *)pData;
18959 pWdaParams->wdaWdiApiMsgParam = NULL;
18960
18961 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
18962 if (WDI_STATUS_PENDING == wdiStatus)
18963 {
18964 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18965 "Pending received for %s:%d ", __func__, __LINE__);
18966 }
18967 else if (WDI_STATUS_SUCCESS != wdiStatus)
18968 {
18969 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18970 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
18971 vos_mem_free(pWdaParams->wdaMsgParam);
18972 vos_mem_free(pWdaParams);
18973 }
18974
18975 return CONVERT_WDI2VOS_STATUS(wdiStatus);
18976}
18977#endif /* FEATURE_WLAN_LPHB */
18978
c_hpothu92367912014-05-01 15:18:17 +053018979void WDA_GetBcnMissRateCallback(tANI_U8 status, tANI_U32 bcnMissRate,
18980 void* pUserData)
18981{
18982 tSirBcnMissRateInfo *pBcnMissRateInfo = (tSirBcnMissRateInfo *)pUserData;
18983
18984 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18985 "<------ %s " ,__func__);
18986 if (NULL == pBcnMissRateInfo)
18987 {
18988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18989 "%s: pWdaParams received NULL", __func__);
18990 VOS_ASSERT(0) ;
18991 return ;
18992 }
18993 if (pBcnMissRateInfo->callback)
18994 {
18995 pBcnMissRateInfo->callback(status, bcnMissRate,
18996 pBcnMissRateInfo->data);
18997 }
18998 vos_mem_free(pUserData);
18999
19000 return;
19001}
19002
19003v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
19004 tSirBcnMissRateReq *pData)
19005{
19006 WDI_Status wdiStatus;
19007 tSirBcnMissRateInfo *pBcnMissRateInfo;
19008
19009 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19010 "------> %s " , __func__);
19011
19012 pBcnMissRateInfo =
19013 (tSirBcnMissRateInfo *)vos_mem_malloc(sizeof(tSirBcnMissRateInfo));
19014 if (NULL == pBcnMissRateInfo)
19015 {
19016 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19017 "%s: VOS MEM Alloc Failure", __func__);
19018 VOS_ASSERT(0);
19019 vos_mem_free(pData);
19020 return;
19021 }
19022
19023 pBcnMissRateInfo->callback = (pGetBcnMissRateCB)(pData->callback);
19024 pBcnMissRateInfo->data = pData->data;
19025
19026 wdiStatus = WDI_GetBcnMissRate(pBcnMissRateInfo,
19027 WDA_GetBcnMissRateCallback,
19028 pData->bssid);
19029 if (WDI_STATUS_PENDING == wdiStatus)
19030 {
19031 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19032 "Pending received for %s:%d ", __func__, __LINE__);
19033 }
19034 else if (WDI_STATUS_SUCCESS != wdiStatus)
19035 {
19036 if (pBcnMissRateInfo->callback)
19037 {
19038 pBcnMissRateInfo->callback(VOS_STATUS_E_FAILURE,
19039 -1, pBcnMissRateInfo->data);
19040 }
19041 }
19042 vos_mem_free(pData);
19043}
Dino Mycle41bdc942014-06-10 11:30:24 +053019044
19045#ifdef WLAN_FEATURE_EXTSCAN
19046
19047/*==========================================================================
19048 FUNCTION WDA_EXTScanStartRspCallback
19049
19050 DESCRIPTION
19051 API to send EXTScan Start Response to HDD
19052
19053 PARAMETERS
19054 pEventData: Response from FW
19055 pUserData:
19056===========================================================================*/
19057void WDA_EXTScanStartRspCallback(void *pEventData, void* pUserData)
19058{
19059 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19060 tWDA_CbContext *pWDA = NULL;
19061 void *pCallbackContext;
19062 tpAniSirGlobal pMac;
19063
19064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19065 "%s:", __func__);
19066 if (NULL == pWdaParams)
19067 {
19068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19069 "%s: pWdaParams received NULL", __func__);
19070 VOS_ASSERT(0);
19071 return;
19072 }
19073
19074 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
19075
19076 if (NULL == pWDA)
19077 {
19078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19079 "%s: pWDA received NULL", __func__);
19080 VOS_ASSERT(0);
19081 goto error;
19082 }
19083
19084 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
19085 if (NULL == pMac)
19086 {
19087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19088 "%s:pMac is NULL", __func__);
19089 VOS_ASSERT(0);
19090 goto error;
19091 }
19092
19093 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
19094
19095 if (pMac->sme.pEXTScanIndCb)
19096 {
19097 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_START_RSP,
19098 pEventData);
19099 }
19100 else
19101 {
19102 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19103 "%s:HDD callback is null", __func__);
19104 VOS_ASSERT(0);
19105 }
19106
19107error:
19108
19109 if (pWdaParams->wdaWdiApiMsgParam != NULL)
19110 {
19111 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19112 }
19113 if (pWdaParams->wdaMsgParam != NULL)
19114 {
19115 vos_mem_free(pWdaParams->wdaMsgParam);
19116 }
19117 vos_mem_free(pWdaParams) ;
19118
19119 return;
19120}
19121
19122/*==========================================================================
19123 FUNCTION WDA_EXTScanStopRspCallback
19124
19125 DESCRIPTION
19126 API to send EXTScan Stop Response to HDD
19127
19128 PARAMETERS
19129 pEventData: Response from FW
19130 pUserData:
19131===========================================================================*/
19132void WDA_EXTScanStopRspCallback(void *pEventData, void* pUserData)
19133{
19134 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19135 tWDA_CbContext *pWDA = NULL;
19136 void *pCallbackContext;
19137 tpAniSirGlobal pMac;
19138
19139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19140 "%s:", __func__);
19141 if (NULL == pWdaParams)
19142 {
19143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19144 "%s: pWdaParams received NULL", __func__);
19145 VOS_ASSERT(0);
19146 return;
19147 }
19148
19149 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
19150
19151 if (NULL == pWDA)
19152 {
19153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19154 "%s: pWDA received NULL", __func__);
19155 VOS_ASSERT(0);
19156 goto error;
19157 }
19158
19159 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
19160 if (NULL == pMac)
19161 {
19162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19163 "%s:pMac is NULL", __func__);
19164 VOS_ASSERT(0);
19165 goto error;
19166 }
19167 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
19168
19169 if (pMac->sme.pEXTScanIndCb)
19170 {
19171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19172 "%s:HDD call back function called", __func__);
19173 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_STOP_RSP,
19174 pEventData);
19175 }
19176 else
19177 {
19178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19179 "%s:HDD callback is null", __func__);
19180 VOS_ASSERT(0);
19181 }
19182
19183error:
19184
19185 if (pWdaParams->wdaWdiApiMsgParam != NULL)
19186 {
19187 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19188 }
19189 if (pWdaParams->wdaMsgParam != NULL)
19190 {
19191 vos_mem_free(pWdaParams->wdaMsgParam);
19192 }
19193 vos_mem_free(pWdaParams) ;
19194
19195
19196 return;
19197}
19198
19199/*==========================================================================
19200 FUNCTION WDA_EXTScanGetCachedResultsRspCallback
19201
19202 DESCRIPTION
19203 API to send EXTScan Get Cached Results Response to HDD
19204
19205 PARAMETERS
19206 pEventData: Response from FW
19207 pUserData:
19208===========================================================================*/
19209void WDA_EXTScanGetCachedResultsRspCallback(void *pEventData, void* pUserData)
19210{
19211 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19212 tWDA_CbContext *pWDA = NULL;
19213 void *pCallbackContext;
19214 tpAniSirGlobal pMac;
19215
19216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19217 "%s: ", __func__);
19218 if (NULL == pWdaParams)
19219 {
19220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19221 "%s: pWdaParams received NULL", __func__);
19222 VOS_ASSERT(0);
19223 return;
19224 }
19225
19226 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
19227
19228 if (NULL == pWDA)
19229 {
19230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19231 "%s: pWDA received NULL", __func__);
19232 VOS_ASSERT(0);
19233 goto error;
19234 }
19235
19236 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
19237 if (NULL == pMac)
19238 {
19239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19240 "%s:pMac is NULL", __func__);
19241 VOS_ASSERT(0);
19242 goto error;
19243 }
19244
19245 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
19246
19247 if (pMac->sme.pEXTScanIndCb)
19248 {
19249 pMac->sme.pEXTScanIndCb(pCallbackContext,
19250 WDA_EXTSCAN_GET_CACHED_RESULTS_RSP,
19251 pEventData);
19252 }
19253 else
19254 {
19255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19256 "%s:HDD callback is null", __func__);
19257 VOS_ASSERT(0);
19258 }
19259
19260
19261error:
19262
19263 if (pWdaParams->wdaWdiApiMsgParam != NULL)
19264 {
19265 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19266 }
19267 if (pWdaParams->wdaMsgParam != NULL)
19268 {
19269 vos_mem_free(pWdaParams->wdaMsgParam);
19270 }
19271 vos_mem_free(pWdaParams) ;
19272
19273 return;
19274}
19275
19276/*==========================================================================
19277 FUNCTION WDA_EXTScanGetCapabilitiesRspCallback
19278
19279 DESCRIPTION
19280 API to send EXTScan Get Capabilities Response to HDD
19281
19282 PARAMETERS
19283 pEventData: Response from FW
19284 pUserData:
19285===========================================================================*/
19286void WDA_EXTScanGetCapabilitiesRspCallback(void *pEventData, void* pUserData)
19287{
19288 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19289 tWDA_CbContext *pWDA = NULL;
19290 void *pCallbackContext;
19291 tpAniSirGlobal pMac;
19292
19293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19294 "%s:", __func__);
19295 if (NULL == pWdaParams)
19296 {
19297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19298 "%s: pWdaParams received NULL", __func__);
19299 VOS_ASSERT(0);
19300 return;
19301 }
19302
19303 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
19304
19305 if (NULL == pWDA)
19306 {
19307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19308 "%s: pWDA received NULL", __func__);
19309 VOS_ASSERT(0);
19310 goto error;
19311 }
19312
19313 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
19314 if (NULL == pMac)
19315 {
19316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19317 "%s:pMac is NULL", __func__);
19318 VOS_ASSERT(0);
19319 goto error;
19320 }
19321
19322 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
19323
19324 if (pMac->sme.pEXTScanIndCb)
19325 {
19326 pMac->sme.pEXTScanIndCb(pCallbackContext,
19327 WDA_EXTSCAN_GET_CAPABILITIES_RSP,
19328 pEventData);
19329 }
19330 else
19331 {
19332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19333 "%s:HDD callback is null", __func__);
19334 VOS_ASSERT(0);
19335 }
19336
19337
19338error:
19339
19340 if (pWdaParams->wdaWdiApiMsgParam != NULL)
19341 {
19342 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19343 }
19344 if (pWdaParams->wdaMsgParam != NULL)
19345 {
19346 vos_mem_free(pWdaParams->wdaMsgParam);
19347 }
19348 vos_mem_free(pWdaParams) ;
19349
19350 return;
19351}
19352
19353/*==========================================================================
19354 FUNCTION WDA_EXTScanSetBSSIDHotlistRspCallback
19355
19356 DESCRIPTION
19357 API to send EXTScan Set BSSID Hotlist Response to HDD
19358
19359 PARAMETERS
19360 pEventData: Response from FW
19361 pUserData:
19362===========================================================================*/
19363void WDA_EXTScanSetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
19364{
19365 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19366 tWDA_CbContext *pWDA = NULL;
19367 void *pCallbackContext;
19368 tpAniSirGlobal pMac;
19369
19370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19371 "%s: ", __func__);
19372 if (NULL == pWdaParams)
19373 {
19374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19375 "%s: pWdaParams received NULL", __func__);
19376 VOS_ASSERT(0) ;
19377 return;
19378 }
19379
19380 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
19381
19382 if (NULL == pWDA)
19383 {
19384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19385 "%s: pWDA received NULL", __func__);
19386 VOS_ASSERT(0);
19387 goto error;
19388 }
19389
19390 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
19391 if (NULL == pMac)
19392 {
19393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19394 "%s:pMac is NULL", __func__);
19395 VOS_ASSERT(0);
19396 goto error;
19397 }
19398
19399 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
19400
19401 if (pMac->sme.pEXTScanIndCb)
19402 {
19403 pMac->sme.pEXTScanIndCb(pCallbackContext,
19404 WDA_EXTSCAN_SET_BSSID_HOTLIST_RSP,
19405 pEventData);
19406 }
19407 else
19408 {
19409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19410 "%s:HDD callback is null", __func__);
19411 VOS_ASSERT(0);
19412 }
19413
19414
19415error:
19416
19417 if (pWdaParams->wdaWdiApiMsgParam != NULL)
19418 {
19419 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19420 }
19421 if (pWdaParams->wdaMsgParam != NULL)
19422 {
19423 vos_mem_free(pWdaParams->wdaMsgParam);
19424 }
19425 vos_mem_free(pWdaParams) ;
19426
19427 return;
19428}
19429
19430/*==========================================================================
19431 FUNCTION WDA_EXTScanResetBSSIDHotlistRspCallback
19432
19433 DESCRIPTION
19434 API to send EXTScan ReSet BSSID Hotlist Response to HDD
19435
19436 PARAMETERS
19437 pEventData: Response from FW
19438 pUserData:
19439===========================================================================*/
19440void WDA_EXTScanResetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
19441{
19442 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19443 tWDA_CbContext *pWDA = NULL;
19444 void *pCallbackContext;
19445 tpAniSirGlobal pMac;
19446
19447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19448 "%s:", __func__);
19449 if (NULL == pWdaParams)
19450 {
19451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19452 "%s: pWdaParams received NULL", __func__);
19453 VOS_ASSERT(0) ;
19454 return;
19455 }
19456
19457 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
19458
19459 if (NULL == pWDA)
19460 {
19461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19462 "%s: pWDA received NULL", __func__);
19463 VOS_ASSERT(0);
19464 goto error;
19465 }
19466
19467 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
19468 if (NULL == pMac)
19469 {
19470 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19471 "%s:pMac is NULL", __func__);
19472 VOS_ASSERT(0);
19473 goto error;
19474 }
19475
19476 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
19477
19478 if (pMac->sme.pEXTScanIndCb)
19479 {
19480 pMac->sme.pEXTScanIndCb(pCallbackContext,
19481 WDA_EXTSCAN_RESET_BSSID_HOTLIST_RSP,
19482 pEventData);
19483 }
19484 else
19485 {
19486 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19487 "%s:HDD callback is null", __func__);
19488 VOS_ASSERT(0);
19489 }
19490
19491
19492error:
19493
19494 if (pWdaParams->wdaWdiApiMsgParam != NULL)
19495 {
19496 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19497 }
19498 if (pWdaParams->wdaMsgParam != NULL)
19499 {
19500 vos_mem_free(pWdaParams->wdaMsgParam);
19501 }
19502 vos_mem_free(pWdaParams) ;
19503
19504 return;
19505}
19506
19507/*==========================================================================
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053019508 FUNCTION WDA_EXTScanSetSSIDHotlistRspCallback
19509
19510 DESCRIPTION
19511 API to send EXTScan Set SSID Hotlist Response to HDD
19512
19513 PARAMETERS
19514 pEventData: Response from FW
19515 pUserData:
19516===========================================================================*/
19517void WDA_EXTScanSetSSIDHotlistRspCallback(void *pEventData, void* pUserData)
19518{
19519 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19520 tWDA_CbContext *pWDA = NULL;
19521 void *pCallbackContext;
19522 tpAniSirGlobal pMac;
19523
19524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19525 "%s: ", __func__);
19526 if (NULL == pWdaParams)
19527 {
19528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19529 "%s: pWdaParams received NULL", __func__);
19530 VOS_ASSERT(0) ;
19531 return;
19532 }
19533
19534 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
19535
19536 if (NULL == pWDA)
19537 {
19538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19539 "%s: pWDA received NULL", __func__);
19540 VOS_ASSERT(0);
19541 goto error;
19542 }
19543
19544 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
19545 if (NULL == pMac)
19546 {
19547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19548 "%s:pMac is NULL", __func__);
19549 VOS_ASSERT(0);
19550 goto error;
19551 }
19552
19553 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
19554
19555 if (pMac->sme.pEXTScanIndCb)
19556 {
19557 pMac->sme.pEXTScanIndCb(pCallbackContext,
19558 WDA_EXTSCAN_SET_SSID_HOTLIST_RSP,
19559 pEventData);
19560 }
19561 else
19562 {
19563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19564 "%s:HDD callback is null", __func__);
19565 VOS_ASSERT(0);
19566 }
19567
19568
19569error:
19570
19571 if (pWdaParams->wdaWdiApiMsgParam != NULL)
19572 {
19573 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19574 }
19575 if (pWdaParams->wdaMsgParam != NULL)
19576 {
19577 vos_mem_free(pWdaParams->wdaMsgParam);
19578 }
19579 vos_mem_free(pWdaParams) ;
19580
19581 return;
19582}
19583
19584/*==========================================================================
19585 FUNCTION WDA_EXTScanResetSSIDHotlistRspCallback
19586
19587 DESCRIPTION
19588 API to send EXTScan ReSet SSID Hotlist Response to HDD
19589
19590 PARAMETERS
19591 pEventData: Response from FW
19592 pUserData:
19593===========================================================================*/
19594void WDA_EXTScanResetSSIDHotlistRspCallback(void *pEventData, void* pUserData)
19595{
19596 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19597 tWDA_CbContext *pWDA = NULL;
19598 void *pCallbackContext;
19599 tpAniSirGlobal pMac;
19600
19601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19602 "%s:", __func__);
19603 if (NULL == pWdaParams)
19604 {
19605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19606 "%s: pWdaParams received NULL", __func__);
19607 VOS_ASSERT(0) ;
19608 return;
19609 }
19610
19611 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
19612
19613 if (NULL == pWDA)
19614 {
19615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19616 "%s: pWDA received NULL", __func__);
19617 VOS_ASSERT(0);
19618 goto error;
19619 }
19620
19621 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
19622 if (NULL == pMac)
19623 {
19624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19625 "%s:pMac is NULL", __func__);
19626 VOS_ASSERT(0);
19627 goto error;
19628 }
19629
19630 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
19631
19632 if (pMac->sme.pEXTScanIndCb)
19633 {
19634 pMac->sme.pEXTScanIndCb(pCallbackContext,
19635 WDA_EXTSCAN_RESET_SSID_HOTLIST_RSP,
19636 pEventData);
19637 }
19638 else
19639 {
19640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19641 "%s:HDD callback is null", __func__);
19642 VOS_ASSERT(0);
19643 }
19644
19645
19646error:
19647
19648 if (pWdaParams->wdaWdiApiMsgParam != NULL)
19649 {
19650 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19651 }
19652 if (pWdaParams->wdaMsgParam != NULL)
19653 {
19654 vos_mem_free(pWdaParams->wdaMsgParam);
19655 }
19656 vos_mem_free(pWdaParams) ;
19657
19658 return;
19659}
19660
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053019661/*==========================================================================
Dino Mycle41bdc942014-06-10 11:30:24 +053019662 FUNCTION WDA_ProcessEXTScanStartReq
19663
19664 DESCRIPTION
19665 API to send EXTScan Start Request to WDI
19666
19667 PARAMETERS
19668 pWDA: Pointer to WDA context
19669 wdaRequest: Pointer to EXTScan req parameters
19670===========================================================================*/
19671VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
19672 tSirEXTScanStartReqParams *wdaRequest)
19673{
19674 WDI_Status status = WDI_STATUS_SUCCESS;
19675 tWDA_ReqParams *pWdaParams;
19676
19677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19678 "%s: ", __func__);
19679 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
19680 if (NULL == pWdaParams)
19681 {
19682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19683 "%s: VOS MEM Alloc Failure", __func__);
19684 VOS_ASSERT(0);
19685 return VOS_STATUS_E_NOMEM;
19686 }
19687 pWdaParams->pWdaContext = pWDA;
19688 pWdaParams->wdaMsgParam = wdaRequest;
19689 pWdaParams->wdaWdiApiMsgParam = NULL;
19690
19691 status = WDI_EXTScanStartReq((void *)wdaRequest,
19692 (WDI_EXTScanStartRspCb)WDA_EXTScanStartRspCallback,
19693 (void *)pWdaParams);
19694 if (IS_WDI_STATUS_FAILURE(status))
19695 {
19696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19697 "Failure to request. Free all the memory " );
19698 vos_mem_free(pWdaParams->wdaMsgParam);
19699 vos_mem_free(pWdaParams);
19700 }
19701 return CONVERT_WDI2VOS_STATUS(status);
19702}
19703
19704/*==========================================================================
19705 FUNCTION WDA_ProcessEXTScanStopReq
19706
19707 DESCRIPTION
19708 API to send EXTScan Start Request to WDI
19709
19710 PARAMETERS
19711 pWDA: Pointer to WDA context
19712 wdaRequest: Pointer to EXTScan req parameters
19713===========================================================================*/
19714VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
19715 tSirEXTScanStopReqParams *wdaRequest)
19716{
19717 WDI_Status status = WDI_STATUS_SUCCESS;
19718 tWDA_ReqParams *pWdaParams;
19719
19720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19721 "%s:", __func__);
19722 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
19723 if (NULL == pWdaParams)
19724 {
19725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19726 "%s: VOS MEM Alloc Failure", __func__);
19727 VOS_ASSERT(0);
19728 return VOS_STATUS_E_NOMEM;
19729 }
19730 pWdaParams->pWdaContext = pWDA;
19731 pWdaParams->wdaMsgParam = wdaRequest;
19732 pWdaParams->wdaWdiApiMsgParam = NULL;
19733
19734 status = WDI_EXTScanStopReq((void *)wdaRequest,
19735 (WDI_EXTScanStopRspCb)WDA_EXTScanStopRspCallback,
19736 (void *)pWdaParams);
19737 if (IS_WDI_STATUS_FAILURE(status))
19738 {
19739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19740 "Failure to request. Free all the memory " );
19741 vos_mem_free(pWdaParams->wdaMsgParam);
19742 vos_mem_free(pWdaParams);
19743 }
19744 return CONVERT_WDI2VOS_STATUS(status);
19745}
19746
19747/*==========================================================================
19748 FUNCTION WDA_ProcessEXTScanGetCachedResultsReq
19749
19750 DESCRIPTION
19751 API to send EXTScan Get Cached Results Request to WDI
19752
19753 PARAMETERS
19754 pWDA: Pointer to WDA context
19755 wdaRequest: Pointer to EXTScan req parameters
19756===========================================================================*/
19757VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
19758 tSirEXTScanGetCachedResultsReqParams *wdaRequest)
19759{
19760 WDI_Status status = WDI_STATUS_SUCCESS;
19761 tWDA_ReqParams *pWdaParams;
19762
19763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19764 "%s: ", __func__);
19765 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
19766 if (NULL == pWdaParams)
19767 {
19768 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19769 "%s: VOS MEM Alloc Failure", __func__);
19770 VOS_ASSERT(0);
19771 return VOS_STATUS_E_NOMEM;
19772 }
19773 pWdaParams->pWdaContext = pWDA;
19774 pWdaParams->wdaMsgParam = wdaRequest;
19775 pWdaParams->wdaWdiApiMsgParam = NULL;
19776
19777 status = WDI_EXTScanGetCachedResultsReq((void *)wdaRequest,
19778 (WDI_EXTScanGetCachedResultsRspCb)WDA_EXTScanGetCachedResultsRspCallback,
19779 (void *)pWdaParams);
19780 if (IS_WDI_STATUS_FAILURE(status))
19781 {
19782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19783 "Failure to request. Free all the memory " );
19784 vos_mem_free(pWdaParams->wdaMsgParam);
19785 vos_mem_free(pWdaParams);
19786 }
19787 return CONVERT_WDI2VOS_STATUS(status);
19788}
19789
19790/*==========================================================================
19791 FUNCTION WDA_ProcessEXTScanGetCapabilitiesReq
19792
19793 DESCRIPTION
19794 API to send EXTScan Get Capabilities Request to WDI
19795
19796 PARAMETERS
19797 pWDA: Pointer to WDA context
19798 wdaRequest: Pointer to EXTScan req parameters
19799===========================================================================*/
19800VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
19801 tSirGetEXTScanCapabilitiesReqParams *wdaRequest)
19802{
19803 WDI_Status status = WDI_STATUS_SUCCESS;
19804 tWDA_ReqParams *pWdaParams;
19805
19806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19807 "%s:", __func__);
19808 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
19809 if (NULL == pWdaParams)
19810 {
19811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19812 "%s: VOS MEM Alloc Failure", __func__);
19813 VOS_ASSERT(0);
19814 return VOS_STATUS_E_NOMEM;
19815 }
19816 pWdaParams->pWdaContext = pWDA;
19817 pWdaParams->wdaMsgParam = wdaRequest;
19818 pWdaParams->wdaWdiApiMsgParam = NULL;
19819
19820 status = WDI_EXTScanGetCapabilitiesReq((void *)wdaRequest,
19821 (WDI_EXTScanGetCapabilitiesRspCb)WDA_EXTScanGetCapabilitiesRspCallback,
19822 (void *)pWdaParams);
19823 if (IS_WDI_STATUS_FAILURE(status))
19824 {
19825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19826 "Failure to request. Free all the memory " );
19827 vos_mem_free(pWdaParams->wdaMsgParam);
19828 vos_mem_free(pWdaParams);
19829 }
19830 return CONVERT_WDI2VOS_STATUS(status);
19831}
19832
19833/*==========================================================================
19834 FUNCTION WDA_ProcessEXTScanSetBSSIDHotlistReq
19835
19836 DESCRIPTION
19837 API to send Set BSSID Hotlist Request to WDI
19838
19839 PARAMETERS
19840 pWDA: Pointer to WDA context
19841 wdaRequest: Pointer to EXTScan req parameters
19842===========================================================================*/
19843VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
19844 tSirEXTScanSetBssidHotListReqParams *wdaRequest)
19845{
19846 WDI_Status status = WDI_STATUS_SUCCESS;
19847 tWDA_ReqParams *pWdaParams;
19848
19849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19850 "%s: ", __func__);
19851 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
19852 if (NULL == pWdaParams)
19853 {
19854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19855 "%s: VOS MEM Alloc Failure", __func__);
19856 VOS_ASSERT(0);
19857 return VOS_STATUS_E_NOMEM;
19858 }
19859 pWdaParams->pWdaContext = pWDA;
19860 pWdaParams->wdaMsgParam = wdaRequest;
19861 pWdaParams->wdaWdiApiMsgParam = NULL;
19862
19863 status = WDI_EXTScanSetBSSIDHotlistReq((void *)wdaRequest,
19864 (WDI_EXTScanSetBSSIDHotlistRspCb)WDA_EXTScanSetBSSIDHotlistRspCallback,
19865 (void *)pWdaParams);
19866 if (IS_WDI_STATUS_FAILURE(status))
19867 {
19868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19869 "Failure to request. Free all the memory " );
19870 vos_mem_free(pWdaParams->wdaMsgParam);
19871 vos_mem_free(pWdaParams);
19872 }
19873 return CONVERT_WDI2VOS_STATUS(status);
19874}
19875
19876/*==========================================================================
19877 FUNCTION WDA_ProcessEXTScanReSetBSSIDHotlistReq
19878
19879 DESCRIPTION
19880 API to send Reset BSSID Hotlist Request to WDI
19881
19882 PARAMETERS
19883 pWDA: Pointer to WDA context
19884 wdaRequest: Pointer to EXTScan req parameters
19885===========================================================================*/
19886VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
19887 tSirEXTScanResetBssidHotlistReqParams *wdaRequest)
19888{
19889 WDI_Status status = WDI_STATUS_SUCCESS;
19890 tWDA_ReqParams *pWdaParams;
19891
19892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19893 "%s:", __func__);
19894 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
19895 if (NULL == pWdaParams)
19896 {
19897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19898 "%s: VOS MEM Alloc Failure", __func__);
19899 VOS_ASSERT(0);
19900 return VOS_STATUS_E_NOMEM;
19901 }
19902 pWdaParams->pWdaContext = pWDA;
19903 pWdaParams->wdaMsgParam = wdaRequest;
19904 pWdaParams->wdaWdiApiMsgParam = NULL;
19905
19906 status = WDI_EXTScanResetBSSIDHotlistReq((void *)wdaRequest,
19907 (WDI_EXTScanResetBSSIDHotlistRspCb)WDA_EXTScanResetBSSIDHotlistRspCallback,
19908 (void *)pWdaParams);
19909 if (IS_WDI_STATUS_FAILURE(status))
19910 {
19911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19912 "Failure to request. Free all the memory " );
19913 vos_mem_free(pWdaParams->wdaMsgParam);
19914 vos_mem_free(pWdaParams);
19915 }
19916 return CONVERT_WDI2VOS_STATUS(status);
19917}
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053019918
19919/*==========================================================================
19920 FUNCTION WDA_ProcessEXTScanSetSSIDHotlistReq
19921
19922 DESCRIPTION
19923 API to send Set SSID Hotlist Request to WDI
19924
19925 PARAMETERS
19926 pWDA: Pointer to WDA context
19927 wdaRequest: Pointer to EXTScan req parameters
19928===========================================================================*/
19929VOS_STATUS WDA_ProcessEXTScanSetSSIDHotlistReq(tWDA_CbContext *pWDA,
19930 tSirEXTScanSetSsidHotListReqParams *wdaRequest)
19931{
19932 WDI_Status status = WDI_STATUS_SUCCESS;
19933 tWDA_ReqParams *pWdaParams;
19934
19935 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19936 "%s: ", __func__);
19937 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
19938 if (NULL == pWdaParams)
19939 {
19940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19941 "%s: VOS MEM Alloc Failure", __func__);
19942 VOS_ASSERT(0);
19943 return VOS_STATUS_E_NOMEM;
19944 }
19945 pWdaParams->pWdaContext = pWDA;
19946 pWdaParams->wdaMsgParam = wdaRequest;
19947 pWdaParams->wdaWdiApiMsgParam = NULL;
19948
19949 status = WDI_EXTScanSetSSIDHotlistReq((void *)wdaRequest,
19950 (WDI_EXTScanSetSSIDHotlistRspCb)WDA_EXTScanSetSSIDHotlistRspCallback,
19951 (void *)pWdaParams);
19952 if (IS_WDI_STATUS_FAILURE(status))
19953 {
19954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19955 "Failure to request. Free all the memory " );
19956 vos_mem_free(pWdaParams->wdaMsgParam);
19957 vos_mem_free(pWdaParams);
19958 }
19959 return CONVERT_WDI2VOS_STATUS(status);
19960}
19961
19962/*==========================================================================
19963 FUNCTION WDA_ProcessEXTScanReSetSSIDHotlistReq
19964
19965 DESCRIPTION
19966 API to send Reset SSID Hotlist Request to WDI
19967
19968 PARAMETERS
19969 pWDA: Pointer to WDA context
19970 wdaRequest: Pointer to EXTScan req parameters
19971===========================================================================*/
19972VOS_STATUS WDA_ProcessEXTScanResetSSIDHotlistReq(tWDA_CbContext *pWDA,
19973 tSirEXTScanResetSsidHotlistReqParams *wdaRequest)
19974{
19975 WDI_Status status = WDI_STATUS_SUCCESS;
19976 tWDA_ReqParams *pWdaParams;
19977
19978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19979 "%s:", __func__);
19980 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
19981 if (NULL == pWdaParams)
19982 {
19983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19984 "%s: VOS MEM Alloc Failure", __func__);
19985 VOS_ASSERT(0);
19986 return VOS_STATUS_E_NOMEM;
19987 }
19988 pWdaParams->pWdaContext = pWDA;
19989 pWdaParams->wdaMsgParam = wdaRequest;
19990 pWdaParams->wdaWdiApiMsgParam = NULL;
19991
19992 status = WDI_EXTScanResetSSIDHotlistReq((void *)wdaRequest,
19993 (WDI_EXTScanResetSSIDHotlistRspCb)WDA_EXTScanResetSSIDHotlistRspCallback,
19994 (void *)pWdaParams);
19995 if (IS_WDI_STATUS_FAILURE(status))
19996 {
19997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19998 "Failure to request. Free all the memory " );
19999 vos_mem_free(pWdaParams->wdaMsgParam);
20000 vos_mem_free(pWdaParams);
20001 }
20002 return CONVERT_WDI2VOS_STATUS(status);
20003}
20004
Padma, Santhosh Kumarc1f7f052015-08-26 12:29:01 +053020005/*==========================================================================
20006 FUNCTION WDA_ProcessHighPriorityDataInfoInd
20007
20008 DESCRIPTION
20009 API to send Reset SSID Hotlist Request to WDI
20010
20011 PARAMETERS
20012 pWDA: Pointer to WDA context
20013 wdaRequest: Pointer to EXTScan req parameters
20014===========================================================================*/
20015VOS_STATUS WDA_ProcessHighPriorityDataInfoInd(tWDA_CbContext *pWDA,
20016 tSirHighPriorityDataInfoInd *wdaRequest)
20017{
20018 WDI_Status status = WDI_STATUS_SUCCESS;
20019
20020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20021 "%s:", __func__);
20022
20023 status = WDI_HighPriorityDataInfoInd((void *)wdaRequest);
20024 if (WDI_STATUS_PENDING == status)
20025 {
20026 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20027 FL("pending status received "));
20028 }
20029 else if (WDI_STATUS_SUCCESS_SYNC != status)
20030 {
20031 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20032 FL("Failure status %d"), status);
20033 }
20034 return CONVERT_WDI2VOS_STATUS(status);
20035}
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053020036
Dino Mycle41bdc942014-06-10 11:30:24 +053020037#endif /* WLAN_FEATURE_EXTSCAN */
20038
Sunil Duttbd736ed2014-05-26 21:19:41 +053020039#ifdef WLAN_FEATURE_LINK_LAYER_STATS
20040
20041/*==========================================================================
20042 FUNCTION WDA_LLStatsSetRspCallback
20043
20044 DESCRIPTION
20045 API to process set link layer statistics response from FW
20046
20047 PARAMETERS
20048 pRsp: Pointer to set link layer statistics response
20049 pUserData: Pointer to user data
20050
20051 RETURN VALUE
20052 NONE
20053
20054===========================================================================*/
20055void WDA_LLStatsSetRspCallback(void *pEventData, void* pUserData)
20056{
20057 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20058
20059
20060 if (NULL == pWdaParams)
20061 {
20062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20063 "%s: pWdaParams received NULL", __func__);
20064 VOS_ASSERT(0) ;
20065 return ;
20066 }
20067
20068 /* Do not need to send notification to upper layer
20069 * Just free allocated resources */
20070 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20071 {
20072 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20073 }
20074 if (pWdaParams->wdaMsgParam != NULL)
20075 {
20076 vos_mem_free(pWdaParams->wdaMsgParam);
20077 }
20078 vos_mem_free(pWdaParams) ;
20079
20080 return;
20081}
20082
20083/*==========================================================================
20084 FUNCTION WDA_ProcessLLStatsSetReq
20085
20086 DESCRIPTION
20087 API to send Set Link Layer Stats request to WDI
20088
20089 PARAMETERS
20090 pWDA: Pointer to WDA context
20091 wdaRequest: Pointer to set Link Layer Stats req parameters
20092===========================================================================*/
20093VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
20094 tSirLLStatsSetReq *wdaRequest)
20095{
20096 WDI_Status status = WDI_STATUS_SUCCESS;
20097 tWDA_ReqParams *pWdaParams;
20098
20099 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20100 if (NULL == pWdaParams)
20101 {
20102 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20103 "%s: VOS MEM Alloc Failure", __func__);
20104 VOS_ASSERT(0);
20105 return VOS_STATUS_E_NOMEM;
20106 }
20107 pWdaParams->pWdaContext = pWDA;
20108 pWdaParams->wdaMsgParam = wdaRequest;
20109 pWdaParams->wdaWdiApiMsgParam = NULL;
20110
20111 status = WDI_LLStatsSetReq((void *)wdaRequest,
20112 (WDI_LLStatsSetRspCb)WDA_LLStatsSetRspCallback,
20113 (void *)pWdaParams);
20114 if (IS_WDI_STATUS_FAILURE(status))
20115 {
20116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20117 "Failure to request. Free all the memory " );
20118 vos_mem_free(pWdaParams->wdaMsgParam);
20119 vos_mem_free(pWdaParams);
20120 }
20121 return CONVERT_WDI2VOS_STATUS(status);
20122}
20123
20124/*==========================================================================
20125 FUNCTION WDA_LLStatsGetRspCallback
20126
20127 DESCRIPTION
20128 API to process get link layer statistics response from FW
20129
20130 PARAMETERS
20131 pRsp: Pointer to get link layer statistics response
20132 pUserData: Pointer to user data
20133
20134 RETURN VALUE
20135 NONE
20136
20137===========================================================================*/
20138void WDA_LLStatsGetRspCallback(void *pEventData, void* pUserData)
20139{
20140 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20141
20142 if (NULL == pWdaParams)
20143 {
20144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20145 "%s: pWdaParams received NULL", __func__);
20146 VOS_ASSERT(0) ;
20147 return ;
20148 }
20149
20150 /* Do not need to send notification to upper layer
20151 * Just free allocated resources */
20152 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20153 {
20154 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20155 }
20156 if (pWdaParams->wdaMsgParam != NULL)
20157 {
20158 vos_mem_free(pWdaParams->wdaMsgParam);
20159 }
20160 vos_mem_free(pWdaParams) ;
20161
20162 return;
20163}
20164
20165/*==========================================================================
20166 FUNCTION WDA_ProcessLLStatsGetReq
20167
20168 DESCRIPTION
20169 API to send Get Link Layer Stats request to WDI
20170
20171 PARAMETERS
20172 pWDA: Pointer to WDA context
20173 wdaRequest: Pointer to get Link Layer Stats req parameters
20174===========================================================================*/
20175VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
20176 tSirLLStatsGetReq *wdaRequest)
20177{
20178 WDI_Status status = WDI_STATUS_SUCCESS;
20179 tWDA_ReqParams *pWdaParams;
20180
20181 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20182 if (NULL == pWdaParams)
20183 {
20184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20185 "%s: VOS MEM Alloc Failure", __func__);
20186 VOS_ASSERT(0);
20187 return VOS_STATUS_E_NOMEM;
20188 }
20189 pWdaParams->pWdaContext = pWDA;
20190 pWdaParams->wdaMsgParam = wdaRequest;
20191 pWdaParams->wdaWdiApiMsgParam = NULL;
20192
20193 status = WDI_LLStatsGetReq((void *) wdaRequest,
20194 (WDI_LLStatsGetRspCb)WDA_LLStatsGetRspCallback,
20195 (void *)pWdaParams);
20196 if (IS_WDI_STATUS_FAILURE(status))
20197 {
20198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20199 "Failure to request. Free all the memory " );
20200 vos_mem_free(pWdaParams->wdaMsgParam);
20201 vos_mem_free(pWdaParams);
20202 }
20203 return CONVERT_WDI2VOS_STATUS(status);
20204}
20205
20206/*==========================================================================
20207 FUNCTION WDA_LLStatsClearRspCallback
20208
20209 DESCRIPTION
20210 API to process clear link layer statistics response from FW
20211
20212 PARAMETERS
20213 pRsp: Pointer to clear link layer statistics response
20214 pUserData: Pointer to user data
20215
20216 RETURN VALUE
20217 NONE
20218
20219===========================================================================*/
20220void WDA_LLStatsClearRspCallback(void *pEventData, void* pUserData)
20221{
20222 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20223
20224
20225 if (NULL == pWdaParams)
20226 {
20227 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20228 "%s: pWdaParams received NULL", __func__);
20229 VOS_ASSERT(0) ;
20230 return ;
20231 }
20232 /* Do not need to send notification to upper layer
20233 * Just free allocated resources */
20234 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20235 {
20236 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20237 }
20238 if (pWdaParams->wdaMsgParam != NULL)
20239 {
20240 vos_mem_free(pWdaParams->wdaMsgParam);
20241 }
20242 vos_mem_free(pWdaParams) ;
20243 return;
20244}
20245
20246/*==========================================================================
20247 FUNCTION WDA_ProcessLLStatsClearReq
20248
20249 DESCRIPTION
20250 API to send Clear Link Layer Stats request to WDI
20251
20252 PARAMETERS
20253 pWDA: Pointer to WDA context
20254 wdaRequest: Pointer to earLink Layer Stats req
20255===========================================================================*/
20256VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
20257 tSirLLStatsClearReq *wdaRequest)
20258{
20259 WDI_Status status = WDI_STATUS_SUCCESS;
20260 tWDA_ReqParams *pWdaParams;
20261
20262 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20263 if (NULL == pWdaParams)
20264 {
20265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20266 "%s: VOS MEM Alloc Failure", __func__);
20267 VOS_ASSERT(0);
20268 return VOS_STATUS_E_NOMEM;
20269 }
20270 pWdaParams->pWdaContext = pWDA;
20271 pWdaParams->wdaMsgParam = wdaRequest;
20272 pWdaParams->wdaWdiApiMsgParam = NULL;
20273
20274 status = WDI_LLStatsClearReq((void *) wdaRequest,
20275 (WDI_LLStatsClearRspCb)WDA_LLStatsClearRspCallback,
20276 (void *)pWdaParams);
20277 if (IS_WDI_STATUS_FAILURE(status))
20278 {
20279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20280 "Failure to request. Free all the memory " );
20281 vos_mem_free(pWdaParams->wdaMsgParam);
20282 vos_mem_free(pWdaParams);
20283 }
20284 return CONVERT_WDI2VOS_STATUS(status);
20285}
20286
20287#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Abhishek Singh85b74712014-10-08 11:38:19 +053020288
Abhishek Singh85b74712014-10-08 11:38:19 +053020289void WDA_FWStatsGetRspCallback(WDI_Status status,void *fwStatsResp,void *pUserData)
20290{
20291 tSirFWStatsInfo *fwStatsinfo = (tSirFWStatsInfo *)pUserData;
20292
20293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20294 "<------ %s " ,__func__);
20295 if (NULL == fwStatsinfo)
20296 {
20297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20298 "%s: pWdaParams received NULL", __func__);
20299 VOS_ASSERT(0);
20300 return;
20301 }
20302
20303 if(fwStatsinfo->callback)
20304 fwStatsinfo->callback(status, fwStatsResp, fwStatsinfo->data);
20305
20306 vos_mem_free(pUserData);
20307 return;
20308}
20309
20310
20311v_VOID_t WDA_ProcessFWStatsGetReq(tWDA_CbContext *pWDA,
20312 tSirFWStatsGetReq *pData)
20313{
20314
20315 WDI_Status wdiStatus;
20316 tSirFWStatsInfo *fwStatsinfo;
20317
20318 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20319 "------> %s" , __func__);
20320
20321 fwStatsinfo =
20322 (tSirFWStatsInfo *)vos_mem_malloc(sizeof(tSirFWStatsInfo));
20323 if (NULL == fwStatsinfo)
20324 {
20325 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20326 "%s: VOS MEM Alloc Failure", __func__);
20327 VOS_ASSERT(0);
20328 vos_mem_free(pData);
20329 return;
20330 }
20331
20332 fwStatsinfo->callback = (tSirFWStatsCallback)(pData->callback);
20333 fwStatsinfo->data = pData->data;
20334
20335 wdiStatus = WDI_FWStatsGetReq(fwStatsinfo,
20336 WDA_FWStatsGetRspCallback,
20337 pData->stats);
20338 if (WDI_STATUS_PENDING == wdiStatus)
20339 {
20340 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20341 "Pending received for %s:%d ", __func__, __LINE__);
20342 }
20343 else if (WDI_STATUS_SUCCESS != wdiStatus)
20344 {
20345 if (fwStatsinfo->callback)
20346 {
20347 fwStatsinfo->callback(WDI_STATUS_E_FAILURE, NULL ,fwStatsinfo->data);
20348 }
20349 vos_mem_free(fwStatsinfo);
20350 }
20351 vos_mem_free(pData);
20352}
20353
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053020354/*==========================================================================
20355 FUNCTION WDA_EncryptMsgRspCallback
20356
20357 DESCRIPTION
20358 API to send Encrypt message response to HDD
20359
20360 PARAMETERS
20361 pEventData: Response from FW
20362 pUserData: Data sent to firmware as part of request
20363===========================================================================*/
20364void WDA_EncryptMsgRspCallback(WDI_Status status, void *pEventData,
20365 void* pUserData)
20366{
20367 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20368 tWDA_CbContext *pWDA = NULL;
20369 tpAniSirGlobal pMac;
20370 vos_msg_t vosMsg;
20371 tpSirEncryptedDataRspParams pEncRspParams;
20372 tpSetEncryptedDataRspParams pEncryptedDataRsp;
20373
20374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20375 FL("%s:"), __func__);
20376 if (NULL == pWdaParams)
20377 {
20378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20379 FL("%s: pWdaParams received NULL"), __func__);
20380 VOS_ASSERT(0);
20381 return;
20382 }
20383
20384 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20385
20386 if (NULL == pWDA)
20387 {
20388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20389 FL("%s: pWDA received NULL"), __func__);
20390 VOS_ASSERT(0);
20391 goto error;
20392 }
20393
20394 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20395 if (NULL == pMac)
20396 {
20397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20398 FL("%s:pMac is NULL"), __func__);
20399 VOS_ASSERT(0);
20400 goto error;
20401 }
20402
20403 pEncryptedDataRsp = (tpSetEncryptedDataRspParams) pEventData;
20404
20405 pEncRspParams = vos_mem_malloc(sizeof(tSirEncryptedDataRspParams));
20406 if (NULL == pEncRspParams)
20407 {
20408 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20409 FL("%s: VOS MEM Alloc Failure"), __func__);
20410 VOS_ASSERT(0);
20411 goto error;
20412 }
20413
20414 /* Message Header */
20415 pEncRspParams->mesgType = eWNI_SME_ENCRYPT_MSG_RSP;
20416 pEncRspParams->mesgLen = sizeof(tSirEncryptedDataRspParams);
20417 pEncRspParams->encryptedDataRsp.encryptedPayload.length =
20418 pEncryptedDataRsp->encryptedPayload.length;
20419 vos_mem_copy(pEncRspParams->encryptedDataRsp.encryptedPayload.data,
20420 pEncryptedDataRsp->encryptedPayload.data,
20421 pEncryptedDataRsp->encryptedPayload.length);
20422
20423 /* VOS message wrapper */
20424 vosMsg.type = eWNI_SME_ENCRYPT_MSG_RSP;
20425 vosMsg.bodyptr = (void *)pEncRspParams;
20426 vosMsg.bodyval = 0;
20427
20428 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
20429 {
20430 /* free the mem */
20431 vos_mem_free((v_VOID_t *) pEncRspParams);
20432 }
20433
20434error:
20435
20436 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20437 {
20438 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20439 }
20440 if (pWdaParams->wdaMsgParam != NULL)
20441 {
20442 vos_mem_free(pWdaParams->wdaMsgParam);
20443 }
20444 vos_mem_free(pWdaParams) ;
20445
20446 return;
20447}
20448/*==========================================================================
20449 FUNCTION WDA_ProcessEncryptMsgReq
20450
20451 DESCRIPTION
20452 API to send Encrypt message Request to WDI
20453
20454 PARAMETERS
20455 pWDA: Pointer to WDA context
20456 wdaRequest: Pointer to Encrypt_msg req parameters
20457===========================================================================*/
20458VOS_STATUS WDA_ProcessEncryptMsgReq(tWDA_CbContext *pWDA,
20459 u8 *wdaRequest)
20460{
20461 WDI_Status status = WDI_STATUS_SUCCESS;
20462 tWDA_ReqParams *pWdaParams;
20463
20464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20465 FL("%s: "), __func__);
20466 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20467 if (NULL == pWdaParams)
20468 {
20469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20470 FL("%s: VOS MEM Alloc Failure"), __func__);
20471 VOS_ASSERT(0);
20472 return VOS_STATUS_E_NOMEM;
20473 }
20474 pWdaParams->pWdaContext = pWDA;
20475 pWdaParams->wdaMsgParam = wdaRequest;
20476 pWdaParams->wdaWdiApiMsgParam = NULL;
20477
20478 status = WDI_EncryptMsgReq((void *)wdaRequest,
20479 (WDI_EncryptMsgRspCb)WDA_EncryptMsgRspCallback,
20480 (void *)pWdaParams);
20481 if (IS_WDI_STATUS_FAILURE(status))
20482 {
20483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20484 FL("Failure to request. Free all the memory " ));
20485 vos_mem_free(pWdaParams->wdaMsgParam);
20486 vos_mem_free(pWdaParams);
20487 }
20488 return CONVERT_WDI2VOS_STATUS(status);
20489}
Abhishek Singh41988ba2015-05-25 19:42:29 +053020490/*==========================================================================
20491 FUNCTION WDA_ProcessSetRtsCtsHTVhtInd
20492
20493 DESCRIPTION
20494 API to enable/disable RTS/CTS for different modes.
20495
20496 PARAMETERS
20497 pWDA: Pointer to WDA context
20498 rtsCtsVal : Bit mask value to enable RTS/CTS for different modes
20499===========================================================================*/
20500
20501VOS_STATUS
20502WDA_ProcessSetRtsCtsHTVhtInd(tWDA_CbContext *pWDA,
20503 tANI_U32 rtsCtsVal)
20504{
20505 WDI_Status status;
20506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20507 FL("---> %s"), __func__);
20508 status = WDI_SetRtsCtsHTVhtInd(rtsCtsVal);
20509 if (WDI_STATUS_PENDING == status)
20510 {
20511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20512 FL("pending status received "));
20513 }
20514 else if (WDI_STATUS_SUCCESS_SYNC != status)
20515 {
20516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20517 FL("Failure status %d"), status);
20518 }
20519 return CONVERT_WDI2VOS_STATUS(status) ;
20520}
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053020521
20522void WDA_MonModeRspCallback(void *pEventData, void* pUserData)
Katya Nigamf0511f62015-05-05 16:40:57 +053020523{
20524 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053020525 tSirMonModeReq *pData;
Katya Nigamf0511f62015-05-05 16:40:57 +053020526
20527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20528 "<------ %s " ,__func__);
20529 if (NULL == pWdaParams)
20530 {
20531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20532 "%s: pWdaParams received NULL", __func__);
20533 VOS_ASSERT(0) ;
20534 return ;
20535 }
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053020536 pData = (tSirMonModeReq *)pWdaParams->wdaMsgParam;
20537 if (pData != NULL) {
20538 pData->callback(pData->magic, pData->cmpVar);
20539 vos_mem_free(pWdaParams->wdaMsgParam);
20540 }
Katya Nigamf0511f62015-05-05 16:40:57 +053020541 vos_mem_free(pWdaParams) ;
20542
20543 return;
20544}
20545
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053020546VOS_STATUS WDA_ProcessMonStartReq( tWDA_CbContext *pWDA, void *wdaRequest)
Katya Nigamf0511f62015-05-05 16:40:57 +053020547{
20548
20549 WDI_Status status = WDI_STATUS_SUCCESS;
20550 tWDA_ReqParams *pWdaParams;
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053020551 tSirMonModeReq *pMonModeData = (tSirMonModeReq *)wdaRequest;
Katya Nigamf0511f62015-05-05 16:40:57 +053020552
20553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20554 FL("%s: "), __func__);
20555 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20556 if (NULL == pWdaParams)
20557 {
20558 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20559 FL("%s: VOS MEM Alloc Failure"), __func__);
20560 VOS_ASSERT(0);
20561 return VOS_STATUS_E_NOMEM;
20562 }
20563 pWdaParams->pWdaContext = pWDA;
20564 pWdaParams->wdaMsgParam = wdaRequest;
20565 pWdaParams->wdaWdiApiMsgParam = NULL;
20566
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053020567 status = WDI_MonStartReq(pMonModeData->data,
20568 (WDI_MonModeRspCb)WDA_MonModeRspCallback,
Katya Nigamf0511f62015-05-05 16:40:57 +053020569 (void *)pWdaParams);
20570 if (IS_WDI_STATUS_FAILURE(status))
20571 {
20572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20573 "Failure to request. Free all the memory " );
20574 vos_mem_free(pWdaParams->wdaMsgParam);
20575 vos_mem_free(pWdaParams);
20576 }
20577 return CONVERT_WDI2VOS_STATUS(status);
20578}
20579
Katya Nigamf0511f62015-05-05 16:40:57 +053020580VOS_STATUS WDA_ProcessMonStopReq( tWDA_CbContext *pWDA, void* wdaRequest)
20581{
20582
20583 WDI_Status status = WDI_STATUS_SUCCESS;
20584 tWDA_ReqParams *pWdaParams;
20585
20586 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20587 FL("%s: "), __func__);
20588 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20589 if (NULL == pWdaParams)
20590 {
20591 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20592 FL("%s: VOS MEM Alloc Failure"), __func__);
20593 VOS_ASSERT(0);
20594 return VOS_STATUS_E_NOMEM;
20595 }
20596 pWdaParams->pWdaContext = pWDA;
20597 pWdaParams->wdaMsgParam = wdaRequest;
20598 pWdaParams->wdaWdiApiMsgParam = NULL;
20599
Bhargav Shah1ae5de02015-07-20 13:32:31 +053020600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20601 "%s: Processing Mon stop request", __func__);
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053020602 status = WDI_MonStopReq((WDI_MonModeRspCb)WDA_MonModeRspCallback,
Katya Nigamf0511f62015-05-05 16:40:57 +053020603 (void *)pWdaParams);
20604
20605 if (IS_WDI_STATUS_FAILURE(status))
20606 {
20607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20608 "Failure to request. Free all the memory " );
20609 vos_mem_free(pWdaParams->wdaMsgParam);
20610 vos_mem_free(pWdaParams);
20611 }
20612 return CONVERT_WDI2VOS_STATUS(status);
20613}
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +053020614
20615VOS_STATUS WDA_ProcessEnableDisableCAEventInd(tWDA_CbContext *pWDA, tANI_U8 val)
20616{
20617 WDI_Status status;
20618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20619 FL("---> %s"), __func__);
20620 status = WDI_EnableDisableCAEventInd(val);
20621 if (WDI_STATUS_PENDING == status)
20622 {
20623 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20624 FL("pending status received "));
20625 }
20626 else if (WDI_STATUS_SUCCESS_SYNC != status)
20627 {
20628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20629 FL("Failure status %d"), status);
20630 }
20631 return CONVERT_WDI2VOS_STATUS(status) ;
20632}
Arun Khandavalli7eeb1592015-10-19 21:36:57 +053020633
20634/*==========================================================================
20635 FUNCTION WDA_WifiConfigSetRspCallback
20636
20637 DESCRIPTION
20638 API to process set WifiConfig response from FW
20639
20640 PARAMETERS
20641 pRsp: Pointer to set WifiConfig response
20642 pUserData: Pointer to user data
20643
20644 RETURN VALUE
20645 NONE
20646
20647===========================================================================*/
20648void WDA_WifiConfigSetRspCallback(void *pEventData, void* pUserData)
20649{
20650 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20651
20652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20653 "<------ %s " ,__func__);
20654
20655 if(NULL == pWdaParams)
20656 {
20657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20658 "%s: pWdaParams received NULL", __func__);
20659 VOS_ASSERT(0);
20660 return ;
20661 }
20662
20663 if(NULL == pWdaParams->wdaMsgParam)
20664 {
20665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20666 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
20667 VOS_ASSERT(0);
20668 vos_mem_free(pWdaParams);
20669 return ;
20670 }
20671
20672 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20673 vos_mem_free(pWdaParams->wdaMsgParam);
20674 vos_mem_free(pWdaParams);
20675
20676 return;
20677}
20678
20679/*==========================================================================
20680 FUNCTION WDA_ProcessWifiConfigReq
20681
20682 DESCRIPTION
20683 API to send Set WifiConfig params request to WDI
20684
20685 PARAMETERS
20686 pWDA: Pointer to WDA context
20687 wdaRequest: Pointer to set WifiConfig req parameters
20688===========================================================================*/
20689
20690VOS_STATUS WDA_ProcessWifiConfigReq(tWDA_CbContext *pWDA,
20691 tSetWifiConfigParams *pwdaWificonfig)
20692{
20693 WDI_Status status = WDI_STATUS_SUCCESS;
20694 WDI_WifiConfigSetReqType *pwdiWifConfigSetReqParams;
20695 tWDA_ReqParams *pWdaParams ;
20696 WDI_Status wstatus;
20697
20698 /* Sanity Check*/
20699 if(NULL == pwdaWificonfig)
20700 {
20701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20702 "%s: tSetWifiConfigParams received NULL", __func__);
20703 VOS_ASSERT(0) ;
20704 return VOS_STATUS_E_FAULT;
20705 }
20706
20707 pwdiWifConfigSetReqParams = (WDI_WifiConfigSetReqType *)vos_mem_malloc(
20708 sizeof(WDI_WifiConfigSetReqType));
20709 if(NULL == pwdiWifConfigSetReqParams)
20710 {
20711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20712 "%s: VOS MEM Alloc Failure", __func__);
20713 VOS_ASSERT(0);
20714 vos_mem_free(pwdaWificonfig);
20715 return VOS_STATUS_E_NOMEM;
20716 }
20717
20718 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
20719 if(NULL == pWdaParams)
20720 {
20721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20722 "%s: VOS MEM Alloc Failure", __func__);
20723 VOS_ASSERT(0);
20724 vos_mem_free(pwdiWifConfigSetReqParams);
20725 vos_mem_free(pwdaWificonfig);
20726 return VOS_STATUS_E_NOMEM;
20727 }
20728 pwdiWifConfigSetReqParams->paramType = pwdaWificonfig->paramType;
20729 pwdiWifConfigSetReqParams->paramValue = pwdaWificonfig->paramValue;
20730 vos_mem_copy(pwdiWifConfigSetReqParams->bssId,
20731 &(pwdaWificonfig->bssId), sizeof(tSirMacAddr));
20732
20733 pWdaParams->pWdaContext = pWDA;
Arun Khandavallic7ca4172015-10-21 10:42:42 +053020734 pWdaParams->wdaMsgParam = pwdaWificonfig;
Arun Khandavalli7eeb1592015-10-19 21:36:57 +053020735 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiWifConfigSetReqParams;
20736
20737 wstatus = WDI_WifiConfigSetReq(pwdiWifConfigSetReqParams,
20738 (WDI_WifiConfigSetRspCb)WDA_WifiConfigSetRspCallback,
20739 pWdaParams);
20740 if(IS_WDI_STATUS_FAILURE(wstatus))
20741 {
20742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20743 "Failure in sendind WifiConfigReq, free all the memory" );
20744 status = CONVERT_WDI2VOS_STATUS(wstatus);
20745 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
20746 vos_mem_free(pWdaParams->wdaMsgParam);
20747 vos_mem_free(pWdaParams);
20748 }
20749
20750 return status;
20751
20752}
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053020753
20754#ifdef FEATURE_OEM_DATA_SUPPORT
20755/*
20756 * FUNCTION: WDA_ProcessStartOemDataReqIndNew
20757 * Request to WDI.
20758 */
20759VOS_STATUS WDA_ProcessStartOemDataReqIndNew(tWDA_CbContext *pWDA,
20760 tOemDataReqNewConfig *pOemDataReqNewConfig)
20761{
20762 VOS_STATUS status = VOS_STATUS_SUCCESS;
20763 WDI_Status wstatus;
20764 WDI_OemDataReqNewConfig *wdiOemDataReqNewConfig;
20765
20766 /* Sanity Check*/
20767 if(NULL == pOemDataReqNewConfig)
20768 {
20769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20770 "%s: pOemDataReqNewConfig received NULL", __func__);
20771 VOS_ASSERT(0) ;
20772 return VOS_STATUS_E_FAULT;
20773 }
20774
20775 wdiOemDataReqNewConfig = (WDI_OemDataReqNewConfig *)vos_mem_malloc(
20776 sizeof(WDI_OemDataReqNewConfig));
20777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20778 "------> %s " ,__func__);
20779
20780 if(NULL == wdiOemDataReqNewConfig)
20781 {
20782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20783 "%s: VOS MEM Alloc Failure", __func__);
20784 VOS_ASSERT(0);
20785 vos_mem_free(pOemDataReqNewConfig);
20786 return VOS_STATUS_E_NOMEM;
20787 }
20788
20789 vos_mem_copy(wdiOemDataReqNewConfig, pOemDataReqNewConfig,
20790 sizeof(WDI_OemDataReqNewConfig));
20791
20792 wstatus = WDI_StartOemDataReqIndNew(wdiOemDataReqNewConfig);
20793
20794 if (WDI_STATUS_PENDING == wstatus)
20795 {
20796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20797 FL("pending status received "));
20798 }
20799 else if ((WDI_STATUS_SUCCESS_SYNC != wstatus) && (WDI_STATUS_SUCCESS != wstatus))
20800 {
20801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20802 FL("Failure in OemDataReqIndNew WDI API, free all memory %d"), wstatus);
20803 vos_mem_free(wdiOemDataReqNewConfig);
20804 }
20805
20806 // Free the memory allocated in sme_OemDataReqNew
20807 vos_mem_free(pOemDataReqNewConfig);
20808
20809 return status;
20810}
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053020811
Mahesh A Saptasagarb63b3e22015-12-22 15:06:10 +053020812void WDA_GetCurrentAntennaIndexCallback(WDI_Status status, void *params,
20813 void *pUserData)
20814{
20815 tSirAntennaDiversitySelectionInfo *pAntennaDivSelInfo =
20816 (tSirAntennaDiversitySelectionInfo *)pUserData;
20817
20818 tSirAntennaDivSelRsp *resParams = (tSirAntennaDivSelRsp *)params;
20819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20820 "<------ %s " ,__func__);
20821 if (NULL == pAntennaDivSelInfo)
20822 {
20823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20824 "%s: pWdaParams received NULL", __func__);
20825 VOS_ASSERT(0) ;
20826 return ;
20827 }
20828 if (NULL == resParams)
20829 {
20830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20831 "%s: resParams received NULL", __func__);
20832 VOS_ASSERT(0) ;
20833 return ;
20834 }
20835
20836 if (pAntennaDivSelInfo->callback)
20837 {
20838 if (WDI_STATUS_SUCCESS == status)
20839 {
20840 pAntennaDivSelInfo->callback(resParams->selectedAntennaId,
20841 pAntennaDivSelInfo->data);
20842 }
20843 else
20844 {
20845 pAntennaDivSelInfo->callback(-1,
20846 pAntennaDivSelInfo->data);
20847 }
20848 }
20849
20850 vos_mem_free(pUserData);
20851 return;
20852}
20853
20854/*
20855 * FUNCTION: WDA_ProcessAntennaDiversitySelectionReq
20856 * Request to WDI.
20857 */
20858v_VOID_t WDA_ProcessAntennaDiversitySelectionReq(tWDA_CbContext *pWDA,
20859 tSirAntennaDiversitySelectionReq *pData)
20860{
20861 WDI_Status wdiStatus;
20862 tSirAntennaDiversitySelectionInfo *pAntennaDivSelInfo;
20863
20864 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20865 "------> %s " , __func__);
20866
20867 pAntennaDivSelInfo = (tSirAntennaDiversitySelectionInfo *)
20868 vos_mem_malloc(sizeof(tSirAntennaDiversitySelectionInfo));
20869 if (NULL == pAntennaDivSelInfo)
20870 {
20871 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20872 "%s: VOS MEM Alloc Failure", __func__);
20873 VOS_ASSERT(0);
20874 vos_mem_free(pData);
20875 return;
20876 }
20877
20878 pAntennaDivSelInfo->callback = (tAntennaDivSelCB)(pData->callback);
20879 pAntennaDivSelInfo->data = pData->data;
20880
20881 wdiStatus = WDI_GetCurrentAntennaIndex(pAntennaDivSelInfo,
20882 WDA_GetCurrentAntennaIndexCallback, pData->reserved);
20883
20884 if (WDI_STATUS_PENDING == wdiStatus)
20885 {
20886 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20887 "Pending received for %s:%d ", __func__, __LINE__);
20888 }
20889 else if (WDI_STATUS_SUCCESS != wdiStatus)
20890 {
20891 if (pAntennaDivSelInfo->callback)
20892 {
20893 pAntennaDivSelInfo->callback(-1, pAntennaDivSelInfo->data);
20894 }
20895 }
20896
20897 vos_mem_free(pData);
20898 return;
20899}
20900
Mahesh A Saptasagar41f9ddd2016-02-09 14:01:03 +053020901/*
20902 * FUNCTION: WDA_ProcessBcnMissPenaltyCount
20903 * Request to WDI.
20904 */
20905VOS_STATUS WDA_ProcessBcnMissPenaltyCount(tWDA_CbContext *pWDA,
20906 tModifyRoamParamsReqParams *params)
20907{
20908 WDI_Status status;
20909
20910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20911 FL("---> %s"), __func__);
20912
20913 if (NULL == params)
20914 {
20915 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20916 FL("tModifyRoamParamsReqParams is received NULL"));
20917 return VOS_STATUS_E_NOMEM;
20918 }
20919
20920 status = WDI_SetBcnMissPenaltyCount((WDI_ModifyRoamParamsReqType *)params);
20921 if (WDI_STATUS_PENDING == status)
20922 {
20923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20924 FL("pending status received "));
20925 }
20926 else if (WDI_STATUS_SUCCESS_SYNC != status)
20927 {
20928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20929 FL("Failure status %d"), status);
20930 }
20931 vos_mem_free(params);
20932 return CONVERT_WDI2VOS_STATUS(status) ;
20933}
20934
Mahesh A Saptasagarb63b3e22015-12-22 15:06:10 +053020935#endif