blob: a6ac635901fc5f83bfe9d3b684be677d9acff9e2 [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +05302 * Copyright (c) 2012-2016 The Linux Foundation. All rights reserved.
Kiet Lam1ed83fc2014-02-19 01:15:45 -08003 *
4 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
5 *
6 *
7 * Permission to use, copy, modify, and/or distribute this software for
8 * any purpose with or without fee is hereby granted, provided that the
9 * above copyright notice and this permission notice appear in all
10 * copies.
11 *
12 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
13 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
14 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
15 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
16 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
17 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
18 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
19 * PERFORMANCE OF THIS SOFTWARE.
20 */
21
22/*
Kiet Lama7f454d2014-07-24 12:04:06 -070023 * This file was originally distributed by Qualcomm Atheros, Inc.
24 * under proprietary terms before Copyright ownership was assigned
25 * to the Linux Foundation.
Kiet Lam1ed83fc2014-02-19 01:15:45 -080026 */
27
Jeff Johnson295189b2012-06-20 16:38:30 -070028
Kiet Lama7f454d2014-07-24 12:04:06 -070029
30
Jeff Johnson295189b2012-06-20 16:38:30 -070031/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070032 W L A N _ Q C T _ WDA . C
Jeff Johnson295189b2012-06-20 16:38:30 -070033 OVERVIEW:
Jeff Johnson295189b2012-06-20 16:38:30 -070034 This software unit holds the implementation of the WLAN Transport Layer.
Jeff Johnson295189b2012-06-20 16:38:30 -070035 The functions externalized by this module are to be called ONLY by other
36 WLAN modules that properly register with the Transport Layer initially.
Jeff Johnson295189b2012-06-20 16:38:30 -070037 DEPENDENCIES:
Jeff Johnson295189b2012-06-20 16:38:30 -070038 Are listed for each API below.
39
Jeff Johnson295189b2012-06-20 16:38:30 -070040===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070041/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070042 EDIT HISTORY FOR FILE
43
Jeff Johnson295189b2012-06-20 16:38:30 -070044 This section contains comments describing changes made to the module.
45 Notice that changes are listed in reverse chronological order.
46
Jeff Johnson295189b2012-06-20 16:38:30 -070047 $Header$$DateTime$$Author$
48
Jeff Johnson295189b2012-06-20 16:38:30 -070049 when who what, where, why
50---------- --- -------------------------------------------------
5110/05/2011 haparna Adding support for Keep Alive Feature
522010-12-30 smiryala UMAC convergence changes
532010-08-19 adwivedi WLAN DAL AL(WDA) layer for Prima
54===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070055#include "vos_mq.h"
56#include "vos_api.h"
57#include "vos_packet.h"
58#include "vos_nvitem.h"
59#include "sirApi.h"
60#include "wlan_qct_pal_packet.h"
Mihir Shete40a55652014-03-02 14:14:47 +053061#include "wlan_qct_pal_device.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070062#include "wlan_qct_wda.h"
63#include "wlan_qct_wda_msg.h"
64#include "wlan_qct_wdi_cfg.h"
65#include "wlan_qct_wdi.h"
66#include "wlan_qct_wdi_ds.h"
67#include "wlan_hal_cfg.h"
68/**********************/
69#include "wniApi.h"
70#include "cfgApi.h"
71#include "limApi.h"
72#include "wlan_qct_tl.h"
73#include "wlan_qct_tli_ba.h"
74#include "limUtils.h"
75#include "btcApi.h"
76#include "vos_sched.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070077#include "pttMsgApi.h"
78#include "wlan_qct_sys.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070079/* Used MACRO's */
80/* Get WDA context from vOSS module */
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080081#define WDA_2_4_GHZ_MAX_FREQ 3000
Jeff Johnson295189b2012-06-20 16:38:30 -070082#define VOS_GET_WDA_CTXT(a) vos_get_context(VOS_MODULE_ID_WDA, a)
83#define VOS_GET_MAC_CTXT(a) vos_get_context(VOS_MODULE_ID_PE, a)
Jeff Johnson295189b2012-06-20 16:38:30 -070084#define WDA_BA_TX_FRM_THRESHOLD (5)
Jeff Johnson295189b2012-06-20 16:38:30 -070085#define CONVERT_WDI2SIR_STATUS(x) \
86 ((WDI_STATUS_SUCCESS != (x)) ? eSIR_FAILURE : eSIR_SUCCESS)
87
Abhishek Singhe721fb42015-11-30 14:22:10 +053088/* Threshold to print tx time taken in ms*/
89#define WDA_TX_TIME_THRESHOLD 1000
90/* Recover with ssr if tx timeouts continuously
91 * for threshold number of times.
92 */
93#define WDA_TX_FAILURE_RECOVERY_THRESHOLD 3
94
Jeff Johnson295189b2012-06-20 16:38:30 -070095#define IS_WDI_STATUS_FAILURE(status) \
96 ((WDI_STATUS_SUCCESS != (status)) && (WDI_STATUS_PENDING != (status)))
Jeff Johnson295189b2012-06-20 16:38:30 -070097#define CONVERT_WDI2VOS_STATUS(x) \
98 ((IS_WDI_STATUS_FAILURE(x)) ? VOS_STATUS_E_FAILURE : VOS_STATUS_SUCCESS)
99
100/* macro's for acessing TL API/data structures */
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -0700101#define WDA_TL_GET_STA_STATE(a, b, c) WLANTL_GetSTAState(a, b, c)
Jeff Johnson295189b2012-06-20 16:38:30 -0700102#define WDA_TL_GET_TX_PKTCOUNT(a, b, c, d) WLANTL_GetTxPktCount(a, b, c, d)
Jeff Johnson295189b2012-06-20 16:38:30 -0700103#define WDA_GET_BA_TXFLAG(a, b, c) \
104 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) & (1 << (c)))
105
106#define WDA_SET_BA_TXFLAG(a, b, c) \
107 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) |= (1 << (c)))
108
109#define WDA_CLEAR_BA_TXFLAG(a, b, c) \
110 (((a)->wdaStaInfo[b].ucUseBaBitmap) &= ~(1 << c))
Jeff Johnson295189b2012-06-20 16:38:30 -0700111#define WDA_TL_BA_SESSION_ADD(a, b, c, d, e, f, g) \
112 WLANTL_BaSessionAdd(a, b, c, d, e, f, g)
Jeff Johnson295189b2012-06-20 16:38:30 -0700113/* timer related Macros */
114#define WDA_CREATE_TIMER(a, b, c, d, e, f, g) \
115 tx_timer_create(a, b, c, d, e, f, g)
116#define WDA_START_TIMER(a) tx_timer_activate(a)
117#define WDA_STOP_TIMER(a) tx_timer_deactivate(a)
118#define WDA_DESTROY_TIMER(a) tx_timer_delete(a)
Jeff Johnson32d95a32012-09-10 13:15:23 -0700119#define WDA_WDI_START_TIMEOUT (WDI_RESPONSE_TIMEOUT + 5000)
Jeff Johnson295189b2012-06-20 16:38:30 -0700120
121#define WDA_LAST_POLLED_THRESHOLD(a, curSta, tid) \
122 ((a)->wdaStaInfo[curSta].framesTxed[tid] + WDA_BA_TX_FRM_THRESHOLD)
Jeff Johnson295189b2012-06-20 16:38:30 -0700123#define WDA_BA_MAX_WINSIZE (64)
Jeff Johnson295189b2012-06-20 16:38:30 -0700124#define WDA_INVALID_KEY_INDEX 0xFF
Jeff Johnson295189b2012-06-20 16:38:30 -0700125#define WDA_NUM_PWR_SAVE_CFG 11
Jeff Johnson295189b2012-06-20 16:38:30 -0700126#define WDA_TX_COMPLETE_TIME_OUT_VALUE 1000
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800127#define WDA_TRAFFIC_STATS_TIME_OUT_VALUE 1000
Jeff Johnson295189b2012-06-20 16:38:30 -0700128
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700129#define WDA_MAX_RETRIES_TILL_RING_EMPTY 1000 /* MAX 10000 msec = 10 seconds wait */
Jeff Johnson295189b2012-06-20 16:38:30 -0700130
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700131#define WDA_WAIT_MSEC_TILL_RING_EMPTY 10 /* 10 msec wait per cycle */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -0700132#define WDA_IS_NULL_MAC_ADDRESS(mac_addr) \
133 ((mac_addr[0] == 0x00) && (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) &&\
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
Abhishek Singh00b71972016-01-07 10:51:04 +0530230#ifdef WLAN_FEATURE_RMC
231void WDA_IBSSPeerInfoRequestHandler(v_PVOID_t pVosContext,
232 v_PVOID_t pData);
233#endif /* WLAN_FEATURE_RMC */
234
Dino Mycle41bdc942014-06-10 11:30:24 +0530235#ifdef WLAN_FEATURE_EXTSCAN
236VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
237 tSirEXTScanStartReqParams *wdaRequest);
238VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
239 tSirEXTScanStopReqParams *wdaRequest);
240VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
241 tSirEXTScanGetCachedResultsReqParams *wdaRequest);
242VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
243 tSirGetEXTScanCapabilitiesReqParams *wdaRequest);
244VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
245 tSirEXTScanSetBssidHotListReqParams *wdaRequest);
246VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
247 tSirEXTScanResetBssidHotlistReqParams *wdaRequest);
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +0530248VOS_STATUS WDA_ProcessEXTScanSetSSIDHotlistReq(tWDA_CbContext *pWDA,
249 tSirEXTScanSetSsidHotListReqParams *wdaRequest);
250VOS_STATUS WDA_ProcessEXTScanResetSSIDHotlistReq(tWDA_CbContext *pWDA,
251 tSirEXTScanResetSsidHotlistReqParams *wdaRequest);
Padma, Santhosh Kumarc1f7f052015-08-26 12:29:01 +0530252VOS_STATUS WDA_ProcessHighPriorityDataInfoInd(tWDA_CbContext *pWDA,
253 tSirHighPriorityDataInfoInd *wdaRequest);
Dino Mycle41bdc942014-06-10 11:30:24 +0530254#endif /* WLAN_FEATURE_EXTSCAN */
255
Sunil Duttbd736ed2014-05-26 21:19:41 +0530256#ifdef WLAN_FEATURE_LINK_LAYER_STATS
257VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
258 tSirLLStatsSetReq *wdaRequest);
259
260VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
261 tSirLLStatsGetReq *wdaRequest);
262
263VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
264 tSirLLStatsClearReq *wdaRequest);
265#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Abhishek Singh85b74712014-10-08 11:38:19 +0530266
267v_VOID_t WDA_ProcessFWStatsGetReq(tWDA_CbContext *pWDA,
268 tSirFWStatsGetReq *wdaRequest);
269
Srinivas Dasari4dae48f2014-11-26 21:14:16 +0530270VOS_STATUS WDA_ProcessEncryptMsgReq(tWDA_CbContext *pWDA,
271 u8 *wdaRequest);
Abhishek Singh41988ba2015-05-25 19:42:29 +0530272VOS_STATUS
273WDA_ProcessSetRtsCtsHTVhtInd(tWDA_CbContext *pWDA,
274 tANI_U32 val);
Srinivas Dasari4dae48f2014-11-26 21:14:16 +0530275
c_manjeecfd1efb2015-09-25 19:32:34 +0530276VOS_STATUS
277WDA_ProcessFwrMemDumpReq(tWDA_CbContext *pWDA,
278 tAniFwrDumpReq* pFwrMemDumpReq);
Srinivas Dasari32a79262015-02-19 13:04:49 +0530279
Katya Nigamf0511f62015-05-05 16:40:57 +0530280VOS_STATUS WDA_ProcessMonStartReq( tWDA_CbContext *pWDA, void* wdaRequest);
281VOS_STATUS WDA_ProcessMonStopReq( tWDA_CbContext *pWDA, void* wdaRequest);
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +0530282VOS_STATUS WDA_ProcessEnableDisableCAEventInd(tWDA_CbContext *pWDA, tANI_U8 val);
Arun Khandavalli7eeb1592015-10-19 21:36:57 +0530283
284VOS_STATUS WDA_ProcessWifiConfigReq(tWDA_CbContext *pWDA,
285 tSetWifiConfigParams *pwdaWificonfig);
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +0530286
287VOS_STATUS WDA_ProcessStartOemDataReqIndNew(tWDA_CbContext *pWDA,
288 tOemDataReqNewConfig *pOemDataReqNewConfig);
289
Mahesh A Saptasagarcfc65ae2015-12-22 15:06:10 +0530290
291v_VOID_t WDA_ProcessAntennaDiversitySelectionReq(tWDA_CbContext *pWDA,
292 tSirAntennaDiversitySelectionReq *pData);
293
Mahesh A Saptasagar7d432952016-02-09 14:01:03 +0530294VOS_STATUS WDA_ProcessBcnMissPenaltyCount(tWDA_CbContext *pWDA,
295 tModifyRoamParamsReqParams *params);
Srinivas Dasari32a79262015-02-19 13:04:49 +0530296/*
297 * FUNCTION: WDA_ProcessNanRequest
298 * Process NAN request
299 */
300VOS_STATUS WDA_ProcessNanRequest(tWDA_CbContext *pWDA,
301 tNanRequest *wdaRequest)
302{
303 WDI_Status status = WDI_STATUS_SUCCESS;
304 tWDA_ReqParams *pWdaParams;
305 WDI_NanRequestType *wdiRequest = NULL;
306 size_t wdiReqLength = sizeof(WDI_NanRequestType)
307 - sizeof(wdiRequest->request_data)
308 + wdaRequest->request_data_len;
309
310 wdiRequest = (WDI_NanRequestType *)vos_mem_malloc(wdiReqLength);
311
312 if (NULL == wdiRequest)
313 {
314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
315 "%s: VOS MEM Alloc Failure, size : %zu", __func__,
316 wdiReqLength);
317 vos_mem_free(wdaRequest);
318 return VOS_STATUS_E_NOMEM;
319 }
320
321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
322 "WDA: Process Nan Request length: %zu", wdiReqLength);
323
324 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
325 if (NULL == pWdaParams)
326 {
327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
328 "%s: VOS MEM Alloc Failure for tWDA_ReqParams", __func__);
329 VOS_ASSERT(0);
330 vos_mem_free(wdaRequest);
331 vos_mem_free(wdiRequest);
332 return VOS_STATUS_E_NOMEM;
333 }
334
335 wdiRequest->request_data_len = wdaRequest->request_data_len;
336
337 vos_mem_copy( wdiRequest->request_data,
338 wdaRequest->request_data,
339 wdaRequest->request_data_len);
340
341 vos_mem_free(wdaRequest);
342
343 pWdaParams->pWdaContext = pWDA;
344 pWdaParams->wdaMsgParam = NULL;
345 pWdaParams->wdaWdiApiMsgParam = wdiRequest;
346
347 status = WDI_NanRequest(wdiRequest, pWdaParams);
348
349 if (IS_WDI_STATUS_FAILURE(status))
350 {
351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
352 "Failure to request. Free all the memory " );
353 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
354 vos_mem_free(pWdaParams);
355 }
356
357 return CONVERT_WDI2VOS_STATUS(status) ;
358}
359
Padma, Santhosh Kumar9093b202015-07-21 15:37:38 +0530360/**
361 * wda_state_info_dump() - prints state information of wda layer
362 */
363static void wda_state_info_dump(void)
364{
365 v_CONTEXT_t vos_ctx_ptr = NULL;
366 tWDA_CbContext *wda = NULL ;
Srinivas Dasari32a79262015-02-19 13:04:49 +0530367
Padma, Santhosh Kumar9093b202015-07-21 15:37:38 +0530368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
369 "<------ %s " ,__func__);
370
371 /* Get the Global VOSS Context */
372 vos_ctx_ptr = vos_get_global_context(VOS_MODULE_ID_VOSS, NULL);
373
374 if (NULL != vos_ctx_ptr)
375 wda = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA,
376 vos_ctx_ptr );
377 else {
378 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
379 "%s: Invalid Global VOSS Context", __func__);
380 VOS_ASSERT(0);
381 return;
382 }
383
384 if (NULL != wda)
385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
386 "wdaState: %d linkState: %d", wda->wdaState,
387 wda->linkState);
388 else {
389 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
390 "%s: Invalid WDA Context", __func__);
391 VOS_ASSERT(0);
392 }
393}
394
395/**
396 * wda_register_debug_callback() - registration function for wda layer
397 * to print wda state information
398 */
399static void wda_register_debug_callback(void)
400{
401 vos_register_debug_callback(VOS_MODULE_ID_WDA, &wda_state_info_dump);
402}
Srinivas Dasari32a79262015-02-19 13:04:49 +0530403
Jeff Johnson295189b2012-06-20 16:38:30 -0700404/*
405 * FUNCTION: WDA_open
406 * Allocate the WDA context
407 */
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530408VOS_STATUS WDA_open(v_PVOID_t pVosContext, v_PVOID_t devHandle,
Jeff Johnson295189b2012-06-20 16:38:30 -0700409 tMacOpenParameters *pMacParams )
410{
411 tWDA_CbContext *wdaContext;
412 VOS_STATUS status;
413 WDI_DeviceCapabilityType wdiDevCapability = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700414 /* Allocate WDA context */
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +0530415 status = vos_alloc_context(pVosContext, VOS_MODULE_ID_WDA,
Jeff Johnson295189b2012-06-20 16:38:30 -0700416 (v_VOID_t **)&wdaContext, sizeof(tWDA_CbContext)) ;
417 if(!VOS_IS_STATUS_SUCCESS(status))
418 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +0530419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "%s: Failed to "
420 "allocate context for WDA - status = %d",__func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700421 return VOS_STATUS_E_NOMEM;
422 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700423 /*__asm int 3;*/
424 vos_mem_zero(wdaContext,sizeof(tWDA_CbContext));
425
426 /* Initialize data structures */
427 wdaContext->pVosContext = pVosContext;
428 wdaContext->wdaState = WDA_INIT_STATE;
429 wdaContext->uTxFlowMask = WDA_TXFLOWMASK;
430
431 /* Initialize WDA-WDI synchronization event */
432 status = vos_event_init(&wdaContext->wdaWdiEvent);
433 if(!VOS_IS_STATUS_SUCCESS(status))
434 {
435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800436 "WDI Sync Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800437 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700438 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700439 /* Init Frame transfer event */
440 status = vos_event_init(&wdaContext->txFrameEvent);
441 if(!VOS_IS_STATUS_SUCCESS(status))
442 {
443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800444 "VOS Mgmt Frame Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800445 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700446 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700447 status = vos_event_init(&wdaContext->suspendDataTxEvent);
448 if(!VOS_IS_STATUS_SUCCESS(status))
449 {
450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800451 "VOS suspend data tx Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800452 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700453 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700454 status = vos_event_init(&wdaContext->waitOnWdiIndicationCallBack);
455 if(!VOS_IS_STATUS_SUCCESS(status))
456 {
457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800458 "VOS wait On Wdi Ind Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800459 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700460 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700461 vos_trace_setLevel(VOS_MODULE_ID_WDA,VOS_TRACE_LEVEL_ERROR);
Jeff Johnson295189b2012-06-20 16:38:30 -0700462 wdaContext->driverMode = pMacParams->driverType;
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530463 if(WDI_STATUS_SUCCESS != WDI_Init(devHandle, &wdaContext->pWdiContext,
Jeff Johnson295189b2012-06-20 16:38:30 -0700464 &wdiDevCapability, pMacParams->driverType))
465 {
466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
467 "WDI Init failed" );
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800468 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700469 }
470 else
471 {
472 pMacParams->maxStation = wdiDevCapability.ucMaxSTASupported ;
473 pMacParams->maxBssId = wdiDevCapability.ucMaxBSSSupported;
474 pMacParams->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
Jeff Johnson295189b2012-06-20 16:38:30 -0700475 /* update max STA in WDA used for BA */
476 wdaContext->wdaMaxSta = pMacParams->maxStation;
477 /* store the frameTransRequired flag in wdaContext, to send this to HAL
478 * in WDA_Start
479 */
480 wdaContext->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
481 }
Padma, Santhosh Kumar9093b202015-07-21 15:37:38 +0530482
483 wda_register_debug_callback();
484
Jeff Johnson295189b2012-06-20 16:38:30 -0700485 return status;
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800486
487error:
488 vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
489 return VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -0700490}
491
Jeff Johnson295189b2012-06-20 16:38:30 -0700492/*
493 * FUNCTION: WDA_preStart
494 * Trigger DAL-AL to start CFG download
495 */
496VOS_STATUS WDA_preStart(v_PVOID_t pVosContext)
497{
498 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
499 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700500 /*
501 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
502 */
503 wdaMsg.type = WNI_CFG_DNLD_REQ ;
504 wdaMsg.bodyptr = NULL;
505 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700506 /* post the message.. */
507 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
508 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
509 {
510 vosStatus = VOS_STATUS_E_BADMSG;
511 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700512 return( vosStatus );
513}
Jeff Johnson295189b2012-06-20 16:38:30 -0700514/*
515 * FUNCTION: WDA_wdiStartCallback
516 * Once WDI_Start is finished, WDI start callback will be called by WDI
517 * to indicate completion of WDI_Start.
518 */
519void WDA_wdiStartCallback(WDI_StartRspParamsType *wdiRspParams,
520 void *pVosContext)
521{
522 tWDA_CbContext *wdaContext;
523 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700524 if (NULL == pVosContext)
525 {
526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700527 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700528 return;
529 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700530 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
531 if (NULL == wdaContext)
532 {
533 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700534 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700535 return;
536 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700537 if (WDI_STATUS_SUCCESS != wdiRspParams->wdiStatus)
538 {
539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700540 "%s: WDI_Start() failure reported", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700541 }
542 else
543 {
544 wdaContext->wdaState = WDA_START_STATE;
545 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700546 /* extract and save version information from the Start Response */
547 wdaContext->wcnssWlanCompiledVersion.major =
548 wdiRspParams->wlanCompiledVersion.major;
549 wdaContext->wcnssWlanCompiledVersion.minor =
550 wdiRspParams->wlanCompiledVersion.minor;
551 wdaContext->wcnssWlanCompiledVersion.version =
552 wdiRspParams->wlanCompiledVersion.version;
553 wdaContext->wcnssWlanCompiledVersion.revision =
554 wdiRspParams->wlanCompiledVersion.revision;
555 wdaContext->wcnssWlanReportedVersion.major =
556 wdiRspParams->wlanReportedVersion.major;
557 wdaContext->wcnssWlanReportedVersion.minor =
558 wdiRspParams->wlanReportedVersion.minor;
559 wdaContext->wcnssWlanReportedVersion.version =
560 wdiRspParams->wlanReportedVersion.version;
561 wdaContext->wcnssWlanReportedVersion.revision =
562 wdiRspParams->wlanReportedVersion.revision;
563 wpalMemoryCopy(wdaContext->wcnssSoftwareVersionString,
564 wdiRspParams->wcnssSoftwareVersion,
565 sizeof(wdaContext->wcnssSoftwareVersionString));
566 wpalMemoryCopy(wdaContext->wcnssHardwareVersionString,
567 wdiRspParams->wcnssHardwareVersion,
568 sizeof(wdaContext->wcnssHardwareVersionString));
Jeff Johnson295189b2012-06-20 16:38:30 -0700569 /* Notify WDA_start that WDI_Start has completed */
570 status = vos_event_set(&wdaContext->wdaWdiEvent);
Jeff Johnson43971f52012-07-17 12:26:56 -0700571 if (VOS_STATUS_SUCCESS != status)
Jeff Johnson295189b2012-06-20 16:38:30 -0700572 {
573 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700574 "%s: Unable to unblock WDA_start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700575 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700576 return;
577}
578
Jeff Johnson295189b2012-06-20 16:38:30 -0700579/*
580 * FUNCTION: WDA_start
581 * Prepare TLV configuration and call WDI_Start.
582 */
Jeff Johnson295189b2012-06-20 16:38:30 -0700583VOS_STATUS WDA_start(v_PVOID_t pVosContext)
584{
585 tWDA_CbContext *wdaContext;
586 VOS_STATUS status;
587 WDI_Status wdiStatus;
588 WDI_StartReqParamsType wdiStartParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700589 if (NULL == pVosContext)
590 {
591 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700592 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700593 return VOS_STATUS_E_FAILURE;
594 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700595 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
596 if (NULL == wdaContext)
597 {
598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700599 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700600 return VOS_STATUS_E_FAILURE;
601 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700602 /* Non-FTM mode, WDA status for START must be INIT
603 * FTM mode, WDA Status for START can be INIT or STOP */
604 if ( (WDA_INIT_STATE != wdaContext->wdaState) &&
605 (WDA_STOP_STATE != wdaContext->wdaState) )
606 {
607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
608 "%s: Invoked from wrong state %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700609 __func__, wdaContext->wdaState );
Jeff Johnson295189b2012-06-20 16:38:30 -0700610 return VOS_STATUS_E_FAILURE;
611 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700612 /* initialize the wdiStartParam. Note that we can create this on
613 the stack since we won't exit until WDI_Start() completes or
614 times out */
615 vos_mem_set(&wdiStartParam, sizeof(wdiStartParam), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700616 wdiStartParam.wdiDriverType = wdaContext->driverMode;
Jeff Johnson295189b2012-06-20 16:38:30 -0700617 /* prepare the config TLV for the WDI */
618 status = WDA_prepareConfigTLV(pVosContext, &wdiStartParam);
619 if ( !VOS_IS_STATUS_SUCCESS(status) )
620 {
621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700622 "%s: Unable to prepare Config TLV", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700623 return VOS_STATUS_E_FAILURE;
624 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700625 /* note from here onwards if an error occurs we must
626 reclaim the config TLV buffer */
Jeff Johnson295189b2012-06-20 16:38:30 -0700627 wdiStartParam.wdiLowLevelIndCB = WDA_lowLevelIndCallback;
628 wdiStartParam.pIndUserData = (v_PVOID_t *)wdaContext;
629 wdiStartParam.wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700630 /* initialize the WDA-WDI synchronization event */
631 vos_event_reset(&wdaContext->wdaWdiEvent);
Jeff Johnson295189b2012-06-20 16:38:30 -0700632 /* call WDI start */
633 wdiStatus = WDI_Start(&wdiStartParam,
634 (WDI_StartRspCb)WDA_wdiStartCallback,
635 (v_VOID_t *)pVosContext);
636 if ( IS_WDI_STATUS_FAILURE(wdiStatus) )
637 {
638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700639 "%s: WDI Start failed", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700640 vos_mem_free(wdiStartParam.pConfigBuffer);
641 return VOS_STATUS_E_FAILURE;
642 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700643 /* wait for WDI start to invoke our callback */
644 status = vos_wait_single_event( &wdaContext->wdaWdiEvent,
645 WDA_WDI_START_TIMEOUT );
646 if ( !VOS_IS_STATUS_SUCCESS(status) )
647 {
648 if ( VOS_STATUS_E_TIMEOUT == status )
649 {
650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700651 "%s: Timeout occurred during WDI_Start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700652 }
653 else
654 {
655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
656 "%s: Error %d while waiting for WDI_Start",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700657 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700658 }
659 vos_mem_free(wdiStartParam.pConfigBuffer);
Siddharth Bhalbea38ad2014-10-12 14:10:52 +0530660 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700661 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700662 /* WDI_Start() has completed so we can resume our work */
Jeff Johnson295189b2012-06-20 16:38:30 -0700663 /* we no longer need the config TLV */
664 vos_mem_free(wdiStartParam.pConfigBuffer);
Jeff Johnson295189b2012-06-20 16:38:30 -0700665 /* if we are not in the START state then WDI_Start() failed */
666 if (WDA_START_STATE != wdaContext->wdaState)
667 {
668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700669 "%s: WDI_Start() failure detected", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700670 return VOS_STATUS_E_FAILURE;
671 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700672 /* FTM mode does not need to monitor BA activity */
673 if ( eDRIVER_TYPE_MFG != wdaContext->driverMode )
674 {
675 status = wdaCreateTimers(wdaContext) ;
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -0800676 if(VOS_STATUS_SUCCESS == status)
677 {
678 wdaContext->wdaTimersCreated = VOS_TRUE;
679 }
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +0530680 else
681 {
682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
683 FL("wda create timers failed"));
684 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700685 }
Leo Chang9d76f622013-08-23 16:34:52 -0700686 else
687 {
688 vos_event_init(&wdaContext->ftmStopDoneEvent);
689 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700690 return status;
691}
692
Jeff Johnson295189b2012-06-20 16:38:30 -0700693/*
694 * FUNCTION: WDA_prepareConfigTLV
695 * Function to prepare CFG for DAL(WDA)
696 */
697VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
698 WDI_StartReqParamsType *wdiStartParams )
699{
700 /* get pMac to acess CFG data base */
701 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
702 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
703 tHalCfg *tlvStruct = NULL ;
704 tANI_U8 *tlvStructStart = NULL ;
705 tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
706 v_PVOID_t *configParam;
707 tANI_U32 configParamSize;
708 tANI_U32 *configDataValue;
709 WDI_WlanVersionType wcnssCompiledApiVersion;
Wilson Tsaof8b37942013-09-06 10:49:00 -0700710 tANI_U8 i;
711
Jeff Johnson295189b2012-06-20 16:38:30 -0700712 if ((NULL == pMac)||(NULL == wdaContext))
713 {
714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700715 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700716 VOS_ASSERT(0);
717 return VOS_STATUS_E_FAILURE;
718 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700719 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
720 WNI_CFG_STA_ID_LEN +
721 WNI_CFG_EDCA_WME_ACBK_LEN +
722 WNI_CFG_EDCA_WME_ACBE_LEN +
723 WNI_CFG_EDCA_WME_ACVI_LEN +
724 WNI_CFG_EDCA_WME_ACVO_LEN +
725 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700726 /* malloc memory for all configs in one shot */
727 configParam = vos_mem_malloc(configParamSize);
728
729 if(NULL == configParam )
730 {
731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700732 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700733 VOS_ASSERT(0) ;
734 return VOS_STATUS_E_NOMEM;
735 }
736 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700737 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700738 tlvStruct = (tHalCfg *)configParam;
739 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700740 /* TODO: Remove Later */
741 /* QWLAN_HAL_CFG_STA_ID */
742 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
743 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
744 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
745 eSIR_SUCCESS)
746 {
747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
748 "Failed to get value for WNI_CFG_STA_ID");
749 goto handle_failure;
750 }
751 tlvStruct->length = strLength ;
752 /* calculate the pad bytes to have the CFG in aligned format */
753 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
754 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700755 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
756 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700757 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
758 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
759 tlvStruct->length = sizeof(tANI_U32);
760 configDataValue = (tANI_U32 *)(tlvStruct + 1);
761 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
762 != eSIR_SUCCESS)
763 {
764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
765 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
766 goto handle_failure;
767 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700768 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
769 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700770 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
771 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
772 tlvStruct->length = sizeof(tANI_U32);
773 configDataValue = (tANI_U32 *)(tlvStruct + 1);
774 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
775 eSIR_SUCCESS)
776 {
777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
778 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
779 goto handle_failure;
780 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700781 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
782 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700783 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
784 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
785 tlvStruct->length = sizeof(tANI_U32);
786 configDataValue = (tANI_U32 *)(tlvStruct + 1);
787 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
788 != eSIR_SUCCESS)
789 {
790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
791 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
792 goto handle_failure;
793 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700794 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
795 + sizeof(tHalCfg) + tlvStruct->length)) ;
796
797 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
798 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
799 tlvStruct->length = sizeof(tANI_U32);
800 configDataValue = (tANI_U32 *)(tlvStruct + 1);
801 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
802 configDataValue ) != eSIR_SUCCESS)
803 {
804 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
805 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
806 goto handle_failure;
807 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700808 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
809 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700810 /* QWLAN_HAL_CFG_CAL_PERIOD */
811 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
812 tlvStruct->length = sizeof(tANI_U32);
813 configDataValue = (tANI_U32 *)(tlvStruct + 1);
814 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
815 != eSIR_SUCCESS)
816 {
817 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
818 "Failed to get value for WNI_CFG_CAL_PERIOD");
819 goto handle_failure;
820 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700821 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
822 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700823 /* QWLAN_HAL_CFG_CAL_CONTROL */
824 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
825 tlvStruct->length = sizeof(tANI_U32);
826 configDataValue = (tANI_U32 *)(tlvStruct + 1);
827 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
828 != eSIR_SUCCESS)
829 {
830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
831 "Failed to get value for WNI_CFG_CAL_CONTROL");
832 goto handle_failure;
833 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700834 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
835 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700836 /* QWLAN_HAL_CFG_PROXIMITY */
837 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
838 tlvStruct->length = sizeof(tANI_U32);
839 configDataValue = (tANI_U32 *)(tlvStruct + 1);
840 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
841 != eSIR_SUCCESS)
842 {
843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
844 "Failed to get value for WNI_CFG_PROXIMITY");
845 goto handle_failure;
846 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700847 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
848 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700849 /* QWLAN_HAL_CFG_NETWORK_DENSITY */
850 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
851 tlvStruct->length = sizeof(tANI_U32);
852 configDataValue = (tANI_U32 *)(tlvStruct + 1);
853 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
854 != eSIR_SUCCESS)
855 {
856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
857 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
858 goto handle_failure;
859 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700860 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
861 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700862 /* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */
863 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
864 tlvStruct->length = sizeof(tANI_U32);
865 configDataValue = (tANI_U32 *)(tlvStruct + 1);
866 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
867 eSIR_SUCCESS)
868 {
869 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
870 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
871 goto handle_failure;
872 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700873 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
874 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700875 /* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */
876 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
877 tlvStruct->length = sizeof(tANI_U32);
878 configDataValue = (tANI_U32 *)(tlvStruct + 1);
879 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
880 configDataValue ) != eSIR_SUCCESS)
881 {
882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
883 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
884 goto handle_failure;
885 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700886 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
887 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700888 /* QWLAN_HAL_CFG_RTS_THRESHOLD */
889 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
890 tlvStruct->length = sizeof(tANI_U32);
891 configDataValue = (tANI_U32 *)(tlvStruct + 1);
892 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
893 eSIR_SUCCESS)
894 {
895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
896 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
897 goto handle_failure;
898 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700899 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
900 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700901 /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
902 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
903 tlvStruct->length = sizeof(tANI_U32);
904 configDataValue = (tANI_U32 *)(tlvStruct + 1);
905 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
906 eSIR_SUCCESS)
907 {
908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
909 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
910 goto handle_failure;
911 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700912 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
913 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700914 /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
915 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
916 tlvStruct->length = sizeof(tANI_U32);
917 configDataValue = (tANI_U32 *)(tlvStruct + 1);
918 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
919 eSIR_SUCCESS)
920 {
921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
922 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
923 goto handle_failure;
924 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700925 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
926 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700927 /* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */
928 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
929 tlvStruct->length = sizeof(tANI_U32);
930 configDataValue = (tANI_U32 *)(tlvStruct + 1);
931 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
932 configDataValue ) != eSIR_SUCCESS)
933 {
934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
935 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
936 goto handle_failure;
937 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700938 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
939 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700940 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
941 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
942 tlvStruct->length = sizeof(tANI_U32);
943 configDataValue = (tANI_U32 *)(tlvStruct + 1);
944 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
945 configDataValue ) != eSIR_SUCCESS)
946 {
947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
948 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
949 goto handle_failure;
950 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700951 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
952 + sizeof(tHalCfg) + tlvStruct->length));
953
954 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
955 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
956 tlvStruct->length = sizeof(tANI_U32);
957 configDataValue = (tANI_U32 *)(tlvStruct + 1);
958 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
959 configDataValue ) != eSIR_SUCCESS)
960 {
961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
962 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
963 goto handle_failure;
964 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700965 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
966 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700967 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
968 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
969 tlvStruct->length = sizeof(tANI_U32);
970 configDataValue = (tANI_U32 *)(tlvStruct + 1);
971 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
972 configDataValue ) != eSIR_SUCCESS)
973 {
974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
975 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
976 goto handle_failure;
977 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700978 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
979 + sizeof(tHalCfg) + tlvStruct->length));
980
981 /* QWLAN_HAL_CFG_FIXED_RATE */
982 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
983 tlvStruct->length = sizeof(tANI_U32);
984 configDataValue = (tANI_U32 *)(tlvStruct + 1);
985 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
986 != eSIR_SUCCESS)
987 {
988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
989 "Failed to get value for WNI_CFG_FIXED_RATE");
990 goto handle_failure;
991 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700992 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
993 + sizeof(tHalCfg) + tlvStruct->length));
994
995 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
996 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
997 tlvStruct->length = sizeof(tANI_U32);
998 configDataValue = (tANI_U32 *)(tlvStruct + 1);
999 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
1000 != eSIR_SUCCESS)
1001 {
1002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1003 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
1004 goto handle_failure;
1005 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001006 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
1007 + sizeof(tHalCfg) + tlvStruct->length));
1008
1009 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
1010 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
1011 tlvStruct->length = sizeof(tANI_U32);
1012 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1013 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
1014 configDataValue ) != eSIR_SUCCESS)
1015 {
1016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1017 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
1018 goto handle_failure;
1019 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001020 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
1021 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001022 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
1023 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
1024 tlvStruct->length = sizeof(tANI_U32);
1025 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1026 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
1027 configDataValue ) != eSIR_SUCCESS)
1028 {
1029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1030 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
1031 goto handle_failure;
1032 }
1033 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
1034 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001035 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
1036 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
1037 tlvStruct->length = sizeof(tANI_U32);
1038 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1039 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
1040 configDataValue ) != eSIR_SUCCESS)
1041 {
1042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1043 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
1044 goto handle_failure;
1045 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001046 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1047 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001048 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
1049 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
1050 tlvStruct->length = sizeof(tANI_U32);
1051 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1052 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
1053 configDataValue ) != eSIR_SUCCESS)
1054 {
1055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1056 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
1057 goto handle_failure;
1058 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001059 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1060 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001061 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
1062 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
1063 tlvStruct->length = sizeof(tANI_U32);
1064 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1065 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
1066 configDataValue ) != eSIR_SUCCESS)
1067 {
1068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1069 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
1070 goto handle_failure;
1071 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001072 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1073 + sizeof(tHalCfg) + tlvStruct->length);
1074
Jeff Johnson295189b2012-06-20 16:38:30 -07001075 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
1076 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
1077 tlvStruct->length = sizeof(tANI_U32);
1078 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1079 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
1080 configDataValue ) != eSIR_SUCCESS)
1081 {
1082 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1083 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
1084 goto handle_failure;
1085 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001086 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1087 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001088 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
1089 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
1090 tlvStruct->length = sizeof(tANI_U32);
1091 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1092 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
1093 configDataValue ) != eSIR_SUCCESS)
1094 {
1095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1096 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
1097 goto handle_failure;
1098 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001099 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1100 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001101 /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
1102 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
1103 tlvStruct->length = sizeof(tANI_U32);
1104 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1105 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
1106 eSIR_SUCCESS)
1107 {
1108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1109 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
1110 goto handle_failure;
1111 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001112 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1113 + sizeof(tHalCfg) + tlvStruct->length);
1114
1115 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
1116 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
1117 tlvStruct->length = sizeof(tANI_U32);
1118 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1119 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
1120 configDataValue ) != eSIR_SUCCESS)
1121 {
1122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1123 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
1124 goto handle_failure;
1125 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001126 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1127 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001128 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
1129 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
1130 tlvStruct->length = sizeof(tANI_U32);
1131 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1132 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
1133 configDataValue ) != eSIR_SUCCESS)
1134 {
1135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1136 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
1137 goto handle_failure;
1138 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001139 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1140 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001141 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
1142 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
1143 tlvStruct->length = sizeof(tANI_U32);
1144 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1145 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
1146 configDataValue ) != eSIR_SUCCESS)
1147 {
1148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1149 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
1150 goto handle_failure;
1151 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001152 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1153 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001154 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
1155 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
1156 tlvStruct->length = sizeof(tANI_U32);
1157 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1158 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
1159 configDataValue ) != eSIR_SUCCESS)
1160 {
1161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1162 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
1163 goto handle_failure;
1164 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001165 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1166 + sizeof(tHalCfg) + tlvStruct->length);
1167
1168 /* QWLAN_HAL_CFG_STATS_PERIOD */
1169 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
1170 tlvStruct->length = sizeof(tANI_U32);
1171 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1172 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
1173 eSIR_SUCCESS)
1174 {
1175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1176 "Failed to get value for WNI_CFG_STATS_PERIOD");
1177 goto handle_failure;
1178 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001179 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1180 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001181 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
1182 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
1183 tlvStruct->length = sizeof(tANI_U32);
1184 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1185 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
1186 eSIR_SUCCESS)
1187 {
1188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1189 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
1190 goto handle_failure;
1191 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001192 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1193 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001194 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
1195 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
1196 tlvStruct->length = sizeof(tANI_U32);
1197 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1198 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
1199 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -07001200 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1201 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001202 /* QWLAN_HAL_CFG_DTIM_PERIOD */
1203 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
1204 tlvStruct->length = sizeof(tANI_U32);
1205 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1206 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
1207 != eSIR_SUCCESS)
1208 {
1209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1210 "Failed to get value for WNI_CFG_DTIM_PERIOD");
1211 goto handle_failure;
1212 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001213 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1214 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001215 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
1216 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
1217 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
1218 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1219 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
1220 &strLength) != eSIR_SUCCESS)
1221 {
1222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1223 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1224 goto handle_failure;
1225 }
1226 tlvStruct->length = strLength;
1227 /* calculate the pad bytes to have the CFG in aligned format */
1228 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1229 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001230 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1231 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001232 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1233 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1234 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1235 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1236 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1237 &strLength) != eSIR_SUCCESS)
1238 {
1239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1240 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1241 goto handle_failure;
1242 }
1243 tlvStruct->length = strLength;
1244 /* calculate the pad bytes to have the CFG in aligned format */
1245 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1246 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001247 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1248 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001249 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1250 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1251 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1252 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1253 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1254 &strLength) != eSIR_SUCCESS)
1255 {
1256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1257 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1258 goto handle_failure;
1259 }
1260 tlvStruct->length = strLength;
1261 /* calculate the pad bytes to have the CFG in aligned format */
1262 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1263 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001264 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1265 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001266 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1267 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1268 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1269 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1270 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1271 &strLength) != eSIR_SUCCESS)
1272 {
1273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1274 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1275 goto handle_failure;
1276 }
1277 tlvStruct->length = strLength;
1278 /* calculate the pad bytes to have the CFG in aligned format */
1279 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1280 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001281 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1282 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001283 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1284 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1285 tlvStruct->length = sizeof(tANI_U32);
1286 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1287 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1288 != eSIR_SUCCESS)
1289 {
1290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1291 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1292 goto handle_failure;
1293 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001294 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1295 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001296 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1297 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1298 tlvStruct->length = sizeof(tANI_U32);
1299 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1300 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1301 != eSIR_SUCCESS)
1302 {
1303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1304 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1305 goto handle_failure;
1306 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001307 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1308 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001309 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1310 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1311 tlvStruct->length = sizeof(tANI_U32);
1312 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1313 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1314 != eSIR_SUCCESS)
1315 {
1316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1317 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1318 goto handle_failure;
1319 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001320 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1321 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001322 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1323 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1324 tlvStruct->length = sizeof(tANI_U32);
1325 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1326 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1327 != eSIR_SUCCESS)
1328 {
1329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1330 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1331 goto handle_failure;
1332 }
1333 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1334 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001335 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1336 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1337 tlvStruct->length = sizeof(tANI_U32);
1338 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1339 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1340 != eSIR_SUCCESS)
1341 {
1342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1343 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1344 goto handle_failure;
1345 }
1346 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1347 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001348 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1349 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1350 tlvStruct->length = sizeof(tANI_U32);
1351 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1352 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1353 != eSIR_SUCCESS)
1354 {
1355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1356 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1357 goto handle_failure;
1358 }
1359 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1360 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001361 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1362 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1363 tlvStruct->length = sizeof(tANI_U32);
1364 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1365 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1366 != eSIR_SUCCESS)
1367 {
1368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1369 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1370 goto handle_failure;
1371 }
1372 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1373 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001374 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1375 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1376 tlvStruct->length = sizeof(tANI_U32);
1377 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1378 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
1379 != eSIR_SUCCESS)
1380 {
1381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1382 "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
1383 goto handle_failure;
1384 }
1385 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1386 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001387 /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
1388 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1389 tlvStruct->length = sizeof(tANI_U32);
1390 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1391 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1392 != eSIR_SUCCESS)
1393 {
1394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1395 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1396 goto handle_failure;
1397 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001398 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1399 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001400 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1401 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1402 tlvStruct->length = sizeof(tANI_U32);
1403 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1404 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1405 != eSIR_SUCCESS)
1406 {
1407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1408 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1409 goto handle_failure;
1410 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001411 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1412 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001413 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1414 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1415 tlvStruct->length = sizeof(tANI_U32);
1416 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1417 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1418 != eSIR_SUCCESS)
1419 {
1420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1421 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1422 goto handle_failure;
1423 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001424 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1425 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001426 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1427 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1428 * into FW, so the parameters are added here.
1429 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001430 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1431 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1432 tlvStruct->length = sizeof(tANI_U32);
1433 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1434 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1435 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1436 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001437 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1438 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1439 tlvStruct->length = sizeof(tANI_U32);
1440 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1441 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1442 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1443 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001444 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1445 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1446 tlvStruct->length = sizeof(tANI_U32);
1447 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1448 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1449 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1450 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001451 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1452 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1453 tlvStruct->length = sizeof(tANI_U32);
1454 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1455 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1456 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1457 + sizeof(tHalCfg) + tlvStruct->length) ;
1458
1459 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1460 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1461 tlvStruct->length = sizeof(tANI_U32);
1462 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1463 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1464 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1465 + sizeof(tHalCfg) + tlvStruct->length) ;
1466
1467 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1468 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1469 tlvStruct->length = sizeof(tANI_U32);
1470 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1471 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1472 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1473 + sizeof(tHalCfg) + tlvStruct->length) ;
1474
1475 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1476 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1477 tlvStruct->length = sizeof(tANI_U32);
1478 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1479 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1480 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1481 + sizeof(tHalCfg) + tlvStruct->length) ;
1482
1483 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1484 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1485 tlvStruct->length = sizeof(tANI_U32);
1486 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1487 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1488 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1489 + sizeof(tHalCfg) + tlvStruct->length) ;
1490
1491 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1492 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1493 tlvStruct->length = sizeof(tANI_U32);
1494 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1495 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1496 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1497 + sizeof(tHalCfg) + tlvStruct->length) ;
1498
1499 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1500 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1501 tlvStruct->length = sizeof(tANI_U32);
1502 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1503 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1504 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1505 + sizeof(tHalCfg) + tlvStruct->length) ;
1506
1507 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1508 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1509 tlvStruct->length = sizeof(tANI_U32);
1510 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1511 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1512 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1513 + sizeof(tHalCfg) + tlvStruct->length) ;
1514
1515 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1516 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1517 tlvStruct->length = sizeof(tANI_U32);
1518 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1519 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1520 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1521 + sizeof(tHalCfg) + tlvStruct->length) ;
1522
1523 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1524 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1525 tlvStruct->length = sizeof(tANI_U32);
1526 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1527 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1528 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1529 + sizeof(tHalCfg) + tlvStruct->length) ;
1530
1531 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1532 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1533 tlvStruct->length = sizeof(tANI_U32);
1534 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1535 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1536 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1537 + sizeof(tHalCfg) + tlvStruct->length) ;
1538
1539 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1540 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1541 tlvStruct->length = sizeof(tANI_U32);
1542 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1543 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1544 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1545 + sizeof(tHalCfg) + tlvStruct->length) ;
1546
1547 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1548 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1549 tlvStruct->length = sizeof(tANI_U32);
1550 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1551 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1552 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1553 + sizeof(tHalCfg) + tlvStruct->length) ;
1554
Wilson Tsaof8b37942013-09-06 10:49:00 -07001555 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_VICTIM; i++)
1556 {
1557 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WAN_FREQ */
1558 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WAN_FREQ + i*4;
1559 tlvStruct->length = sizeof(tANI_U32);
1560 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1561 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWANFreq[i];
1562 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1563 + sizeof(tHalCfg) + tlvStruct->length) ;
1564
1565 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WLAN_FREQ */
1566 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WLAN_FREQ + i*4;
1567 tlvStruct->length = sizeof(tANI_U32);
1568 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1569 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWLANFreq[i];
1570 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1571 + sizeof(tHalCfg) + tlvStruct->length) ;
1572
1573 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG */
1574 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG + i*4;
1575 tlvStruct->length = sizeof(tANI_U32);
1576 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1577 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig[i];
1578 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1579 + sizeof(tHalCfg) + tlvStruct->length) ;
1580
1581 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG2 */
1582 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG2 + i*4;
1583 tlvStruct->length = sizeof(tANI_U32);
1584 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1585 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig2[i];
1586 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1587 + sizeof(tHalCfg) + tlvStruct->length) ;
1588 }
1589
1590 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF */
1591 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF ;
1592 tlvStruct->length = sizeof(tANI_U32);
1593 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1594 *configDataValue = pMac->btc.btcConfig.mwsCoexModemBackoff;
1595 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1596 + sizeof(tHalCfg) + tlvStruct->length) ;
1597
1598 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_CONFIG; i++)
1599 {
1600 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_CONFIGX */
1601 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_CONFIG1 + i;
1602 tlvStruct->length = sizeof(tANI_U32);
1603 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1604 *configDataValue = pMac->btc.btcConfig.mwsCoexConfig[i];
1605 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1606 + sizeof(tHalCfg) + tlvStruct->length) ;
1607 }
1608
1609 /* [COEX] QWLAN_HAL_CFG_SAR_POWER_BACKOFF */
1610 tlvStruct->type = QWLAN_HAL_CFG_SAR_POWER_BACKOFF ;
1611 tlvStruct->length = sizeof(tANI_U32);
1612 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1613 *configDataValue = pMac->btc.btcConfig.SARPowerBackoff;
1614 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1615 + sizeof(tHalCfg) + tlvStruct->length) ;
1616
Jeff Johnson32d95a32012-09-10 13:15:23 -07001617 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001618 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1619 tlvStruct->length = sizeof(tANI_U32);
1620 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1621 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1622 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1623 wcnssCompiledApiVersion.minor,
1624 wcnssCompiledApiVersion.version,
1625 wcnssCompiledApiVersion.revision);
1626 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1627 + sizeof(tHalCfg) + tlvStruct->length) ;
1628
Jeff Johnsond13512a2012-07-17 11:42:19 -07001629 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1630 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1631 tlvStruct->length = sizeof(tANI_U32);
1632 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1633 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1634 configDataValue ) != eSIR_SUCCESS)
1635 {
1636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1637 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1638 goto handle_failure;
1639 }
1640
1641 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1642 + sizeof(tHalCfg) + tlvStruct->length) ;
1643 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1644 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1645 tlvStruct->length = sizeof(tANI_U32);
1646 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1647 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1648 configDataValue ) != eSIR_SUCCESS)
1649 {
1650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1651 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1652 goto handle_failure;
1653 }
1654
1655 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1656 + sizeof(tHalCfg) + tlvStruct->length) ;
1657
1658 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1659 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1660 tlvStruct->length = sizeof(tANI_U32);
1661 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1662 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1663 != eSIR_SUCCESS)
1664 {
1665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1666 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1667 goto handle_failure;
1668 }
1669
1670 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1671 + sizeof(tHalCfg) + tlvStruct->length) ;
1672
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08001673 /* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */
1674 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION ;
1675 tlvStruct->length = sizeof(tANI_U32);
1676 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1677 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION, configDataValue)
1678 != eSIR_SUCCESS)
1679 {
1680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1681 "Failed to get value for WNI_CFG_ENABLE_LPWR_IMG_TRANSITION");
1682 goto handle_failure;
1683 }
1684
1685 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1686 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala976e3252013-01-03 15:45:56 -08001687#ifdef WLAN_SOFTAP_VSTA_FEATURE
1688 tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
1689 tlvStruct->length = sizeof(tANI_U32);
1690 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1691 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
1692 != eSIR_SUCCESS)
1693 {
1694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1695 "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
1696 goto handle_failure;
1697 }
1698
1699 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1700 + sizeof(tHalCfg) + tlvStruct->length) ;
1701#endif
1702
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08001703 /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
1704 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
1705 tlvStruct->length = sizeof(tANI_U32);
1706 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1707
1708 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
1709 != eSIR_SUCCESS)
1710 {
1711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1712 "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
1713 goto handle_failure;
1714 }
1715
1716 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1717 + sizeof(tHalCfg) + tlvStruct->length) ;
1718
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301719/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */
1720 tlvStruct->type = QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT ;
1721 tlvStruct->length = sizeof(tANI_U32);
1722 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1723 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
1724 configDataValue ) != eSIR_SUCCESS)
1725 {
1726 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1727 "Failed to get value for WNI_CFG_AP_LINK_MONITOR_TIMEOUT");
1728 goto handle_failure;
1729 }
1730
1731 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1732 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301733#ifdef FEATURE_WLAN_TDLS
1734 /* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */
1735 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_MASK;
1736 tlvStruct->length = sizeof(tANI_U32);
1737 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1738 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK,
1739 configDataValue ) != eSIR_SUCCESS)
1740 {
1741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1742 "Failed to get value for WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK");
1743 goto handle_failure;
1744 }
1745 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1746 + sizeof(tHalCfg) + tlvStruct->length) ;
1747
1748 /* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */
1749 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE;
1750 tlvStruct->length = sizeof(tANI_U32);
1751 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1752 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_BUF_STA_ENABLED,
1753 configDataValue ) != eSIR_SUCCESS)
1754 {
1755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1756 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1757 goto handle_failure;
1758 }
1759 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1760 + sizeof(tHalCfg) + tlvStruct->length) ;
1761 /* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */
1762 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME;
1763 tlvStruct->length = sizeof(tANI_U32);
1764 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1765 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_PUAPSD_INACT_TIME,
1766 configDataValue ) != eSIR_SUCCESS)
1767 {
1768 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1769 "Failed to get value for WNI_CFG_TDLS_PUAPSD_INACT_TIME");
1770 goto handle_failure;
1771 }
1772 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1773 + sizeof(tHalCfg) + tlvStruct->length) ;
1774 /* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */
1775 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP;
1776 tlvStruct->length = sizeof(tANI_U32);
1777 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1778 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_RX_FRAME_THRESHOLD,
1779 configDataValue ) != eSIR_SUCCESS)
1780 {
1781 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1782 "Failed to get value for WNI_CFG_TDLS_RX_FRAME_THRESHOLD");
1783 goto handle_failure;
1784 }
1785 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1786 + sizeof(tHalCfg) + tlvStruct->length) ;
Naresh Jayaramf73f3762014-02-04 16:13:20 +05301787 /* QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE */
1788 tlvStruct->type = QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE;
1789 tlvStruct->length = sizeof(tANI_U32);
1790 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1791 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_OFF_CHANNEL_ENABLED,
1792 configDataValue ) != eSIR_SUCCESS)
1793 {
1794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1795 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1796 goto handle_failure;
1797 }
1798 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1799 + sizeof(tHalCfg) + tlvStruct->length) ;
1800
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301801#endif
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301802
Sudhir Sattayappa Kohallida1be202013-07-11 12:04:30 -07001803 /* QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN */
1804 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE ;
1805 tlvStruct->length = sizeof(tANI_U32);
1806 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1807 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_ADAPT_RX_DRAIN,
1808 configDataValue ) != eSIR_SUCCESS)
1809 {
1810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1811 "Failed to get value for WNI_CFG_ENABLE_ADAPT_RX_DRAIN");
1812 goto handle_failure;
1813 }
1814
1815 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1816 + sizeof(tHalCfg) + tlvStruct->length) ;
Yue Ma0fd23872013-08-01 15:56:47 -07001817
1818 /* QWLAN_HAL_CFG_FLEX_CONNECT_POWER_FACTOR */
1819 tlvStruct->type = QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR;
1820 tlvStruct->length = sizeof(tANI_U32);
1821 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1822 if(wlan_cfgGetInt(pMac, WNI_CFG_FLEX_CONNECT_POWER_FACTOR, configDataValue)
1823 != eSIR_SUCCESS)
1824 {
1825 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1826 "Failed to get value for WNI_CFG_FLEX_CONNECT_POWER_FACTOR");
1827 goto handle_failure;
1828 }
1829 tlvStruct = (tHalCfg *)(((tANI_U8 *) tlvStruct
1830 + sizeof(tHalCfg) + tlvStruct->length));
1831
Madan Mohan Koyyalamudica454572013-08-07 19:57:03 +05301832 /* QWLAN_HAL_CFG_ANTENNA_DIVERSITY */
1833 tlvStruct->type = QWLAN_HAL_CFG_ANTENNA_DIVERSITY;
1834 tlvStruct->length = sizeof(tANI_U32);
1835 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1836 if (wlan_cfgGetInt(pMac, WNI_CFG_ANTENNA_DIVESITY,
1837 configDataValue ) != eSIR_SUCCESS)
1838 {
1839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1840 "Failed to get value for WNI_CFG_ANTENNA_DIVESITY");
1841 goto handle_failure;
1842 }
1843
1844 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1845 + sizeof(tHalCfg) + tlvStruct->length) ;
1846
Madan Mohan Koyyalamudi2558bc92013-08-24 16:54:31 +05301847 /* QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT */
1848 tlvStruct->type = QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT ;
1849 tlvStruct->length = sizeof(tANI_U32);
1850 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1851 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_LINK_MONITOR_TIMEOUT,
1852 configDataValue ) != eSIR_SUCCESS)
1853 {
1854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1855 "Failed to get value for WNI_CFG_GO_LINK_MONITOR_TIMEOUT");
1856 goto handle_failure;
1857 }
1858 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1859 + sizeof(tHalCfg) + tlvStruct->length) ;
1860
Kiet Lam4bbd3cb2013-11-07 20:03:49 +05301861 /* QWLAN_HAL_CFG_ATH_DISABLE */
1862 tlvStruct->type = QWLAN_HAL_CFG_ATH_DISABLE ;
1863 tlvStruct->length = sizeof(tANI_U32);
1864 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1865 if(wlan_cfgGetInt(pMac, WNI_CFG_ATH_DISABLE,
1866 configDataValue ) != eSIR_SUCCESS)
1867 {
1868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1869 "Failed to get value for WNI_CFG_ATH_DISABLE");
1870 goto handle_failure;
1871 }
1872 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1873 + sizeof(tHalCfg) + tlvStruct->length) ;
1874
c_hpothu6d7dc922013-12-02 12:36:41 +05301875 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_WLAN_LEN */
1876 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1877 tlvStruct->length = sizeof(tANI_U32);
1878 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1879 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_WLAN_LEN,
1880 configDataValue ) != eSIR_SUCCESS)
1881 {
1882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1883 "Failed to get value for WNI_CFG_BTC_ACTIVE_WLAN_LEN");
1884 goto handle_failure;
1885 }
1886 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1887 + sizeof(tHalCfg) + tlvStruct->length) ;
1888
1889 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1890 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1891 tlvStruct->length = sizeof(tANI_U32);
1892 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1893 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_BT_LEN,
1894 configDataValue ) != eSIR_SUCCESS)
1895 {
1896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1897 "Failed to get value for WNI_CFG_BTC_ACTIVE_BT_LEN");
1898 goto handle_failure;
1899 }
1900 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1901 + sizeof(tHalCfg) + tlvStruct->length) ;
1902
1903 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN */
1904 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1905 tlvStruct->length = sizeof(tANI_U32);
1906 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1907 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN,
1908 configDataValue ) != eSIR_SUCCESS)
1909 {
1910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1911 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN");
1912 goto handle_failure;
1913 }
1914 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1915 + sizeof(tHalCfg) + tlvStruct->length) ;
1916
1917 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1918 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1919 tlvStruct->length = sizeof(tANI_U32);
1920 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1921 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_BT_LEN,
1922 configDataValue ) != eSIR_SUCCESS)
1923 {
1924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1925 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_BT_LEN");
1926 goto handle_failure;
1927 }
1928 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1929 + sizeof(tHalCfg) + tlvStruct->length) ;
1930
AnjaneeDevi Kapparapu50239e32014-01-07 18:09:33 +05301931 /* QWLAN_HAL_CFG_ASD_PROBE_INTERVAL */
1932 tlvStruct->type = QWLAN_HAL_CFG_ASD_PROBE_INTERVAL ;
1933 tlvStruct->length = sizeof(tANI_U32);
1934 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1935 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_PROBE_INTERVAL,
1936 configDataValue ) != eSIR_SUCCESS)
1937 {
1938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1939 "Failed to get value for WNI_CFG_ASD_PROBE_INTERVAL");
1940 goto handle_failure;
1941 }
1942 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1943 + sizeof(tHalCfg) + tlvStruct->length) ;
1944
1945 /* QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD */
1946 tlvStruct->type = QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD ;
1947 tlvStruct->length = sizeof(tANI_U32);
1948 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1949 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_TRIGGER_THRESHOLD,
1950 configDataValue ) != eSIR_SUCCESS)
1951 {
1952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1953 "Failed to get value for WNI_CFG_ASD_TRIGGER_THRESHOLD");
1954 goto handle_failure;
1955 }
1956 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1957 + sizeof(tHalCfg) + tlvStruct->length) ;
1958
1959 /* QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD */
1960 tlvStruct->type = QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD ;
1961 tlvStruct->length = sizeof(tANI_U32);
1962 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1963 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD,
1964 configDataValue ) != eSIR_SUCCESS)
1965 {
1966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1967 "Failed to get value for WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD");
1968 goto handle_failure;
1969 }
1970 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1971 + sizeof(tHalCfg) + tlvStruct->length) ;
1972
Leela Venkata Kiran Kumar Reddy Chirala22c159b2013-12-23 18:19:13 -08001973 /* QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO */
1974 tlvStruct->type = QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO ;
1975 tlvStruct->length = sizeof(tANI_U32);
1976 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1977 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CTS2S_DURING_SCO,
1978 configDataValue ) != eSIR_SUCCESS)
1979 {
1980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1981 "Failed to get value for WNI_CFG_BTC_CTS2S_DURING_SCO");
1982 goto handle_failure;
1983 }
1984 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1985 + sizeof(tHalCfg) + tlvStruct->length) ;
1986
c_hpothu5bd1ae42014-03-07 20:28:22 +05301987 /* QWLAN_HAL_CFG_RA_FILTER_ENABLE */
1988 tlvStruct->type = QWLAN_HAL_CFG_RA_FILTER_ENABLE ;
1989 tlvStruct->length = sizeof(tANI_U32);
1990 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1991
1992 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_FILTER_ENABLE,
1993 configDataValue ) != eSIR_SUCCESS)
1994 {
1995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1996 "Failed to get value for WNI_CFG_RA_FILTER_ENABLE");
1997 goto handle_failure;
1998 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05301999 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2000 + sizeof(tHalCfg) + tlvStruct->length) ;
2001
2002 /* QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL */
2003 tlvStruct->type = QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL ;
2004 tlvStruct->length = sizeof(tANI_U32);
2005 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2006
2007 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_RATE_LIMIT_INTERVAL,
2008 configDataValue ) != eSIR_SUCCESS)
2009 {
2010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2011 "Failed to get value for WNI_CFG_RA_RATE_LIMIT_INTERVAL");
2012 goto handle_failure;
2013 }
c_hpothu2d0f1c42014-04-01 18:38:51 +05302014 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2015 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu5bd1ae42014-03-07 20:28:22 +05302016
c_hpothu2d0f1c42014-04-01 18:38:51 +05302017 /* QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE */
2018 tlvStruct->type = QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE ;
2019 tlvStruct->length = sizeof(tANI_U32);
2020 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2021
2022 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE,
2023 configDataValue ) != eSIR_SUCCESS)
2024 {
2025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2026 "Failed to get value for WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE");
2027 goto handle_failure;
2028 }
2029 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2030 + sizeof(tHalCfg) + tlvStruct->length) ;
2031
2032 /* QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE */
2033 tlvStruct->type = QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE ;
2034 tlvStruct->length = sizeof(tANI_U32);
2035 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2036
2037 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE,
2038 configDataValue ) != eSIR_SUCCESS)
2039 {
2040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2041 "Failed to get value for WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE");
2042 goto handle_failure;
2043 }
2044 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2045 + sizeof(tHalCfg) + tlvStruct->length) ;
2046
2047 /* QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD */
2048 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD ;
2049 tlvStruct->length = sizeof(tANI_U32);
2050 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2051
2052 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD,
2053 configDataValue ) != eSIR_SUCCESS)
2054 {
2055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2056 "Failed to get value for WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD");
2057 goto handle_failure;
2058 }
2059 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2060 + sizeof(tHalCfg) + tlvStruct->length) ;
2061
2062 /* QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD */
2063 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD ;
2064 tlvStruct->length = sizeof(tANI_U32);
2065 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2066
2067 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD,
2068 configDataValue ) != eSIR_SUCCESS)
2069 {
2070 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2071 "Failed to get value for WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD");
2072 goto handle_failure;
2073 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05302074 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2075 + sizeof(tHalCfg) + tlvStruct->length) ;
2076
Mihir Shetec34258c2014-07-30 17:50:27 +05302077 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP */
2078 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP ;
2079 tlvStruct->length = sizeof(tANI_U32);
2080 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2081
2082 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_SP,
2083 configDataValue ) != eSIR_SUCCESS)
2084 {
2085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2086 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_SP");
2087 goto handle_failure;
2088 }
2089 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2090 + sizeof(tHalCfg) + tlvStruct->length) ;
2091
2092 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT */
2093 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT ;
2094 tlvStruct->length = sizeof(tANI_U32);
2095 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2096
2097 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT,
2098 configDataValue ) != eSIR_SUCCESS)
2099 {
2100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2101 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT");
2102 goto handle_failure;
2103 }
2104 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2105 + sizeof(tHalCfg) + tlvStruct->length) ;
2106
2107 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT */
2108 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT ;
2109 tlvStruct->length = sizeof(tANI_U32);
2110 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2111
2112 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT,
2113 configDataValue ) != eSIR_SUCCESS)
2114 {
2115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2116 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT");
2117 goto handle_failure;
2118 }
2119 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2120 + sizeof(tHalCfg) + tlvStruct->length) ;
2121
2122 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW */
2123 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW ;
2124 tlvStruct->length = sizeof(tANI_U32);
2125 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2126
2127 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW,
2128 configDataValue ) != eSIR_SUCCESS)
2129 {
2130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2131 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW");
2132 goto handle_failure;
2133 }
2134 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2135 + sizeof(tHalCfg) + tlvStruct->length) ;
2136
2137 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW */
2138 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW ;
2139 tlvStruct->length = sizeof(tANI_U32);
2140 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2141
2142 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW,
2143 configDataValue ) != eSIR_SUCCESS)
2144 {
2145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2146 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW");
2147 goto handle_failure;
2148 }
2149 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2150 + sizeof(tHalCfg) + tlvStruct->length) ;
2151
2152 /* QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE */
2153 tlvStruct->type = QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE ;
2154 tlvStruct->length = sizeof(tANI_U32);
2155 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2156
2157 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE,
2158 configDataValue ) != eSIR_SUCCESS)
2159 {
2160 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2161 "Failed to get value for WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE");
2162 goto handle_failure;
2163 }
2164 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2165 + sizeof(tHalCfg) + tlvStruct->length) ;
2166
2167 /* QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS */
2168 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS ;
2169 tlvStruct->length = sizeof(tANI_U32);
2170 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2171
2172 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS,
2173 configDataValue ) != eSIR_SUCCESS)
2174 {
2175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2176 "Failed to get value for WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS");
2177 goto handle_failure;
2178 }
2179 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2180 + sizeof(tHalCfg) + tlvStruct->length) ;
2181
2182 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS */
2183 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS ;
2184 tlvStruct->length = sizeof(tANI_U32);
2185 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2186
2187 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_WMMPS,
2188 configDataValue ) != eSIR_SUCCESS)
2189 {
2190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2191 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_WMMPS");
2192 goto handle_failure;
2193 }
2194 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2195 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu03d961b2014-09-19 16:45:00 +05302196
2197 /* QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE */
2198 tlvStruct->type = QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE ;
2199 tlvStruct->length = sizeof(tANI_U32);
2200 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2201
2202 if (wlan_cfgGetInt(pMac, WNI_CFG_BURST_MODE_BE_TXOP_VALUE,
2203 configDataValue ) != eSIR_SUCCESS)
2204 {
2205 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2206 "Failed to get value for WNI_CFG_BURST_MODE_BE_TXOP_VALUE");
2207 goto handle_failure;
2208 }
2209 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2210 + sizeof(tHalCfg) + tlvStruct->length) ;
2211
Deepthi Gowri9025aa62014-11-07 19:45:36 +05302212 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE */
2213 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE ;
2214 tlvStruct->length = sizeof(tANI_U32);
2215 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2216
2217 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE,
2218 configDataValue ) != eSIR_SUCCESS)
2219 {
2220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2221 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE");
2222 goto handle_failure;
2223 }
2224 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2225 + sizeof(tHalCfg) + tlvStruct->length) ;
2226
Naresh Jayaramf5bbe3f2014-12-29 18:32:47 +05302227 /* QWLAN_HAL_CFG_BTC_FAST_WLAN_CONN_PREF */
2228 tlvStruct->type = QWLAN_HAL_CFG_BTC_FAST_WLAN_CONN_PREF ;
2229 tlvStruct->length = sizeof(tANI_U32);
2230 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2231
2232 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FAST_WLAN_CONN_PREF,
2233 configDataValue ) != eSIR_SUCCESS)
2234 {
2235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2236 "Failed to get value for WNI_CFG_BTC_FAST_WLAN_CONN_PREF");
2237 goto handle_failure;
2238 }
2239 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2240 + sizeof(tHalCfg) + tlvStruct->length) ;
Deepthi Gowri9025aa62014-11-07 19:45:36 +05302241
jagadeeshaf2d0ce2015-03-31 11:45:30 +05302242 /* QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT */
2243 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT;
2244 tlvStruct->length = sizeof(tANI_U32);
2245 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2246
2247 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_RTSCTS_HTVHT,
2248 configDataValue ) != eSIR_SUCCESS)
2249 {
2250 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2251 "Failed to get value for WNI_CFG_ENABLE_RTSCTS_HTVHT");
2252 goto handle_failure;
2253 }
2254 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2255 + sizeof(tHalCfg) + tlvStruct->length) ;
2256
Sachin Ahuja41b61902015-06-18 18:32:15 +05302257
2258 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN */
2259 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN ;
2260 tlvStruct->length = sizeof(tANI_U32);
2261 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2262
2263 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN,
2264 configDataValue ) != eSIR_SUCCESS)
2265 {
2266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2267 "Failed to get value for WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_WLAN_LEN");
2268 goto handle_failure;
2269 }
2270 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2271 + sizeof(tHalCfg) + tlvStruct->length) ;
2272
2273 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN */
2274 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN ;
2275 tlvStruct->length = sizeof(tANI_U32);
2276 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2277
2278 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN,
2279 configDataValue ) != eSIR_SUCCESS)
2280 {
2281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2282 "Failed to get value for WNI_CFG_BTC_STATIC_OPP_WLAN_IDLE_BT_LEN");
2283 goto handle_failure;
2284 }
Sachin Ahuja41b61902015-06-18 18:32:15 +05302285 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2286 + sizeof(tHalCfg) + tlvStruct->length) ;
2287
Hanumantha Reddy Pothula9a8ccab2015-07-03 14:33:17 +05302288 /* QWLAN_HAL_CFG_LINK_FAIL_TIMEOUT */
2289 tlvStruct->type = QWLAN_HAL_CFG_LINK_FAIL_TIMEOUT ;
2290 tlvStruct->length = sizeof(tANI_U32);
2291 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2292
2293 if (wlan_cfgGetInt(pMac, WNI_CFG_LINK_FAIL_TIMEOUT,
2294 configDataValue ) != eSIR_SUCCESS)
2295 {
2296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2297 "Failed to get value for WNI_CFG_LINK_FAIL_TIMEOUT");
2298 goto handle_failure;
2299 }
2300 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2301 + sizeof(tHalCfg) + tlvStruct->length) ;
2302
2303 /* QWLAN_HAL_CFG_LINK_FAIL_TX_CNT */
2304 tlvStruct->type = QWLAN_HAL_CFG_LINK_FAIL_TX_CNT ;
2305 tlvStruct->length = sizeof(tANI_U32);
2306 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2307
2308 if (wlan_cfgGetInt(pMac, WNI_CFG_LINK_FAIL_TX_CNT,
2309 configDataValue ) != eSIR_SUCCESS)
2310 {
2311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2312 "Failed to get value for WNI_CFG_LINK_FAIL_TX_CNT");
2313 goto handle_failure;
2314 }
2315 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2316 + sizeof(tHalCfg) + tlvStruct->length) ;
Sachin Ahuja41b61902015-06-18 18:32:15 +05302317
Hanumantha Reddy Pothulae0216f92015-08-11 18:30:06 +05302318 /* QWLAN_HAL_CFG_TOGGLE_ARP_BDRATES */
2319 tlvStruct->type = QWLAN_HAL_CFG_TOGGLE_ARP_BDRATES;
2320 tlvStruct->length = sizeof(tANI_U32);
2321 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2322
2323 if (wlan_cfgGetInt(pMac, WNI_CFG_TOGGLE_ARP_BDRATES,
2324 configDataValue ) != eSIR_SUCCESS)
2325 {
2326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2327 "Failed to get value for WNI_CFG_TOGGLE_ARP_BDRATES");
2328 goto handle_failure;
2329 }
2330 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2331 + sizeof(tHalCfg) + tlvStruct->length) ;
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +05302332 /* QWLAN_HAL_CFG_OPTIMIZE_CA_EVENT */
2333 tlvStruct->type = QWLAN_HAL_CFG_OPTIMIZE_CA_EVENT ;
2334 tlvStruct->length = sizeof(tANI_U32);
2335 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2336 if (wlan_cfgGetInt(pMac, WNI_CFG_OPTIMIZE_CA_EVENT,
2337 configDataValue ) != eSIR_SUCCESS)
2338 {
2339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2340 "Failed to get value for WNI_CFG_OPTIMIZE_CA_EVENT");
2341 goto handle_failure;
2342 }
2343 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2344 + sizeof(tHalCfg) + tlvStruct->length) ;
Hanumantha Reddy Pothulae0216f92015-08-11 18:30:06 +05302345
Padma, Santhosh Kumare2eb0fa2015-08-26 13:40:47 +05302346 /* QWLAN_HAL_CFG_EXT_SCAN_CONC_MODE */
2347 tlvStruct->type = QWLAN_HAL_CFG_EXT_SCAN_CONC_MODE ;
2348 tlvStruct->length = sizeof(tANI_U32);
2349 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2350
2351 if (wlan_cfgGetInt(pMac, WNI_CFG_EXT_SCAN_CONC_MODE,
2352 configDataValue ) != eSIR_SUCCESS)
2353 {
2354 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2355 "Failed to get value for WNI_CFG_EXT_SCAN_CONC_MODE");
2356 goto handle_failure;
2357 }
2358 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2359 + sizeof(tHalCfg) + tlvStruct->length) ;
2360
Sachin Ahujae9f85aa2015-12-08 19:57:04 +05302361 /* QWLAN_HAL_CFG_BAR_WAKEUP_HOST_DISABLE */
2362 tlvStruct->type = QWLAN_HAL_CFG_BAR_WAKEUP_HOST_DISABLE;
2363 tlvStruct->length = sizeof(tANI_U32);
2364 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2365
2366 if (wlan_cfgGetInt(pMac, WNI_CFG_DISABLE_BAR_WAKE_UP_HOST,
2367 configDataValue ) != eSIR_SUCCESS)
2368 {
2369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2370 "Failed to get value for WNI_CFG_DISABLE_BAR_WAKE_UP_HOST");
2371 goto handle_failure;
2372 }
2373 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2374 + sizeof(tHalCfg) + tlvStruct->length) ;
Manjeet Singh3d8e0942016-02-09 19:06:08 +05302375
2376 /* QWLAN_HAL_CFG_SAR_BOFFSET_CORRECTION_ENABLE */
2377 tlvStruct->type = QWLAN_HAL_CFG_SAR_BOFFSET_CORRECTION_ENABLE;
2378 tlvStruct->length = sizeof(tANI_U32);
2379 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2380
2381 if (wlan_cfgGetInt(pMac, WNI_CFG_SAR_BOFFSET_SET_CORRECTION,
2382 configDataValue ) != eSIR_SUCCESS)
2383 {
2384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2385 "Failed to get value for WNI_CFG_SAR_BOFFSET_SET_CORRECTION");
2386 goto handle_failure;
2387 }
2388 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2389 + sizeof(tHalCfg) + tlvStruct->length) ;
2390
Jeff Johnson295189b2012-06-20 16:38:30 -07002391 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002392#ifdef WLAN_DEBUG
2393 {
2394 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07002395 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2396 "****** Dumping CFG TLV ***** ");
2397 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
2398 {
2399 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2400 "%02x %02x %02x %02x %02x %02x %02x %02x",
2401 tlvStructStart[i],
2402 tlvStructStart[i+1],
2403 tlvStructStart[i+2],
2404 tlvStructStart[i+3],
2405 tlvStructStart[i+4],
2406 tlvStructStart[i+5],
2407 tlvStructStart[i+6],
2408 tlvStructStart[i+7]);
2409 }
2410 /* Dump the bytes in the last line*/
2411 for (; i < wdiStartParams->usConfigBufferLen; i++)
2412 {
2413 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2414 "%02x ",tlvStructStart[i]);
2415 }
2416 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2417 "**************************** ");
2418 }
2419#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002420 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002421handle_failure:
2422 vos_mem_free(configParam);
2423 return VOS_STATUS_E_FAILURE;
2424}
Jeff Johnson295189b2012-06-20 16:38:30 -07002425/*
2426 * FUNCTION: WDA_wdiCompleteCB
2427 * call the voss call back function
2428 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002429void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07002430{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002431 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2432 tWDA_CbContext *wdaContext;
2433
2434 if(NULL == pWdaParams)
2435 {
2436 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002437 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002438 VOS_ASSERT(0) ;
2439 return ;
2440 }
2441
2442 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
2443
Jeff Johnson295189b2012-06-20 16:38:30 -07002444 if (NULL == wdaContext)
2445 {
2446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002447 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002448 return ;
2449 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002450
Jeff Johnson295189b2012-06-20 16:38:30 -07002451 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002452 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07002453 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002454 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002455 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002456 vos_mem_free(pWdaParams);
2457
Jeff Johnson295189b2012-06-20 16:38:30 -07002458 if(WDI_STATUS_SUCCESS != status)
2459 {
2460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2461 "WDI stop callback returned failure" );
2462 VOS_ASSERT(0) ;
2463 }
2464 else
2465 {
2466 wdaContext->wdaState = WDA_STOP_STATE;
2467 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002468
Leo Chang9d76f622013-08-23 16:34:52 -07002469 /* FTM Driver stop procedure should be synced.
2470 * Stop and Close will happen on same context */
2471 if (eDRIVER_TYPE_MFG == wdaContext->driverMode)
2472 {
2473 if (VOS_STATUS_SUCCESS != vos_event_set(&wdaContext->ftmStopDoneEvent))
2474 {
2475 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2476 "%s: FTM Stop Event Set Fail", __func__);
2477 VOS_ASSERT(0);
2478 }
2479 }
2480
Jeff Johnson295189b2012-06-20 16:38:30 -07002481 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002482 vos_WDAComplete_cback(wdaContext->pVosContext);
2483
Jeff Johnson295189b2012-06-20 16:38:30 -07002484 return ;
2485}
Jeff Johnson295189b2012-06-20 16:38:30 -07002486/*
2487 * FUNCTION: WDA_stop
2488 * call WDI_stop
2489 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002490VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
2491{
2492 WDI_Status wdiStatus;
2493 VOS_STATUS status = VOS_STATUS_SUCCESS;
2494 WDI_StopReqParamsType *wdiStopReq;
2495 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002496 tWDA_ReqParams *pWdaParams ;
2497
Jeff Johnson295189b2012-06-20 16:38:30 -07002498 if (NULL == pWDA)
2499 {
2500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002501 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002502 VOS_ASSERT(0);
2503 return VOS_STATUS_E_FAILURE;
2504 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002505 if (pWDA->wdiFailed == true)
2506 {
2507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002508 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002509 return VOS_STATUS_E_ALREADY;
2510 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002511
Jeff Johnson295189b2012-06-20 16:38:30 -07002512 /* FTM mode stay START_STATE */
2513 if( (WDA_READY_STATE != pWDA->wdaState) &&
2514 (WDA_INIT_STATE != pWDA->wdaState) &&
2515 (WDA_START_STATE != pWDA->wdaState) )
2516 {
2517 VOS_ASSERT(0);
2518 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002519 wdiStopReq = (WDI_StopReqParamsType *)
2520 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
2521 if(NULL == wdiStopReq)
2522 {
2523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002524 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002525 VOS_ASSERT(0);
2526 return VOS_STATUS_E_NOMEM;
2527 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002528
Jeff Johnson295189b2012-06-20 16:38:30 -07002529 wdiStopReq->wdiStopReason = reason;
2530 wdiStopReq->wdiReqStatusCB = NULL;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302531
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002532 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2533 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07002534 {
2535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002536 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002537 VOS_ASSERT(0);
2538 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002539 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07002540 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002541
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002542 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
2543 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07002544 {
2545 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002546 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002547 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002548
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002549 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
2550 pWdaParams->wdaMsgParam = NULL;
2551 pWdaParams->pWdaContext = pWDA;
2552
Jeff Johnson295189b2012-06-20 16:38:30 -07002553 /* call WDI stop */
2554 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002555 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
2556
Jeff Johnson295189b2012-06-20 16:38:30 -07002557 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
2558 {
2559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2560 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002561 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2562 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002563 status = VOS_STATUS_E_FAILURE;
2564 }
Leo Chang9d76f622013-08-23 16:34:52 -07002565
2566 /* FTM Driver stop procedure should be synced.
2567 * Stop and Close will happen on same context */
2568 if (eDRIVER_TYPE_MFG == pWDA->driverMode)
2569 {
2570 status = vos_wait_single_event(&pWDA->ftmStopDoneEvent,
2571 WDI_RESPONSE_TIMEOUT);
2572 if (status != VOS_STATUS_SUCCESS)
2573 {
2574 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2575 "%s: FTM Stop Timepoout", __func__);
2576 VOS_ASSERT(0);
Leo Chang9d76f622013-08-23 16:34:52 -07002577 }
c_hpothu0d36bc42014-07-03 17:43:45 +05302578 vos_event_destroy(&pWDA->ftmStopDoneEvent);
Leo Chang9d76f622013-08-23 16:34:52 -07002579 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002580 return status;
2581}
Jeff Johnson295189b2012-06-20 16:38:30 -07002582/*
2583 * FUNCTION: WDA_close
2584 * call WDI_close and free the WDA context
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302585 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002586VOS_STATUS WDA_close(v_PVOID_t pVosContext)
2587{
Jeff Johnson43971f52012-07-17 12:26:56 -07002588 VOS_STATUS status = VOS_STATUS_SUCCESS;
2589 WDI_Status wstatus;
2590 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07002591 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07002592 if (NULL == wdaContext)
2593 {
2594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002595 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002596 return VOS_STATUS_E_FAILURE;
2597 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002598 if((WDA_INIT_STATE != wdaContext->wdaState) &&
2599 (WDA_STOP_STATE != wdaContext->wdaState))
2600 {
2601 VOS_ASSERT(0);
2602 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002603 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07002604 wstatus = WDI_Close();
2605 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07002606 {
2607 status = VOS_STATUS_E_FAILURE;
2608 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002609 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002610 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07002611 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
2612 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002613 {
2614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002615 "WDI Sync Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002616 status = VOS_STATUS_E_FAILURE;
2617 }
2618
Jeff Johnson43971f52012-07-17 12:26:56 -07002619 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002620 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002621 {
2622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002623 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002624 status = VOS_STATUS_E_FAILURE;
2625 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002626 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002627 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002628 {
2629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002630 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002631 status = VOS_STATUS_E_FAILURE;
2632 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002633 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07002634 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002635 {
2636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002637 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002638 status = VOS_STATUS_E_FAILURE;
2639 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002640 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07002641 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07002642 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07002643 {
2644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2645 "error in WDA close " );
2646 status = VOS_STATUS_E_FAILURE;
2647 }
2648 return status;
2649}
Jeff Johnson295189b2012-06-20 16:38:30 -07002650/*
2651 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
2652 * returns 1 if the compiled version is greater than or equal to the input version
2653 */
2654
2655uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2656{
2657 VOS_STATUS status = VOS_STATUS_SUCCESS;
2658 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2659 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002660 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002661 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
2662 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
2663 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
2664 (compiledVersion.revision >= revision)))
2665 return 1;
2666 else
2667 return 0;
2668}
Jeff Johnson295189b2012-06-20 16:38:30 -07002669/*
2670 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
2671 * returns 1 if the compiled version is greater than or equal to the input version
2672 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002673uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2674{
2675 VOS_STATUS status = VOS_STATUS_SUCCESS;
2676 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2677 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002678 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002679 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
2680 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
2681 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
2682 (reportedVersion.revision >= revision)))
2683 return 1;
2684 else
2685 return 0;
2686}
Jeff Johnson295189b2012-06-20 16:38:30 -07002687/*
2688 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
2689 * Returns the version of the WCNSS WLAN API with which the HOST
2690 * device driver was compiled
2691 */
2692VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
2693 tSirVersionType *pVersion)
2694{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302695 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002696 if ((NULL == pvosGCtx) || (NULL == pVersion))
2697 {
2698 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002699 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002700 VOS_ASSERT(0);
2701 return VOS_STATUS_E_FAILURE;
2702 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002703 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2704 if (NULL == pWDA )
2705 {
2706 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002707 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002708 VOS_ASSERT(0);
2709 return VOS_STATUS_E_FAILURE;
2710 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002711 *pVersion = pWDA->wcnssWlanCompiledVersion;
2712 return VOS_STATUS_SUCCESS;
2713}
Jeff Johnson295189b2012-06-20 16:38:30 -07002714/*
2715 * FUNCTION: WDA_GetWcnssWlanReportedVersion
2716 * Returns the version of the WCNSS WLAN API with which the WCNSS
2717 * device driver was compiled
2718 */
2719VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
2720 tSirVersionType *pVersion)
2721{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302722 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002723 if ((NULL == pvosGCtx) || (NULL == pVersion))
2724 {
2725 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002726 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002727 VOS_ASSERT(0);
2728 return VOS_STATUS_E_FAILURE;
2729 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002730 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2731 if (NULL == pWDA )
2732 {
2733 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002734 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002735 VOS_ASSERT(0);
2736 return VOS_STATUS_E_FAILURE;
2737 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002738 *pVersion = pWDA->wcnssWlanReportedVersion;
2739 return VOS_STATUS_SUCCESS;
2740}
Jeff Johnson295189b2012-06-20 16:38:30 -07002741/*
2742 * FUNCTION: WDA_GetWcnssSoftwareVersion
2743 * Returns the WCNSS Software version string
2744 */
2745VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
2746 tANI_U8 *pVersion,
2747 tANI_U32 versionBufferSize)
2748{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302749 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002750 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002751 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002752 if ((NULL == pvosGCtx) || (NULL == pVersion))
2753 {
2754 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002755 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002756 VOS_ASSERT(0);
2757 return VOS_STATUS_E_FAILURE;
2758 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002759 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2760 if (NULL == pWDA )
2761 {
2762 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002763 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002764 VOS_ASSERT(0);
2765 return VOS_STATUS_E_FAILURE;
2766 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002767 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
2768 return VOS_STATUS_SUCCESS;
2769}
Jeff Johnson295189b2012-06-20 16:38:30 -07002770/*
2771 * FUNCTION: WDA_GetWcnssHardwareVersion
2772 * Returns the WCNSS Hardware version string
2773 */
2774VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
2775 tANI_U8 *pVersion,
2776 tANI_U32 versionBufferSize)
2777{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302778 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002779 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002780 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002781 if ((NULL == pvosGCtx) || (NULL == pVersion))
2782 {
2783 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002784 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002785 VOS_ASSERT(0);
2786 return VOS_STATUS_E_FAILURE;
2787 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002788 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2789 if (NULL == pWDA )
2790 {
2791 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002792 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002793 VOS_ASSERT(0);
2794 return VOS_STATUS_E_FAILURE;
2795 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002796 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
2797 return VOS_STATUS_SUCCESS;
2798}
Jeff Johnson295189b2012-06-20 16:38:30 -07002799/*
2800 * FUNCTION: WDA_WniCfgDnld
2801 * Trigger CFG Download
2802 */
2803VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
2804{
2805 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302806 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnsonab81a082013-04-03 16:00:31 -07002807
Jeff Johnson295189b2012-06-20 16:38:30 -07002808 if (NULL == pMac )
2809 {
2810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002811 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002812 VOS_ASSERT(0);
2813 return VOS_STATUS_E_FAILURE;
2814 }
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302815 processCfgDownloadReq(pMac);
Jeff Johnson295189b2012-06-20 16:38:30 -07002816 return vosStatus;
2817}
Jeff Johnson295189b2012-06-20 16:38:30 -07002818/* -----------------------------------------------------------------
2819 * WDI interface
2820 * -----------------------------------------------------------------
2821 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002822/*
2823 * FUNCTION: WDA_suspendDataTxCallback
2824 * call back function called from TL after suspend Transmission
2825 */
2826VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
2827 v_U8_t* ucSTAId,
2828 VOS_STATUS vosStatus)
2829{
2830 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07002831 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002832 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002833 if (NULL == pWDA )
2834 {
2835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002836 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002837 VOS_ASSERT(0);
2838 return VOS_STATUS_E_FAILURE;
2839 }
2840 if(VOS_IS_STATUS_SUCCESS(vosStatus))
2841 {
2842 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
2843 }
2844 else
2845 {
2846 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
2847 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002848 /* Trigger the event to bring the WDA TL suspend function to come
2849 * out of wait*/
2850 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
2851 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
2852 {
2853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002854 "NEW VOS Event Set failed - status = %d", vosStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07002855 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002856 /* If TL suspended had timedout before this callback was called, resume back
2857 * TL.*/
2858 if (pWDA->txSuspendTimedOut)
2859 {
2860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002861 "Late TLSuspendCallback, resuming TL back again");
Jeff Johnson295189b2012-06-20 16:38:30 -07002862 WDA_ResumeDataTx(pWDA);
2863 pWDA->txSuspendTimedOut = FALSE;
2864 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002865 return VOS_STATUS_SUCCESS;
2866}
Jeff Johnson295189b2012-06-20 16:38:30 -07002867/*
2868 * FUNCTION: WDA_suspendDataTx
2869 * Update TL to suspend the data Transmission
2870 */
2871VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
2872{
2873 VOS_STATUS status = VOS_STATUS_E_FAILURE;
2874 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002875
2876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002877 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002878 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002879 if (pWDA->txSuspendTimedOut)
2880 {
2881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002882 "TL suspend timedout previously, CB not called yet");
Jeff Johnson295189b2012-06-20 16:38:30 -07002883 return status;
2884 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002885 /* Reset the event to be not signalled */
2886 status = vos_event_reset(&pWDA->suspendDataTxEvent);
2887 if(!VOS_IS_STATUS_SUCCESS(status))
2888 {
2889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002890 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002891 return VOS_STATUS_E_FAILURE;
2892 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002893 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07002894 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07002895 WDA_SuspendDataTxCallback);
2896 if(status != VOS_STATUS_SUCCESS)
2897 {
2898 return status;
2899 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002900 /* Wait for the event to be set by the TL, to get the response of
2901 * suspending the TX queues, this event should be set by the Callback
2902 * function called by TL*/
2903 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2904 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2905 if(!VOS_IS_STATUS_SUCCESS(status))
2906 {
2907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2908 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002909 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002910 /* Set this flag to true when TL suspend times out, so that when TL
2911 * suspend eventually happens and calls the callback, TL can be resumed
2912 * right away by looking at this flag when true.*/
2913 pWDA->txSuspendTimedOut = TRUE;
2914 }
2915 else
2916 {
2917 pWDA->txSuspendTimedOut = FALSE;
2918 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002919 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2920 {
2921 status = VOS_STATUS_SUCCESS;
2922 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002923 return status;
2924}
Jeff Johnson295189b2012-06-20 16:38:30 -07002925/*
2926 * FUNCTION: WDA_resumeDataTx
2927 * Update TL to resume the data Transmission
2928 */
2929VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
2930{
2931 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07002932
2933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002934 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07002935
2936 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07002937 return status;
2938}
Jeff Johnson295189b2012-06-20 16:38:30 -07002939/*
2940 * FUNCTION: WDA_InitScanReqCallback
2941 * Trigger Init SCAN callback
2942 */
2943void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2944{
2945 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2946 tWDA_CbContext *pWDA;
2947 tInitScanParams *pWDA_ScanParam ;
2948 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002950 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002951 if(NULL == pWdaParams)
2952 {
2953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002954 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002955 VOS_ASSERT(0) ;
2956 return ;
2957 }
2958 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2959 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002960 if(NULL == pWDA_ScanParam)
2961 {
2962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002963 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002964 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002965 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2966 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002967 return ;
2968 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002969 if(WDI_STATUS_SUCCESS != wdiStatus)
2970 {
2971 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002972 if(VOS_STATUS_SUCCESS != status)
2973 {
2974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002975 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002976 }
2977 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002978 /* free WDI command buffer */
2979 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002980 vos_mem_free(pWdaParams) ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302981
2982
Jeff Johnson295189b2012-06-20 16:38:30 -07002983 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002984 /* without converting the Status to Failure or Success Just
2985 pass the same status to lim */
2986 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002987 /* send SCAN RSP message back to PE */
2988 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002989 return ;
2990}
2991
2992/*
2993 * FUNCTION: WDA_ProcessInitScanReq
2994 * Trigger Init SCAN in DAL
2995 */
2996VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2997 tInitScanParams *initScanParams)
2998{
2999 WDI_Status status = WDI_STATUS_SUCCESS ;
3000 WDI_InitScanReqParamsType *wdiInitScanParam =
3001 (WDI_InitScanReqParamsType *)vos_mem_malloc(
3002 sizeof(WDI_InitScanReqParamsType)) ;
3003 tWDA_ReqParams *pWdaParams;
3004 tANI_U8 i = 0;
3005
3006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003007 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003008 if(NULL == wdiInitScanParam)
3009 {
3010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003011 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003012 VOS_ASSERT(0);
3013 return VOS_STATUS_E_NOMEM;
3014 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003015 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3016 if(NULL == pWdaParams)
3017 {
3018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003019 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003020 VOS_ASSERT(0);
3021 vos_mem_free(wdiInitScanParam);
3022 return VOS_STATUS_E_NOMEM;
3023 }
3024
3025 /* Copy init Scan params to WDI structure */
3026 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
3027 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
3028 sizeof(tSirMacAddr)) ;
3029 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
3030 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
3031 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003032 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
3033 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07003034 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
3035 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003036 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
3037 {
3038 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
3039 initScanParams->scanEntry.bssIdx[i] ;
3040 }
3041
3042 /* if Frame length, copy macMgmtHdr or WDI structure */
3043 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
3044 {
3045 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
3046 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
3047 }
3048 wdiInitScanParam->wdiReqStatusCB = NULL ;
3049
Jeff Johnson295189b2012-06-20 16:38:30 -07003050 /* Store Init Req pointer, as this will be used for response */
3051 pWdaParams->pWdaContext = pWDA;
3052 pWdaParams->wdaMsgParam = initScanParams;
3053 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003054 /* first try to suspend TX */
3055 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003056 if(WDI_STATUS_SUCCESS != status)
3057 {
3058 goto handleWdiFailure;
3059 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003060 /* call DAL API to pass init scan request to DAL */
3061 status = WDI_InitScanReq(wdiInitScanParam,
3062 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003063 if(IS_WDI_STATUS_FAILURE(status))
3064 {
3065 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3066 "error in WDA Init Scan, Resume Tx " );
3067 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003068 VOS_ASSERT(0) ;
3069
3070 goto handleWdiFailure;
3071 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003072 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003073handleWdiFailure:
3074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3075 "Failure in WDI Api, free all the memory " );
3076 /* free WDI command buffer */
3077 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3078 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003079 /* send Failure to PE */
3080 initScanParams->status = eSIR_FAILURE ;
3081 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003082 return CONVERT_WDI2VOS_STATUS(status) ;
3083}
3084
Jeff Johnson295189b2012-06-20 16:38:30 -07003085/*
3086 * FUNCTION: WDA_StartScanReqCallback
3087 * send Start SCAN RSP back to PE
3088 */
3089void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
3090 void* pUserData)
3091{
3092 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3093 tWDA_CbContext *pWDA;
3094 tStartScanParams *pWDA_ScanParam;
3095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003096 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003097 if(NULL == pWdaParams)
3098 {
3099 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003100 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003101 VOS_ASSERT(0) ;
3102 return ;
3103 }
3104 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3105 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003106 if(NULL == pWDA_ScanParam)
3107 {
3108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003109 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003110 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003111 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003112 return ;
3113 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003114 if(NULL == pWdaParams->wdaWdiApiMsgParam)
3115 {
3116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003117 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003118 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003119 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003120 return ;
3121 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003122 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3123 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003124
Jeff Johnson295189b2012-06-20 16:38:30 -07003125
3126 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003127 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003128 /* send SCAN RSP message back to PE */
3129 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003130 return ;
3131}
3132
Jeff Johnson295189b2012-06-20 16:38:30 -07003133/*
3134 * FUNCTION: WDA_ProcessStartScanReq
3135 * Trigger start SCAN in WDI
3136 */
3137VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
3138 tStartScanParams *startScanParams)
3139{
3140 WDI_Status status = WDI_STATUS_SUCCESS;
3141 WDI_StartScanReqParamsType *wdiStartScanParams =
3142 (WDI_StartScanReqParamsType *)vos_mem_malloc(
3143 sizeof(WDI_StartScanReqParamsType)) ;
3144 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003146 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003147 if(NULL == wdiStartScanParams)
3148 {
3149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003150 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003151 VOS_ASSERT(0);
3152 return VOS_STATUS_E_NOMEM;
3153 }
3154 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3155 if(NULL == pWdaParams)
3156 {
3157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003158 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003159 VOS_ASSERT(0);
3160 vos_mem_free(wdiStartScanParams);
3161 return VOS_STATUS_E_NOMEM;
3162 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003163 /* Copy init Scan params to WDI structure */
3164 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
3165 wdiStartScanParams->wdiReqStatusCB = NULL ;
3166
Jeff Johnson295189b2012-06-20 16:38:30 -07003167 /* Store Init Req pointer, as this will be used for response */
3168 /* store Params pass it to WDI */
3169 pWdaParams->pWdaContext = pWDA;
3170 pWdaParams->wdaMsgParam = startScanParams;
3171 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003172 /* call DAL API to pass init scan request to DAL */
3173 status = WDI_StartScanReq(wdiStartScanParams,
3174 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003175 /* failure returned by WDI API */
3176 if(IS_WDI_STATUS_FAILURE(status))
3177 {
3178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3179 "Failure in Start Scan WDI API, free all the memory "
3180 "It should be due to previous abort scan." );
3181 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3182 vos_mem_free(pWdaParams) ;
3183 startScanParams->status = eSIR_FAILURE ;
3184 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
3185 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003186 return CONVERT_WDI2VOS_STATUS(status) ;
3187}
Jeff Johnson295189b2012-06-20 16:38:30 -07003188/*
3189 * FUNCTION: WDA_EndScanReqCallback
3190 * END SCAN callback
3191 */
3192void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
3193{
3194 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3195 tWDA_CbContext *pWDA;
3196 tEndScanParams *endScanParam;
3197 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003198 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003199 if(NULL == pWdaParams)
3200 {
3201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003202 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003203 VOS_ASSERT(0) ;
3204 return ;
3205 }
3206 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3207 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003208 if(NULL == endScanParam)
3209 {
3210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003211 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003212 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003213 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3214 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003215 return ;
3216 }
3217
3218 /* Free WDI command buffer */
3219 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3220 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003221 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003222 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003223 /* send response back to PE */
3224 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
3225 return ;
3226}
3227
Jeff Johnson295189b2012-06-20 16:38:30 -07003228/*
3229 * FUNCTION: WDA_ProcessEndScanReq
3230 * Trigger END SCAN in WDI
3231 */
3232VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
3233 tEndScanParams *endScanParams)
3234{
3235 WDI_Status status = WDI_STATUS_SUCCESS;
3236 WDI_EndScanReqParamsType *wdiEndScanParams =
3237 (WDI_EndScanReqParamsType *)vos_mem_malloc(
3238 sizeof(WDI_EndScanReqParamsType)) ;
3239 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003241 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003242 if(NULL == wdiEndScanParams)
3243 {
3244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003245 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003246 VOS_ASSERT(0);
3247 return VOS_STATUS_E_NOMEM;
3248 }
3249 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3250 if(NULL == pWdaParams)
3251 {
3252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003253 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003254 VOS_ASSERT(0);
3255 vos_mem_free(wdiEndScanParams);
3256 return VOS_STATUS_E_NOMEM;
3257 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003258 /* Copy init Scan params to WDI structure */
3259 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
3260 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003261 /* Store Init Req pointer, as this will be used for response */
3262 /* store Params pass it to WDI */
3263 pWdaParams->pWdaContext = pWDA;
3264 pWdaParams->wdaMsgParam = endScanParams;
3265 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003266 /* call DAL API to pass init scan request to DAL */
3267 status = WDI_EndScanReq(wdiEndScanParams,
3268 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003269 if(IS_WDI_STATUS_FAILURE(status))
3270 {
3271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3272 "Failure in End Scan WDI API, free all the memory "
3273 "It should be due to previous abort scan." );
3274 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3275 vos_mem_free(pWdaParams) ;
3276 endScanParams->status = eSIR_FAILURE ;
3277 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
3278 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003279 return CONVERT_WDI2VOS_STATUS(status) ;
3280}
Jeff Johnson295189b2012-06-20 16:38:30 -07003281/*
3282 * FUNCTION: WDA_FinishScanReqCallback
3283 * Trigger Finish SCAN callback
3284 */
3285void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
3286{
3287 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3288 tWDA_CbContext *pWDA;
3289 tFinishScanParams *finishScanParam;
3290 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003292 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003293 if(NULL == pWdaParams)
3294 {
3295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003296 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003297 VOS_ASSERT(0) ;
3298 return ;
3299 }
3300
3301 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3302 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003303 if(NULL == finishScanParam)
3304 {
3305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003306 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003307 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003308 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3309 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003310 return ;
3311 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003312 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3313 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003314 /*
3315 * Now Resume TX, if we reached here means, TX is already suspended, we
3316 * have to resume it unconditionaly
3317 */
3318 status = WDA_ResumeDataTx(pWDA) ;
3319
3320 if(VOS_STATUS_SUCCESS != status)
3321 {
3322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003323 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003324 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003325 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003326 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
3327 return ;
3328}
Jeff Johnson295189b2012-06-20 16:38:30 -07003329/*
3330 * FUNCTION: WDA_ProcessFinshScanReq
3331 * Trigger Finish SCAN in WDI
3332 */
3333VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
3334 tFinishScanParams *finishScanParams)
3335{
3336 WDI_Status status = WDI_STATUS_SUCCESS;
3337 WDI_FinishScanReqParamsType *wdiFinishScanParams =
3338 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
3339 sizeof(WDI_FinishScanReqParamsType)) ;
3340 tWDA_ReqParams *pWdaParams ;
3341 tANI_U8 i = 0;
3342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003343 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003344 if(NULL == wdiFinishScanParams)
3345 {
3346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003347 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003348 VOS_ASSERT(0);
3349 return VOS_STATUS_E_NOMEM;
3350 }
3351 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3352 if(NULL == pWdaParams)
3353 {
3354 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003355 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003356 VOS_ASSERT(0);
3357 vos_mem_free(wdiFinishScanParams);
3358 return VOS_STATUS_E_NOMEM;
3359 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003360 /* Copy init Scan params to WDI structure */
3361 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
3362 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
3363 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003364 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
3365 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
3366 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
3367 finishScanParams->frameLength ;
3368 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
3369 finishScanParams->currentOperChannel ;
3370 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
3371 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
3372 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003373 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
3374 {
3375 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
3376 finishScanParams->scanEntry.bssIdx[i] ;
3377 }
3378
3379
Jeff Johnson295189b2012-06-20 16:38:30 -07003380 /* if Frame length, copy macMgmtHdr ro WDI structure */
3381 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
3382 {
3383 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
3384 &finishScanParams->macMgmtHdr,
3385 sizeof(WDI_MacMgmtHdr)) ;
3386 }
3387 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003388 /* Store Init Req pointer, as this will be used for response */
3389 /* store Params pass it to WDI */
3390 pWdaParams->pWdaContext = pWDA;
3391 pWdaParams->wdaMsgParam = finishScanParams;
3392 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003393 /* call DAL API to pass init scan request to DAL */
3394 status = WDI_FinishScanReq(wdiFinishScanParams,
3395 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003396
Jeff Johnson295189b2012-06-20 16:38:30 -07003397
3398 /*
3399 * WDI API returns failure..
3400 */
3401 if(IS_WDI_STATUS_FAILURE( status))
3402 {
3403 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3404 "Failure in Finish Scan WDI API, free all the memory " );
3405 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3406 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003407 finishScanParams->status = eSIR_FAILURE ;
3408 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
3409 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003410 return CONVERT_WDI2VOS_STATUS(status) ;
3411}
Jeff Johnson295189b2012-06-20 16:38:30 -07003412/*---------------------------------------------------------------------
3413 * ASSOC API's
3414 *---------------------------------------------------------------------
3415 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003416/*
Sachin Ahuja935eda782014-07-30 14:57:41 +05303417 * FUNCTION: WDA_JoinRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07003418 * Trigger Init SCAN callback
3419 */
Sachin Ahuja935eda782014-07-30 14:57:41 +05303420void WDA_JoinRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07003421{
3422 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3423 tWDA_CbContext *pWDA;
3424 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003426 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003427 if(NULL == pWdaParams)
3428 {
3429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003430 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003431 VOS_ASSERT(0) ;
3432 return ;
3433 }
3434 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3435 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003436 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3437 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003438 /* reset macBSSID */
3439 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07003440 /* reset macSTASelf */
3441 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003442 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003443 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003444 return ;
3445}
Sachin Ahuja935eda782014-07-30 14:57:41 +05303446
3447/*
3448 * FUNCTION: WDA_JoinReqCallback
3449 * Free memory and send SWITCH CHANNEL RSP back to PE.
3450 * Invoked when Enter JOIN REQ failed in WDI and no RSP callback is generated.
3451 */
3452void WDA_JoinReqCallback(WDI_Status wdiStatus, void* pUserData)
3453{
3454 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3455 tWDA_CbContext *pWDA;
3456 tSwitchChannelParams *joinReqParam;
3457
3458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3459 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
3460
3461 if(NULL == pWdaParams)
3462 {
3463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3464 "%s: pWdaParams received NULL", __func__);
3465 VOS_ASSERT(0);
3466 return;
3467 }
3468
3469 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3470 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3471 joinReqParam->status = wdiStatus;
3472
3473 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3474 {
3475 /* reset macBSSID */
3476 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
3477 /* reset macSTASelf */
3478 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
3479
3480 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3481 vos_mem_free(pWdaParams);
3482 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
3483 }
3484
3485 return;
3486}
3487
Jeff Johnson295189b2012-06-20 16:38:30 -07003488/*
3489 * FUNCTION: WDA_ProcessJoinReq
3490 * Trigger Join REQ in WDI
3491 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003492VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
3493 tSwitchChannelParams* joinReqParam)
3494{
3495 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003496 WDI_JoinReqParamsType *wdiJoinReqParam =
3497 (WDI_JoinReqParamsType *)vos_mem_malloc(
3498 sizeof(WDI_JoinReqParamsType)) ;
3499 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003501 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003502 if(NULL == wdiJoinReqParam)
3503 {
3504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003505 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003506 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003507 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003508 return VOS_STATUS_E_NOMEM;
3509 }
3510 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3511 if(NULL == pWdaParams)
3512 {
3513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003514 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003515 VOS_ASSERT(0);
3516 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003517 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003518 return VOS_STATUS_E_NOMEM;
3519 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003520
3521 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
3522 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
3523 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
3524 {
3525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3526 "%s: received join request when BSSID or self-STA is NULL "
3527 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003528 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003529 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
3530 VOS_ASSERT(0);
3531 vos_mem_free(wdiJoinReqParam);
3532 vos_mem_free(pWdaParams);
3533 joinReqParam->status = eSIR_FAILURE ;
3534 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3535 return VOS_STATUS_E_INVAL;
3536 }
3537
Jeff Johnson295189b2012-06-20 16:38:30 -07003538 /* copy the BSSID for pWDA */
3539 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
3540 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003541 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
3542 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003543 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
3544 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07003545#ifdef WLAN_FEATURE_VOWIFI
3546 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
3547 joinReqParam->maxTxPower ;
3548#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003549 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
3550 joinReqParam->localPowerConstraint ;
3551#endif
3552 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
3553 joinReqParam->secondaryChannelOffset ;
3554 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
3555
Sachin Ahuja935eda782014-07-30 14:57:41 +05303556 wdiJoinReqParam->wdiReqStatusCB = WDA_JoinReqCallback;
3557 wdiJoinReqParam->pUserData = pWdaParams;
3558
Jeff Johnson295189b2012-06-20 16:38:30 -07003559 /* Store Init Req pointer, as this will be used for response */
3560 /* store Params pass it to WDI */
3561 pWdaParams->pWdaContext = pWDA;
3562 pWdaParams->wdaMsgParam = joinReqParam;
3563 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003564 status = WDI_JoinReq(wdiJoinReqParam,
Sachin Ahuja935eda782014-07-30 14:57:41 +05303565 (WDI_JoinRspCb )WDA_JoinRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003566 if(IS_WDI_STATUS_FAILURE(status))
3567 {
3568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3569 "Failure in Join WDI API, free all the memory " );
3570 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3571 vos_mem_free(pWdaParams) ;
3572 joinReqParam->status = eSIR_FAILURE ;
3573 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3574 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003575 return CONVERT_WDI2VOS_STATUS(status) ;
3576}
Jeff Johnson295189b2012-06-20 16:38:30 -07003577/*
3578 * FUNCTION: WDA_SwitchChannelReqCallback
3579 * send Switch channel RSP back to PE
3580 */
3581void WDA_SwitchChannelReqCallback(
3582 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
3583{
3584 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3585 tWDA_CbContext *pWDA;
3586 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003587 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003588 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003589 if(NULL == pWdaParams)
3590 {
3591 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003592 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003593 VOS_ASSERT(0) ;
3594 return ;
3595 }
3596 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3597 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3598
3599#ifdef WLAN_FEATURE_VOWIFI
3600 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
3601#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003602 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3603 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003604 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003605 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003606 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003607 return ;
3608}
Jeff Johnson295189b2012-06-20 16:38:30 -07003609/*
3610 * FUNCTION: WDA_ProcessChannelSwitchReq
3611 * Request to WDI to switch channel REQ params.
3612 */
3613VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
3614 tSwitchChannelParams *pSwitchChanParams)
3615{
3616 WDI_Status status = WDI_STATUS_SUCCESS ;
3617 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
3618 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
3619 sizeof(WDI_SwitchChReqParamsType)) ;
3620 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003622 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003623 if(NULL == wdiSwitchChanParam)
3624 {
3625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003626 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003627 VOS_ASSERT(0);
3628 return VOS_STATUS_E_NOMEM;
3629 }
3630 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3631 if(NULL == pWdaParams)
3632 {
3633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003634 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003635 VOS_ASSERT(0);
3636 vos_mem_free(wdiSwitchChanParam);
3637 return VOS_STATUS_E_NOMEM;
3638 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003639 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
3640#ifndef WLAN_FEATURE_VOWIFI
3641 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3642 pSwitchChanParams->localPowerConstraint;
3643#endif
3644 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3645 pSwitchChanParams->secondaryChannelOffset;
3646 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003647 /* Store req pointer, as this will be used for response */
3648 /* store Params pass it to WDI */
3649 pWdaParams->pWdaContext = pWDA;
3650 pWdaParams->wdaMsgParam = pSwitchChanParams;
3651 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003652#ifdef WLAN_FEATURE_VOWIFI
3653 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
3654 = pSwitchChanParams->maxTxPower;
3655 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3656 pSwitchChanParams ->selfStaMacAddr,
3657 sizeof(tSirMacAddr));
3658#endif
3659 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3660 pSwitchChanParams->bssId,
3661 sizeof(tSirMacAddr));
3662
3663 status = WDI_SwitchChReq(wdiSwitchChanParam,
3664 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003665 if(IS_WDI_STATUS_FAILURE(status))
3666 {
3667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3668 "Failure in process channel switch Req WDI API, free all the memory " );
3669 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3670 vos_mem_free(pWdaParams) ;
3671 pSwitchChanParams->status = eSIR_FAILURE ;
3672 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
3673 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003674 return CONVERT_WDI2VOS_STATUS(status) ;
3675}
Kalikinkar dhara1e83b772014-02-06 12:59:22 -08003676
3677/*
3678 * FUNCTION: WDA_SwitchChannelReqCallback_V1
3679 * send Switch channel RSP back to PE
3680 */
3681void WDA_SwitchChannelReqCallback_V1(
3682 WDI_SwitchChRspParamsType_V1 *wdiSwitchChanRsp,
3683 void* pUserData)
3684{
3685 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3686 tWDA_CbContext *pWDA;
3687 tSwitchChannelParams *pSwitchChanParams;
3688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3689 "<------ %s " ,__func__);
3690
3691 if (NULL == pWdaParams)
3692 {
3693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3694 "%s: pWdaParams received NULL", __func__);
3695 VOS_ASSERT(0);
3696 return ;
3697 }
3698 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3699 pSwitchChanParams =
3700 (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3701 pSwitchChanParams->channelSwitchSrc =
3702 wdiSwitchChanRsp->channelSwitchSrc;
3703#ifdef WLAN_FEATURE_VOWIFI
3704 pSwitchChanParams->txMgmtPower =
3705 wdiSwitchChanRsp->ucTxMgmtPower;
3706#endif
3707 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3708 vos_mem_free(pWdaParams);
3709 pSwitchChanParams->status =
3710 wdiSwitchChanRsp->wdiStatus ;
3711 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3712 (void *)pSwitchChanParams , 0);
3713 return;
3714}
3715
3716/*
3717 * FUNCTION: WDA_ProcessChannelSwitchReq_V1
3718 * Request to WDI to switch channel REQ params.
3719 */
3720VOS_STATUS WDA_ProcessChannelSwitchReq_V1(tWDA_CbContext *pWDA,
3721 tSwitchChannelParams *pSwitchChanParams)
3722{
3723 WDI_Status status = WDI_STATUS_SUCCESS ;
3724 WDI_SwitchChReqParamsType_V1 *wdiSwitchChanParam =
3725 (WDI_SwitchChReqParamsType_V1 *)vos_mem_malloc(
3726 sizeof(WDI_SwitchChReqParamsType_V1)) ;
3727 tWDA_ReqParams *pWdaParams ;
3728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3729 "------> %s " ,__func__);
3730 if (NULL == wdiSwitchChanParam)
3731 {
3732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3733 "%s: VOS MEM Alloc Failure", __func__);
3734 VOS_ASSERT(0);
3735 return VOS_STATUS_E_NOMEM;
3736 }
3737 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3738 if (NULL == pWdaParams)
3739 {
3740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3741 "%s: VOS MEM Alloc Failure", __func__);
3742 VOS_ASSERT(0);
3743 vos_mem_free(wdiSwitchChanParam);
3744 return VOS_STATUS_E_NOMEM;
3745 }
3746 wdiSwitchChanParam->wdiChInfo.channelSwitchSrc =
3747 pSwitchChanParams->channelSwitchSrc;
3748
3749 wdiSwitchChanParam->wdiChInfo.ucChannel =
3750 pSwitchChanParams->channelNumber;
3751#ifndef WLAN_FEATURE_VOWIFI
3752 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3753 pSwitchChanParams->localPowerConstraint;
3754#endif
3755 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3756 pSwitchChanParams->secondaryChannelOffset;
3757 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
3758 /* Store req pointer, as this will be used for response */
3759 /* store Params pass it to WDI */
3760 pWdaParams->pWdaContext = pWDA;
3761 pWdaParams->wdaMsgParam = pSwitchChanParams;
3762 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
3763#ifdef WLAN_FEATURE_VOWIFI
3764 wdiSwitchChanParam->wdiChInfo.cMaxTxPower =
3765 pSwitchChanParams->maxTxPower;
3766 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3767 pSwitchChanParams ->selfStaMacAddr,
3768 sizeof(tSirMacAddr));
3769#endif
3770 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3771 pSwitchChanParams->bssId,
3772 sizeof(tSirMacAddr));
3773
3774 status = WDI_SwitchChReq_V1(wdiSwitchChanParam,
3775 (WDI_SwitchChRspCb_V1)WDA_SwitchChannelReqCallback_V1,
3776 pWdaParams);
3777 if (IS_WDI_STATUS_FAILURE(status))
3778 {
3779 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3780 "Failure in process channel switch Req WDI "
3781 "API, free all the memory " );
3782 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3783 vos_mem_free(pWdaParams) ;
3784 pSwitchChanParams->status = eSIR_FAILURE ;
3785 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3786 (void *)pSwitchChanParams, 0) ;
3787 }
3788 return CONVERT_WDI2VOS_STATUS(status) ;
3789}
3790
Jeff Johnson295189b2012-06-20 16:38:30 -07003791/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05303792 * FUNCTION: WDA_ConfigBssRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07003793 * config BSS Req Callback, called by WDI
3794 */
Abhishek Singhf1221ab2015-08-04 16:38:39 +05303795void WDA_ConfigBssRspCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
Jeff Johnson295189b2012-06-20 16:38:30 -07003796 ,void* pUserData)
3797{
3798 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3799 tWDA_CbContext *pWDA;
3800 tAddBssParams *configBssReqParam;
3801 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003803 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003804 if(NULL == pWdaParams)
3805 {
3806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003807 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003808 VOS_ASSERT(0) ;
3809 return ;
3810 }
3811 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3812 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
3813 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003814 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003815 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003816 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
3817 {
3818 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
3819 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003820 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
3821 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
3822 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
3823
3824 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
3825 {
3826 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
3827 {
3828 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
3829 staConfigBssParam->staType = STA_ENTRY_BSSID;
3830 }
3831 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
3832 (staConfigBssParam->staType == STA_ENTRY_SELF))
3833 {
3834 /* This is the 1st add BSS Req for the BTAMP STA */
3835 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3836 staConfigBssParam->staType = STA_ENTRY_BSSID;
3837 }
3838 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3839 (staConfigBssParam->staType == STA_ENTRY_PEER))
3840 {
3841 /* This is the 2nd ADD BSS Request that is sent
3842 * on the BTAMP STA side. The Sta type is
3843 * set to STA_ENTRY_PEER here.*/
3844 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3845 }
3846 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3847 (staConfigBssParam->staType == STA_ENTRY_SELF))
3848 {
3849 /* statype is already set by PE.
3850 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
3851 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
3852 staConfigBssParam->staType = STA_ENTRY_BSSID;
3853 }
3854 else
3855 {
3856 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
3857 staConfigBssParam->staType = STA_ENTRY_PEER;
3858 }
3859 }
3860 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
3861 {
3862 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
3863 staConfigBssParam->staType = STA_ENTRY_SELF;
3864 }
3865 else
3866 {
3867 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3868 "Invalid operation mode specified");
3869 VOS_ASSERT(0);
3870 }
3871
3872 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003873 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003874 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003875 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003876 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
3877 sizeof(tSirMacAddr));
3878 staConfigBssParam->txChannelWidthSet =
3879 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07003880 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
3881 staConfigBssParam->htCapable)
3882 {
3883 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
3884 wdiConfigBssRsp->ucBSSIdx;
3885 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
3886 WDA_VALID_STA_INDEX ;
Abhishek Singh0644e482014-10-06 18:38:23 +05303887 pWDA->wdaStaInfo[staConfigBssParam->staIdx].currentOperChan =
3888 configBssReqParam->currentOperChannel;
Jeff Johnson295189b2012-06-20 16:38:30 -07003889 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003890 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
3891 wdiConfigBssRsp->ucBSSIdx,
3892 wdiConfigBssRsp->ucSTAIdx))
3893 {
3894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003895 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003896 VOS_ASSERT(0) ;
3897 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003898 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
3899 {
3900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003901 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003902 VOS_ASSERT(0) ;
3903 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003904#ifdef WLAN_FEATURE_VOWIFI
3905 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
3906#endif
3907 }
Abhishek Singh837adf22015-10-01 17:37:37 +05303908 else
3909 {
3910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3911 "%s: Failure with status %d", __func__,
3912 wdiConfigBssRsp->wdiStatus);
3913 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
3914 WLAN_LOG_INDICATOR_HOST_DRIVER,
3915 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
3916 FALSE, TRUE);
3917 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05303918 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
3919 sizeof(WDI_ConfigBSSReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07003920 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3921 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003922 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003923 return ;
3924}
Jeff Johnson295189b2012-06-20 16:38:30 -07003925/*
3926 * FUNCTION: WDA_UpdateEdcaParamsForAC
3927 * Update WDI EDCA params with PE edca params
3928 */
3929void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
3930 WDI_EdcaParamRecord *wdiEdcaParam,
3931 tSirMacEdcaParamRecord *macEdcaParam)
3932{
3933 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
3934 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
3935 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
3936 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
3937 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
3938 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
3939}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05303940void WDA_ConfigBssReqCallback(WDI_Status wdiStatus,
3941 void* pUserData)
3942{
3943 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3944 tWDA_CbContext *pWDA;
3945 tAddBssParams *addBssParams;
3946
3947 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3948 "<------ %s, wdiStatus: %d",
3949 __func__, wdiStatus);
3950
3951 if (NULL == pWdaParams)
3952 {
3953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3954 "%s: Invalid pWdaParams pointer", __func__);
3955 VOS_ASSERT(0);
3956 return;
3957 }
3958
3959 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3960 addBssParams = (tAddBssParams *)pWdaParams->wdaMsgParam;
3961
3962 addBssParams->status = wdiStatus;
3963
3964 if (IS_WDI_STATUS_FAILURE(wdiStatus))
3965 {
3966 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3967 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05303968 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
3969 WLAN_LOG_INDICATOR_HOST_DRIVER,
3970 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
3971 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05303972 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)addBssParams , 0);
3973 }
3974
3975 return ;
3976}
3977
Jeff Johnson295189b2012-06-20 16:38:30 -07003978/*
3979 * FUNCTION: WDA_ProcessConfigBssReq
3980 * Configure BSS before starting Assoc with AP
3981 */
3982VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
3983 tAddBssParams* configBssReqParam)
3984{
3985 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303986 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003987 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003989 "------> %s " ,__func__);
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303990 if (NULL == configBssReqParam)
3991 {
3992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3993 "%s: configBssReqParam is NULL", __func__);
3994 return VOS_STATUS_E_INVAL;
3995 }
3996
3997 wdiConfigBssReqParam = (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
3998 sizeof(WDI_ConfigBSSReqParamsType)) ;
3999
Jeff Johnson295189b2012-06-20 16:38:30 -07004000 if(NULL == wdiConfigBssReqParam)
4001 {
4002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004003 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004004 VOS_ASSERT(0);
4005 return VOS_STATUS_E_NOMEM;
4006 }
4007 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4008 if(NULL == pWdaParams)
4009 {
4010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004011 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004012 VOS_ASSERT(0);
4013 vos_mem_free(wdiConfigBssReqParam);
4014 return VOS_STATUS_E_NOMEM;
4015 }
Kiran4a17ebe2013-01-31 10:43:43 -08004016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4017 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07004018 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004019 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
4020 configBssReqParam) ;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304021 wdiConfigBssReqParam->wdiReqStatusCB = WDA_ConfigBssReqCallback;
4022 wdiConfigBssReqParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004023 /* Store Init Req pointer, as this will be used for response */
4024 /* store Params pass it to WDI */
4025 pWdaParams->pWdaContext = pWDA;
4026 pWdaParams->wdaMsgParam = configBssReqParam;
4027 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004028 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304029 (WDI_ConfigBSSRspCb )WDA_ConfigBssRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004030 if(IS_WDI_STATUS_FAILURE(status))
4031 {
4032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4033 "Failure in Config BSS WDI API, free all the memory " );
4034 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4035 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004036 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004037 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
4038 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004039 return CONVERT_WDI2VOS_STATUS(status) ;
4040}
Jeff Johnson295189b2012-06-20 16:38:30 -07004041#ifdef ENABLE_HAL_COMBINED_MESSAGES
4042/*
4043 * FUNCTION: WDA_PostAssocReqCallback
4044 * Post ASSOC req callback, send RSP back to PE
4045 */
4046void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
4047 void* pUserData)
4048{
4049 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4050 tPostAssocParams *postAssocReqParam =
4051 (tPostAssocParams *)pWDA->wdaMsgParam ;
4052 /*STA context within the BSS Params*/
4053 tAddStaParams *staPostAssocParam =
4054 &postAssocReqParam->addBssParams.staContext ;
4055 /*STA Params for self STA*/
4056 tAddStaParams *selfStaPostAssocParam =
4057 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004059 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004060 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004061 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004062 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
4063 {
4064 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
4065 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
4066 sizeof(tSirMacAddr)) ;
4067 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
4068 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
4069 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004070 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
4071 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05304072 vos_mem_zero(pWDA->wdaWdiApiMsgParam, sizeof(WDI_PostAssocReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004073 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
4074 pWDA->wdaWdiApiMsgParam = NULL;
4075 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004076 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004077 return ;
4078}
Jeff Johnson295189b2012-06-20 16:38:30 -07004079/*
4080 * FUNCTION: WDA_ProcessPostAssocReq
4081 * Trigger POST ASSOC processing in WDI
4082 */
4083VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
4084 tPostAssocParams *postAssocReqParam)
4085{
Jeff Johnson295189b2012-06-20 16:38:30 -07004086 WDI_Status status = WDI_STATUS_SUCCESS ;
4087
4088 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
4089 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
4090 sizeof(WDI_PostAssocReqParamsType)) ;
4091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004092 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004093
Jeff Johnson295189b2012-06-20 16:38:30 -07004094 if(NULL == wdiPostAssocReqParam)
4095 {
4096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004097 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004098 VOS_ASSERT(0);
4099 return VOS_STATUS_E_NOMEM;
4100 }
4101
4102 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
4103 {
4104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004105 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004106 VOS_ASSERT(0);
4107 return VOS_STATUS_E_FAILURE;
4108 }
4109
Jeff Johnson295189b2012-06-20 16:38:30 -07004110 /* update BSS params into WDI structure */
4111 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
4112 &postAssocReqParam->addBssParams) ;
4113 /* update STA params into WDI structure */
4114 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
4115 &postAssocReqParam->addStaParams) ;
4116
4117 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
4118 postAssocReqParam->addBssParams.highPerformance;
4119 WDA_UpdateEdcaParamsForAC(pWDA,
4120 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
4121 &postAssocReqParam->addBssParams.acbe);
4122 WDA_UpdateEdcaParamsForAC(pWDA,
4123 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
4124 &postAssocReqParam->addBssParams.acbk);
4125 WDA_UpdateEdcaParamsForAC(pWDA,
4126 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
4127 &postAssocReqParam->addBssParams.acvi);
4128 WDA_UpdateEdcaParamsForAC(pWDA,
4129 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
4130 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07004131 /* Store Init Req pointer, as this will be used for response */
4132 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004133 /* store Params pass it to WDI */
4134 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004135 status = WDI_PostAssocReq(wdiPostAssocReqParam,
4136 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004137 if(IS_WDI_STATUS_FAILURE(status))
4138 {
4139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4140 "Failure in Post Assoc WDI API, free all the memory " );
4141 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
4142 pWDA->wdaWdiApiMsgParam = NULL;
4143 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004144 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004145 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
4146 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004147 return CONVERT_WDI2VOS_STATUS(status) ;
4148}
4149#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004150/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304151 * FUNCTION: WDA_AddStaRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004152 * ADD STA req callback, send RSP back to PE
4153 */
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304154void WDA_AddStaRspCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -07004155 void* pUserData)
4156{
4157 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4158 tWDA_CbContext *pWDA;
4159 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004160 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004161 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004162 if(NULL == pWdaParams)
4163 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004165 VOS_ASSERT(0) ;
4166 return ;
4167 }
4168 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4169 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004170 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004171 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004172 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
4173 {
4174 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
4175 /*TODO: UMAC structure doesn't have these fields*/
4176 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
4177 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
4178 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
4179 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
4180 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
4181 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08004182#ifdef FEATURE_WLAN_TDLS
4183 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
4184 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
4185#else
Jeff Johnson295189b2012-06-20 16:38:30 -07004186 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08004187#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004188 {
4189 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
4190 wdiConfigStaRsp->ucBssIdx;
4191 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
4192 WDA_VALID_STA_INDEX ;
Abhishek Singhf08a82b2014-10-07 11:00:42 +05304193 pWDA->wdaStaInfo[addStaReqParam->staIdx].currentOperChan =
4194 addStaReqParam->currentOperChan;
Jeff Johnson295189b2012-06-20 16:38:30 -07004195 }
4196 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
4197 {
4198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004199 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004200 VOS_ASSERT(0) ;
4201 return ;
4202 }
4203 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304204 else
4205 {
4206 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4207 "%s: Failure with status %d", __func__,
4208 wdiConfigStaRsp->wdiStatus);
4209 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4210 WLAN_LOG_INDICATOR_HOST_DRIVER,
4211 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4212 FALSE, TRUE);
4213 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004214 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4215 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004216 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004217 return ;
4218}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304219void WDA_AddStaReqCallback(WDI_Status wdiStatus,
4220 void* pUserData)
4221{
4222 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4223 tWDA_CbContext *pWDA;
4224 tAddStaParams *addStaParams;
4225
4226 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4227 "<------ %s, wdiStatus: %d",
4228 __func__, wdiStatus);
4229
4230 if (NULL == pWdaParams)
4231 {
4232 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4233 "%s: Invalid pWdaParams pointer", __func__);
4234 VOS_ASSERT(0);
4235 return;
4236 }
4237
4238 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4239 addStaParams = (tAddStaParams *)pWdaParams->wdaMsgParam;
4240
4241 addStaParams->status = wdiStatus;
4242
4243 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4244 {
4245 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4246 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304247 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4248 WLAN_LOG_INDICATOR_HOST_DRIVER,
4249 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4250 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304251 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaParams , 0);
4252 }
4253
4254 return ;
4255}
4256
Jeff Johnson295189b2012-06-20 16:38:30 -07004257/*
4258 * FUNCTION: WDA_ConfigStaReq
4259 * Trigger Config STA processing in WDI
4260 */
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304261VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
Jeff Johnson295189b2012-06-20 16:38:30 -07004262 tAddStaParams *addStaReqParam)
4263{
Jeff Johnson295189b2012-06-20 16:38:30 -07004264 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004265 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
4266 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
4267 sizeof(WDI_ConfigSTAReqParamsType)) ;
4268 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004270 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004271 if(NULL == wdiConfigStaReqParam)
4272 {
4273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004274 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004275 VOS_ASSERT(0);
4276 return VOS_STATUS_E_NOMEM;
4277 }
4278 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4279 if(NULL == pWdaParams)
4280 {
4281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004282 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004283 VOS_ASSERT(0);
4284 vos_mem_free(wdiConfigStaReqParam);
4285 return VOS_STATUS_E_NOMEM;
4286 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004287 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004288 /* update STA params into WDI structure */
4289 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
4290 addStaReqParam) ;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304291 wdiConfigStaReqParam->wdiReqStatusCB = WDA_AddStaReqCallback;
4292 wdiConfigStaReqParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004293 /* Store Init Req pointer, as this will be used for response */
4294 /* store Params pass it to WDI */
4295 pWdaParams->pWdaContext = pWDA;
4296 pWdaParams->wdaMsgParam = addStaReqParam;
4297 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304298
Jeff Johnson295189b2012-06-20 16:38:30 -07004299 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304300 (WDI_ConfigSTARspCb )WDA_AddStaRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004301 if(IS_WDI_STATUS_FAILURE(status))
4302 {
4303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4304 "Failure in Config STA WDI API, free all the memory " );
4305 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4306 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004307 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004308 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
4309 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004310 return CONVERT_WDI2VOS_STATUS(status) ;
4311}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304312
Jeff Johnson295189b2012-06-20 16:38:30 -07004313/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304314 * FUNCTION: WDA_DelBSSRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004315 * Dens DEL BSS RSP back to PE
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304316 */
4317void WDA_DelBSSRspCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -07004318 void* pUserData)
4319{
4320 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4321 tWDA_CbContext *pWDA;
4322 tDeleteBssParams *delBssReqParam;
4323 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07004324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004325 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004326 if(NULL == pWdaParams)
4327 {
4328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004329 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004330 VOS_ASSERT(0) ;
4331 return ;
4332 }
4333 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4334 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004335 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004336 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
4337 {
4338 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
4339 sizeof(tSirMacAddr)) ;
4340 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304341 else
4342 {
4343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4344 "%s: Failure with status %d", __func__,
4345 wdiDelBssRsp->wdiStatus);
4346 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4347 WLAN_LOG_INDICATOR_HOST_DRIVER,
4348 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4349 FALSE, TRUE);
4350 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004351 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
4352 {
4353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004354 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004355 VOS_ASSERT(0) ;
4356 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004357 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
4358 {
4359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004360 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004361 VOS_ASSERT(0) ;
4362 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004363 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
4364 {
4365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004366 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004367 VOS_ASSERT(0) ;
4368 }
Mihir Shete2ab1d492014-06-04 14:21:05 +05304369
4370 WLANTL_StartForwarding(staIdx,0,0);
4371
Jeff Johnson295189b2012-06-20 16:38:30 -07004372 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4373 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004374 /* reset the the system role*/
4375 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
4376
4377 /* Reset the BA related information */
4378 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
4379 {
4380 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
4381 {
4382 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
4383 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05304384 pWDA->wdaStaInfo[staIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004385 /* Reset framesTxed counters here */
4386 for(tid = 0; tid < STACFG_MAX_TC; tid++)
4387 {
4388 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
4389 }
4390 }
4391 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304392
Jeff Johnson295189b2012-06-20 16:38:30 -07004393 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004394 return ;
4395}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304396void WDA_DelBSSReqCallback(WDI_Status wdiStatus,
4397 void* pUserData)
4398{
4399 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4400 tWDA_CbContext *pWDA;
4401 tDeleteBssParams *delbssParams;
4402
4403 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4404 "<------ %s, wdiStatus: %d",
4405 __func__, wdiStatus);
4406
4407 if (NULL == pWdaParams)
4408 {
4409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4410 "%s: Invalid pWdaParams pointer", __func__);
4411 VOS_ASSERT(0);
4412 return;
4413 }
4414
4415 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4416 delbssParams = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
4417
4418 delbssParams->status = wdiStatus ;
4419
4420 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4421 {
4422 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4423 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304424 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4425 WLAN_LOG_INDICATOR_HOST_DRIVER,
4426 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4427 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304428 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delbssParams , 0) ;
4429 }
4430
4431 return ;
4432}
Jeff Johnson295189b2012-06-20 16:38:30 -07004433
Jeff Johnson295189b2012-06-20 16:38:30 -07004434/*
4435 * FUNCTION: WDA_ProcessDelBssReq
4436 * Init DEL BSS req with WDI
4437 */
4438VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
4439 tDeleteBssParams *delBssParam)
4440{
4441 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004442 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
4443 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
4444 sizeof(WDI_DelBSSReqParamsType)) ;
4445 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004447 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004448 if(NULL == wdiDelBssReqParam)
4449 {
4450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304451 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004452 VOS_ASSERT(0);
4453 return VOS_STATUS_E_NOMEM;
4454 }
4455 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4456 if(NULL == pWdaParams)
4457 {
4458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004459 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004460 VOS_ASSERT(0);
4461 vos_mem_free(wdiDelBssReqParam);
4462 return VOS_STATUS_E_NOMEM;
4463 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004464 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304465 wdiDelBssReqParam->wdiReqStatusCB = WDA_DelBSSReqCallback ;
4466 wdiDelBssReqParam->pUserData = pWdaParams;
4467
Jeff Johnson295189b2012-06-20 16:38:30 -07004468 /* Store Init Req pointer, as this will be used for response */
4469 /* store Params pass it to WDI */
4470 pWdaParams->pWdaContext = pWDA;
4471 pWdaParams->wdaMsgParam = delBssParam;
4472 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304473
Jeff Johnson295189b2012-06-20 16:38:30 -07004474 status = WDI_DelBSSReq(wdiDelBssReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304475 (WDI_DelBSSRspCb )WDA_DelBSSRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004476 if(IS_WDI_STATUS_FAILURE(status))
4477 {
4478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4479 "Failure in Del BSS WDI API, free all the memory " );
4480 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4481 vos_mem_free(pWdaParams) ;
4482 delBssParam->status = eSIR_FAILURE ;
4483 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
4484 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004485 return CONVERT_WDI2VOS_STATUS(status) ;
4486}
Jeff Johnson295189b2012-06-20 16:38:30 -07004487/*
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304488 * FUNCTION: WDA_DelSTARspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07004489 * Dens DEL STA RSP back to PE
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304490 */
4491void WDA_DelSTARspCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
Jeff Johnson295189b2012-06-20 16:38:30 -07004492 void* pUserData)
4493{
4494 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4495 tWDA_CbContext *pWDA;
4496 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004497 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004498 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004499 if(NULL == pWdaParams)
4500 {
4501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004502 "%s: pWdaParams received NULL", __func__);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304503 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004504 return ;
4505 }
4506 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4507 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004508 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004509 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
4510 {
4511 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
4512 {
4513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004514 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004515 VOS_ASSERT(0) ;
4516 }
4517 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
Mihir Shete2ab1d492014-06-04 14:21:05 +05304518 WLANTL_StartForwarding(delStaReqParam->staIdx,0,0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004519 }
Abhishek Singh837adf22015-10-01 17:37:37 +05304520 else
4521 {
4522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4523 "%s: Failure with status %d", __func__,
4524 wdiDelStaRsp->wdiStatus);
4525 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4526 WLAN_LOG_INDICATOR_HOST_DRIVER,
4527 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4528 FALSE, TRUE);
4529 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004530 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4531 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004532 /*Reset the BA information corresponding to this STAIdx */
4533 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
4534 WDA_INVALID_STA_INDEX;
4535 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05304536 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004537 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004538 return ;
4539}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304540void WDA_DelSTAReqCallback(WDI_Status wdiStatus,
4541 void* pUserData)
4542{
4543 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4544 tWDA_CbContext *pWDA;
4545 tDeleteStaParams *delStaParams;
4546
4547 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4548 "<------ %s, wdiStatus: %d",
4549 __func__, wdiStatus);
4550
4551 if (NULL == pWdaParams)
4552 {
4553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4554 "%s: Invalid pWdaParams pointer", __func__);
4555 VOS_ASSERT(0);
4556 return;
4557 }
4558
4559 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4560 delStaParams = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
4561
4562 delStaParams->status = wdiStatus ;
4563
4564 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4565 {
4566 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4567 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304568 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4569 WLAN_LOG_INDICATOR_HOST_DRIVER,
4570 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4571 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304572 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParams , 0) ;
4573 }
4574
4575 return ;
4576}
4577
Jeff Johnson295189b2012-06-20 16:38:30 -07004578/*
4579 * FUNCTION: WDA_ProcessDelStaReq
4580 * Init DEL STA req with WDI
4581 */
4582VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
4583 tDeleteStaParams *delStaParam)
4584{
4585 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004586 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
4587 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
4588 sizeof(WDI_DelSTAReqParamsType)) ;
4589 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004591 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004592 if(NULL == wdiDelStaReqParam)
4593 {
4594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004595 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004596 VOS_ASSERT(0);
4597 return VOS_STATUS_E_NOMEM;
4598 }
4599 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4600 if(NULL == pWdaParams)
4601 {
4602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004603 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004604 VOS_ASSERT(0);
4605 vos_mem_free(wdiDelStaReqParam);
4606 return VOS_STATUS_E_NOMEM;
4607 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004608 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304609 wdiDelStaReqParam->wdiReqStatusCB = WDA_DelSTAReqCallback ;
4610 wdiDelStaReqParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004611 /* Store Init Req pointer, as this will be used for response */
4612 /* store Params pass it to WDI */
4613 pWdaParams->pWdaContext = pWDA;
4614 pWdaParams->wdaMsgParam = delStaParam;
4615 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304616
Jeff Johnson295189b2012-06-20 16:38:30 -07004617 status = WDI_DelSTAReq(wdiDelStaReqParam,
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304618 (WDI_DelSTARspCb )WDA_DelSTARspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004619 if(IS_WDI_STATUS_FAILURE(status))
4620 {
4621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4622 "Failure in Del STA WDI API, free all the memory status = %d",
4623 status );
4624 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4625 vos_mem_free(pWdaParams) ;
4626 delStaParam->status = eSIR_FAILURE ;
4627 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
4628 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004629 return CONVERT_WDI2VOS_STATUS(status) ;
4630}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304631void WDA_ProcessAddStaSelfRspCallback(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07004632{
4633 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4634 tWDA_CbContext *pWDA;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304635 tAddStaSelfParams *pAddStaSelfRsp = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004637 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004638 if(NULL == pWdaParams)
4639 {
4640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004641 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004642 VOS_ASSERT(0) ;
4643 return ;
4644 }
4645 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4646 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004647 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4648 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004649 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
4650 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
4651 pwdiAddSTASelfRsp->macSelfSta,
4652 sizeof(pAddStaSelfRsp->selfMacAddr));
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304653 pWDA->wdaAddSelfStaParams.ucSTASelfIdx = pwdiAddSTASelfRsp->ucSTASelfIdx;
4654 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaRspCounter++;
4655 if (pAddStaSelfRsp->status == eSIR_FAILURE)
4656 {
4657 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_RSP_WDI_FAIL;
4658 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Abhishek Singh837adf22015-10-01 17:37:37 +05304659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4660 "%s: Failure with status %d failcnter %d", __func__,
4661 pwdiAddSTASelfRsp->wdiStatus,
4662 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter);
4663 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4664 WLAN_LOG_INDICATOR_HOST_DRIVER,
4665 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4666 FALSE, TRUE);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304667 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004668 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004669 return ;
4670}
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304671void WDA_ProcessAddStaSelfReqCallback(WDI_Status wdiStatus,
4672 void* pUserData)
4673{
4674 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4675 tWDA_CbContext *pWDA;
4676 tAddStaSelfParams *addStaSelfParams;
4677
4678 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4679 "<------ %s, wdiStatus: %d",
4680 __func__, wdiStatus);
4681
4682 if (NULL == pWdaParams)
4683 {
4684 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4685 "%s: Invalid pWdaParams pointer", __func__);
4686 VOS_ASSERT(0);
4687 return;
4688 }
4689
4690 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4691 addStaSelfParams = (tAddStaSelfParams *)pWdaParams->wdaMsgParam;
4692
4693 addStaSelfParams->status = wdiStatus ;
4694
4695 if (IS_WDI_STATUS_FAILURE(wdiStatus))
4696 {
4697 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4698 vos_mem_free(pWdaParams) ;
4699 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason
4700 = WDA_ADDSTA_REQ_WDI_FAIL;
4701 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Abhishek Singh837adf22015-10-01 17:37:37 +05304702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4703 "%s: Failure with status %d failcnter %d", __func__,
4704 wdiStatus,
4705 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter);
4706 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4707 WLAN_LOG_INDICATOR_HOST_DRIVER,
4708 WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
4709 FALSE, TRUE);
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304710 WDA_SendMsg(pWDA, WDA_ADD_STA_SELF_RSP, (void *)addStaSelfParams , 0);
4711 }
4712
4713 return ;
4714}
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304715
Jeff Johnson295189b2012-06-20 16:38:30 -07004716/*
4717 * FUNCTION: WDA_ProcessAddStaSelfReq
4718 *
4719 */
4720VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
4721{
4722 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004723 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004724 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
4725 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
4726 sizeof(WDI_AddSTASelfReqParamsType)) ;
4727 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004729 "------> %s " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304730 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaReqCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004731 if( NULL == wdiAddStaSelfReq )
4732 {
4733 VOS_ASSERT( 0 );
4734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004735 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304736 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4737 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004738 return( VOS_STATUS_E_NOMEM );
4739 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004740 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004741 if( NULL == pWdaParams )
4742 {
4743 VOS_ASSERT( 0 );
4744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004745 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304746 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4747 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004748 vos_mem_free(wdiAddStaSelfReq) ;
4749 return( VOS_STATUS_E_NOMEM );
4750 }
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304751 wdiAddStaSelfReq->wdiReqStatusCB = WDA_ProcessAddStaSelfReqCallback;
4752 wdiAddStaSelfReq->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004753 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
Kiran Kumar Lokere0ad5cd32013-06-25 11:26:22 -07004754 wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004755 /* Store Init Req pointer, as this will be used for response */
4756 /* store Params pass it to WDI */
4757 pWdaParams->pWdaContext = pWDA;
4758 pWdaParams->wdaMsgParam = pAddStaSelfReq;
Abhishek Singhf1221ab2015-08-04 16:38:39 +05304759 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
4760
4761 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq,
4762 WDA_ProcessAddStaSelfRspCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004763
Jeff Johnson43971f52012-07-17 12:26:56 -07004764 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004765 {
4766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4767 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07004768 wstatus );
4769 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004770 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4771 vos_mem_free(pWdaParams) ;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304772 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_WDI_FAIL;
4773 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004774 pAddStaSelfReq->status = eSIR_FAILURE ;
4775 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
4776 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004777 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004778}
Jeff Johnson295189b2012-06-20 16:38:30 -07004779/*
4780 * FUNCTION: WDA_DelSTASelfRespCallback
4781 *
4782 */
4783void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
4784 wdiDelStaSelfRspParams , void* pUserData)
4785{
4786 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4787 tWDA_CbContext *pWDA;
4788 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004790 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004791 if (NULL == pWdaParams)
4792 {
4793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004794 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004795 VOS_ASSERT(0);
4796 return;
4797 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004798 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4799 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004800 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004801 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004802
4803 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4804 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304805 if (WDI_STATUS_SUCCESS != delStaSelfParams->status)
Abhishek Singh1c6ee5d2015-12-14 12:31:42 +05304806 {
Abhishek Singh837adf22015-10-01 17:37:37 +05304807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4808 "%s: Failure with status %d", __func__,
4809 wdiDelStaSelfRspParams->wdiStatus);
4810 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4811 WLAN_LOG_INDICATOR_HOST_DRIVER,
4812 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4813 FALSE, TRUE);
Abhishek Singh1c6ee5d2015-12-14 12:31:42 +05304814 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004815 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004816 return ;
4817}
Jeff Johnson295189b2012-06-20 16:38:30 -07004818/*
4819 * FUNCTION: WDA_DelSTASelfReqCallback
4820 *
4821 */
4822void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
4823 void* pUserData)
4824{
4825 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4826 tWDA_CbContext *pWDA;
4827 tDelStaSelfParams *delStaSelfParams;
4828
4829 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05304830 "<------ %s, wdiStatus: %d pWdaParams: %p",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004831 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004832
4833 if (NULL == pWdaParams)
4834 {
4835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004836 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004837 VOS_ASSERT(0);
4838 return;
4839 }
4840
4841 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4842 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
4843
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004844 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004845
4846 if(IS_WDI_STATUS_FAILURE(wdiStatus))
4847 {
4848 VOS_ASSERT(0);
4849 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4850 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05304851 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
4852 WLAN_LOG_INDICATOR_HOST_DRIVER,
4853 WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
4854 FALSE, TRUE);
Jeff Johnson295189b2012-06-20 16:38:30 -07004855 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
4856 }
4857
4858 return ;
4859}
4860
4861/*
4862 * FUNCTION: WDA_DelSTASelfReq
4863 * Trigger Config STA processing in WDI
4864 */
4865VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
4866 tDelStaSelfParams* pDelStaSelfReqParam)
4867{
4868 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004869 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004870 tWDA_ReqParams *pWdaParams = NULL;
4871 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
4872 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
4873 sizeof(WDI_DelSTASelfReqParamsType)) ;
4874
Jeff Johnson295189b2012-06-20 16:38:30 -07004875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004876 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004877 if( NULL == wdiDelStaSelfReq )
4878 {
4879 VOS_ASSERT( 0 );
4880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004881 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004882 return( VOS_STATUS_E_NOMEM );
4883 }
4884
4885 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4886 if( NULL == pWdaParams )
4887 {
4888 VOS_ASSERT( 0 );
4889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004890 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004891 vos_mem_free(wdiDelStaSelfReq) ;
4892 return( VOS_STATUS_E_NOMEM );
4893 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004894 pWdaParams->pWdaContext = pWDA;
4895 /* Store param pointer as passed in by caller */
4896 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
4897 /* store Params pass it to WDI */
4898 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07004899 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
4900 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
4901
4902 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
4903 wdiDelStaSelfReq->pUserData = pWdaParams;
4904
Jeff Johnson43971f52012-07-17 12:26:56 -07004905 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07004906 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
4907
Jeff Johnson43971f52012-07-17 12:26:56 -07004908 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004909 {
4910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
4911 "Failure in Del Sta Self REQ WDI API, free all the memory " );
4912 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07004913 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004914 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4915 vos_mem_free(pWdaParams) ;
4916 pDelStaSelfReqParam->status = eSIR_FAILURE ;
4917 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
4918 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004919 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004920}
4921
Jeff Johnson295189b2012-06-20 16:38:30 -07004922/*
4923 * FUNCTION: WDA_SendMsg
4924 * Send Message back to PE
4925 */
4926void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
4927 void *pBodyptr, tANI_U32 bodyVal)
4928{
4929 tSirMsgQ msg = {0} ;
4930 tANI_U32 status = VOS_STATUS_SUCCESS ;
4931 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07004932 msg.type = msgType;
4933 msg.bodyval = bodyVal;
4934 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07004935 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07004936 if (VOS_STATUS_SUCCESS != status)
4937 {
4938 if(NULL != pBodyptr)
4939 {
4940 vos_mem_free(pBodyptr);
4941 }
4942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004943 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004944 VOS_ASSERT(0) ;
4945 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004946 return ;
4947}
Jeff Johnson295189b2012-06-20 16:38:30 -07004948/*
4949 * FUNCTION: WDA_UpdateBSSParams
4950 * Translated WDA/PE BSS info into WDI BSS info..
4951 */
4952void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
4953 WDI_ConfigBSSReqInfoType *wdiBssParams,
4954 tAddBssParams *wdaBssParams)
4955{
4956 v_U8_t keyIndex = 0;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05304957 v_U8_t i = 0;
4958
Jeff Johnson295189b2012-06-20 16:38:30 -07004959 /* copy bssReq Params to WDI structure */
4960 vos_mem_copy(wdiBssParams->macBSSID,
4961 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
4962 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
4963 sizeof(tSirMacAddr)) ;
4964 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
4965 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
4966 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004967 wdiBssParams->ucShortSlotTimeSupported =
4968 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004969 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
4970 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
4971 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
4972 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
4973 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
4974
4975 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
4976 wdiBssParams->ucTXOPProtectionFullSupport =
4977 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004978 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
4979 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004980 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004981 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
4982 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
4983 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
4984 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
4985
Chet Lanctot186b5732013-03-18 10:26:30 -07004986 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
4987
Jeff Johnson295189b2012-06-20 16:38:30 -07004988 /* copy SSID into WDI structure */
4989 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
4990 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
4991 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004992 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
4993 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004994 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07004995#ifdef WLAN_FEATURE_VOWIFI
4996 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
4997#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004998 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07004999 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07005000#ifdef WLAN_FEATURE_VOWIFI_11R
5001 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07005002 if(wdiBssParams->bExtSetStaKeyParamValid)
5003 {
5004 /* copy set STA key params to WDI structure */
5005 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
5006 wdaBssParams->extSetStaKeyParam.staIdx;
5007 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
5008 wdaBssParams->extSetStaKeyParam.encType;
5009 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
5010 wdaBssParams->extSetStaKeyParam.wepType;
5011 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
5012 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005013 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
5014 {
Jeff Johnson43971f52012-07-17 12:26:56 -07005015 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005016 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
5017 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
5018 {
5019 WDA_GetWepKeysFromCfg( pWDA,
5020 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
5021 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
5022 wdiBssParams->wdiExtSetKeyParam.wdiKey );
5023 }
5024 else
5025 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005026 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5027 keyIndex++)
5028 {
5029 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
5030 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
5031 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
5032 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
5033 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
5034 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05305035
5036 if(WDA_getHostWlanFeatCaps(DISA) && WDA_getFwWlanFeatCaps(DISA))
5037 {
5038 for (i = 0; i < WLAN_MAX_KEY_RSC_LEN; i ++)
5039 {
5040 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc[i] =
5041 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc[i]);
5042 }
5043
5044 for (i = 0; i < SIR_MAC_MAX_KEY_LENGTH; i++)
5045 {
5046 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key[i] =
5047 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].key[i]);
5048 }
5049 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5050 FL("%s: Negated Keys"), __func__);
5051 }
5052 else
5053 {
5054 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5055 FL("%s: No change in Keys "), __func__);
5056 vos_mem_copy(
5057 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
5058 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc,
5059 WLAN_MAX_KEY_RSC_LEN);
5060 vos_mem_copy(
5061 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
5062 wdaBssParams->extSetStaKeyParam.key[keyIndex].key,
5063 SIR_MAC_MAX_KEY_LENGTH);
5064 }
5065
Jeff Johnson295189b2012-06-20 16:38:30 -07005066 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
5067 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
5068 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
5069 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07005070 }
Srinivas Dasari9b57b112014-11-27 12:25:23 +05305071 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
Jeff Johnson295189b2012-06-20 16:38:30 -07005072 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005073 }
5074 }
5075 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
5076 }
5077 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
5078 {
5079 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
5080 sizeof(wdaBssParams->extSetStaKeyParam) );
5081 }
5082#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07005083#ifdef WLAN_FEATURE_11AC
5084 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
5085 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
5086#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005087
5088 return ;
5089}
Jeff Johnson295189b2012-06-20 16:38:30 -07005090/*
5091 * FUNCTION: WDA_UpdateSTAParams
5092 * Translated WDA/PE BSS info into WDI BSS info..
5093 */
5094void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
5095 WDI_ConfigStaReqInfoType *wdiStaParams,
5096 tAddStaParams *wdaStaParams)
5097{
5098 tANI_U8 i = 0;
5099 /* Update STA params */
5100 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
5101 sizeof(tSirMacAddr)) ;
5102 wdiStaParams->usAssocId = wdaStaParams->assocId;
5103 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07005104 wdiStaParams->staIdx = wdaStaParams->staIdx;
5105
Jeff Johnson295189b2012-06-20 16:38:30 -07005106 wdiStaParams->ucShortPreambleSupported =
5107 wdaStaParams->shortPreambleSupported;
5108 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
5109 sizeof(tSirMacAddr)) ;
5110 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
5111
5112 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
5113
5114 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
5115 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
5116 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
5117 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
5118 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
5119 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
5120 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
5121
5122 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
5123 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07005124 wdiStaParams->wdiSupportedRates.opRateMode =
5125 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07005126 for(i = 0;i < WDI_NUM_11B_RATES;i++)
5127 {
5128 wdiStaParams->wdiSupportedRates.llbRates[i] =
5129 wdaStaParams->supportedRates.llbRates[i];
5130 }
5131 for(i = 0;i < WDI_NUM_11A_RATES;i++)
5132 {
5133 wdiStaParams->wdiSupportedRates.llaRates[i] =
5134 wdaStaParams->supportedRates.llaRates[i];
5135 }
5136 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
5137 {
5138 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
5139 wdaStaParams->supportedRates.aniLegacyRates[i];
5140 }
5141 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
5142 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07005143#ifdef WLAN_FEATURE_11AC
5144 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
5145 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
5146 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
5147 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
5148#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005149 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
5150 {
5151 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
5152 wdaStaParams->supportedRates.supportedMCSSet[i];
5153 }
5154 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
5155 wdaStaParams->supportedRates.rxHighestDataRate;
5156
5157 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
5158
5159 wdiStaParams->wdiAction = wdaStaParams->updateSta;
5160
5161 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
5162 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
5163 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
5164
5165 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
5166 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
5167 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
5168 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07005169 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07005170#ifdef WLAN_FEATURE_11AC
5171 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
5172 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08005173 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Abhishek Singh6927fa02014-06-27 17:19:55 +05305174 wdiStaParams->vhtTxMUBformeeCapable = wdaStaParams->vhtTxMUBformeeCapable;
5175 /* When MU vhtTxMUBformeeCapable is set, SU ucVhtTxBFEnabled
5176 * must be set by default */
5177 if ( wdiStaParams->vhtTxMUBformeeCapable )
5178 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxMUBformeeCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07005179#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08005180 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
5181 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07005182 return ;
5183}
Jeff Johnson295189b2012-06-20 16:38:30 -07005184/*
5185 * -------------------------------------------------------------------------
5186 * CFG update to WDI
5187 * -------------------------------------------------------------------------
5188 */
5189
5190 /*
5191 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
5192 * Convert the WNI CFG ID to HAL CFG ID
5193 */
Jeff Johnsone7245742012-09-05 17:12:55 -07005194static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07005195{
5196 switch(wniCfgId)
5197 {
5198 case WNI_CFG_STA_ID:
5199 return QWLAN_HAL_CFG_STA_ID;
5200 case WNI_CFG_CURRENT_TX_ANTENNA:
5201 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
5202 case WNI_CFG_CURRENT_RX_ANTENNA:
5203 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
5204 case WNI_CFG_LOW_GAIN_OVERRIDE:
5205 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
5206 case WNI_CFG_POWER_STATE_PER_CHAIN:
5207 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
5208 case WNI_CFG_CAL_PERIOD:
5209 return QWLAN_HAL_CFG_CAL_PERIOD;
5210 case WNI_CFG_CAL_CONTROL:
5211 return QWLAN_HAL_CFG_CAL_CONTROL;
5212 case WNI_CFG_PROXIMITY:
5213 return QWLAN_HAL_CFG_PROXIMITY;
5214 case WNI_CFG_NETWORK_DENSITY:
5215 return QWLAN_HAL_CFG_NETWORK_DENSITY;
5216 case WNI_CFG_MAX_MEDIUM_TIME:
5217 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
5218 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
5219 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
5220 case WNI_CFG_RTS_THRESHOLD:
5221 return QWLAN_HAL_CFG_RTS_THRESHOLD;
5222 case WNI_CFG_SHORT_RETRY_LIMIT:
5223 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
5224 case WNI_CFG_LONG_RETRY_LIMIT:
5225 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
5226 case WNI_CFG_FRAGMENTATION_THRESHOLD:
5227 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
5228 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
5229 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
5230 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
5231 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
5232 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
5233 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
5234 case WNI_CFG_FIXED_RATE:
5235 return QWLAN_HAL_CFG_FIXED_RATE;
5236 case WNI_CFG_RETRYRATE_POLICY:
5237 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
5238 case WNI_CFG_RETRYRATE_SECONDARY:
5239 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
5240 case WNI_CFG_RETRYRATE_TERTIARY:
5241 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
5242 case WNI_CFG_FORCE_POLICY_PROTECTION:
5243 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
5244 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
5245 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
5246 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
5247 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
5248 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
5249 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
5250 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
5251 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
5252 case WNI_CFG_MAX_BA_SESSIONS:
5253 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
5254 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
5255 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
5256 case WNI_CFG_PS_ENABLE_BCN_FILTER:
5257 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
5258 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
5259 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
5260 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
5261 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
5262 case WNI_CFG_STATS_PERIOD:
5263 return QWLAN_HAL_CFG_STATS_PERIOD;
5264 case WNI_CFG_CFP_MAX_DURATION:
5265 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
5266#if 0 /*This is not part of CFG*/
5267 case WNI_CFG_FRAME_TRANS_ENABLED:
5268 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
5269#endif
5270 case WNI_CFG_DTIM_PERIOD:
5271 return QWLAN_HAL_CFG_DTIM_PERIOD;
5272 case WNI_CFG_EDCA_WME_ACBK:
5273 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
5274 case WNI_CFG_EDCA_WME_ACBE:
5275 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
5276 case WNI_CFG_EDCA_WME_ACVI:
5277 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
5278 case WNI_CFG_EDCA_WME_ACVO:
5279 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
5280#if 0
5281 case WNI_CFG_TELE_BCN_WAKEUP_EN:
5282 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
5283 case WNI_CFG_TELE_BCN_TRANS_LI:
5284 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
5285 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
5286 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
5287 case WNI_CFG_TELE_BCN_MAX_LI:
5288 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
5289 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
5290 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
5291#endif
5292 case WNI_CFG_ENABLE_CLOSE_LOOP:
5293 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08005294 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
5295 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
jagadeeshaf2d0ce2015-03-31 11:45:30 +05305296 case WNI_CFG_ENABLE_RTSCTS_HTVHT:
5297 return QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT;
Jeff Johnson295189b2012-06-20 16:38:30 -07005298 default:
5299 {
5300 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005301 "There is no HAL CFG Id corresponding to WNI CFG Id: %d",
Jeff Johnson295189b2012-06-20 16:38:30 -07005302 wniCfgId);
5303 return VOS_STATUS_E_INVAL;
5304 }
5305 }
5306}
Jeff Johnson295189b2012-06-20 16:38:30 -07005307/*
5308 * FUNCTION: WDA_UpdateCfgCallback
5309 *
5310 */
5311void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
5312{
5313 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
5314 WDI_UpdateCfgReqParamsType *wdiCfgParam =
5315 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005317 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005318 /*
5319 * currently there is no response message is expected between PE and
5320 * WDA, Failure return from WDI is a ASSERT condition
5321 */
5322 if(WDI_STATUS_SUCCESS != wdiStatus)
5323 {
5324 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005325 "%s: CFG (%d) config failure", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07005326 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
5327 }
5328
5329 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
5330 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5331 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07005332 return ;
5333}
Jeff Johnson295189b2012-06-20 16:38:30 -07005334/*
5335 * FUNCTION: WDA_UpdateCfg
5336 *
5337 */
5338VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
5339{
5340
5341 WDI_Status status = WDI_STATUS_SUCCESS ;
5342 tANI_U32 val =0;
5343 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
5344 tHalCfg *configData;
5345 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
5346 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07005347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005348 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005349 if (NULL == pMac )
5350 {
5351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005352 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07005353 return VOS_STATUS_E_FAILURE;
5354 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005355 if(WDA_START_STATE != pWDA->wdaState)
5356 {
5357 return VOS_STATUS_E_FAILURE;
5358 }
5359
5360 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
5361 {
5362 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005363 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005364 VOS_ASSERT(0);
5365 return VOS_STATUS_E_FAILURE;
5366 }
5367
5368 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
5369 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005370 if(NULL == wdiCfgReqParam)
5371 {
5372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005373 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005374 VOS_ASSERT(0);
5375 return VOS_STATUS_E_NOMEM;
5376 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005377 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
5378 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005379 if(NULL == wdiCfgReqParam->pConfigBuffer)
5380 {
5381 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005382 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005383 vos_mem_free(wdiCfgReqParam);
5384 VOS_ASSERT(0);
5385 return VOS_STATUS_E_NOMEM;
5386 }
5387
5388 /*convert the WNI CFG Id to HAL CFG Id*/
5389 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
5390 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
5391
5392 /*TODO: revisit this for handling string parameters */
5393 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
5394 &val) != eSIR_SUCCESS)
5395 {
5396 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005397 "Failed to cfg get id %d", cfgParam->bodyval);
Jeff Johnson295189b2012-06-20 16:38:30 -07005398 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
5399 vos_mem_free(wdiCfgReqParam);
5400 return eSIR_FAILURE;
5401 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005402 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
5403 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
5404 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
5405 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
5406 wdiCfgReqParam->wdiReqStatusCB = NULL ;
5407
5408 /* store Params pass it to WDI */
5409 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005410#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
5411 status = WDI_UpdateCfgReq(wdiCfgReqParam,
5412 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005413 if(IS_WDI_STATUS_FAILURE(status))
5414 {
5415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5416 "Failure in Update CFG WDI API, free all the memory " );
5417 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
5418 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5419 pWDA->wdaWdiCfgApiMsgParam = NULL;
5420 /* Failure is not expected */
5421 VOS_ASSERT(0) ;
5422 }
5423#else
5424 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
5425 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
5426 pWDA->wdaWdiCfgApiMsgParam = NULL;
5427#endif
5428 return CONVERT_WDI2VOS_STATUS(status) ;
5429}
5430
Jeff Johnson295189b2012-06-20 16:38:30 -07005431VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
5432 v_U8_t *pDefaultKeyId,
5433 v_U8_t *pNumKeys,
5434 WDI_KeysType *pWdiKeys )
5435{
5436 v_U32_t i, j, defKeyId = 0;
5437 v_U32_t val = SIR_MAC_KEY_LENGTH;
5438 VOS_STATUS status = WDI_STATUS_SUCCESS;
5439 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005440 if (NULL == pMac )
5441 {
5442 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005443 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07005444 return VOS_STATUS_E_FAILURE;
5445 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005446 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
5447 &defKeyId ))
5448 {
5449 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5450 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
5451 }
5452
5453 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07005454 /* Need to extract ALL of the configured WEP Keys */
5455 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
5456 {
5457 val = SIR_MAC_KEY_LENGTH;
5458 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
5459 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
5460 pWdiKeys[j].key,
5461 &val ))
5462 {
5463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005464 "WEP Key index [%d] may not configured in CFG",i);
Jeff Johnson295189b2012-06-20 16:38:30 -07005465 }
5466 else
5467 {
5468 pWdiKeys[j].keyId = (tANI_U8) i;
5469 /*
5470 * Actually, a DC (Don't Care) because
5471 * this is determined (and set) by PE/MLME
5472 */
5473 pWdiKeys[j].unicast = 0;
5474 /*
5475 * Another DC (Don't Care)
5476 */
5477 pWdiKeys[j].keyDirection = eSIR_TX_RX;
5478 /* Another DC (Don't Care). Unused for WEP */
5479 pWdiKeys[j].paeRole = 0;
5480 /* Determined from wlan_cfgGetStr() above.*/
5481 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07005482 j++;
5483 *pNumKeys = (tANI_U8) j;
5484 }
5485 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005486 return status;
5487}
Jeff Johnson295189b2012-06-20 16:38:30 -07005488/*
5489 * FUNCTION: WDA_SetBssKeyReqCallback
5490 * send SET BSS key RSP back to PE
5491 */
5492void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
5493{
5494 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5495 tWDA_CbContext *pWDA;
5496 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005497 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005498 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005499 if(NULL == pWdaParams)
5500 {
5501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005502 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005503 VOS_ASSERT(0) ;
5504 return ;
5505 }
5506 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5507 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05305508 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
5509 sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005510 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5511 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005512 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005513 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005514 return ;
5515}
Jeff Johnson295189b2012-06-20 16:38:30 -07005516/*
5517 * FUNCTION: WDA_ProcessSetBssKeyReq
5518 * Request to WDI for programming the BSS key( key for
5519 * broadcast/multicast frames Encryption)
5520 */
5521VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
5522 tSetBssKeyParams *setBssKeyParams )
5523{
5524 WDI_Status status = WDI_STATUS_SUCCESS ;
5525 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
5526 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
5527 sizeof(WDI_SetBSSKeyReqParamsType)) ;
5528 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005529 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005531 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005532 if(NULL == wdiSetBssKeyParam)
5533 {
5534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005535 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005536 VOS_ASSERT(0);
5537 return VOS_STATUS_E_NOMEM;
5538 }
5539 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5540 if(NULL == pWdaParams)
5541 {
5542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005543 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005544 VOS_ASSERT(0);
5545 vos_mem_free(wdiSetBssKeyParam);
5546 return VOS_STATUS_E_NOMEM;
5547 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005548 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005549 /* copy set BSS params to WDI structure */
5550 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
5551 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
5552 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07005553 if(setBssKeyParams->encType != eSIR_ED_NONE)
5554 {
5555 if( setBssKeyParams->numKeys == 0 &&
5556 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
5557 setBssKeyParams->encType == eSIR_ED_WEP104))
5558 {
5559 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005560 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
5561 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
5562 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
5563 }
5564 else
5565 {
5566 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
5567 {
5568 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
5569 setBssKeyParams->key[keyIndex].keyId;
5570 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
5571 setBssKeyParams->key[keyIndex].unicast;
5572 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
5573 setBssKeyParams->key[keyIndex].keyDirection;
5574 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
5575 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5576 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
5577 setBssKeyParams->key[keyIndex].paeRole;
5578 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
5579 setBssKeyParams->key[keyIndex].keyLength;
5580 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
5581 setBssKeyParams->key[keyIndex].key,
5582 SIR_MAC_MAX_KEY_LENGTH);
5583 }
5584 }
5585 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005586 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
5587 setBssKeyParams->singleTidRc;
5588 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005589 /* Store set key pointer, as this will be used for response */
5590 /* store Params pass it to WDI */
5591 pWdaParams->pWdaContext = pWDA;
5592 pWdaParams->wdaMsgParam = setBssKeyParams;
5593 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005594 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
5595 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
5596
5597 if(IS_WDI_STATUS_FAILURE(status))
5598 {
5599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5600 "Failure in Set BSS Key Req WDI API, free all the memory " );
5601 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5602 vos_mem_free(pWdaParams) ;
5603 setBssKeyParams->status = eSIR_FAILURE ;
5604 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
5605 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005606 return CONVERT_WDI2VOS_STATUS(status) ;
5607}
Jeff Johnson295189b2012-06-20 16:38:30 -07005608/*
5609 * FUNCTION: WDA_RemoveBssKeyReqCallback
5610 * send SET BSS key RSP back to PE
5611 */
5612void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
5613{
5614 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5615 tWDA_CbContext *pWDA;
5616 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005618 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005619 if(NULL == pWdaParams)
5620 {
5621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005622 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005623 VOS_ASSERT(0) ;
5624 return ;
5625 }
5626 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5627 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005628 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5629 vos_mem_free(pWdaParams) ;
5630
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005631 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005632 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005633 return ;
5634}
Siddharth Bhal171788a2014-09-29 21:02:40 +05305635
5636/*
Siddharth Bhal64246172015-02-27 01:04:37 +05305637 * FUNCTION: WDA_GetFrameLogRspCallback
5638 * recieves get frame log response from FW
5639 */
5640void WDA_GetFrameLogRspCallback(WDI_GetFrameLogRspParamType* wdiRsp,
5641 void* pUserData)
5642{
5643 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5644 tWDA_CbContext *pWDA = NULL;
5645 tAniGetFrameLogReq *pGetFrameLogReqParams = NULL;
5646
5647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5648 "<------ Entering: %s " ,__func__);
5649 if(NULL == pWdaParams)
5650 {
5651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5652 "%s: pWdaParams received NULL", __func__);
5653 VOS_ASSERT(0) ;
5654 return ;
5655 }
5656
5657 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5658 if (NULL == pWDA)
5659 {
5660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5661 "%s:pWDA is NULL", __func__);
5662 VOS_ASSERT(0);
5663 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5664 vos_mem_free(pWdaParams);
5665 return ;
5666 }
5667
5668 pGetFrameLogReqParams = (tAniGetFrameLogReq *)pWdaParams->wdaMsgParam;
5669 if(NULL == pGetFrameLogReqParams)
5670 {
5671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5672 "%s: pGetFrameLogReqParams received NULL", __func__);
5673 VOS_ASSERT(0);
5674 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5675 vos_mem_free(pWdaParams);
5676 return;
5677 }
5678
Siddharth Bhal64246172015-02-27 01:04:37 +05305679 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
5680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Abhishek Singh611295e2015-07-09 11:11:54 +05305681 "%s:GetFrameLog with rsp status %d flag %d", __func__,
5682 wdiRsp->wdiStatus,pGetFrameLogReqParams->getFrameLogCmdFlag);
Siddharth Bhal64246172015-02-27 01:04:37 +05305683 }
5684
5685 /* free WDI command buffer only */
5686 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5687 vos_mem_free(pWdaParams->wdaMsgParam);
5688 vos_mem_free(pWdaParams);
5689
5690 return ;
5691
5692}
Gupta, Kapil7c34b322015-09-30 13:12:35 +05305693
5694/*
5695 * FUNCTION: WDA_RssiMonitorStopRspCallback
5696 * recieves Rssi Monitor stop response from FW
5697 */
5698void WDA_RssiMonitorStopRspCallback(WDI_RssiMonitorStopRspParamType *wdiRsp,
5699 void* pUserData)
5700{
5701 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5702 tSirRssiMonitorReq *pRssiMonitorReqParams;
5703
5704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5705 "<------ %s " ,__func__);
5706
5707 if(NULL == pWdaParams)
5708 {
5709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5710 "%s: pWdaParams received NULL", __func__);
5711 VOS_ASSERT(0);
5712 return ;
5713 }
5714
5715 if(NULL == pWdaParams->wdaMsgParam)
5716 {
5717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5718 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
5719 VOS_ASSERT(0);
5720 vos_mem_free(pWdaParams);
5721 return ;
5722 }
5723
5724 pRssiMonitorReqParams = (tSirRssiMonitorReq *)pWdaParams->wdaMsgParam;
5725
5726 if(pRssiMonitorReqParams->rssiMonitorCallback)
5727 {
5728 pRssiMonitorReqParams->rssiMonitorCallback(
5729 pRssiMonitorReqParams->rssiMonitorCbContext,
5730 CONVERT_WDI2VOS_STATUS(wdiRsp->status));
5731 }
5732 else
5733 {
5734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5735 "%s: pFWLoggingInitParams callback is NULL", __func__);
5736 }
5737
5738 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5739 vos_mem_free(pWdaParams->wdaMsgParam);
5740 vos_mem_free(pWdaParams);
5741
5742 return;
5743}
5744
5745/*
5746 * FUNCTION: WDA_RssiMonitorStartRspCallback
5747 * recieves Rssi Monitor start response from FW
5748 */
5749void WDA_RssiMonitorStartRspCallback(WDI_RssiMonitorStartRspParamType* wdiRsp,
5750 void* pUserData)
5751{
5752 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5753 tSirRssiMonitorReq *pRssiMonitorReqParams;
5754
5755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5756 "<------ %s " ,__func__);
5757
5758 if(NULL == pWdaParams)
5759 {
5760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5761 "%s: pWdaParams received NULL", __func__);
5762 VOS_ASSERT(0);
5763 return ;
5764 }
5765
5766 if(NULL == pWdaParams->wdaMsgParam)
5767 {
5768 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5769 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
5770 VOS_ASSERT(0);
5771 vos_mem_free(pWdaParams);
5772 return ;
5773 }
5774
5775 pRssiMonitorReqParams = (tSirRssiMonitorReq *)pWdaParams->wdaMsgParam;
5776
5777 if(pRssiMonitorReqParams->rssiMonitorCallback)
5778 {
5779 pRssiMonitorReqParams->rssiMonitorCallback(
5780 pRssiMonitorReqParams->rssiMonitorCbContext,
5781 CONVERT_WDI2VOS_STATUS(wdiRsp->status));
5782 }
5783 else
5784 {
5785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5786 "%s: pFWLoggingInitParams callback is NULL", __func__);
5787 }
5788
5789 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5790 vos_mem_free(pWdaParams->wdaMsgParam);
5791 vos_mem_free(pWdaParams);
5792
5793 return;
5794}
5795
Siddharth Bhal64246172015-02-27 01:04:37 +05305796/*
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305797 * FUNCTION: WDA_FWLoggingInitRspCallback
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305798 * recieves Mgmt Logging init response from FW
5799 */
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305800void WDA_FWLoggingInitRspCallback(WDI_FWLoggingInitRspParamType* wdiRsp,
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305801 void* pUserData)
5802{
5803 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305804 tSirFWLoggingInitParam *pFWLoggingInitParams;
c_manjeecfd1efb2015-09-25 19:32:34 +05305805 tAniLoggingInitRsp *pLoggingInitRsp;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305806
5807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5808 "<------ %s " ,__func__);
5809
5810 if(NULL == pWdaParams)
5811 {
5812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5813 "%s: pWdaParams received NULL", __func__);
5814 VOS_ASSERT(0);
5815 return ;
5816 }
5817
5818 if(NULL == pWdaParams->wdaMsgParam)
5819 {
5820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5821 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
5822 VOS_ASSERT(0);
5823 vos_mem_free(pWdaParams);
5824 return ;
5825 }
5826
c_manjeecfd1efb2015-09-25 19:32:34 +05305827 pLoggingInitRsp = (tAniLoggingInitRsp *)vos_mem_malloc(sizeof(tAniLoggingInitRsp)) ;
5828 if(NULL == pWdaParams)
5829 {
5830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5831 "%s: VOS MEM Alloc Failure for pLoggingInitRsp", __func__);
5832 VOS_ASSERT(0);
5833 vos_mem_free(pWdaParams);
5834 return;
5835 }
5836
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305837 pFWLoggingInitParams = (tSirFWLoggingInitParam *)pWdaParams->wdaMsgParam;
c_manjeecfd1efb2015-09-25 19:32:34 +05305838 vos_mem_copy(pLoggingInitRsp, wdiRsp, sizeof(tAniLoggingInitRsp));
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305839
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305840 if(pFWLoggingInitParams->fwlogInitCallback)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305841 {
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305842 pFWLoggingInitParams->fwlogInitCallback(
5843 pFWLoggingInitParams->fwlogInitCbContext,
c_manjeecfd1efb2015-09-25 19:32:34 +05305844 pLoggingInitRsp);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305845 }
5846 else
5847 {
5848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +05305849 "%s: pFWLoggingInitParams callback is NULL", __func__);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305850 }
5851
c_manjeecfd1efb2015-09-25 19:32:34 +05305852 vos_mem_free(pLoggingInitRsp);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305853 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5854 vos_mem_free(pWdaParams->wdaMsgParam);
5855 vos_mem_free(pWdaParams);
5856
5857 return;
5858}
5859
5860/*
Siddharth Bhal171788a2014-09-29 21:02:40 +05305861 * FUNCTION: WDA_SpoofMacAddrRspCallback
5862 * recieves spoof mac addr response from FW
5863 */
5864void WDA_SpoofMacAddrRspCallback(WDI_SpoofMacAddrRspParamType* wdiRsp, void* pUserData)
5865{
5866 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5867 tWDA_CbContext *pWDA;
Siddharth Bhal029d6732014-10-09 21:31:23 +05305868
Siddharth Bhal171788a2014-09-29 21:02:40 +05305869 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5870 "<------ %s " ,__func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305871
Siddharth Bhal171788a2014-09-29 21:02:40 +05305872 if(NULL == pWdaParams)
5873 {
5874 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5875 "%s: pWdaParams received NULL", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305876 VOS_ASSERT(0);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305877 return ;
5878 }
Siddharth Bhal171788a2014-09-29 21:02:40 +05305879 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Siddharth Bhal171788a2014-09-29 21:02:40 +05305880
Siddharth Bhal029d6732014-10-09 21:31:23 +05305881 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
Siddharth Bhal171788a2014-09-29 21:02:40 +05305882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhal029d6732014-10-09 21:31:23 +05305883 "%s:Spoofing with rsp status %d", __func__, wdiRsp->wdiStatus);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305884 }
Siddharth Bhal029d6732014-10-09 21:31:23 +05305885 WDA_SendMsg(pWDA, WDA_SPOOF_MAC_ADDR_RSP, NULL,
5886 CONVERT_WDI2SIR_STATUS(wdiRsp->wdiStatus));
Siddharth Bhal171788a2014-09-29 21:02:40 +05305887
Siddharth Bhal171788a2014-09-29 21:02:40 +05305888 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305889 vos_mem_free(pWdaParams->wdaMsgParam);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305890 vos_mem_free(pWdaParams);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305891
5892 return;
Siddharth Bhal171788a2014-09-29 21:02:40 +05305893}
5894
Jeff Johnson295189b2012-06-20 16:38:30 -07005895/*
5896 * FUNCTION: WDA_ProcessRemoveBssKeyReq
5897 * Request to WDI to remove the BSS key( key for broadcast/multicast
5898 * frames Encryption)
5899 */
5900VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
5901 tRemoveBssKeyParams *removeBssKeyParams )
5902{
5903 WDI_Status status = WDI_STATUS_SUCCESS ;
5904 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
5905 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
5906 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
5907 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005909 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005910 if(NULL == wdiRemoveBssKeyParam)
5911 {
5912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005913 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005914 VOS_ASSERT(0);
5915 return VOS_STATUS_E_NOMEM;
5916 }
5917 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5918 if(NULL == pWdaParams)
5919 {
5920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005921 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005922 VOS_ASSERT(0);
5923 vos_mem_free(wdiRemoveBssKeyParam);
5924 return VOS_STATUS_E_NOMEM;
5925 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005926 /* copy Remove BSS key params to WDI structure*/
5927 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
5928 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
5929 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
5930 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
5931 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005932 /* Store remove key pointer, as this will be used for response */
5933 /* store Params pass it to WDI */
5934 pWdaParams->pWdaContext = pWDA;
5935 pWdaParams->wdaMsgParam = removeBssKeyParams;
5936 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005937 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
5938 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005939 if(IS_WDI_STATUS_FAILURE(status))
5940 {
5941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5942 "Failure in Remove BSS Key Req WDI API, free all the memory " );
5943 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5944 vos_mem_free(pWdaParams) ;
5945 removeBssKeyParams->status = eSIR_FAILURE ;
5946 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
5947 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005948 return CONVERT_WDI2VOS_STATUS(status) ;
5949}
Jeff Johnson295189b2012-06-20 16:38:30 -07005950/*
5951 * FUNCTION: WDA_SetBssKeyReqCallback
5952 * send SET BSS key RSP back to PE
5953 */
5954void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
5955{
5956 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5957 tWDA_CbContext *pWDA;
5958 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005960 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005961 if(NULL == pWdaParams)
5962 {
5963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005964 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005965 VOS_ASSERT(0) ;
5966 return ;
5967 }
5968 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5969 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05305970 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
5971 sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005972 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5973 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005974 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005975 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005976 return ;
5977}
Jeff Johnson295189b2012-06-20 16:38:30 -07005978/*
5979 * FUNCTION: WDA_ProcessSetStaKeyReq
5980 * Request to WDI for programming the STA key( key for Unicast frames
5981 * Encryption)
5982 */
5983VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
5984 tSetStaKeyParams *setStaKeyParams )
5985{
5986 WDI_Status status = WDI_STATUS_SUCCESS ;
5987 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
5988 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
5989 sizeof(WDI_SetSTAKeyReqParamsType)) ;
5990 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005991 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005993 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005994 if(NULL == wdiSetStaKeyParam)
5995 {
5996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005997 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005998 VOS_ASSERT(0);
5999 return VOS_STATUS_E_NOMEM;
6000 }
6001 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6002 if(NULL == pWdaParams)
6003 {
6004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006005 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006006 VOS_ASSERT(0);
6007 vos_mem_free(wdiSetStaKeyParam);
6008 return VOS_STATUS_E_NOMEM;
6009 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006010 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006011 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006012 /* copy set STA key params to WDI structure */
6013 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
6014 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
6015 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
6016 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006017 if(setStaKeyParams->encType != eSIR_ED_NONE)
6018 {
Jeff Johnson43971f52012-07-17 12:26:56 -07006019 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07006020 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
6021 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
6022 {
6023 WDA_GetWepKeysFromCfg( pWDA,
6024 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
6025 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
6026 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
6027 }
6028 else
6029 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006030 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
6031 keyIndex++)
6032 {
6033 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
6034 setStaKeyParams->key[keyIndex].keyId;
6035 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
6036 setStaKeyParams->key[keyIndex].unicast;
6037 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
6038 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07006039 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
6040 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
6041 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
6042 setStaKeyParams->key[keyIndex].paeRole;
6043 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
6044 setStaKeyParams->key[keyIndex].keyLength;
6045 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
6046 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
6047 /* set default index to index which have key direction as WDI_TX_DEFAULT */
6048 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
6049 {
6050 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
6051 }
6052 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006053 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
6054 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07006055 }
6056 }
6057 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
6058 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006059 /* Store set key pointer, as this will be used for response */
6060 /* store Params pass it to WDI */
6061 pWdaParams->pWdaContext = pWDA;
6062 pWdaParams->wdaMsgParam = setStaKeyParams;
6063 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006064 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
6065 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006066 if(IS_WDI_STATUS_FAILURE(status))
6067 {
6068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6069 "Failure in set STA Key Req WDI API, free all the memory " );
6070 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6071 vos_mem_free(pWdaParams) ;
6072 setStaKeyParams->status = eSIR_FAILURE ;
6073 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
6074 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006075 return CONVERT_WDI2VOS_STATUS(status) ;
6076}
Jeff Johnson295189b2012-06-20 16:38:30 -07006077/*
6078 * FUNCTION: WDA_SetBcastStaKeyReqCallback
6079 * send SET Bcast STA key RSP back to PE
6080 */
6081void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
6082{
6083 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6084 tWDA_CbContext *pWDA;
6085 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006086 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006087 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006088 if(NULL == pWdaParams)
6089 {
6090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006091 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006092 VOS_ASSERT(0) ;
6093 return ;
6094 }
6095 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6096 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006097 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6098 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006099 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006100 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006101 return ;
6102}
6103
Jeff Johnson295189b2012-06-20 16:38:30 -07006104/*
6105 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
6106 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
6107 * Encryption)
6108 */
6109VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
6110 tSetStaKeyParams *setStaKeyParams )
6111{
6112 WDI_Status status = WDI_STATUS_SUCCESS ;
6113 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
6114 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
6115 sizeof(WDI_SetSTAKeyReqParamsType)) ;
6116 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006117 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07006118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006119 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006120 if(NULL == wdiSetStaKeyParam)
6121 {
6122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006123 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006124 VOS_ASSERT(0);
6125 return VOS_STATUS_E_NOMEM;
6126 }
6127 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6128 if(NULL == pWdaParams)
6129 {
6130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006131 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006132 VOS_ASSERT(0);
6133 vos_mem_free(wdiSetStaKeyParam);
6134 return VOS_STATUS_E_NOMEM;
6135 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006136 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006137 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006138 /* copy set STA key params to WDI structure */
6139 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
6140 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
6141 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
6142 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006143 if(setStaKeyParams->encType != eSIR_ED_NONE)
6144 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006145 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
6146 keyIndex++)
6147 {
6148 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
6149 setStaKeyParams->key[keyIndex].keyId;
6150 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
6151 setStaKeyParams->key[keyIndex].unicast;
6152 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
6153 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07006154 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
6155 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
6156 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
6157 setStaKeyParams->key[keyIndex].paeRole;
6158 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
6159 setStaKeyParams->key[keyIndex].keyLength;
6160 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
6161 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
6162 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006163 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
6164 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07006165 }
6166 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07006167 /* Store set key pointer, as this will be used for response */
6168 /* store Params pass it to WDI */
6169 pWdaParams->pWdaContext = pWDA;
6170 pWdaParams->wdaMsgParam = setStaKeyParams;
6171 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006172 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
6173 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006174 if(IS_WDI_STATUS_FAILURE(status))
6175 {
6176 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6177 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
6178 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6179 vos_mem_free(pWdaParams) ;
6180 setStaKeyParams->status = eSIR_FAILURE ;
6181 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
6182 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006183 return CONVERT_WDI2VOS_STATUS(status) ;
6184}
Jeff Johnson295189b2012-06-20 16:38:30 -07006185/*
6186 * FUNCTION: WDA_RemoveStaKeyReqCallback
6187 * send SET BSS key RSP back to PE
6188 */
6189void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
6190{
6191 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6192 tWDA_CbContext *pWDA;
6193 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006195 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006196 if(NULL == pWdaParams)
6197 {
6198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006199 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006200 VOS_ASSERT(0) ;
6201 return ;
6202 }
6203 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6204 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006205 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6206 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006207 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006208 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006209 return ;
6210}
6211
Jeff Johnson295189b2012-06-20 16:38:30 -07006212/*
6213 * FUNCTION: WDA_ProcessRemoveStaKeyReq
6214 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
6215 */
6216VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
6217 tRemoveStaKeyParams *removeStaKeyParams )
6218{
6219 WDI_Status status = WDI_STATUS_SUCCESS ;
6220 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
6221 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
6222 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
6223 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006224 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006225 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006226 if(NULL == wdiRemoveStaKeyParam)
6227 {
6228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006229 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006230 VOS_ASSERT(0);
6231 return VOS_STATUS_E_NOMEM;
6232 }
6233 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6234 if(NULL == pWdaParams)
6235 {
6236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006237 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006238 VOS_ASSERT(0);
6239 vos_mem_free(wdiRemoveStaKeyParam);
6240 return VOS_STATUS_E_NOMEM;
6241 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006242 /* copy remove STA key params to WDI structure*/
6243 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
6244 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
6245 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
6246 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
6247 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006248 /* Store remove key pointer, as this will be used for response */
6249 /* store Params pass it to WDI */
6250 pWdaParams->pWdaContext = pWDA;
6251 pWdaParams->wdaMsgParam = removeStaKeyParams;
6252 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006253 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
6254 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006255 if(IS_WDI_STATUS_FAILURE(status))
6256 {
6257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6258 "Failure in remove STA Key Req WDI API, free all the memory " );
6259 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6260 vos_mem_free(pWdaParams) ;
6261 removeStaKeyParams->status = eSIR_FAILURE ;
6262 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
6263 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006264 return CONVERT_WDI2VOS_STATUS(status) ;
6265}
Jeff Johnson295189b2012-06-20 16:38:30 -07006266/*
6267 * FUNCTION: WDA_IsHandleSetLinkStateReq
6268 * Update the WDA state and return the status to handle this message or not
6269 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006270WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
6271 tWDA_CbContext *pWDA,
6272 tLinkStateParams *linkStateParams)
6273{
6274 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006275 switch(linkStateParams->state)
6276 {
6277 case eSIR_LINK_PREASSOC_STATE:
6278 case eSIR_LINK_BTAMP_PREASSOC_STATE:
6279 /*
6280 * set the WDA state to PRE ASSOC
6281 * copy the BSSID into pWDA to use it in join request and return,
6282 * No need to handle these messages.
6283 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006284 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
6285 {
6286 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07006287 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006288 }
6289 else
6290 {
6291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006292 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006293 VOS_ASSERT(0);
6294 }
6295
6296 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
6297 {
6298 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07006299 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006300 }
6301 else
6302 {
6303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006304 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006305 VOS_ASSERT(0);
6306 }
6307
Jeff Johnson295189b2012-06-20 16:38:30 -07006308 /* UMAC is issuing the setlink state with PREASSOC twice (before set
6309 *channel and after ) so reset the WDA state to ready when the second
6310 * time UMAC issue the link state with PREASSOC
6311 */
6312 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
6313 {
6314 /* RESET WDA state back to WDA_READY_STATE */
6315 pWDA->wdaState = WDA_READY_STATE;
6316 }
6317 else
6318 {
6319 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
6320 }
6321 //populate linkState info in WDACbCtxt
6322 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07006323 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07006324 default:
6325 if(pWDA->wdaState != WDA_READY_STATE)
6326 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07006327 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
6328 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
6329 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
6330 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
6331 *the ASSERT in WDA_Stop during module unload.*/
6332 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
6333 {
6334 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006335 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07006336 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006337 else
6338 {
6339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07006340 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07006341 status = WDA_IGNORE_SET_LINK_STATE;
6342 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006343 }
6344 break;
6345 }
6346
6347 return status;
6348}
Jeff Johnson295189b2012-06-20 16:38:30 -07006349/*
6350 * FUNCTION: WDA_SetLinkStateCallback
6351 * call back function for set link state from WDI
6352 */
6353void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
6354{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306355 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006356 tLinkStateParams *linkStateParams;
6357 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006359 "<------ %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306360 if (NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006361 {
6362 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006363 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006364 VOS_ASSERT(0) ;
6365 return ;
6366 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006367 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306368 if (NULL == pWDA)
6369 {
6370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6371 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306372 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6373 vos_mem_free(pWdaParams->wdaMsgParam);
6374 vos_mem_free(pWdaParams);
6375
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306376 VOS_ASSERT(0);
6377 return ;
6378 }
6379
Jeff Johnson295189b2012-06-20 16:38:30 -07006380 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006381 /*
6382 * In STA mode start the BA activity check timer after association
6383 * and in AP mode start BA activity check timer after BSS start */
6384 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
6385 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07006386 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
6387 ((status == WDI_STATUS_SUCCESS) &&
6388 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07006389 {
6390 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
6391 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006392 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006393 /*
6394 * No respone required for WDA_SET_LINK_STATE so free the request
6395 * param here
6396 */
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306397 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6398 vos_mem_free(pWdaParams);
6399
Jeff Johnson295189b2012-06-20 16:38:30 -07006400 return ;
6401}
Jeff Johnson295189b2012-06-20 16:38:30 -07006402/*
6403 * FUNCTION: WDA_ProcessSetLinkState
6404 * Request to WDI to set the link status.
6405 */
6406VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
6407 tLinkStateParams *linkStateParams)
6408{
6409 WDI_Status status = WDI_STATUS_SUCCESS ;
6410 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
6411 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
6412 sizeof(WDI_SetLinkReqParamsType)) ;
6413 tWDA_ReqParams *pWdaParams ;
6414 tpAniSirGlobal pMac;
6415 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
6416
6417 if(NULL == pMac)
6418 {
6419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006420 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006421 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07006422 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006423 return VOS_STATUS_E_FAILURE;
6424 }
6425
6426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006427 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006428 if(NULL == wdiSetLinkStateParam)
6429 {
6430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006431 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006432 VOS_ASSERT(0);
6433 return VOS_STATUS_E_NOMEM;
6434 }
6435 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6436 if(NULL == pWdaParams)
6437 {
6438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006439 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006440 VOS_ASSERT(0);
6441 vos_mem_free(wdiSetLinkStateParam);
6442 return VOS_STATUS_E_NOMEM;
6443 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006444 if(WDA_IGNORE_SET_LINK_STATE ==
6445 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
6446 {
6447 status = WDI_STATUS_E_FAILURE;
6448 }
6449 else
6450 {
6451 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
6452 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006453 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
6454 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006455 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
6456 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006457 pWdaParams->pWdaContext = pWDA;
6458 /* Store remove key pointer, as this will be used for response */
6459 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006460 /* store Params pass it to WDI */
6461 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
6462 /* Stop Timer only other than GO role and concurrent session */
6463 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07006464 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07006465 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
6466 {
6467 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
6468 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006469 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
6470 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006471 if(IS_WDI_STATUS_FAILURE(status))
6472 {
6473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6474 "Failure in set link state Req WDI API, free all the memory " );
6475 }
6476 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006477 if(IS_WDI_STATUS_FAILURE(status))
6478 {
6479 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07006480 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006481 vos_mem_free(pWdaParams);
6482 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006483 return CONVERT_WDI2VOS_STATUS(status) ;
6484}
Jeff Johnson295189b2012-06-20 16:38:30 -07006485/*
6486 * FUNCTION: WDA_GetStatsReqParamsCallback
6487 * send the response to PE with Stats received from WDI
6488 */
6489void WDA_GetStatsReqParamsCallback(
6490 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
6491 void* pUserData)
6492{
Jeff Johnson295189b2012-06-20 16:38:30 -07006493 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306494 vos_msg_t vosMsg;
Jeff Johnson295189b2012-06-20 16:38:30 -07006495
6496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006497 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006498 pGetPEStatsRspParams =
6499 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
6500 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
6501
6502 if(NULL == pGetPEStatsRspParams)
6503 {
6504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006505 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006506 VOS_ASSERT(0);
6507 return;
6508 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006509 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306510 pGetPEStatsRspParams->msgType = eWNI_SME_GET_STATISTICS_RSP;
Jeff Johnson295189b2012-06-20 16:38:30 -07006511 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
6512 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006513
6514 //Fill the Session Id Properly in PE
6515 pGetPEStatsRspParams->sessionId = 0;
6516 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006517 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07006518 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
6519 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07006520 vos_mem_copy( pGetPEStatsRspParams + 1,
6521 wdiGetStatsRsp + 1,
6522 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306523
6524 vosMsg.type = eWNI_SME_GET_STATISTICS_RSP;
6525 vosMsg.bodyptr = (void *)pGetPEStatsRspParams;
6526 vosMsg.bodyval = 0;
6527 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME,
6528 (vos_msg_t*)&vosMsg))
6529 {
6530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6531 "%s: fail to post eWNI_SME_GET_STATISTICS_RSP", __func__);
6532 vos_mem_free(pGetPEStatsRspParams);
6533 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006534
6535 return;
6536}
6537
Jeff Johnson295189b2012-06-20 16:38:30 -07006538/*
6539 * FUNCTION: WDA_ProcessGetStatsReq
6540 * Request to WDI to get the statistics
6541 */
6542VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
6543 tAniGetPEStatsReq *pGetStatsParams)
6544{
6545 WDI_Status status = WDI_STATUS_SUCCESS ;
6546 WDI_GetStatsReqParamsType wdiGetStatsParam;
6547 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306548 vos_msg_t vosMsg;
6549
Jeff Johnson295189b2012-06-20 16:38:30 -07006550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006551 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006552 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
6553 pGetStatsParams->staId;
6554 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
6555 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07006556 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006557 status = WDI_GetStatsReq(&wdiGetStatsParam,
6558 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006559 if(IS_WDI_STATUS_FAILURE(status))
6560 {
6561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6562 "Failure in Get Stats Req WDI API, free all the memory " );
6563 pGetPEStatsRspParams =
6564 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
6565 if(NULL == pGetPEStatsRspParams)
6566 {
6567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006568 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006569 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006570 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006571 return VOS_STATUS_E_NOMEM;
6572 }
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306573 pGetPEStatsRspParams->msgType = eWNI_SME_GET_STATISTICS_RSP;
Jeff Johnson295189b2012-06-20 16:38:30 -07006574 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
6575 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
6576 pGetPEStatsRspParams->rc = eSIR_FAILURE;
Hanumantha Reddy Pothulab2a0c832015-11-06 19:44:55 +05306577
6578 vosMsg.type = eWNI_SME_GET_STATISTICS_RSP;
6579 vosMsg.bodyptr = (void *)pGetPEStatsRspParams;
6580 vosMsg.bodyval = 0;
6581 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME,
6582 (vos_msg_t*)&vosMsg))
6583 {
6584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6585 "%s: fail to post eWNI_SME_GET_STATISTICS_RSP", __func__);
6586 vos_mem_free(pGetPEStatsRspParams);
6587 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006588 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006589 /* Free the request message */
6590 vos_mem_free(pGetStatsParams);
6591 return CONVERT_WDI2VOS_STATUS(status);
6592}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006593
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08006594#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006595/*
6596 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
6597 * send the response to PE with roam Rssi received from WDI
6598 */
6599void WDA_GetRoamRssiReqParamsCallback(
6600 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
6601 void* pUserData)
6602{
6603 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6604 tWDA_CbContext *pWDA = NULL;
6605 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
6606 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
6607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6608 "<------ %s " ,__func__);
6609 if(NULL == pWdaParams)
6610 {
6611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6612 "%s: pWdaParams received NULL", __func__);
6613 VOS_ASSERT(0) ;
6614 return ;
6615 }
6616 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6617 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
6618
6619 if(NULL == pGetRoamRssiReqParams)
6620 {
6621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6622 "%s: pGetRoamRssiReqParams received NULL", __func__);
6623 VOS_ASSERT(0);
6624 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6625 vos_mem_free(pWdaParams);
6626 return ;
6627 }
6628 pGetRoamRssiRspParams =
6629 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
6630
6631 if(NULL == pGetRoamRssiRspParams)
6632 {
6633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6634 "%s: VOS MEM Alloc Failure", __func__);
6635 VOS_ASSERT(0);
6636 return;
6637 }
6638 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
6639 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006640 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006641 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
6642 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
6643
6644 /* Assign get roam rssi req (backup) in to the response */
6645 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
6646
6647 /* free WDI command buffer */
6648 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6649 vos_mem_free(pWdaParams) ;
6650
6651 /* send response to UMAC*/
6652 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
6653
6654 return;
6655}
6656
6657
6658
6659/*
6660 * FUNCTION: WDA_ProcessGetRoamRssiReq
6661 * Request to WDI to get the statistics
6662 */
6663VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
6664 tAniGetRssiReq *pGetRoamRssiParams)
6665{
6666 WDI_Status status = WDI_STATUS_SUCCESS ;
6667 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
6668 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
6669 tWDA_ReqParams *pWdaParams = NULL;
6670
6671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6672 "------> %s " ,__func__);
6673 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
6674 pGetRoamRssiParams->staId;
6675 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
6676
6677 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6678 if(NULL == pWdaParams)
6679 {
6680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6681 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05306682 vos_mem_free(pGetRoamRssiParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006683 VOS_ASSERT(0);
6684 return VOS_STATUS_E_NOMEM;
6685 }
6686
6687 /* Store Init Req pointer, as this will be used for response */
6688 pWdaParams->pWdaContext = pWDA;
6689
6690 /* Take Get roam Rssi req backup as it stores the callback to be called after
6691 receiving the response */
6692 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
6693 pWdaParams->wdaWdiApiMsgParam = NULL;
6694
6695 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
6696 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
6697 if(IS_WDI_STATUS_FAILURE(status))
6698 {
6699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6700 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
6701 pGetRoamRssiRspParams =
6702 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
6703 if(NULL == pGetRoamRssiRspParams)
6704 {
6705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6706 "%s: VOS MEM Alloc Failure", __func__);
6707 VOS_ASSERT(0);
Abhishek Singh1e2bfa32014-01-02 15:44:15 +05306708 vos_mem_free(pGetRoamRssiParams);
6709 vos_mem_free(pWdaParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006710 return VOS_STATUS_E_NOMEM;
6711 }
6712 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
6713 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
6714 pGetRoamRssiRspParams->rssi = 0;
6715 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
6716 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
6717 (void *)pGetRoamRssiRspParams, 0) ;
6718 }
6719 return CONVERT_WDI2VOS_STATUS(status);
6720}
6721#endif
6722
6723
Jeff Johnson295189b2012-06-20 16:38:30 -07006724/*
6725 * FUNCTION: WDA_UpdateEDCAParamCallback
6726 * call back function for Update EDCA params from WDI
6727 */
6728void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
6729{
6730 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6731 tEdcaParams *pEdcaParams;
6732
6733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006734 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006735 if(NULL == pWdaParams)
6736 {
6737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006738 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006739 VOS_ASSERT(0) ;
6740 return ;
6741 }
6742 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006743 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6744 vos_mem_free(pWdaParams);
6745 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006746 return ;
6747}
Jeff Johnson295189b2012-06-20 16:38:30 -07006748/*
6749 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
6750 * Request to WDI to Update the EDCA params.
6751 */
6752VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
6753 tEdcaParams *pEdcaParams)
6754{
6755 WDI_Status status = WDI_STATUS_SUCCESS ;
6756 WDI_UpdateEDCAParamsType *wdiEdcaParam =
6757 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
6758 sizeof(WDI_UpdateEDCAParamsType)) ;
6759 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006761 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006762 if(NULL == wdiEdcaParam)
6763 {
6764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006765 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006766 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006767 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006768 return VOS_STATUS_E_NOMEM;
6769 }
6770 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6771 if(NULL == pWdaParams)
6772 {
6773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006774 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006775 VOS_ASSERT(0);
6776 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006777 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006778 return VOS_STATUS_E_NOMEM;
6779 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006780 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
Bansidhar Gopalachari5dcf9e02013-07-29 19:53:58 -07006781 /*
6782 Since firmware is not using highperformance flag, we have removed
6783 this flag from wdiEDCAInfo structure to match sizeof the structure
6784 between host and firmware.In future if we are planning to use
6785 highperformance flag then Please define this flag in wdiEDCAInfo
6786 structure, update it here and send it to firmware. i.e.
6787 Following is the original line which we removed as part of the fix
6788 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid =
6789 pEdcaParams->highPerformance;
6790 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006791 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
6792 &pEdcaParams->acbe);
6793 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
6794 &pEdcaParams->acbk);
6795 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
6796 &pEdcaParams->acvi);
6797 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
6798 &pEdcaParams->acvo);
6799 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006800 pWdaParams->pWdaContext = pWDA;
6801 /* Store remove key pointer, as this will be used for response */
6802 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006803 /* store Params pass it to WDI */
6804 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006805 status = WDI_UpdateEDCAParams(wdiEdcaParam,
6806 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006807 if(IS_WDI_STATUS_FAILURE(status))
6808 {
6809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6810 "Failure in Update EDCA Params WDI API, free all the memory " );
6811 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6812 vos_mem_free(pWdaParams);
6813 vos_mem_free(pEdcaParams);
6814 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006815 return CONVERT_WDI2VOS_STATUS(status) ;
6816}
Jeff Johnson295189b2012-06-20 16:38:30 -07006817/*
6818 * FUNCTION: WDA_AddBAReqCallback
6819 * send ADD BA RSP back to PE
6820 */
6821void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
6822 void* pUserData)
6823{
6824 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6825 tWDA_CbContext *pWDA;
6826 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006828 "<------ %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306829 if (NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006830 {
6831 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006832 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006833 VOS_ASSERT(0) ;
6834 return ;
6835 }
6836 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306837 if (NULL == pWDA)
6838 {
6839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6840 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306841 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6842 vos_mem_free(pWdaParams->wdaMsgParam);
6843 vos_mem_free(pWdaParams);
6844
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306845 VOS_ASSERT(0);
6846 return ;
6847 }
6848
Jeff Johnson295189b2012-06-20 16:38:30 -07006849 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006850 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6851 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006852 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006853 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006854 return ;
6855}
6856
Jeff Johnson295189b2012-06-20 16:38:30 -07006857/*
6858 * FUNCTION: WDA_ProcessAddBAReq
6859 * Request to WDI to Update the ADDBA REQ params.
6860 */
6861VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
Abhishek Singh01c73d12015-03-12 15:13:44 +05306862 tANI_U16 baSessionID, tANI_U8 staIdx, tANI_U8 ucWinSize, tAddBAParams *pAddBAReqParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006863{
Jeff Johnson43971f52012-07-17 12:26:56 -07006864 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07006865 WDI_AddBAReqParamsType *wdiAddBAReqParam =
6866 (WDI_AddBAReqParamsType *)vos_mem_malloc(
6867 sizeof(WDI_AddBAReqParamsType)) ;
6868 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006869 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006870 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006871 if(NULL == wdiAddBAReqParam)
6872 {
6873 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006874 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006875 VOS_ASSERT(0);
6876 return VOS_STATUS_E_NOMEM;
6877 }
6878 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6879 if(NULL == pWdaParams)
6880 {
6881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006882 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006883 VOS_ASSERT(0);
6884 vos_mem_free(wdiAddBAReqParam);
6885 return VOS_STATUS_E_NOMEM;
6886 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006887 do
6888 {
6889 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006890 wdiAddBaInfo->ucSTAIdx = staIdx ;
6891 wdiAddBaInfo->ucBaSessionID = baSessionID ;
Abhishek Singh01c73d12015-03-12 15:13:44 +05306892 wdiAddBaInfo->ucWinSize = ucWinSize ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006893 } while(0) ;
6894 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006895 pWdaParams->pWdaContext = pWDA;
6896 /* store Params pass it to WDI */
6897 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
6898 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07006899 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
6900 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006901
Jeff Johnson43971f52012-07-17 12:26:56 -07006902 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07006903 {
6904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07006905 "Failure in ADD BA REQ Params WDI API, free all the memory" );
6906 status = CONVERT_WDI2VOS_STATUS(wstatus);
6907 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006908 vos_mem_free(pWdaParams);
6909 pAddBAReqParams->status = eSIR_FAILURE;
6910 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6911 }
Jeff Johnson43971f52012-07-17 12:26:56 -07006912 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07006913}
Jeff Johnson295189b2012-06-20 16:38:30 -07006914/*
6915 * FUNCTION: WDA_AddBASessionReqCallback
6916 * send ADD BA SESSION RSP back to PE/(or TL)
6917 */
6918void WDA_AddBASessionReqCallback(
6919 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
6920{
6921 VOS_STATUS status = VOS_STATUS_SUCCESS ;
6922 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306923 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006924 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006926 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006927 if(NULL == pWdaParams)
6928 {
6929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006930 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006931 VOS_ASSERT(0) ;
6932 return ;
6933 }
6934 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306935 if (NULL == pWDA)
6936 {
6937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6938 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306939 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6940 vos_mem_free(pWdaParams->wdaMsgParam);
6941 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306942 VOS_ASSERT(0);
6943 return ;
6944 }
6945
Jeff Johnson295189b2012-06-20 16:38:30 -07006946 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006947 if( NULL == pAddBAReqParams )
6948 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006950 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006951 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006952 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6953 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006954 return ;
6955 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006956 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6957 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006958 /*
Deepthi Gowriba794fc2015-03-27 17:14:01 +05306959 * if BA direction is for recipient, update TL with BA session params and send
Jeff Johnson295189b2012-06-20 16:38:30 -07006960 * another request to HAL(/WDI) (ADD_BA_REQ)
6961 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006962 if((VOS_STATUS_SUCCESS ==
6963 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
Deepthi Gowriba794fc2015-03-27 17:14:01 +05306964 (eBA_RECIPIENT == pAddBAReqParams->baDirection))
Jeff Johnson295189b2012-06-20 16:38:30 -07006965 {
6966 /* Update TL with BA info received from HAL/WDI */
6967 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
6968 wdiAddBaSession->usBaSessionID,
6969 wdiAddBaSession->ucSTAIdx,
6970 wdiAddBaSession->ucBaTID,
6971 wdiAddBaSession->ucBaBufferSize,
6972 wdiAddBaSession->ucWinSize,
6973 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07006974 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
Abhishek Singh01c73d12015-03-12 15:13:44 +05306975 wdiAddBaSession->ucSTAIdx,
6976 wdiAddBaSession->ucWinSize, pAddBAReqParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006977 }
6978 else
6979 {
6980 pAddBAReqParams->status =
6981 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
6982
6983 /* Setting Flag to indicate that Set BA is success */
6984 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
6985 {
6986 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
6987 tANI_U8 tid = wdiAddBaSession->ucBaTID;
6988 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
6989 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006990 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6991 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006992 /*Reset the WDA state to READY */
6993 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006994 return ;
6995}
6996
Jeff Johnson295189b2012-06-20 16:38:30 -07006997/*
6998 * FUNCTION: WDA_ProcessAddBASessionReq
6999 * Request to WDI to Update the ADDBA REQ params.
7000 */
7001VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
7002 tAddBAParams *pAddBAReqParams)
7003{
7004 WDI_Status status = WDI_STATUS_SUCCESS ;
7005 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
7006 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
7007 sizeof(WDI_AddBASessionReqParamsType)) ;
7008 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07007009 WLANTL_STAStateType tlSTAState = 0;
7010
Jeff Johnson295189b2012-06-20 16:38:30 -07007011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007012 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007013 if(NULL == wdiAddBASessionReqParam)
7014 {
7015 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007016 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007017 VOS_ASSERT(0);
7018 return VOS_STATUS_E_NOMEM;
7019 }
7020 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7021 if(NULL == pWdaParams)
7022 {
7023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007024 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007025 VOS_ASSERT(0);
7026 vos_mem_free(wdiAddBASessionReqParam);
7027 return VOS_STATUS_E_NOMEM;
7028 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007029 /*
7030 * Populate ADD BA parameters and pass these paarmeters to WDI.
7031 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
7032 * the state to track if these is BA recipient case or BA initiator
7033 * case.
7034 */
7035 do
7036 {
7037 WDI_AddBASessionReqinfoType *wdiBAInfoType =
7038 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
7039 /* vos_mem_copy(wdiBAInfoType->macBSSID,
7040 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
7041 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
7042 vos_mem_copy(wdiBAInfoType->macPeerAddr,
7043 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007044 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07007045 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
7046 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
7047 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
7048 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
7049 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Deepthi Gowriba794fc2015-03-27 17:14:01 +05307050
Jeff Johnson295189b2012-06-20 16:38:30 -07007051 }while(0) ;
7052 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007053 pWdaParams->pWdaContext = pWDA;
7054 /* Store ADD BA pointer, as this will be used for response */
7055 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
7056 /* store Params pass it to WDI */
7057 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07007058
7059 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
7060 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
7061 */
7062 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
7063 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
7064 {
7065 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007066 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.", pAddBAReqParams->staIdx, tlSTAState );
Hoonki Leea0631ce2013-04-15 16:59:08 -07007067 status = WDI_STATUS_E_NOT_ALLOWED;
7068 pAddBAReqParams->status =
7069 CONVERT_WDI2SIR_STATUS(status) ;
7070 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
7071 /*Reset the WDA state to READY */
7072 pWDA->wdaState = WDA_READY_STATE;
7073 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7074 vos_mem_free(pWdaParams);
7075
7076 return CONVERT_WDI2VOS_STATUS(status) ;
7077 }
7078
Jeff Johnson295189b2012-06-20 16:38:30 -07007079 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
7080 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007081 if(IS_WDI_STATUS_FAILURE(status))
7082 {
7083 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007084 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d", status);
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07007085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007086 "Send ADD BA failure response to PE");
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07007087 pAddBAReqParams->status =
7088 CONVERT_WDI2SIR_STATUS(status) ;
7089 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07007090 /*Reset the WDA state to READY */
7091 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07007092 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007093 vos_mem_free(pWdaParams);
7094 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007095 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007096}
Jeff Johnson295189b2012-06-20 16:38:30 -07007097/*
7098 * FUNCTION: WDA_DelBANotifyTL
7099 * send DEL BA IND to TL
7100 */
7101void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
7102 tDelBAParams *pDelBAReqParams)
7103{
7104 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
7105 //tSirMsgQ msg;
7106 vos_msg_t vosMsg;
7107 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07007108 if(NULL == pDelBAInd)
7109 {
7110 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007111 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007112 VOS_ASSERT(0) ;
7113 return;
7114 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007115 pDelBAInd->mesgType = WDA_DELETEBA_IND;
7116 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
7117 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
7118 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07007119
Jeff Johnson295189b2012-06-20 16:38:30 -07007120
7121 vosMsg.type = WDA_DELETEBA_IND;
7122 vosMsg.bodyptr = pDelBAInd;
7123 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
7124 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
7125 {
7126 vosStatus = VOS_STATUS_E_BADMSG;
7127 }
7128}
Jeff Johnson295189b2012-06-20 16:38:30 -07007129/*
7130 * FUNCTION: WDA_DelBAReqCallback
7131 * send DEL BA RSP back to PE
7132 */
7133void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
7134{
7135 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7136 tWDA_CbContext *pWDA;
7137 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007139 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007140 if(NULL == pWdaParams)
7141 {
7142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007143 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007144 VOS_ASSERT(0) ;
7145 return ;
7146 }
7147 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307148
Jeff Johnson295189b2012-06-20 16:38:30 -07007149 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007150 /* Notify TL about DEL BA in case of recipinet */
7151 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
7152 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
7153 {
7154 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
7155 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007156 /*
7157 * No respone required for WDA_DELBA_IND so just free the request
7158 * param here
7159 */
7160 vos_mem_free(pDelBAReqParams);
7161 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7162 vos_mem_free(pWdaParams);
7163 return ;
7164}
7165
Jeff Johnson295189b2012-06-20 16:38:30 -07007166/*
7167 * FUNCTION: WDA_ProcessDelBAReq
7168 * Request to WDI to Update the DELBA REQ params.
7169 */
7170VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
7171 tDelBAParams *pDelBAReqParams)
7172{
7173 WDI_Status status = WDI_STATUS_SUCCESS ;
7174 WDI_DelBAReqParamsType *wdiDelBAReqParam =
7175 (WDI_DelBAReqParamsType *)vos_mem_malloc(
7176 sizeof(WDI_DelBAReqParamsType)) ;
7177 tWDA_ReqParams *pWdaParams ;
7178 tANI_U16 staIdx = 0;
7179 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07007180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007181 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007182 if(NULL == wdiDelBAReqParam)
7183 {
7184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007185 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007186 VOS_ASSERT(0);
7187 return VOS_STATUS_E_NOMEM;
7188 }
7189 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7190 if(NULL == pWdaParams)
7191 {
7192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007193 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007194 VOS_ASSERT(0);
7195 vos_mem_free(wdiDelBAReqParam);
7196 return VOS_STATUS_E_NOMEM;
7197 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007198 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
7199 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
7200 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
7201 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007202 pWdaParams->pWdaContext = pWDA;
7203 /* Store DEL BA pointer, as this will be used for response */
7204 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007205 /* store Params pass it to WDI */
7206 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007207 /* if BA exchange over the air is failed, clear this tid in BaBitmap
7208 * maintained in WDA, so that WDA can retry for another BA session
7209 */
7210 staIdx = pDelBAReqParams->staIdx;
7211 tid = pDelBAReqParams->baTID;
7212 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07007213 status = WDI_DelBAReq(wdiDelBAReqParam,
7214 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007215 if(IS_WDI_STATUS_FAILURE(status))
7216 {
7217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7218 "Failure in DEL BA REQ Params WDI API, free all the memory " );
7219 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7220 vos_mem_free(pWdaParams->wdaMsgParam);
7221 vos_mem_free(pWdaParams);
7222 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007223 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007224}
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007225
7226/*
7227 * FUNCTION: WDA_UpdateChReqCallback
7228 *
7229 */
7230void WDA_UpdateChReqCallback(WDI_Status status, void* pUserData)
7231{
Siddharth Bhala006c122014-05-03 12:13:27 +05307232 tWDA_ReqParams *pWdaParams;
7233 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
7234 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
7235 WDI_UpdateChannelReqinfoType *pChanInfoType;
7236 tSirUpdateChanList *pChanList;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007237
7238 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7239 "<------ %s " ,__func__);
Siddharth Bhala006c122014-05-03 12:13:27 +05307240 if(NULL == pUserData)
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007241 {
7242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhala006c122014-05-03 12:13:27 +05307243 "%s: pUserData received NULL", __func__);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007244 VOS_ASSERT(0);
7245 return;
7246 }
7247
Siddharth Bhala006c122014-05-03 12:13:27 +05307248 pWdaParams = (tWDA_ReqParams *)pUserData;
7249 pwdiUpdateChReqParam =
7250 (WDI_UpdateChReqParamsType *)pWdaParams->wdaWdiApiMsgParam;
7251 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
7252 pChanInfoType = pwdiUpdateChanReqType->pchanParam;
7253 pChanList = (tSirUpdateChanList *)pWdaParams->wdaMsgParam;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007254 /*
7255 * currently there is no response message is expected between PE and
7256 * WDA, Failure return from WDI is a ASSERT condition
7257 */
7258 vos_mem_free(pChanInfoType);
7259 vos_mem_free(pChanList);
7260 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7261 vos_mem_free(pWdaParams);
7262
7263 return;
7264}
7265
7266/*
7267 * FUNCTION: WDA_ProcessUpdateChannelList
7268 * Request to WDI to Update the ChannelList params.
7269 */
7270VOS_STATUS WDA_ProcessUpdateChannelList(tWDA_CbContext *pWDA,
7271 tSirUpdateChanList *pChanList)
7272{
7273 WDI_Status status = WDI_STATUS_SUCCESS;
7274 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
7275 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
7276 WDI_UpdateChannelReqinfoType *pChanInfoType;
7277 tWDA_ReqParams *pWdaParams;
7278 wpt_uint8 i;
7279
7280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7281 "------> %s " ,__func__);
7282 if(NULL == pChanList)
7283 {
7284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7285 "%s: NULL pChanList", __func__);
7286 VOS_ASSERT(0);
7287 return VOS_STATUS_E_INVAL;
7288 }
7289
7290 if(!WDA_getFwWlanFeatCaps(UPDATE_CHANNEL_LIST))
7291 {
Ratheesh S P36dbc932015-08-07 14:28:57 +05307292 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007293 "Update channel list capability Not Supported");
7294 vos_mem_free(pChanList);
7295 return VOS_STATUS_E_INVAL;
7296 }
7297
7298 pwdiUpdateChReqParam = (WDI_UpdateChReqParamsType *)vos_mem_malloc(
7299 sizeof(WDI_UpdateChReqParamsType));
7300 if(NULL == pwdiUpdateChReqParam)
7301 {
7302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7303 "%s: VOS MEM Alloc Failed for WDI_UpdateChReqParamsType",
7304 __func__);
7305 VOS_ASSERT(0);
7306 vos_mem_free(pChanList);
7307 return VOS_STATUS_E_NOMEM;
7308 }
7309 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
7310 pChanInfoType = (WDI_UpdateChannelReqinfoType *)
7311 vos_mem_malloc(sizeof(WDI_UpdateChannelReqinfoType) *
7312 pChanList->numChan);
7313 if(NULL == pChanInfoType)
7314 {
7315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7316 "%s: VOS MEM Alloc Failure", __func__);
7317 VOS_ASSERT(0);
7318 vos_mem_free(pChanList);
7319 vos_mem_free(pwdiUpdateChReqParam);
7320 return VOS_STATUS_E_NOMEM;
7321 }
7322 vos_mem_zero(pChanInfoType, sizeof(WDI_UpdateChannelReqinfoType)
7323 * pChanList->numChan);
7324 pwdiUpdateChanReqType->pchanParam = pChanInfoType;
7325
7326 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7327 if(NULL == pWdaParams)
7328 {
7329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7330 "%s: VOS MEM Alloc Failure", __func__);
7331 VOS_ASSERT(0);
7332 vos_mem_free(pChanList);
7333 vos_mem_free(pChanInfoType);
7334 vos_mem_free(pwdiUpdateChReqParam);
7335 return VOS_STATUS_E_NOMEM;
7336 }
7337 pwdiUpdateChanReqType->numchan = pChanList->numChan;
7338
7339 for(i = 0; i < pwdiUpdateChanReqType->numchan; i++)
7340 {
7341 pChanInfoType->mhz =
7342 vos_chan_to_freq(pChanList->chanParam[i].chanId);
7343
7344 pChanInfoType->band_center_freq1 = pChanInfoType->mhz;
7345 pChanInfoType->band_center_freq2 = 0;
7346
7347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7348 "chan[%d] = %u", i, pChanInfoType->mhz);
7349 if (pChanList->chanParam[i].dfsSet)
7350 {
7351 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_PASSIVE);
7352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7353 "chan[%d] DFS[%d]", pChanList->chanParam[i].chanId,
7354 pChanList->chanParam[i].dfsSet);
7355 }
7356
7357 if (pChanInfoType->mhz < WDA_2_4_GHZ_MAX_FREQ)
7358 {
7359 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11G);
7360 }
7361 else
7362 {
7363 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11A);
7364 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_HT);
7365 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_VHT);
7366 }
7367
7368 WDA_SET_CHANNEL_MAX_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
7369 WDA_SET_CHANNEL_REG_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
Sachin Ahujacb64fc82015-01-12 17:01:05 +05307370 WDA_SET_CUURENT_REG_DOMAIN(pChanInfoType, pChanList->regId);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007371 pChanInfoType++;
7372 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08007373 pwdiUpdateChReqParam->wdiReqStatusCB = NULL;
7374 pWdaParams->pWdaContext = pWDA;
7375 pWdaParams->wdaMsgParam = (void *)pChanList;
7376 /* store Params pass it to WDI */
7377 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiUpdateChReqParam;
7378 status = WDI_UpdateChannelReq(pwdiUpdateChReqParam,
7379 (WDI_UpdateChannelRspCb)WDA_UpdateChReqCallback, pWdaParams);
7380 if(IS_WDI_STATUS_FAILURE(status))
7381 {
7382 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7383 "Failure in Update Channel REQ Params WDI API, free all the memory");
7384 vos_mem_free(pwdiUpdateChanReqType->pchanParam);
7385 vos_mem_free(pwdiUpdateChReqParam);
7386 vos_mem_free(pWdaParams->wdaMsgParam);
7387 vos_mem_free(pWdaParams);
7388 }
7389 return CONVERT_WDI2VOS_STATUS(status);
7390}
7391
Jeff Johnson295189b2012-06-20 16:38:30 -07007392/*
7393 * FUNCTION: WDA_AddTSReqCallback
7394 * send ADD TS RSP back to PE
7395 */
7396void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
7397{
7398 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307399 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007400 tAddTsParams *pAddTsReqParams;
7401
7402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007403 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007404 if(NULL == pWdaParams)
7405 {
7406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007407 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007408 VOS_ASSERT(0) ;
7409 return ;
7410 }
7411 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307412 if (NULL == pWDA)
7413 {
7414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7415 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307416 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7417 vos_mem_free(pWdaParams->wdaMsgParam);
7418 vos_mem_free(pWdaParams);
7419
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307420 VOS_ASSERT(0);
7421 return ;
7422 }
7423
Jeff Johnson295189b2012-06-20 16:38:30 -07007424 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
7425 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7426 vos_mem_free(pWdaParams);
7427
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007428 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007429 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007430 return ;
7431}
7432
Jeff Johnson295189b2012-06-20 16:38:30 -07007433/*
7434 * FUNCTION: WDA_ProcessAddTSReq
7435 * Request to WDI to Update the ADD TS REQ params.
7436 */
7437VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
7438 tAddTsParams *pAddTsReqParams)
7439{
7440 WDI_Status status = WDI_STATUS_SUCCESS ;
7441 WDI_AddTSReqParamsType *wdiAddTSReqParam =
7442 (WDI_AddTSReqParamsType *)vos_mem_malloc(
7443 sizeof(WDI_AddTSReqParamsType)) ;
7444 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007446 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007447 if(NULL == wdiAddTSReqParam)
7448 {
7449 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007450 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007451 VOS_ASSERT(0);
7452 return VOS_STATUS_E_NOMEM;
7453 }
7454 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7455 if(NULL == pWdaParams)
7456 {
7457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007458 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007459 VOS_ASSERT(0);
7460 vos_mem_free(wdiAddTSReqParam);
7461 return VOS_STATUS_E_NOMEM;
7462 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007463 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
7464 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07007465 //TS IE
7466 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
7467 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
7468 pAddTsReqParams->tspec.length;
7469
7470 //TS IE : TS INFO : TRAFFIC
7471 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
7472 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
7473 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
7474 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
7475 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
7476 pAddTsReqParams->tspec.tsinfo.traffic.psb;
7477 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
7478 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
7479 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
7480 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
7481 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
7482 pAddTsReqParams->tspec.tsinfo.traffic.direction;
7483 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
7484 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
7485 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
7486 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
7487
7488 //TS IE : TS INFO : SCHEDULE
7489 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
7490 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
7491 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
7492 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07007493 //TS IE
7494 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
7495 pAddTsReqParams->tspec.nomMsduSz;
7496 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
7497 pAddTsReqParams->tspec.maxMsduSz;
7498 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
7499 pAddTsReqParams->tspec.minSvcInterval;
7500 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
7501 pAddTsReqParams->tspec.maxSvcInterval;
7502 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
7503 pAddTsReqParams->tspec.inactInterval;
7504 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
7505 pAddTsReqParams->tspec.suspendInterval;
7506 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
7507 pAddTsReqParams->tspec.svcStartTime;
7508 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
7509 pAddTsReqParams->tspec.minDataRate;
7510 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
7511 pAddTsReqParams->tspec.meanDataRate;
7512 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
7513 pAddTsReqParams->tspec.peakDataRate;
7514 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
7515 pAddTsReqParams->tspec.maxBurstSz;
7516 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
7517 pAddTsReqParams->tspec.delayBound;
7518 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
7519 pAddTsReqParams->tspec.minPhyRate;
7520 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
7521 pAddTsReqParams->tspec.surplusBw;
7522 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
7523 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07007524 /* TODO: tAddTsParams doesn't have the following fields */
7525#if 0
7526 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
7527 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
7528 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
7529 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
7530#endif
7531 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
7532
7533 pWdaParams->pWdaContext = pWDA;
7534 /* Store ADD TS pointer, as this will be used for response */
7535 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007536 /* store Params pass it to WDI */
7537 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007538 status = WDI_AddTSReq(wdiAddTSReqParam,
7539 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007540 if(IS_WDI_STATUS_FAILURE(status))
7541 {
7542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7543 "Failure in ADD TS REQ Params WDI API, free all the memory " );
7544 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7545 vos_mem_free(pWdaParams);
7546 pAddTsReqParams->status = eSIR_FAILURE ;
7547 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
7548 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007549 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007550}
7551
Jeff Johnson295189b2012-06-20 16:38:30 -07007552/*
7553 * FUNCTION: WDA_DelTSReqCallback
7554 * send DEL TS RSP back to PE
7555 */
7556void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
7557{
7558 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007560 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007561 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7562 vos_mem_free(pWdaParams->wdaMsgParam) ;
7563 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007564 /*
7565 * No respone required for WDA_DEL_TS_REQ so just free the request
7566 * param here
7567 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007568 return ;
7569}
7570
Jeff Johnson295189b2012-06-20 16:38:30 -07007571/*
7572 * FUNCTION: WDA_ProcessDelTSReq
7573 * Request to WDI to Update the DELTS REQ params.
7574 */
7575VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
7576 tDelTsParams *pDelTSReqParams)
7577{
7578 WDI_Status status = WDI_STATUS_SUCCESS ;
7579 WDI_DelTSReqParamsType *wdiDelTSReqParam =
7580 (WDI_DelTSReqParamsType *)vos_mem_malloc(
7581 sizeof(WDI_DelTSReqParamsType)) ;
7582 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007584 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007585 if(NULL == wdiDelTSReqParam)
7586 {
7587 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007588 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007589 VOS_ASSERT(0);
7590 return VOS_STATUS_E_NOMEM;
7591 }
7592 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7593 if(NULL == pWdaParams)
7594 {
7595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007596 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007597 VOS_ASSERT(0);
7598 vos_mem_free(wdiDelTSReqParam);
7599 return VOS_STATUS_E_NOMEM;
7600 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007601 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
7602 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
7603 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
7604 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
7605 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007606 pWdaParams->pWdaContext = pWDA;
7607 /* Store DEL TS pointer, as this will be used for response */
7608 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007609 /* store Params pass it to WDI */
7610 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007611 status = WDI_DelTSReq(wdiDelTSReqParam,
7612 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007613 if(IS_WDI_STATUS_FAILURE(status))
7614 {
7615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7616 "Failure in DEL TS REQ Params WDI API, free all the memory " );
7617 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7618 vos_mem_free(pWdaParams->wdaMsgParam);
7619 vos_mem_free(pWdaParams);
7620 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007621 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007622}
Jeff Johnson295189b2012-06-20 16:38:30 -07007623/*
7624 * FUNCTION: WDA_UpdateBeaconParamsCallback
7625 * Free the memory. No need to send any response to PE in this case
7626 */
7627void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
7628{
7629 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007631 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007632 if(NULL == pWdaParams)
7633 {
7634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007635 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007636 VOS_ASSERT(0) ;
7637 return ;
7638 }
7639 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7640 vos_mem_free(pWdaParams->wdaMsgParam) ;
7641 vos_mem_free(pWdaParams);
7642 /*
7643 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
7644 * param here
7645 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007646 return ;
7647}
Jeff Johnson295189b2012-06-20 16:38:30 -07007648/*
7649 * FUNCTION: WDA_ProcessUpdateBeaconParams
7650 * Request to WDI to send the beacon parameters to HAL to update the Hardware
7651 */
7652VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
7653 tUpdateBeaconParams *pUpdateBeaconParams)
7654{
7655 WDI_Status status = WDI_STATUS_SUCCESS ;
7656 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
7657 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
7658 sizeof(WDI_UpdateBeaconParamsType)) ;
7659 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007661 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007662 if(NULL == wdiUpdateBeaconParams)
7663 {
7664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007665 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007666 VOS_ASSERT(0);
7667 return VOS_STATUS_E_NOMEM;
7668 }
7669 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7670 if(NULL == pWdaParams)
7671 {
7672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007673 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007674 VOS_ASSERT(0);
7675 vos_mem_free(wdiUpdateBeaconParams);
7676 return VOS_STATUS_E_NOMEM;
7677 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007678 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
7679 pUpdateBeaconParams->bssIdx;
7680 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
7681 pUpdateBeaconParams->fShortPreamble;
7682 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
7683 pUpdateBeaconParams->fShortSlotTime;
7684 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
7685 pUpdateBeaconParams->beaconInterval;
7686 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
7687 pUpdateBeaconParams->llaCoexist;
7688 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
7689 pUpdateBeaconParams->llbCoexist;
7690 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
7691 pUpdateBeaconParams->llgCoexist;
7692 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
7693 pUpdateBeaconParams->ht20MhzCoexist;
7694 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
7695 pUpdateBeaconParams->llnNonGFCoexist;
7696 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
7697 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
7698 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
7699 pUpdateBeaconParams->fRIFSMode;
7700 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
7701 pUpdateBeaconParams->paramChangeBitmap;
7702 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
7703
7704 pWdaParams->pWdaContext = pWDA;
7705 /* Store UpdateBeacon Req pointer, as this will be used for response */
7706 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007707 /* store Params pass it to WDI */
7708 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007709 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
7710 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
7711 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007712 if(IS_WDI_STATUS_FAILURE(status))
7713 {
7714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7715 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
7716 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7717 vos_mem_free(pWdaParams->wdaMsgParam);
7718 vos_mem_free(pWdaParams);
7719 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007720 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007721}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08007722#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -07007723/*
7724 * FUNCTION: WDA_TSMStatsReqCallback
7725 * send TSM Stats RSP back to PE
7726 */
7727void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
7728{
7729 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7730 tWDA_CbContext *pWDA = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007731 tpAniGetTsmStatsRsp pTsmRspParams = NULL;
7732 tpAniGetTsmStatsReq pGetTsmStatsReqParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007733
7734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007735 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007736 if(NULL == pWdaParams)
7737 {
7738 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007739 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007740 VOS_ASSERT(0) ;
7741 return ;
7742 }
7743 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307744 if (NULL == pWDA)
7745 {
7746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7747 "%s:pWDA is NULL", __func__);
7748 VOS_ASSERT(0);
7749 return ;
7750 }
7751
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007752 pGetTsmStatsReqParams = (tAniGetTsmStatsReq *)pWdaParams->wdaMsgParam;
7753
7754 if(NULL == pGetTsmStatsReqParams)
7755 {
7756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7757 "%s: pGetTsmStatsReqParams received NULL", __func__);
7758 VOS_ASSERT(0);
7759 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7760 vos_mem_free(pWdaParams);
7761 return;
7762 }
7763
7764 pTsmRspParams =
7765 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
Jeff Johnson295189b2012-06-20 16:38:30 -07007766 if( NULL == pTsmRspParams )
7767 {
7768 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007769 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007770 VOS_ASSERT( 0 );
7771 return ;
7772 }
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007773 vos_mem_set(pTsmRspParams, sizeof(tAniGetTsmStatsRsp), 0);
7774 pTsmRspParams->rc = pwdiTSMStatsRspParams->wdiStatus;
7775 pTsmRspParams->staId = pGetTsmStatsReqParams->staId;
7776
Jeff Johnson295189b2012-06-20 16:38:30 -07007777 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
7778 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
7779 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
7780 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
7781 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
7782 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
7783 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
7784 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
7785 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
7786 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007787
7788 /* Assign get tsm stats req req (backup) in to the response */
7789 pTsmRspParams->tsmStatsReq = pGetTsmStatsReqParams;
7790
7791 /* free WDI command buffer */
7792 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7793 vos_mem_free(pWdaParams);
7794
Jeff Johnson295189b2012-06-20 16:38:30 -07007795 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007796 return ;
7797}
7798
7799
Jeff Johnson295189b2012-06-20 16:38:30 -07007800/*
7801 * FUNCTION: WDA_ProcessTsmStatsReq
7802 * Request to WDI to get the TSM Stats params.
7803 */
7804VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007805 tpAniGetTsmStatsReq pTsmStats)
Jeff Johnson295189b2012-06-20 16:38:30 -07007806{
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007807 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007808 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007809 tWDA_ReqParams *pWdaParams = NULL;
7810 tAniGetTsmStatsRsp *pGetTsmStatsRspParams = NULL;
7811
Jeff Johnson295189b2012-06-20 16:38:30 -07007812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007813 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007814 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
7815 sizeof(WDI_TSMStatsReqParamsType));
7816 if(NULL == wdiTSMReqParam)
7817 {
7818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007819 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007820 VOS_ASSERT(0);
7821 return VOS_STATUS_E_NOMEM;
7822 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007823 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7824 if(NULL == pWdaParams)
7825 {
7826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007827 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007828 VOS_ASSERT(0);
7829 vos_mem_free(wdiTSMReqParam);
7830 return VOS_STATUS_E_NOMEM;
7831 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007832 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
7833 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
7834 pTsmStats->bssId,
7835 sizeof(wpt_macAddr));
7836 wdiTSMReqParam->wdiReqStatusCB = NULL ;
7837
7838 pWdaParams->pWdaContext = pWDA;
7839 /* Store TSM Stats pointer, as this will be used for response */
7840 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007841 pWdaParams->wdaWdiApiMsgParam = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007842 status = WDI_TSMStatsReq(wdiTSMReqParam,
7843 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007844 if(IS_WDI_STATUS_FAILURE(status))
7845 {
7846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7847 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007848 vos_mem_free(pWdaParams);
7849
7850 pGetTsmStatsRspParams =
7851 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
7852 if(NULL == pGetTsmStatsRspParams)
7853 {
7854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7855 "%s: VOS MEM Alloc Failure", __func__);
7856 VOS_ASSERT(0);
7857 vos_mem_free(pTsmStats);
7858 return VOS_STATUS_E_NOMEM;
7859 }
7860 pGetTsmStatsRspParams->staId = pTsmStats->staId;
7861 pGetTsmStatsRspParams->rc = eSIR_FAILURE;
7862 pGetTsmStatsRspParams->tsmStatsReq = pTsmStats;
7863
7864 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pGetTsmStatsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007865 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007866 return CONVERT_WDI2VOS_STATUS(status) ;
7867}
7868#endif
7869/*
7870 * FUNCTION: WDA_SendBeaconParamsCallback
7871 * No need to send any response to PE in this case
7872 */
7873void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
7874{
7875
Jeff Johnson295189b2012-06-20 16:38:30 -07007876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007877 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007878 return ;
7879}
Jeff Johnson295189b2012-06-20 16:38:30 -07007880/*
7881 * FUNCTION: WDA_ProcessSendBeacon
7882 * Request to WDI to send the beacon template to HAL to update the TPE memory and
7883 * start beacon trasmission
7884 */
7885VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
7886 tSendbeaconParams *pSendbeaconParams)
7887{
7888 WDI_Status status = WDI_STATUS_SUCCESS ;
7889 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007891 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007892 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
7893 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
7894 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
7895 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07007896 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
7897 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05307898 /* p2pIeOffset should be atleast greater than timIeOffset */
7899 if ((pSendbeaconParams->p2pIeOffset != 0) &&
7900 (pSendbeaconParams->p2pIeOffset <
7901 pSendbeaconParams->timIeOffset))
7902 {
7903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7904 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
Ratheesh S P62439fe2015-06-11 15:53:31 +05307905 vos_mem_free(pSendbeaconParams);
Gopichand Nakkala81aef732013-03-22 11:15:19 +05307906 VOS_ASSERT( 0 );
7907 return WDI_STATUS_E_FAILURE;
7908 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007909 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
7910 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07007911 /* Copy the beacon template to local buffer */
7912 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
7913 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
7914 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
7915
Jeff Johnson295189b2012-06-20 16:38:30 -07007916 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
7917 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007918 if(IS_WDI_STATUS_FAILURE(status))
7919 {
7920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7921 "Failure in SEND BEACON REQ Params WDI API" );
7922 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007923 vos_mem_free(pSendbeaconParams);
7924 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07007925}
Jeff Johnson295189b2012-06-20 16:38:30 -07007926/*
7927 * FUNCTION: WDA_UpdateProbeRspParamsCallback
7928 * No need to send any response to PE in this case
7929 */
7930void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
7931{
Jeff Johnson295189b2012-06-20 16:38:30 -07007932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007933 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007934 return ;
7935}
7936
Jeff Johnson295189b2012-06-20 16:38:30 -07007937/*
7938 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
7939 * Request to WDI to send the probe response template to HAL to update the TPE memory and
7940 * send probe response
7941 */
7942VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
7943 tSendProbeRespParams *pSendProbeRspParams)
7944{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007945 WDI_Status status = WDI_STATUS_SUCCESS;
7946 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
7947 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07007948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007949 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007950
7951 if (!wdiSendProbeRspParam)
Ratheesh S P62439fe2015-06-11 15:53:31 +05307952 {
7953 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007954 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
Ratheesh S P62439fe2015-06-11 15:53:31 +05307955 }
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007956
Jeff Johnson295189b2012-06-20 16:38:30 -07007957 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007958 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07007959 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007960 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07007961 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07007962 /* Copy the Probe Response template to local buffer */
7963 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007964 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07007965 pSendProbeRspParams->pProbeRespTemplate,
7966 pSendProbeRspParams->probeRespTemplateLen);
7967 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007968 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07007969 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
7970 WDI_PROBE_REQ_BITMAP_IE_LEN);
7971
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007972 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007973
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007974 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07007975 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007976 if(IS_WDI_STATUS_FAILURE(status))
7977 {
7978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7979 "Failure in SEND Probe RSP Params WDI API" );
7980 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007981 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007982 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007983 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07007984}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08007985#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -07007986/*
7987 * FUNCTION: WDA_SetMaxTxPowerCallBack
7988 * send the response to PE with power value received from WDI
7989 */
7990void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
7991 void* pUserData)
7992{
7993 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7994 tWDA_CbContext *pWDA = NULL;
7995 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
7996
7997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007998 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007999 if(NULL == pWdaParams)
8000 {
8001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008002 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008003 VOS_ASSERT(0) ;
8004 return ;
8005 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008006 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308007 if (NULL == pWDA)
8008 {
8009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8010 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308011 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8012 vos_mem_free(pWdaParams->wdaMsgParam);
8013 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308014 VOS_ASSERT(0);
8015 return ;
8016 }
8017
Jeff Johnson295189b2012-06-20 16:38:30 -07008018 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008019 if( NULL == pMaxTxPowerParams )
8020 {
8021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008022 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07008023 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008024 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8025 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008026 return ;
8027 }
Jeff Johnsone7245742012-09-05 17:12:55 -07008028
Jeff Johnson295189b2012-06-20 16:38:30 -07008029
8030 /*need to free memory for the pointers used in the
8031 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008032 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8033 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008034 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07008035
Jeff Johnson295189b2012-06-20 16:38:30 -07008036
8037 /* send response to UMAC*/
8038 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
8039
8040 return;
8041}
Jeff Johnson295189b2012-06-20 16:38:30 -07008042/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008043 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07008044 * Request to WDI to send set Max Tx Power Request
8045 */
8046 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
8047 tMaxTxPowerParams *MaxTxPowerParams)
8048{
8049 WDI_Status status = WDI_STATUS_SUCCESS;
8050 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
8051 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008052
Jeff Johnson295189b2012-06-20 16:38:30 -07008053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008054 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008055
Jeff Johnson295189b2012-06-20 16:38:30 -07008056 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
8057 sizeof(WDI_SetMaxTxPowerParamsType));
8058 if(NULL == wdiSetMaxTxPowerParams)
8059 {
8060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008061 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008062 VOS_ASSERT(0);
8063 return VOS_STATUS_E_NOMEM;
8064 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008065 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8066 if(NULL == pWdaParams)
8067 {
8068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008069 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008070 vos_mem_free(wdiSetMaxTxPowerParams);
8071 VOS_ASSERT(0);
8072 return VOS_STATUS_E_NOMEM;
8073 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008074 /* Copy.Max.Tx.Power Params to WDI structure */
8075 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
8076 MaxTxPowerParams->bssId,
8077 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008078 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
8079 MaxTxPowerParams->selfStaMacAddr,
8080 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008081 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
8082 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07008083 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008084 pWdaParams->pWdaContext = pWDA;
8085 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008086 /* store Params pass it to WDI */
8087 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008088 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
8089 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008090 if(IS_WDI_STATUS_FAILURE(status))
8091 {
8092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8093 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
8094 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8095 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008096 /* send response to UMAC*/
8097 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008098 }
8099 return CONVERT_WDI2VOS_STATUS(status);
8100
8101}
Jeff Johnson295189b2012-06-20 16:38:30 -07008102#endif
schang86c22c42013-03-13 18:41:24 -07008103
8104/*
Arif Hussaina5ebce02013-08-09 15:09:58 -07008105 * FUNCTION: WDA_SetMaxTxPowerPerBandCallBack
8106 * send the response to PE with power value received from WDI
8107 */
8108void WDA_SetMaxTxPowerPerBandCallBack(WDI_SetMaxTxPowerPerBandRspMsg
8109 *pwdiSetMaxTxPowerPerBandRsp,
8110 void* pUserData)
8111{
8112 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8113 tWDA_CbContext *pWDA = NULL;
8114 tMaxTxPowerPerBandParams *pMxTxPwrPerBandParams = NULL;
8115
8116 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8117 "<------ %s ", __func__);
8118 if (NULL == pWdaParams)
8119 {
8120 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8121 "%s: pWdaParams received NULL", __func__);
8122 VOS_ASSERT(0);
8123 return ;
8124 }
8125 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308126 if (NULL == pWDA)
8127 {
8128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8129 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308130 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8131 vos_mem_free(pWdaParams->wdaMsgParam);
8132 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308133 VOS_ASSERT(0);
8134 return ;
8135 }
8136
Arif Hussaina5ebce02013-08-09 15:09:58 -07008137 pMxTxPwrPerBandParams = (tMaxTxPowerPerBandParams*)pWdaParams->wdaMsgParam;
8138 if ( NULL == pMxTxPwrPerBandParams )
8139 {
8140 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8141 "%s: pMxTxPwrPerBandParams received NULL ", __func__);
8142 VOS_ASSERT(0);
8143 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8144 vos_mem_free(pWdaParams);
8145 return;
8146 }
8147
8148 /*need to free memory for the pointers used in the
8149 WDA Process.Set Max Tx Power Req function*/
8150 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8151 vos_mem_free(pWdaParams);
8152 pMxTxPwrPerBandParams->power = pwdiSetMaxTxPowerPerBandRsp->ucPower;
8153
8154 /* send response to UMAC*/
8155 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
8156 pMxTxPwrPerBandParams, 0);
8157
8158 return;
8159}
8160
8161/*
8162 * FUNCTION: WDA_ProcessSetMaxTxPowerPerBandReq
8163 * Request to WDI to send set Max Tx Power Per band Request
8164 */
8165 VOS_STATUS WDA_ProcessSetMaxTxPowerPerBandReq(tWDA_CbContext *pWDA,
8166 tMaxTxPowerPerBandParams
8167 *MaxTxPowerPerBandParams)
8168{
8169 WDI_Status status = WDI_STATUS_SUCCESS;
8170 WDI_SetMaxTxPowerPerBandParamsType *wdiSetMxTxPwrPerBandParams = NULL;
8171 tWDA_ReqParams *pWdaParams = NULL;
8172
8173 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8174 "------> %s ", __func__);
8175
8176 wdiSetMxTxPwrPerBandParams = vos_mem_malloc(
8177 sizeof(WDI_SetMaxTxPowerPerBandParamsType));
8178
8179 if (NULL == wdiSetMxTxPwrPerBandParams)
8180 {
8181 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8182 "%s: VOS MEM Alloc Failure", __func__);
8183 VOS_ASSERT(0);
8184 return VOS_STATUS_E_NOMEM;
8185 }
8186 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8187 if (NULL == pWdaParams)
8188 {
8189 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8190 "%s: VOS MEM Alloc Failure", __func__);
8191 vos_mem_free(wdiSetMxTxPwrPerBandParams);
8192 VOS_ASSERT(0);
8193 return VOS_STATUS_E_NOMEM;
8194 }
8195 /* Copy.Max.Tx.Power.Per.Band Params to WDI structure */
8196 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.bandInfo = \
8197 MaxTxPowerPerBandParams->bandInfo;
8198 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.ucPower = \
8199 MaxTxPowerPerBandParams->power;
8200 wdiSetMxTxPwrPerBandParams->wdiReqStatusCB = NULL;
8201 pWdaParams->pWdaContext = pWDA;
8202 pWdaParams->wdaMsgParam = (void *)MaxTxPowerPerBandParams;
8203 /* store Params pass it to WDI */
8204 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMxTxPwrPerBandParams;
8205 status = WDI_SetMaxTxPowerPerBandReq(wdiSetMxTxPwrPerBandParams,
8206 WDA_SetMaxTxPowerPerBandCallBack,
8207 pWdaParams);
8208 if (IS_WDI_STATUS_FAILURE(status))
8209 {
8210 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8211 "Failure in SET MAX TX Power REQ Params WDI API,"
8212 " free all the memory");
8213 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8214 vos_mem_free(pWdaParams);
8215 /* send response to UMAC*/
8216 WDA_SendMsg(pWDA,
8217 WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
8218 MaxTxPowerPerBandParams, 0);
8219 }
8220 return CONVERT_WDI2VOS_STATUS(status);
8221}
8222
8223/*
schang86c22c42013-03-13 18:41:24 -07008224 * FUNCTION: WDA_SetTxPowerCallBack
8225 * send the response to PE with power value received from WDI
8226 */
8227void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
8228 void* pUserData)
8229{
8230 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8231 tWDA_CbContext *pWDA = NULL;
8232 tSirSetTxPowerReq *pTxPowerParams = NULL;
8233
8234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8235 "<------ %s ", __func__);
8236 if(NULL == pWdaParams)
8237 {
8238 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8239 "%s: pWdaParams received NULL", __func__);
8240 VOS_ASSERT(0) ;
8241 return ;
8242 }
8243 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308244 if (NULL == pWDA)
8245 {
8246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8247 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308248 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8249 vos_mem_free(pWdaParams->wdaMsgParam);
8250 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308251 VOS_ASSERT(0);
8252 return ;
8253 }
8254
schang86c22c42013-03-13 18:41:24 -07008255 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
8256 if(NULL == pTxPowerParams)
8257 {
8258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8259 "%s: pTxPowerParams received NULL " ,__func__);
8260 VOS_ASSERT(0);
8261 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8262 vos_mem_free(pWdaParams);
8263 return ;
8264 }
8265
8266 /*need to free memory for the pointers used in the
8267 WDA Process.Set Max Tx Power Req function*/
8268 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8269 vos_mem_free(pWdaParams);
8270
8271 /* send response to UMAC*/
8272 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
8273 return;
8274}
8275
8276/*
8277 * FUNCTION: WDA_ProcessSetTxPowerReq
8278 * Request to WDI to send set Tx Power Request
8279 */
8280 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
8281 tSirSetTxPowerReq *txPowerParams)
8282{
8283 WDI_Status status = WDI_STATUS_SUCCESS;
8284 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
8285 tWDA_ReqParams *pWdaParams = NULL;
8286
8287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8288 "------> %s ", __func__);
8289
8290 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
8291 sizeof(WDI_SetTxPowerParamsType));
8292 if(NULL == wdiSetTxPowerParams)
8293 {
8294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8295 "%s: VOS MEM Alloc Failure", __func__);
8296 VOS_ASSERT(0);
8297 return VOS_STATUS_E_NOMEM;
8298 }
8299 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8300 if(NULL == pWdaParams)
8301 {
8302 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8303 "%s: VOS MEM Alloc Failure", __func__);
8304 vos_mem_free(wdiSetTxPowerParams);
8305 VOS_ASSERT(0);
8306 return VOS_STATUS_E_NOMEM;
8307 }
8308 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
8309 txPowerParams->bssIdx;
8310 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
8311 txPowerParams->mwPower;
8312 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
8313 pWdaParams->pWdaContext = pWDA;
8314 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
8315 /* store Params pass it to WDI */
8316 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
8317 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
8318 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
8319 if(IS_WDI_STATUS_FAILURE(status))
8320 {
8321 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8322 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
8323 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8324 vos_mem_free(pWdaParams);
8325 /* send response to UMAC*/
8326 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
8327 }
8328 return CONVERT_WDI2VOS_STATUS(status);
8329}
8330
Jeff Johnson295189b2012-06-20 16:38:30 -07008331/*
8332 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
8333 * Free the memory. No need to send any response to PE in this case
8334 */
8335void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
8336{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008337 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8338
Jeff Johnson295189b2012-06-20 16:38:30 -07008339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008340 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008341
8342 if(NULL == pWdaParams)
8343 {
8344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008345 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008346 VOS_ASSERT(0) ;
8347 return ;
8348 }
8349
8350 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8351 vos_mem_free(pWdaParams->wdaMsgParam) ;
8352 vos_mem_free(pWdaParams);
8353
Jeff Johnson295189b2012-06-20 16:38:30 -07008354 /*
8355 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
8356 * so just free the request param here
8357 */
Jeff Johnson295189b2012-06-20 16:38:30 -07008358 return ;
8359}
8360
Jeff Johnson295189b2012-06-20 16:38:30 -07008361/*
8362 * FUNCTION: WDA_ProcessSetP2PGONOAReq
8363 * Request to WDI to set the P2P Group Owner Notice of Absence Req
8364 */
8365VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
8366 tP2pPsParams *pP2pPsConfigParams)
8367{
8368 WDI_Status status = WDI_STATUS_SUCCESS ;
8369 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
8370 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
8371 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008372 tWDA_ReqParams *pWdaParams = NULL;
8373
Jeff Johnson295189b2012-06-20 16:38:30 -07008374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008375 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008376 if(NULL == wdiSetP2PGONOAReqParam)
8377 {
8378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008379 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308380 vos_mem_free(pP2pPsConfigParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008381 VOS_ASSERT(0);
8382 return VOS_STATUS_E_NOMEM;
8383 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008384
8385 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8386 if(NULL == pWdaParams)
8387 {
8388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008389 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008390 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008391 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008392 VOS_ASSERT(0);
8393 return VOS_STATUS_E_NOMEM;
8394 }
8395
Jeff Johnson295189b2012-06-20 16:38:30 -07008396 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
8397 pP2pPsConfigParams->opp_ps;
8398 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
8399 pP2pPsConfigParams->ctWindow;
8400 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
8401 pP2pPsConfigParams->count;
8402 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
8403 pP2pPsConfigParams->duration;
8404 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
8405 pP2pPsConfigParams->interval;
8406 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
8407 pP2pPsConfigParams->single_noa_duration;
8408 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
8409 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008410
Jeff Johnson295189b2012-06-20 16:38:30 -07008411 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
8412 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008413 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
8414
Jeff Johnson295189b2012-06-20 16:38:30 -07008415 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008416 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
8417 pWdaParams->pWdaContext = pWDA;
8418
Jeff Johnson295189b2012-06-20 16:38:30 -07008419 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008420 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
8421
Jeff Johnson295189b2012-06-20 16:38:30 -07008422 if(IS_WDI_STATUS_FAILURE(status))
8423 {
8424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8425 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008426 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8427 vos_mem_free(pWdaParams->wdaMsgParam);
8428 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008429 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008430 return CONVERT_WDI2VOS_STATUS(status);
8431
Jeff Johnson295189b2012-06-20 16:38:30 -07008432}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308433
8434#ifdef FEATURE_WLAN_TDLS
8435/*
8436 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
8437 * Free the memory. No need to send any response to PE in this case
8438 */
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308439void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
8440 void* pUserData)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308441{
8442 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8443 tWDA_CbContext *pWDA = NULL;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308444 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308445
8446
8447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8448 "<------ %s " ,__func__);
8449 if(NULL == pWdaParams)
8450 {
8451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8452 "%s: pWdaParams received NULL", __func__);
8453 VOS_ASSERT(0) ;
8454 return ;
8455 }
8456 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
8457
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308458 if (NULL == pWDA)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308459 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8461 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308462 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8463 vos_mem_free(pWdaParams->wdaMsgParam);
8464 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308465 VOS_ASSERT(0);
8466 return ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308467 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308468
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308469 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
8470 if( NULL == pTdlsLinkEstablishParams )
8471 {
8472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8473 "%s: pTdlsLinkEstablishParams "
8474 "received NULL " ,__func__);
8475 VOS_ASSERT(0);
8476 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8477 vos_mem_free(pWdaParams);
8478 return ;
8479 }
8480 pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
8481 wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308482 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308483 vos_mem_free(pWdaParams);
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308484 /* send response to UMAC*/
8485 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
8486
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308487 return ;
8488}
8489
8490VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
8491 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
8492{
8493 WDI_Status status = WDI_STATUS_SUCCESS ;
8494 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
8495 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
8496 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
8497 tWDA_ReqParams *pWdaParams = NULL;
8498 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8499 "------> %s " ,__func__);
8500 if(NULL == wdiSetTDLSLinkEstablishReqParam)
8501 {
8502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8503 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308504 vos_mem_free(pTdlsLinkEstablishParams);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308505 VOS_ASSERT(0);
8506 return VOS_STATUS_E_NOMEM;
8507 }
8508 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8509 if(NULL == pWdaParams)
8510 {
8511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8512 "%s: VOS MEM Alloc Failure", __func__);
8513 vos_mem_free(pTdlsLinkEstablishParams);
8514 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
8515 VOS_ASSERT(0);
8516 return VOS_STATUS_E_NOMEM;
8517 }
8518 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308519 pTdlsLinkEstablishParams->staIdx;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308520 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308521 pTdlsLinkEstablishParams->isResponder;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308522 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308523 pTdlsLinkEstablishParams->uapsdQueues;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308524 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308525 pTdlsLinkEstablishParams->maxSp;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308526 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05308527 pTdlsLinkEstablishParams->isBufsta;
Naresh Jayaramc7cbd782014-02-04 17:38:23 +05308528 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsOffChannelSupported =
8529 pTdlsLinkEstablishParams->isOffChannelSupported;
8530
8531 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannels,
8532 pTdlsLinkEstablishParams->validChannels,
8533 pTdlsLinkEstablishParams->validChannelsLen);
8534
8535 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannelsLen =
8536 pTdlsLinkEstablishParams->validChannelsLen;
8537
8538 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClasses,
8539 pTdlsLinkEstablishParams->validOperClasses,
8540 pTdlsLinkEstablishParams->validOperClassesLen);
8541 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClassesLen =
8542 pTdlsLinkEstablishParams->validOperClassesLen;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308543
8544 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
8545 /* Store msg pointer from PE, as this will be used for response */
8546 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
8547 /* store Params pass it to WDI */
8548 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
8549 pWdaParams->pWdaContext = pWDA;
8550
8551 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
8552 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
8553 WDA_SetTDLSLinkEstablishReqParamsCallback,
8554 pWdaParams);
8555 if(IS_WDI_STATUS_FAILURE(status))
8556 {
8557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8558 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
8559 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8560 vos_mem_free(pWdaParams->wdaMsgParam);
8561 vos_mem_free(pWdaParams);
8562 }
8563 return CONVERT_WDI2VOS_STATUS(status);
8564}
Atul Mittalc0f739f2014-07-31 13:47:47 +05308565
8566// tdlsoffchan
8567void WDA_SetTDLSChanSwitchReqParamsCallback(WDI_SetTdlsChanSwitchReqResp *wdiSetTdlsChanSwitchReqRsp,
8568 void* pUserData)
8569{
8570 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8571 tWDA_CbContext *pWDA = NULL;
8572 tTdlsChanSwitchParams *pTdlsChanSwitchParams;
8573
8574
8575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8576 "<------ %s " ,__func__);
8577 if(NULL == pWdaParams)
8578 {
8579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8580 "%s: pWdaParams received NULL", __func__);
Atul Mittalc0f739f2014-07-31 13:47:47 +05308581 VOS_ASSERT(0) ;
8582 return ;
8583 }
8584 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
8585
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308586 if (NULL == pWDA)
Atul Mittal60bd4292014-08-14 12:19:27 +05308587 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8589 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308590 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8591 vos_mem_free(pWdaParams->wdaMsgParam);
8592 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308593 VOS_ASSERT(0);
8594 return ;
Atul Mittal60bd4292014-08-14 12:19:27 +05308595 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308596
Atul Mittalc0f739f2014-07-31 13:47:47 +05308597 pTdlsChanSwitchParams = (tTdlsChanSwitchParams *)pWdaParams->wdaMsgParam ;
Atul Mittal60bd4292014-08-14 12:19:27 +05308598 if( NULL == pTdlsChanSwitchParams )
Atul Mittalc0f739f2014-07-31 13:47:47 +05308599 {
8600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8601 "%s: pTdlsChanSwitchParams "
8602 "received NULL " ,__func__);
8603 VOS_ASSERT(0);
8604 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8605 vos_mem_free(pWdaParams);
8606 return ;
8607 }
8608 pTdlsChanSwitchParams->status = CONVERT_WDI2SIR_STATUS(
8609 wdiSetTdlsChanSwitchReqRsp->wdiStatus);
Atul Mittalc0f739f2014-07-31 13:47:47 +05308610 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8611 vos_mem_free(pWdaParams);
Atul Mittal60bd4292014-08-14 12:19:27 +05308612 /* send response to UMAC*/
8613 WDA_SendMsg(pWDA, WDA_SET_TDLS_CHAN_SWITCH_REQ_RSP, pTdlsChanSwitchParams, 0) ;
Atul Mittalc0f739f2014-07-31 13:47:47 +05308614
8615 return ;
8616}
8617VOS_STATUS WDA_ProcessSetTdlsChanSwitchReq(tWDA_CbContext *pWDA,
8618 tTdlsChanSwitchParams *pTdlsChanSwitchParams)
8619{
8620 WDI_Status status = WDI_STATUS_SUCCESS ;
8621 WDI_SetTDLSChanSwitchReqParamsType *wdiSetTDLSChanSwitchReqParam =
8622 (WDI_SetTDLSChanSwitchReqParamsType *)vos_mem_malloc(
8623 sizeof(WDI_SetTDLSChanSwitchReqParamsType));
8624 tWDA_ReqParams *pWdaParams = NULL;
8625
8626 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8627 "Enter: %s ",__func__);
8628 if(NULL == wdiSetTDLSChanSwitchReqParam)
8629 {
8630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8631 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308632 vos_mem_free(pTdlsChanSwitchParams);
Atul Mittalc0f739f2014-07-31 13:47:47 +05308633 VOS_ASSERT(0);
8634 return VOS_STATUS_E_NOMEM;
8635 }
8636
8637 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8638 if(NULL == pWdaParams)
8639 {
8640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8641 "%s: VOS MEM Alloc Failure", __func__);
8642 vos_mem_free(pTdlsChanSwitchParams);
8643 vos_mem_free(wdiSetTDLSChanSwitchReqParam);
8644 VOS_ASSERT(0);
8645 return VOS_STATUS_E_NOMEM;
8646 }
8647 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.staIdx =
8648 pTdlsChanSwitchParams->staIdx;
8649 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.isOffchannelInitiator =
8650 pTdlsChanSwitchParams->tdlsSwMode;
8651 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetOperClass =
8652 pTdlsChanSwitchParams->operClass;
8653 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetChannel =
8654 pTdlsChanSwitchParams->tdlsOffCh;
8655 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.secondaryChannelOffset =
8656 pTdlsChanSwitchParams->tdlsOffChBwOffset;
8657
8658
8659 /* Store msg pointer from PE, as this will be used for response */
8660 pWdaParams->wdaMsgParam = (void *)pTdlsChanSwitchParams ;
8661 /* store Params pass it to WDI */
8662 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSChanSwitchReqParam ;
8663 pWdaParams->pWdaContext = pWDA;
8664 status = WDI_SetTDLSChanSwitchReq(wdiSetTDLSChanSwitchReqParam,
8665 (WDI_SetTDLSChanSwitchReqParamsRspCb)
8666 WDA_SetTDLSChanSwitchReqParamsCallback,
8667 pWdaParams);
8668 if(IS_WDI_STATUS_FAILURE(status))
8669 {
8670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8671 "Failure in TDLS Channel Switch Req WDI API, free all the memory" );
8672 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8673 vos_mem_free(pWdaParams->wdaMsgParam);
8674 vos_mem_free(pWdaParams);
8675 }
8676 return CONVERT_WDI2VOS_STATUS(status);
8677}
8678#endif /*FEATURE_WLAN_TDLS*/
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05308679
8680
Jeff Johnson295189b2012-06-20 16:38:30 -07008681#ifdef WLAN_FEATURE_VOWIFI_11R
8682/*
8683 * FUNCTION: WDA_AggrAddTSReqCallback
8684 * send ADD AGGREGATED TS RSP back to PE
8685 */
8686void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
8687{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008688 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308689 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008690 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008691 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07008692 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008693 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008694 if(NULL == pWdaParams)
8695 {
8696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008697 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008698 VOS_ASSERT(0) ;
8699 return ;
8700 }
8701
8702 pWDA = pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308703 if (NULL == pWDA)
8704 {
8705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8706 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308707 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8708 vos_mem_free(pWdaParams->wdaMsgParam);
8709 vos_mem_free(pWdaParams);
8710
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308711 VOS_ASSERT(0);
8712 return ;
8713 }
8714
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008715 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008716
8717 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
8718 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008719 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008720 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008721 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008722
8723 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8724 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008725 return ;
8726}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07008727/*
8728 * FUNCTION: WDA_ProcessAddTSReq
8729 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
8730 */
8731VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
8732 tAggrAddTsParams *pAggrAddTsReqParams)
8733{
8734 WDI_Status status = WDI_STATUS_SUCCESS ;
8735 int i;
8736 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008737 tWDA_ReqParams *pWdaParams = NULL;
8738
8739
Jeff Johnson295189b2012-06-20 16:38:30 -07008740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008741 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008742 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
8743 sizeof(WDI_AggrAddTSReqParamsType)) ;
8744 if(NULL == wdiAggrAddTSReqParam)
8745 {
8746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008747 "%s: VOS MEM Alloc Failure", __func__);
Ratheesh S P62439fe2015-06-11 15:53:31 +05308748 vos_mem_free(pAggrAddTsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008749 VOS_ASSERT(0);
8750 return VOS_STATUS_E_NOMEM;
8751 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008752
8753
8754 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8755 if(NULL == pWdaParams)
8756 {
8757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008758 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008759 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008760 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008761 VOS_ASSERT(0);
8762 return VOS_STATUS_E_NOMEM;
8763 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008764 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
8765 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
8766 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008767 for( i = 0; i < WDI_MAX_NO_AC; i++ )
8768 {
8769 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
8770 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
8771 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07008772 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
8773 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
8774 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
8775 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
8776 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
8777 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
8778 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
8779 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
8780 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
8781 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
8782 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
8783 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
8784 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
8785 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
8786 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
8787 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07008788 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
8789 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07008790 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
8791 pAggrAddTsReqParams->tspec[i].nomMsduSz;
8792 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
8793 pAggrAddTsReqParams->tspec[i].maxMsduSz;
8794 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
8795 pAggrAddTsReqParams->tspec[i].minSvcInterval;
8796 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
8797 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
8798 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
8799 pAggrAddTsReqParams->tspec[i].inactInterval;
8800 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
8801 pAggrAddTsReqParams->tspec[i].suspendInterval;
8802 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
8803 pAggrAddTsReqParams->tspec[i].svcStartTime;
8804 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
8805 pAggrAddTsReqParams->tspec[i].minDataRate;
8806 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
8807 pAggrAddTsReqParams->tspec[i].meanDataRate;
8808 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
8809 pAggrAddTsReqParams->tspec[i].peakDataRate;
8810 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
8811 pAggrAddTsReqParams->tspec[i].maxBurstSz;
8812 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
8813 pAggrAddTsReqParams->tspec[i].delayBound;
8814 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
8815 pAggrAddTsReqParams->tspec[i].minPhyRate;
8816 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
8817 pAggrAddTsReqParams->tspec[i].surplusBw;
8818 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
8819 pAggrAddTsReqParams->tspec[i].mediumTime;
8820 }
8821
8822 /* TODO: tAggrAddTsParams doesn't have the following fields */
8823#if 0
8824 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
8825 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
8826 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
8827 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
8828#endif
8829 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
8830
8831 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008832 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008833 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008834 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
8835
8836 pWdaParams->pWdaContext = pWDA;
8837
Jeff Johnson295189b2012-06-20 16:38:30 -07008838 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008839 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
8840
Jeff Johnson295189b2012-06-20 16:38:30 -07008841 if(IS_WDI_STATUS_FAILURE(status))
8842 {
8843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8844 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008845 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8846 vos_mem_free(pWdaParams);
8847
8848 /* send the failure response back to PE*/
8849 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
8850 {
8851 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
8852 }
8853
8854 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
8855 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008856 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008857 return CONVERT_WDI2VOS_STATUS(status) ;
8858}
8859#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07008860/*
Mihir Shetea4306052014-03-25 00:02:54 +05308861 * FUNCTION: WDA_EnterImpsRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008862 * send Enter IMPS RSP back to PE
8863 */
Mihir Shetea4306052014-03-25 00:02:54 +05308864void WDA_EnterImpsRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008865{
Mihir Shetea4306052014-03-25 00:02:54 +05308866 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308867 tWDA_CbContext *pWDA = NULL;
Mihir Shetea4306052014-03-25 00:02:54 +05308868
Jeff Johnson295189b2012-06-20 16:38:30 -07008869 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Mihir Shetea4306052014-03-25 00:02:54 +05308870 "<------ %s status=%d" ,__func__,status);
8871 if(NULL == pWdaParams)
8872 {
8873 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8874 "%s: pWdaParams received NULL", __func__);
8875 VOS_ASSERT(0);
8876 return;
8877 }
8878
8879 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308880 if (NULL == pWDA)
8881 {
8882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8883 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308884 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8885 vos_mem_free(pWdaParams->wdaMsgParam);
8886 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308887 VOS_ASSERT(0);
8888 return ;
8889 }
Mihir Shetea4306052014-03-25 00:02:54 +05308890
8891 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8892 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05308893 if (WDI_STATUS_SUCCESS != status)
8894 {
8895 pWDA->failureCounts.enterImpsFailureCount++;
8896 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
8897 pWDA->failureCounts.enterImpsFailureCount)
8898 {
8899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8900 "%s: Status %d fail count %d", __func__, status,
8901 pWDA->failureCounts.enterImpsFailureCount);
8902 pWDA->failureCounts.enterImpsFailureCount = 0;
8903 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
8904 WLAN_LOG_INDICATOR_HOST_DRIVER,
8905 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
8906 FALSE, TRUE);
8907 }
8908 }
8909 else
8910 {
8911 pWDA->failureCounts.enterImpsFailureCount = 0;
8912 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008913 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008914 return ;
8915}
Mihir Shetea4306052014-03-25 00:02:54 +05308916
8917
8918/*
8919 * FUNCTION: WDA_EnterImpsReqCallback
8920 * Free memory and send Enter IMPS RSP back to PE.
8921 * Invoked when Enter IMPS REQ failed in WDI and no RSP callback is generated.
8922 */
8923void WDA_EnterImpsReqCallback(WDI_Status wdiStatus, void* pUserData)
8924{
8925 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308926 tWDA_CbContext *pWDA = NULL;
Mihir Shetea4306052014-03-25 00:02:54 +05308927
8928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8929 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8930
8931 if(NULL == pWdaParams)
8932 {
8933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8934 "%s: pWdaParams received NULL", __func__);
8935 VOS_ASSERT(0);
8936 return;
8937 }
8938
8939 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308940 if (NULL == pWDA)
8941 {
8942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8943 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308944 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8945 vos_mem_free(pWdaParams->wdaMsgParam);
8946 vos_mem_free(pWdaParams);
8947
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308948 VOS_ASSERT(0);
8949 return ;
8950 }
8951
Mihir Shetea4306052014-03-25 00:02:54 +05308952
8953 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8954 {
8955 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8956 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05308957 pWDA->failureCounts.enterImpsFailureCount++;
8958 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
8959 pWDA->failureCounts.enterImpsFailureCount)
8960 {
8961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8962 "%s: wdiStatus %d fail count %d", __func__, wdiStatus,
8963 pWDA->failureCounts.enterImpsFailureCount);
8964 pWDA->failureCounts.enterImpsFailureCount = 0;
8965 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
8966 WLAN_LOG_INDICATOR_HOST_DRIVER,
8967 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
8968 FALSE, TRUE);
8969 }
Mihir Shetea4306052014-03-25 00:02:54 +05308970 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
8971 CONVERT_WDI2SIR_STATUS(wdiStatus));
8972 }
8973
8974 return;
8975}
Jeff Johnson295189b2012-06-20 16:38:30 -07008976/*
8977 * FUNCTION: WDA_ProcessEnterImpsReq
8978 * Request to WDI to Enter IMPS power state.
8979 */
8980VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
8981{
8982 WDI_Status status = WDI_STATUS_SUCCESS ;
Mihir Shetea4306052014-03-25 00:02:54 +05308983 WDI_EnterImpsReqParamsType *wdiEnterImpsReqParams;
8984 tWDA_ReqParams *pWdaParams;
Sushant Kaushik7438e252015-05-01 14:55:09 +05308985 static int failcnt = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07008986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008987 "------> %s " ,__func__);
Mihir Shetea4306052014-03-25 00:02:54 +05308988
8989
8990 wdiEnterImpsReqParams = vos_mem_malloc(sizeof(WDI_EnterImpsReqParamsType));
8991 if (NULL == wdiEnterImpsReqParams)
8992 {
8993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8994 "%s: VOS MEM Alloc Failure", __func__);
8995 VOS_ASSERT(0);
8996 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
8997 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
8998 return VOS_STATUS_E_NOMEM;
8999 }
9000
9001 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
9002 if (NULL == pWdaParams)
9003 {
9004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9005 "%s: VOS MEM Alloc Failure", __func__);
9006 VOS_ASSERT(0);
9007 vos_mem_free(wdiEnterImpsReqParams);
9008 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL ,
9009 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
9010 return VOS_STATUS_E_NOMEM;
9011 }
9012
9013 wdiEnterImpsReqParams->wdiReqStatusCB = WDA_EnterImpsReqCallback;
9014 wdiEnterImpsReqParams->pUserData = pWdaParams;
9015
9016 pWdaParams->wdaWdiApiMsgParam = wdiEnterImpsReqParams;
9017 pWdaParams->wdaMsgParam = NULL;
9018 pWdaParams->pWdaContext = pWDA;
9019
9020 status = WDI_EnterImpsReq(wdiEnterImpsReqParams,
9021 (WDI_EnterImpsRspCb)WDA_EnterImpsRspCallback,
9022 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009023 if(IS_WDI_STATUS_FAILURE(status))
9024 {
Sushant Kaushik7438e252015-05-01 14:55:09 +05309025 if (! (failcnt & 0xF))
9026 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9027 "Failure in Enter IMPS REQ WDI API, free all the memory " );
9028 failcnt++;
Mihir Shetea4306052014-03-25 00:02:54 +05309029 vos_mem_free(wdiEnterImpsReqParams);
9030 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009031 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009032 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009033 return CONVERT_WDI2VOS_STATUS(status) ;
9034}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309035
9036/*
9037 * FUNCTION: WDA_ExitImpsRespCallback
9038 * send Exit IMPS RSP back to PE
9039 */
9040void WDA_ExitImpsRespCallback(WDI_Status status, void* pUserData)
9041{
9042 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9043 tWDA_CbContext *pWDA;
9044
9045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9046 "<------ %s " ,__func__);
9047
9048 if (NULL == pWdaParams)
9049 {
9050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9051 "%s: pWdaParams received NULL", __func__);
9052 VOS_ASSERT(0);
9053 return;
9054 }
9055 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9056
9057 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9058 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309059 if (WDI_STATUS_SUCCESS != status)
9060 {
9061 pWDA->failureCounts.exitImpsFailureCount++;
9062 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9063 pWDA->failureCounts.exitImpsFailureCount)
9064 {
9065 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9066 "%s: Status %d fail count %d", __func__,
9067 status,
9068 pWDA->failureCounts.exitImpsFailureCount);
9069 pWDA->failureCounts.exitImpsFailureCount = 0;
9070 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9071 WLAN_LOG_INDICATOR_HOST_DRIVER,
9072 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9073 FALSE, TRUE);
9074 }
9075 }
9076 else
9077 {
9078 pWDA->failureCounts.exitImpsFailureCount = 0;
9079 }
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309080
9081 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status));
9082 return;
9083}
9084
Jeff Johnson295189b2012-06-20 16:38:30 -07009085/*
9086 * FUNCTION: WDA_ExitImpsReqCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009087 */
9088void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
9089{
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309090 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Abhishek Singh837adf22015-10-01 17:37:37 +05309091 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009093 "<------ %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309094 if(NULL == pWdaParams)
9095 {
9096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9097 "%s: pWdaParams received NULL", __func__);
9098 VOS_ASSERT(0);
9099 return;
9100 }
Abhishek Singh837adf22015-10-01 17:37:37 +05309101 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309102 if (IS_WDI_STATUS_FAILURE(status))
9103 {
9104 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9105 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309106
9107 pWDA->failureCounts.exitImpsFailureCount++;
9108 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9109 pWDA->failureCounts.exitImpsFailureCount)
9110 {
9111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9112 "%s: wdiStatus %d fail count %d", __func__,
9113 status,
9114 pWDA->failureCounts.exitImpsFailureCount);
9115 pWDA->failureCounts.exitImpsFailureCount = 0;
9116 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9117 WLAN_LOG_INDICATOR_HOST_DRIVER,
9118 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9119 FALSE, TRUE);
9120 }
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309121 if (WDI_STATUS_DEV_INTERNAL_FAILURE == status)
9122 {
9123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9124 FL("reload wlan driver"));
9125 wpalWlanReload();
9126 }
9127 }
9128 return;
Jeff Johnson295189b2012-06-20 16:38:30 -07009129}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309130
Jeff Johnson295189b2012-06-20 16:38:30 -07009131/*
9132 * FUNCTION: WDA_ProcessExitImpsReq
9133 * Request to WDI to Exit IMPS power state.
9134 */
9135VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
9136{
9137 WDI_Status status = WDI_STATUS_SUCCESS ;
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309138 tWDA_ReqParams *pWdaParams;
9139 WDI_ExitImpsReqParamsType *wdiExitImpsReqParams;
9140
Jeff Johnson295189b2012-06-20 16:38:30 -07009141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009142 "------> %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309143 wdiExitImpsReqParams = (WDI_ExitImpsReqParamsType *)vos_mem_malloc(
9144 sizeof(WDI_ExitImpsReqParamsType));
9145 if (NULL == wdiExitImpsReqParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009146 {
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05309147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9148 "%s: VOS MEM Alloc Failure", __func__);
9149 VOS_ASSERT(0);
9150 return VOS_STATUS_E_NOMEM;
9151 }
9152 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
9153 if(NULL == pWdaParams)
9154 {
9155 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9156 "%s: VOS MEM Alloc Failure", __func__);
9157 VOS_ASSERT(0);
9158 vos_mem_free(wdiExitImpsReqParams);
9159 return VOS_STATUS_E_NOMEM;
9160 }
9161 wdiExitImpsReqParams->wdiReqStatusCB = WDA_ExitImpsReqCallback;
9162 wdiExitImpsReqParams->pUserData = pWdaParams;
9163
9164 /* Store param pointer as passed in by caller */
9165 /* store Params pass it to WDI */
9166 pWdaParams->wdaWdiApiMsgParam = wdiExitImpsReqParams;
9167 pWdaParams->pWdaContext = pWDA;
9168 pWdaParams->wdaMsgParam = wdiExitImpsReqParams;
9169 status = WDI_ExitImpsReq(wdiExitImpsReqParams,
9170 (WDI_ExitImpsRspCb)WDA_ExitImpsRespCallback,
9171 pWdaParams);
9172 if (IS_WDI_STATUS_FAILURE(status))
9173 {
9174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9175 "Failure in Exit IMPS REQ WDI API, free all the memory " );
9176 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9177 vos_mem_free(pWdaParams);
9178 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009179 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009180 return CONVERT_WDI2VOS_STATUS(status) ;
9181}
Jeff Johnson295189b2012-06-20 16:38:30 -07009182/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009183 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009184 * send Enter BMPS RSP back to PE
9185 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009186void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009187{
9188 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309189 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009190 tEnterBmpsParams *pEnterBmpsRspParams;
9191
Jeff Johnson295189b2012-06-20 16:38:30 -07009192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009193 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009194 if(NULL == pWdaParams)
9195 {
9196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009197 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009198 VOS_ASSERT(0) ;
9199 return ;
9200 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009201
9202 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309203 if (NULL == pWDA)
9204 {
9205 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9206 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05309207
9208 if(pWdaParams->wdaWdiApiMsgParam)
9209 {
9210 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9211 }
9212 vos_mem_free(pWdaParams);
9213
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309214 VOS_ASSERT(0);
9215 return ;
9216 }
9217
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009218 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
9219
9220 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009221 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009222
9223 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009224 vos_mem_free(pWdaParams) ;
Abhishek Singh837adf22015-10-01 17:37:37 +05309225 if (eHAL_STATUS_SUCCESS != pEnterBmpsRspParams->status)
9226 {
9227 pWDA->failureCounts.enterBmpsFailureCount++;
9228 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9229 pWDA->failureCounts.enterBmpsFailureCount)
9230 {
9231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9232 "%s: wdiStatus %d fail count %d", __func__,
9233 pwdiEnterBmpsRsp->wdiStatus,
9234 pWDA->failureCounts.enterBmpsFailureCount);
9235 pWDA->failureCounts.enterBmpsFailureCount = 0;
9236 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9237 WLAN_LOG_INDICATOR_HOST_DRIVER,
9238 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
9239 FALSE, TRUE);
9240 }
9241 }
9242 else
9243 {
9244 pWDA->failureCounts.enterBmpsFailureCount = 0;
9245 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009246 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
9247
Jeff Johnson295189b2012-06-20 16:38:30 -07009248 return ;
9249}
Jeff Johnson295189b2012-06-20 16:38:30 -07009250/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009251 * FUNCTION: WDA_EnterBmpsReqCallback
9252 * Free memory and send Enter BMPS RSP back to PE.
9253 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
9254 */
9255void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
9256{
9257 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309258 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009259 tEnterBmpsParams *pEnterBmpsRspParams;
9260
9261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9262 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9263
9264 if(NULL == pWdaParams)
9265 {
9266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9267 "%s: pWdaParams received NULL", __func__);
9268 VOS_ASSERT(0);
9269 return;
9270 }
9271
9272 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309273 if (NULL == pWDA)
9274 {
9275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9276 "%s:pWDA is NULL", __func__);
9277 VOS_ASSERT(0);
9278 return ;
9279 }
9280
Yue Ma7f44bbe2013-04-12 11:47:39 -07009281 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
9282 pEnterBmpsRspParams->status = wdiStatus;
9283
9284 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9285 {
9286 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9287 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309288 pWDA->failureCounts.enterBmpsFailureCount++;
9289 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9290 pWDA->failureCounts.enterBmpsFailureCount)
9291 {
9292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9293 "%s: wdiStatus %d fail count %d", __func__,
9294 wdiStatus,
9295 pWDA->failureCounts.enterBmpsFailureCount);
9296 pWDA->failureCounts.enterBmpsFailureCount = 0;
9297 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9298 WLAN_LOG_INDICATOR_HOST_DRIVER,
9299 WLAN_LOG_REASON_ENTER_IMPS_BMPS_FAIL,
9300 FALSE, TRUE);
9301 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009302 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
9303 }
9304
9305 return;
9306}
9307/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009308 * FUNCTION: WDA_ProcessEnterBmpsReq
9309 * Request to WDI to Enter BMPS power state.
9310 */
9311VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
9312 tEnterBmpsParams *pEnterBmpsReqParams)
9313{
9314 WDI_Status status = WDI_STATUS_SUCCESS;
9315 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
9316 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009317 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009318 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009319 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
9320 {
9321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009322 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009323 VOS_ASSERT(0);
9324 return VOS_STATUS_E_FAILURE;
9325 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009326 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
9327 if (NULL == wdiEnterBmpsReqParams)
9328 {
9329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009330 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009331 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009332 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
9333 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009334 return VOS_STATUS_E_NOMEM;
9335 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009336 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
9337 if (NULL == pWdaParams)
9338 {
9339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009340 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009341 VOS_ASSERT(0);
9342 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009343 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
9344 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009345 return VOS_STATUS_E_NOMEM;
9346 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009347 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
9348 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
9349 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
9350 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08009351 // For ESE and 11R Roaming
Jeff Johnson295189b2012-06-20 16:38:30 -07009352 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
9353 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
9354 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009355 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
9356 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009357
Jeff Johnson295189b2012-06-20 16:38:30 -07009358 /* Store param pointer as passed in by caller */
9359 /* store Params pass it to WDI */
9360 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009361 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009362 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009363 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009364 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009365 if (IS_WDI_STATUS_FAILURE(status))
9366 {
9367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9368 "Failure in Enter BMPS REQ WDI API, free all the memory" );
9369 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009370 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07009371 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009372 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009373 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009374 return CONVERT_WDI2VOS_STATUS(status);
9375}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009376
9377
9378static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
9379 WDI_Status wdiStatus,
9380 tExitBmpsParams *pExitBmpsReqParams)
9381{
9382 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
9383
9384 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
9385}
9386
9387
Jeff Johnson295189b2012-06-20 16:38:30 -07009388/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009389 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009390 * send Exit BMPS RSP back to PE
9391 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009392void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009393{
9394 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309395 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009396 tExitBmpsParams *pExitBmpsRspParams;
9397
Jeff Johnson295189b2012-06-20 16:38:30 -07009398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009399 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009400 if(NULL == pWdaParams)
9401 {
9402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009403 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009404 VOS_ASSERT(0) ;
9405 return ;
9406 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009407
9408 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309409 if (NULL == pWDA)
9410 {
9411 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9412 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05309413
9414 if(pWdaParams->wdaWdiApiMsgParam)
9415 {
9416 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9417 }
9418 vos_mem_free(pWdaParams);
9419
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309420 VOS_ASSERT(0);
9421 return ;
9422 }
9423
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009424 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
9425
9426 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009427 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009428
Jeff Johnson295189b2012-06-20 16:38:30 -07009429 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Abhishek Singh837adf22015-10-01 17:37:37 +05309430 vos_mem_free(pWdaParams);
9431
9432 if (WDI_STATUS_SUCCESS != pwdiExitBmpsRsp->wdiStatus)
9433 {
9434 pWDA->failureCounts.exitBmpsFailureCount++;
9435 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9436 pWDA->failureCounts.exitBmpsFailureCount)
9437 {
9438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9439 "%s: Status %d fail count %d", __func__,
9440 pExitBmpsRspParams->status,
9441 pWDA->failureCounts.exitBmpsFailureCount);
9442 pWDA->failureCounts.exitBmpsFailureCount = 0;
9443 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9444 WLAN_LOG_INDICATOR_HOST_DRIVER,
9445 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9446 FALSE, TRUE);
9447 }
9448 }
9449 else
9450 {
9451 pWDA->failureCounts.exitBmpsFailureCount = 0;
9452 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009453
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009454 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009455 return ;
9456}
Jeff Johnson295189b2012-06-20 16:38:30 -07009457/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009458 * FUNCTION: WDA_ExitBmpsReqCallback
9459 * Free memory and send Exit BMPS RSP back to PE.
9460 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
9461 */
9462void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
9463{
9464 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309465 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009466 tExitBmpsParams *pExitBmpsRspParams;
9467
9468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9469 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9470
9471 if(NULL == pWdaParams)
9472 {
9473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9474 "%s: pWdaParams received NULL", __func__);
9475 VOS_ASSERT(0);
9476 return;
9477 }
9478
9479 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309480 if (NULL == pWDA)
9481 {
9482 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9483 "%s:pWDA is NULL", __func__);
9484 VOS_ASSERT(0);
9485 return ;
9486 }
9487
Yue Ma7f44bbe2013-04-12 11:47:39 -07009488 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
9489 pExitBmpsRspParams->status = wdiStatus;
9490
9491 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9492 {
9493 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9494 vos_mem_free(pWdaParams);
Abhishek Singh837adf22015-10-01 17:37:37 +05309495 pWDA->failureCounts.exitBmpsFailureCount++;
9496 if (BMPS_IMPS_FAILURE_REPORT_THRESHOLD ==
9497 pWDA->failureCounts.exitBmpsFailureCount)
9498 {
9499 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9500 "%s: wdiStatus %d fail count %d", __func__,
9501 wdiStatus,
9502 pWDA->failureCounts.exitBmpsFailureCount);
9503 pWDA->failureCounts.exitBmpsFailureCount = 0;
9504 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
9505 WLAN_LOG_INDICATOR_HOST_DRIVER,
9506 WLAN_LOG_REASON_EXIT_IMPS_BMPS_FAIL,
9507 FALSE, TRUE);
9508 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009509 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
9510 }
9511
9512 return;
9513}
9514/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009515 * FUNCTION: WDA_ProcessExitBmpsReq
9516 * Request to WDI to Exit BMPS power state.
9517 */
9518VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
9519 tExitBmpsParams *pExitBmpsReqParams)
9520{
9521 WDI_Status status = WDI_STATUS_SUCCESS ;
9522 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
9523 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
9524 sizeof(WDI_ExitBmpsReqParamsType)) ;
9525 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009527 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009528 if(NULL == wdiExitBmpsReqParams)
9529 {
9530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009531 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009532 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009533 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009534 return VOS_STATUS_E_NOMEM;
9535 }
9536 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9537 if(NULL == pWdaParams)
9538 {
9539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009540 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009541 VOS_ASSERT(0);
9542 vos_mem_free(wdiExitBmpsReqParams);
9543 return VOS_STATUS_E_NOMEM;
9544 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009545 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07009546
9547 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
9548
Yue Ma7f44bbe2013-04-12 11:47:39 -07009549 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
9550 wdiExitBmpsReqParams->pUserData = pWdaParams;
9551
Jeff Johnson295189b2012-06-20 16:38:30 -07009552 /* Store param pointer as passed in by caller */
9553 /* store Params pass it to WDI */
9554 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
9555 pWdaParams->pWdaContext = pWDA;
9556 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009557 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009558 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009559 if(IS_WDI_STATUS_FAILURE(status))
9560 {
9561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9562 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009563 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9564 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07009565 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009566 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009567 return CONVERT_WDI2VOS_STATUS(status) ;
9568}
Jeff Johnson295189b2012-06-20 16:38:30 -07009569/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009570 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009571 * send Enter UAPSD RSP back to PE
9572 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009573void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009574{
9575 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309576 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009577 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009579 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009580 if(NULL == pWdaParams)
9581 {
9582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009583 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009584 VOS_ASSERT(0) ;
9585 return ;
9586 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009587
9588 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309589 if (NULL == pWDA)
9590 {
9591 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9592 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +05309593
9594 if(pWdaParams->wdaWdiApiMsgParam)
9595 {
9596 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9597 }
9598 vos_mem_free(pWdaParams);
9599
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309600 VOS_ASSERT(0);
9601 return ;
9602 }
9603
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009604 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
9605
9606 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009607 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009608
Jeff Johnson295189b2012-06-20 16:38:30 -07009609 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9610 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009611 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009612 return ;
9613}
Jeff Johnson295189b2012-06-20 16:38:30 -07009614/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009615 * FUNCTION: WDA_EnterUapsdReqCallback
9616 * Free memory and send Enter UAPSD RSP back to PE.
9617 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
9618 */
9619void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
9620{
9621 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9622 tWDA_CbContext *pWDA;
9623 tUapsdParams *pEnterUapsdRsqParams;
9624
9625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9626 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9627
9628 if(NULL == pWdaParams)
9629 {
9630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9631 "%s: pWdaParams received NULL", __func__);
9632 VOS_ASSERT(0);
9633 return;
9634 }
9635
9636 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309637 if (NULL == pWDA)
9638 {
9639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9640 "%s:pWDA is NULL", __func__);
9641 VOS_ASSERT(0);
9642 return ;
9643 }
9644
Yue Ma7f44bbe2013-04-12 11:47:39 -07009645 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
9646 pEnterUapsdRsqParams->status = wdiStatus;
9647
9648 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9649 {
9650 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9651 vos_mem_free(pWdaParams);
9652 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
9653 }
9654
9655 return;
9656}
9657/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009658 * FUNCTION: WDA_ProcessEnterUapsdReq
9659 * Request to WDI to Enter UAPSD power state.
9660 */
9661VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
9662 tUapsdParams *pEnterUapsdReqParams)
9663{
9664 WDI_Status status = WDI_STATUS_SUCCESS ;
9665 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
9666 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
9667 sizeof(WDI_EnterUapsdReqParamsType)) ;
9668 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009670 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009671 if(NULL == wdiEnterUapsdReqParams)
9672 {
9673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009674 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009675 VOS_ASSERT(0);
9676 return VOS_STATUS_E_NOMEM;
9677 }
9678 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9679 if(NULL == pWdaParams)
9680 {
9681 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009682 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009683 VOS_ASSERT(0);
9684 vos_mem_free(wdiEnterUapsdReqParams);
9685 return VOS_STATUS_E_NOMEM;
9686 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009687 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
9688 pEnterUapsdReqParams->beDeliveryEnabled;
9689 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
9690 pEnterUapsdReqParams->beTriggerEnabled;
9691 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
9692 pEnterUapsdReqParams->bkDeliveryEnabled;
9693 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
9694 pEnterUapsdReqParams->bkTriggerEnabled;
9695 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
9696 pEnterUapsdReqParams->viDeliveryEnabled;
9697 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
9698 pEnterUapsdReqParams->viTriggerEnabled;
9699 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
9700 pEnterUapsdReqParams->voDeliveryEnabled;
9701 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
9702 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07009703 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07009704
Yue Ma7f44bbe2013-04-12 11:47:39 -07009705 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
9706 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009707
Jeff Johnson295189b2012-06-20 16:38:30 -07009708 /* Store param pointer as passed in by caller */
9709 /* store Params pass it to WDI */
9710 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
9711 pWdaParams->pWdaContext = pWDA;
9712 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009713 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009714 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009715 if(IS_WDI_STATUS_FAILURE(status))
9716 {
9717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9718 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
9719 vos_mem_free(pWdaParams->wdaMsgParam) ;
9720 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9721 vos_mem_free(pWdaParams) ;
9722 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009723 return CONVERT_WDI2VOS_STATUS(status) ;
9724}
Jeff Johnson295189b2012-06-20 16:38:30 -07009725/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009726 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009727 * send Exit UAPSD RSP back to PE
9728 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009729void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009730{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009731
9732 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9733 tWDA_CbContext *pWDA;
9734 tExitUapsdParams *pExitUapsdRspParams;
9735
Jeff Johnson295189b2012-06-20 16:38:30 -07009736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009737 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009738 if(NULL == pWdaParams)
9739 {
9740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009741 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009742 VOS_ASSERT(0);
9743 return;
9744 }
9745
9746 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9747 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
9748
9749 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009750 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009751
9752 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9753 vos_mem_free(pWdaParams) ;
9754
9755 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009756 return ;
9757}
Jeff Johnson295189b2012-06-20 16:38:30 -07009758/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009759 * FUNCTION: WDA_ExitUapsdReqCallback
9760 * Free memory and send Exit UAPSD RSP back to PE.
9761 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
9762 */
9763void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
9764{
9765 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309766 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009767 tExitUapsdParams *pExitUapsdRspParams;
9768
9769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9770 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9771
9772 if(NULL == pWdaParams)
9773 {
9774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9775 "%s: pWdaParams received NULL", __func__);
9776 VOS_ASSERT(0);
9777 return;
9778 }
9779
9780 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05309781 if (NULL == pWDA)
9782 {
9783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9784 "%s:pWDA is NULL", __func__);
9785 VOS_ASSERT(0);
9786 return ;
9787 }
9788
Yue Ma7f44bbe2013-04-12 11:47:39 -07009789 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
9790 pExitUapsdRspParams->status = wdiStatus;
9791
9792 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9793 {
9794 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9795 vos_mem_free(pWdaParams);
9796 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
9797 }
9798
9799 return;
9800}
9801/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009802 * FUNCTION: WDA_ProcessExitUapsdReq
9803 * Request to WDI to Exit UAPSD power state.
9804 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009805VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
9806 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009807{
9808 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009809 tWDA_ReqParams *pWdaParams ;
9810 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
9811 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
9812 sizeof(WDI_ExitUapsdReqParamsType)) ;
9813
Jeff Johnson295189b2012-06-20 16:38:30 -07009814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009815 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009816
9817 if(NULL == wdiExitUapsdReqParams)
9818 {
9819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009820 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009821 VOS_ASSERT(0);
9822 return VOS_STATUS_E_NOMEM;
9823 }
9824 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9825 if(NULL == pWdaParams)
9826 {
9827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009828 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009829 VOS_ASSERT(0);
9830 vos_mem_free(wdiExitUapsdReqParams);
9831 return VOS_STATUS_E_NOMEM;
9832 }
9833
9834 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009835 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
9836 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009837
9838 /* Store param pointer as passed in by caller */
9839 /* store Params pass it to WDI */
9840 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
9841 pWdaParams->pWdaContext = pWDA;
9842 pWdaParams->wdaMsgParam = pExitUapsdParams;
9843
Yue Ma7f44bbe2013-04-12 11:47:39 -07009844 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009845 if(IS_WDI_STATUS_FAILURE(status))
9846 {
9847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9848 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009849 vos_mem_free(pWdaParams->wdaMsgParam) ;
9850 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9851 vos_mem_free(pWdaParams) ;
9852
Jeff Johnson295189b2012-06-20 16:38:30 -07009853 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009854 return CONVERT_WDI2VOS_STATUS(status) ;
9855}
9856
Jeff Johnson295189b2012-06-20 16:38:30 -07009857/*
9858 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
9859 *
9860 */
9861void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
9862{
9863 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009865 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009866 if(NULL == pWdaParams)
9867 {
9868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009869 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009870 VOS_ASSERT(0) ;
9871 return ;
9872 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009873 if( pWdaParams != NULL )
9874 {
9875 if( pWdaParams->wdaWdiApiMsgParam != NULL )
9876 {
9877 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9878 }
9879 if( pWdaParams->wdaMsgParam != NULL )
9880 {
9881 vos_mem_free(pWdaParams->wdaMsgParam) ;
9882 }
9883 vos_mem_free(pWdaParams) ;
9884 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009885 return ;
9886}
Jeff Johnson295189b2012-06-20 16:38:30 -07009887/*
9888 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
9889 * Request to WDI to set the power save params at start.
9890 */
9891VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
9892 tSirPowerSaveCfg *pPowerSaveCfg)
9893{
9894 WDI_Status status = WDI_STATUS_SUCCESS ;
9895 tHalCfg *tlvStruct = NULL ;
9896 tANI_U8 *tlvStructStart = NULL ;
9897 v_PVOID_t *configParam;
9898 tANI_U32 configParamSize;
9899 tANI_U32 *configDataValue;
9900 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
9901 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009903 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009904 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
9905 {
9906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009907 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009908 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009909 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009910 return VOS_STATUS_E_FAILURE;
9911 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009912 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
9913 if (NULL == wdiPowerSaveCfg)
9914 {
9915 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009916 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009917 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009918 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009919 return VOS_STATUS_E_NOMEM;
9920 }
9921 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9922 if(NULL == pWdaParams)
9923 {
9924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009925 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009926 VOS_ASSERT(0);
9927 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009928 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009929 return VOS_STATUS_E_NOMEM;
9930 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009931 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
9932 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07009933 if(NULL == configParam)
9934 {
9935 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08009936 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009937 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07009938 vos_mem_free(pWdaParams);
9939 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009940 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009941 return VOS_STATUS_E_NOMEM;
9942 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009943 vos_mem_set(configParam, configParamSize, 0);
9944 wdiPowerSaveCfg->pConfigBuffer = configParam;
9945 tlvStruct = (tHalCfg *)configParam;
9946 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009947 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
9948 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
9949 tlvStruct->length = sizeof(tANI_U32);
9950 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9951 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07009952 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9953 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009954 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
9955 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
9956 tlvStruct->length = sizeof(tANI_U32);
9957 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9958 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07009959 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9960 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009961 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
9962 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
9963 tlvStruct->length = sizeof(tANI_U32);
9964 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9965 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07009966 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9967 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009968 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
9969 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
9970 tlvStruct->length = sizeof(tANI_U32);
9971 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9972 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07009973 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9974 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009975 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
9976 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
9977 tlvStruct->length = sizeof(tANI_U32);
9978 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9979 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07009980 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9981 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009982 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
9983 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
9984 tlvStruct->length = sizeof(tANI_U32);
9985 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9986 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07009987 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9988 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009989 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
9990 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
9991 tlvStruct->length = sizeof(tANI_U32);
9992 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9993 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07009994 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9995 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009996 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
9997 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
9998 tlvStruct->length = sizeof(tANI_U32);
9999 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10000 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
10001 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10002 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010003 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
10004 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
10005 tlvStruct->length = sizeof(tANI_U32);
10006 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10007 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
10008 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10009 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010010 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
10011 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
10012 tlvStruct->length = sizeof(tANI_U32);
10013 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10014 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -070010015 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10016 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010017 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
10018 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
10019 tlvStruct->length = sizeof(tANI_U32);
10020 configDataValue = (tANI_U32 *)(tlvStruct + 1);
10021 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070010022 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
10023 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010024 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010025 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010026 /* store Params pass it to WDI */
10027 pWdaParams->wdaMsgParam = configParam;
10028 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
10029 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070010030 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
10031 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010032 if(IS_WDI_STATUS_FAILURE(status))
10033 {
10034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10035 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
10036 vos_mem_free(pWdaParams->wdaMsgParam);
10037 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10038 vos_mem_free(pWdaParams);
10039 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010040 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -070010041 return CONVERT_WDI2VOS_STATUS(status);
10042}
Jeff Johnson295189b2012-06-20 16:38:30 -070010043/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010044 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010045 *
10046 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010047void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010048{
Yue Ma7f44bbe2013-04-12 11:47:39 -070010049 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10050
Jeff Johnson295189b2012-06-20 16:38:30 -070010051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010052 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070010053
10054 if(NULL == pWdaParams)
10055 {
10056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10057 "%s: pWdaParams received NULL", __func__);
10058 VOS_ASSERT(0);
10059 return ;
10060 }
10061
10062 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -070010063 vos_mem_free(pWdaParams);
10064
Jeff Johnson295189b2012-06-20 16:38:30 -070010065 return ;
10066}
Jeff Johnson295189b2012-06-20 16:38:30 -070010067/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010068 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
10069 * Free memory.
10070 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
10071 */
10072void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
10073{
10074 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10075
10076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10077 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10078
10079 if(NULL == pWdaParams)
10080 {
10081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10082 "%s: pWdaParams received NULL", __func__);
10083 VOS_ASSERT(0);
10084 return;
10085 }
10086
10087 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10088 {
10089 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10090 vos_mem_free(pWdaParams);
10091 }
10092
10093 return;
10094}
10095/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010096 * FUNCTION: WDA_SetUapsdAcParamsReq
10097 * Request to WDI to set the UAPSD params for an ac (sta mode).
10098 */
10099VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
10100 tUapsdInfo *pUapsdInfo)
10101{
10102 WDI_Status status = WDI_STATUS_SUCCESS;
10103 tWDA_CbContext *pWDA = NULL ;
10104 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
10105 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
10106 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
10107 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010109 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010110 if(NULL == wdiUapsdParams)
10111 {
10112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010113 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010114 VOS_ASSERT(0);
10115 return VOS_STATUS_E_NOMEM;
10116 }
10117 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10118 if(NULL == pWdaParams)
10119 {
10120 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010121 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010122 VOS_ASSERT(0);
10123 vos_mem_free(wdiUapsdParams);
10124 return VOS_STATUS_E_NOMEM;
10125 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010126 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
10127 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
10128 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
10129 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
10130 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
10131 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010132 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
10133 wdiUapsdParams->pUserData = pWdaParams;
10134
Jeff Johnson295189b2012-06-20 16:38:30 -070010135 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -070010136 pWdaParams->pWdaContext = pWDA;
10137 /* Store param pointer as passed in by caller */
10138 pWdaParams->wdaMsgParam = pUapsdInfo;
10139 /* store Params pass it to WDI */
10140 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010141 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010142 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070010143 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010144 if(IS_WDI_STATUS_FAILURE(status))
10145 {
10146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10147 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
10148 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10149 vos_mem_free(pWdaParams);
10150 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010151 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
10152 return VOS_STATUS_SUCCESS;
10153 else
10154 return VOS_STATUS_E_FAILURE;
10155
Jeff Johnson295189b2012-06-20 16:38:30 -070010156}
10157/*
10158 * FUNCTION: WDA_ClearUapsdAcParamsReq
10159 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
10160 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
10161 * and again enter the UPASD with the modified params. Hence the disable
10162 * function was kept empty.
10163 *
10164 */
10165VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
10166{
10167 /* do nothing */
10168 return VOS_STATUS_SUCCESS;
10169}
Jeff Johnson295189b2012-06-20 16:38:30 -070010170/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010171 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010172 *
10173 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010174void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010175{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010176 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10177
Jeff Johnson295189b2012-06-20 16:38:30 -070010178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010179 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010180
10181 if(NULL == pWdaParams)
10182 {
10183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010184 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010185 VOS_ASSERT(0) ;
10186 return ;
10187 }
10188
10189 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10190 vos_mem_free(pWdaParams->wdaMsgParam);
10191 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010192
Jeff Johnson295189b2012-06-20 16:38:30 -070010193 //print a msg, nothing else to do
10194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010195 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010196 return ;
10197}
Jeff Johnson295189b2012-06-20 16:38:30 -070010198/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010199 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
10200 * Free memory.
10201 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
10202 */
10203void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
10204{
10205 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10206
10207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10208 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10209
10210 if(NULL == pWdaParams)
10211 {
10212 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10213 "%s: pWdaParams received NULL", __func__);
10214 VOS_ASSERT(0);
10215 return;
10216 }
10217
10218 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10219 {
10220 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10221 vos_mem_free(pWdaParams->wdaMsgParam);
10222 vos_mem_free(pWdaParams);
10223 }
10224
10225 return;
10226}
10227/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010228 * FUNCTION: WDA_UpdateUapsdParamsReq
10229 * Request to WDI to update UAPSD params (in softAP mode) for a station.
10230 */
10231VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
10232 tUpdateUapsdParams* pUpdateUapsdInfo)
10233{
10234 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010235 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010236 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
10237 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
10238 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010239 tWDA_ReqParams *pWdaParams = NULL;
10240
Jeff Johnson295189b2012-06-20 16:38:30 -070010241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010242 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010243 if(NULL == wdiUpdateUapsdParams)
10244 {
10245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010246 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010247 VOS_ASSERT(0);
10248 return VOS_STATUS_E_NOMEM;
10249 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010250 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
10251 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
10252 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010253 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
10254 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010255
10256 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10257 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010258 {
10259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010260 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010261 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010262 vos_mem_free(pUpdateUapsdInfo);
10263 vos_mem_free(wdiUpdateUapsdParams);
10264 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -070010265 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010266 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010267 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -070010268 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010269 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
10270 pWdaParams->pWdaContext = pWDA;
10271
Jeff Johnson43971f52012-07-17 12:26:56 -070010272 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010273 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010274 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010275
Jeff Johnson43971f52012-07-17 12:26:56 -070010276 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010277 {
10278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10279 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010280 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
10281 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10282 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070010283 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010284 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010285 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010286}
Jeff Johnson295189b2012-06-20 16:38:30 -070010287/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010288 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010289 *
10290 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010291void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010292{
10293 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010295 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010296 if(WDI_STATUS_SUCCESS != wdiStatus)
10297 {
10298 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080010299 "%s: RXP config filter failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070010300 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010301 if(NULL == pWdaParams)
10302 {
10303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010304 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010305 VOS_ASSERT(0) ;
10306 return ;
10307 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010308 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10309 vos_mem_free(pWdaParams->wdaMsgParam);
10310 vos_mem_free(pWdaParams);
10311 return ;
10312}
Jeff Johnson295189b2012-06-20 16:38:30 -070010313/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010314 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
10315 * Free memory.
10316 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
10317 */
10318void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
10319{
10320 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10321
10322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10323 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10324
10325 if(NULL == pWdaParams)
10326 {
10327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10328 "%s: pWdaParams received NULL", __func__);
10329 VOS_ASSERT(0);
10330 return;
10331 }
10332
10333 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10334 {
10335 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10336 vos_mem_free(pWdaParams->wdaMsgParam);
10337 vos_mem_free(pWdaParams);
10338 }
10339
10340 return;
10341}
10342/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010343 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
10344 *
10345 */
10346VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
10347 tSirWlanSetRxpFilters *pWlanSuspendParam)
10348{
Jeff Johnson295189b2012-06-20 16:38:30 -070010349 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010350 WDI_Status wstatus;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +053010351 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010352 tWDA_ReqParams *pWdaParams ;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +053010353 /* Sanity Check
10354 * This is very unlikely and add assert to collect more info next time */
10355 if(NULL == pWlanSuspendParam)
10356 {
10357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10358 "%s: pWlanSuspendParam received NULL", __func__);
10359 VOS_ASSERT(0) ;
10360 return VOS_STATUS_E_FAULT;
10361 }
10362 wdiRxpFilterParams = (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
10363 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010365 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010366 if(NULL == wdiRxpFilterParams)
10367 {
10368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010369 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010370 VOS_ASSERT(0);
10371 vos_mem_free(pWlanSuspendParam);
10372 return VOS_STATUS_E_NOMEM;
10373 }
10374 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10375 if(NULL == pWdaParams)
10376 {
10377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010378 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010379 VOS_ASSERT(0);
10380 vos_mem_free(wdiRxpFilterParams);
10381 vos_mem_free(pWlanSuspendParam);
10382 return VOS_STATUS_E_NOMEM;
10383 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010384 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
10385 pWlanSuspendParam->setMcstBcstFilter;
10386 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
10387 pWlanSuspendParam->configuredMcstBcstFilterSetting;
10388
Yue Ma7f44bbe2013-04-12 11:47:39 -070010389 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
10390 wdiRxpFilterParams->pUserData = pWdaParams;
10391
Jeff Johnson295189b2012-06-20 16:38:30 -070010392 pWdaParams->pWdaContext = pWDA;
10393 pWdaParams->wdaMsgParam = pWlanSuspendParam;
10394 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010395 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010396 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070010397 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010398 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010399 {
10400 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10401 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010402 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010403 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10404 vos_mem_free(pWdaParams->wdaMsgParam);
10405 vos_mem_free(pWdaParams);
10406 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010407 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010408}
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010409
10410/*
Siddharth Bhal64246172015-02-27 01:04:37 +053010411 * FUNCTION: WDA_ProcessGetFrameLogReq
10412 * Request to WDI to get the Frame Log.
10413 */
10414VOS_STATUS WDA_ProcessGetFrameLogReq(tWDA_CbContext *pWDA,
10415 tAniGetFrameLogReq *pGetFrameLog)
10416{
10417 VOS_STATUS status = VOS_STATUS_SUCCESS;
10418 WDI_Status wstatus;
10419 WDI_GetFrameLogReqInfoType *wdiGetFrameLogInfo;
10420 tWDA_ReqParams *pWdaParams ;
10421
10422 /* Sanity Check*/
10423 if(NULL == pGetFrameLog)
10424 {
10425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010426 "%s: pFWLoggingInitParam received NULL", __func__);
Siddharth Bhal64246172015-02-27 01:04:37 +053010427 VOS_ASSERT(0) ;
10428 return VOS_STATUS_E_FAULT;
10429 }
10430
10431 wdiGetFrameLogInfo = (WDI_GetFrameLogReqInfoType *)vos_mem_malloc(
10432 sizeof(WDI_GetFrameLogReqInfoType));
10433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10434 "------> %s " ,__func__);
10435
10436 if(NULL == wdiGetFrameLogInfo)
10437 {
10438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10439 "%s: VOS MEM Alloc Failure", __func__);
10440 VOS_ASSERT(0);
10441 vos_mem_free(pGetFrameLog);
10442 return VOS_STATUS_E_NOMEM;
10443 }
10444
10445 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
10446 if(NULL == pWdaParams)
10447 {
10448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10449 "%s: VOS MEM Alloc Failure", __func__);
10450 VOS_ASSERT(0);
10451 vos_mem_free(wdiGetFrameLogInfo);
10452 vos_mem_free(pGetFrameLog);
10453 return VOS_STATUS_E_NOMEM;
10454 }
10455
10456 wdiGetFrameLogInfo->flags = pGetFrameLog->getFrameLogCmdFlag;
10457
10458 pWdaParams->pWdaContext = pWDA;
10459 pWdaParams->wdaMsgParam = pGetFrameLog;
10460 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGetFrameLogInfo;
10461
10462 wstatus = WDI_GetFrameLogReq(wdiGetFrameLogInfo,
10463 (WDI_GetFrameLogRspCb)WDA_GetFrameLogRspCallback,
10464 pWdaParams);
10465 if(IS_WDI_STATUS_FAILURE(wstatus))
10466 {
10467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10468 "Failure in get frame log REQ WDI API, free all the memory" );
10469 status = CONVERT_WDI2VOS_STATUS(wstatus);
10470 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10471 vos_mem_free(pWdaParams->wdaMsgParam);
10472 vos_mem_free(pWdaParams);
10473 }
10474 return status;
10475}
10476
Sachin Ahuja715aafc2015-07-21 23:35:10 +053010477
10478/*
10479 * FUNCTION: WDA_FatalEventLogsRspCallback
10480 * recieves Flush Logs response from FW
10481 */
10482
10483void WDA_FatalEventLogsRspCallback(WDI_FatalEventLogsRspParamType* wdiRsp,
10484 void* pUserData)
10485{
10486 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10487
10488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10489 "<------ %s,wdiStatus:%d " ,
10490 __func__, wdiRsp->wdiStatus);
10491 if(NULL == pWdaParams)
10492 {
10493 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10494 "%s: pWdaParams received NULL", __func__);
10495 VOS_ASSERT(0);
10496 return ;
10497 }
10498
10499 if(NULL == pWdaParams->wdaMsgParam)
10500 {
10501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10502 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
10503 VOS_ASSERT(0);
10504 vos_mem_free(pWdaParams);
10505 return ;
10506 }
10507
10508 if(IS_WDI_STATUS_FAILURE(wdiRsp->wdiStatus))
10509 {
10510 /*
10511 * If it is failure, it means JOb is already posted by FW
10512 * for logging, so for failure scenario also we will get the
10513 * done indication
10514 */
10515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10516 "%s: Fatal Event Rsp Failure,wdiStatus : %d ",
10517 __func__, wdiRsp->wdiStatus);
10518 }
10519
10520 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10521 vos_mem_free(pWdaParams->wdaMsgParam);
10522 vos_mem_free(pWdaParams);
10523
10524 return;
10525
10526}
10527
10528/*
10529 * FUNCTION: WDA_ProcessFatalEventLogsReq
10530 * Request to WDI to send the fatal Event Logs Req.
10531 */
10532
10533VOS_STATUS WDA_ProcessFatalEventLogsReq(tWDA_CbContext *pWDA,
10534 tSirFatalEventLogsReqParam *pFatalEventLogsReqParam)
10535{
10536 VOS_STATUS status = VOS_STATUS_SUCCESS;
10537 WDI_FatalEventLogsReqInfoType *wdiFatalEventLogsReqInfo;
10538 tWDA_ReqParams *pWdaParams ;
10539 WDI_Status wstatus;
10540
10541
10542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10543 "------> %s " ,__func__);
10544 if (NULL == pFatalEventLogsReqParam)
10545 {
10546 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10547 "%s: pMgmtLoggingInitParam received NULL", __func__);
10548 VOS_ASSERT(0) ;
10549 return VOS_STATUS_E_FAULT;
10550 }
10551 wdiFatalEventLogsReqInfo = (WDI_FatalEventLogsReqInfoType *)vos_mem_malloc(
10552 sizeof(WDI_FatalEventLogsReqInfoType));
10553 if(NULL == wdiFatalEventLogsReqInfo)
10554 {
10555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10556 "%s: VOS MEM Alloc Failure", __func__);
10557 VOS_ASSERT(0);
10558 vos_mem_free(pFatalEventLogsReqParam);
10559 return VOS_STATUS_E_NOMEM;
10560 }
10561 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10562 if(NULL == pWdaParams)
10563 {
10564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10565 "%s: VOS MEM Alloc Failure", __func__);
10566 VOS_ASSERT(0);
10567 vos_mem_free(wdiFatalEventLogsReqInfo);
10568 vos_mem_free(pFatalEventLogsReqParam);
10569 return VOS_STATUS_E_NOMEM;
10570 }
10571 wdiFatalEventLogsReqInfo->reason_code = pFatalEventLogsReqParam->reason_code;
10572 pWdaParams->pWdaContext = pWDA;
10573 pWdaParams->wdaMsgParam = pFatalEventLogsReqParam;
10574 pWdaParams->wdaWdiApiMsgParam = (void *)wdiFatalEventLogsReqInfo;
10575
10576 wstatus = WDI_FatalEventLogsReq(wdiFatalEventLogsReqInfo,
10577 (WDI_FatalEventLogsRspCb)WDA_FatalEventLogsRspCallback,
10578 pWdaParams);
10579 if(IS_WDI_STATUS_FAILURE(wstatus))
10580 {
10581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10582 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
10583 status = CONVERT_WDI2VOS_STATUS(wstatus);
10584 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10585 vos_mem_free(pWdaParams->wdaMsgParam);
10586 vos_mem_free(pWdaParams);
10587 }
10588
10589 return status;
10590
10591}
10592
Siddharth Bhal64246172015-02-27 01:04:37 +053010593/*
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010594 * FUNCTION: WDA_ProcessFWLoggingInitReq
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010595 *
10596 */
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010597VOS_STATUS WDA_ProcessFWLoggingInitReq(tWDA_CbContext *pWDA,
10598 tSirFWLoggingInitParam *pFWLoggingInitParam)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010599{
10600 VOS_STATUS status = VOS_STATUS_SUCCESS;
10601 WDI_Status wstatus;
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010602 WDI_FWLoggingInitReqInfoType *wdiFWLoggingInitInfo;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010603 tWDA_ReqParams *pWdaParams ;
10604
10605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10606 "------> %s " ,__func__);
10607
10608 /* Sanity Check*/
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010609 if(NULL == pFWLoggingInitParam)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010610 {
10611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010612 "%s: pFWLoggingInitParam received NULL", __func__);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010613 VOS_ASSERT(0) ;
10614 return VOS_STATUS_E_FAULT;
10615 }
10616
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010617 wdiFWLoggingInitInfo = (WDI_FWLoggingInitReqInfoType *)vos_mem_malloc(
10618 sizeof(WDI_FWLoggingInitReqInfoType));
10619 if(NULL == wdiFWLoggingInitInfo)
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010620 {
10621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10622 "%s: VOS MEM Alloc Failure", __func__);
10623 VOS_ASSERT(0);
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010624 vos_mem_free(pFWLoggingInitParam);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010625 return VOS_STATUS_E_NOMEM;
10626 }
10627
10628 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10629 if(NULL == pWdaParams)
10630 {
10631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10632 "%s: VOS MEM Alloc Failure", __func__);
10633 VOS_ASSERT(0);
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010634 vos_mem_free(wdiFWLoggingInitInfo);
10635 vos_mem_free(pFWLoggingInitParam);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010636 return VOS_STATUS_E_NOMEM;
10637 }
10638
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010639 wdiFWLoggingInitInfo->enableFlag = pFWLoggingInitParam->enableFlag;
10640 wdiFWLoggingInitInfo->frameType = pFWLoggingInitParam->frameType;
10641 wdiFWLoggingInitInfo->frameSize = pFWLoggingInitParam->frameSize;
10642 wdiFWLoggingInitInfo->bufferMode = pFWLoggingInitParam->bufferMode;
10643 wdiFWLoggingInitInfo->continuousFrameLogging =
10644 pFWLoggingInitParam->continuousFrameLogging;
10645 wdiFWLoggingInitInfo->minLogBufferSize=
10646 pFWLoggingInitParam->minLogBufferSize;
10647 wdiFWLoggingInitInfo->maxLogBufferSize=
10648 pFWLoggingInitParam->maxLogBufferSize;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010649
10650 pWdaParams->pWdaContext = pWDA;
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010651 pWdaParams->wdaMsgParam = pFWLoggingInitParam;
10652 pWdaParams->wdaWdiApiMsgParam = (void *)wdiFWLoggingInitInfo;
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010653
Siddharth Bhald1be97f2015-05-27 22:39:59 +053010654 wstatus = WDI_FWLoggingInitReq(wdiFWLoggingInitInfo,
10655 (WDI_FWLoggingInitRspCb)WDA_FWLoggingInitRspCallback,
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053010656 pWdaParams);
10657 if(IS_WDI_STATUS_FAILURE(wstatus))
10658 {
10659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10660 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
10661 status = CONVERT_WDI2VOS_STATUS(wstatus);
10662 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10663 vos_mem_free(pWdaParams->wdaMsgParam);
10664 vos_mem_free(pWdaParams);
10665 }
10666
10667 return status;
10668}
10669
Jeff Johnson295189b2012-06-20 16:38:30 -070010670/*
Gupta, Kapil7c34b322015-09-30 13:12:35 +053010671 * FUNCTION: WDA_ProcessStartRssiMonitorReq
10672 *
10673 */
10674VOS_STATUS WDA_ProcessStartRssiMonitorReq(tWDA_CbContext *pWDA,
10675 tSirRssiMonitorReq *pRssiMonitorReqParam)
10676{
10677 VOS_STATUS status = VOS_STATUS_SUCCESS;
10678 WDI_Status wstatus;
10679 WDI_RssiMonitorReqInfoType *wdiRssiMonitorInfo;
10680 tWDA_ReqParams *pWdaParams ;
10681
10682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10683 "------> %s " ,__func__);
10684
10685 /* Sanity Check*/
10686 if(NULL == pRssiMonitorReqParam)
10687 {
10688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10689 "%s: pRssiMonitorReqParam received NULL", __func__);
10690 VOS_ASSERT(0) ;
10691 return VOS_STATUS_E_FAULT;
10692 }
10693
10694 wdiRssiMonitorInfo = (WDI_RssiMonitorReqInfoType *)vos_mem_malloc(
10695 sizeof(WDI_RssiMonitorReqInfoType));
10696 if(NULL == wdiRssiMonitorInfo)
10697 {
10698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10699 "%s: VOS MEM Alloc Failure", __func__);
10700 VOS_ASSERT(0);
10701 vos_mem_free(pRssiMonitorReqParam);
10702 return VOS_STATUS_E_NOMEM;
10703 }
10704
10705 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10706 if(NULL == pWdaParams)
10707 {
10708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10709 "%s: VOS MEM Alloc Failure", __func__);
10710 VOS_ASSERT(0);
10711 vos_mem_free(wdiRssiMonitorInfo);
10712 vos_mem_free(pRssiMonitorReqParam);
10713 return VOS_STATUS_E_NOMEM;
10714 }
10715
10716 wdiRssiMonitorInfo->requestId = pRssiMonitorReqParam->requestId;
10717 wdiRssiMonitorInfo->minRssi = pRssiMonitorReqParam->minRssi;
10718 wdiRssiMonitorInfo->maxRssi = pRssiMonitorReqParam->maxRssi;
10719 vos_mem_copy(wdiRssiMonitorInfo->currentBssId,
10720 &(pRssiMonitorReqParam->currentBssId), sizeof(tSirMacAddr));
10721
10722 pWdaParams->pWdaContext = pWDA;
10723 pWdaParams->wdaMsgParam = pRssiMonitorReqParam;
10724 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRssiMonitorInfo;
10725
10726 wstatus = WDI_StartRssiMonitorReq(wdiRssiMonitorInfo,
10727 (WDI_RssiMonitorStartRspCb)WDA_RssiMonitorStartRspCallback,
10728 pWdaParams);
10729 if(IS_WDI_STATUS_FAILURE(wstatus))
10730 {
10731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10732 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
10733 status = CONVERT_WDI2VOS_STATUS(wstatus);
10734 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10735 vos_mem_free(pWdaParams->wdaMsgParam);
10736 vos_mem_free(pWdaParams);
10737 }
10738
10739 return status;
10740}
10741
10742/*
10743 * FUNCTION: WDA_ProcessStopRssiMonitorReq
10744 *
10745 */
10746VOS_STATUS WDA_ProcessStopRssiMonitorReq(tWDA_CbContext *pWDA,
10747 tSirRssiMonitorReq *pRssiMonitorReqParam)
10748{
10749 VOS_STATUS status = VOS_STATUS_SUCCESS;
10750 WDI_Status wstatus;
10751 WDI_RssiMonitorReqInfoType *wdiRssiMonitorInfo;
10752 tWDA_ReqParams *pWdaParams ;
10753
10754 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10755 "------> %s " ,__func__);
10756
10757 /* Sanity Check*/
10758 if(NULL == pRssiMonitorReqParam)
10759 {
10760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10761 "%s: pRssiMonitorReqParam received NULL", __func__);
10762 VOS_ASSERT(0) ;
10763 return VOS_STATUS_E_FAULT;
10764 }
10765
10766 wdiRssiMonitorInfo = (WDI_RssiMonitorReqInfoType *)vos_mem_malloc(
10767 sizeof(WDI_RssiMonitorReqInfoType));
10768 if(NULL == wdiRssiMonitorInfo)
10769 {
10770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10771 "%s: VOS MEM Alloc Failure", __func__);
10772 VOS_ASSERT(0);
10773 vos_mem_free(pRssiMonitorReqParam);
10774 return VOS_STATUS_E_NOMEM;
10775 }
10776
10777 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10778 if(NULL == pWdaParams)
10779 {
10780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10781 "%s: VOS MEM Alloc Failure", __func__);
10782 VOS_ASSERT(0);
10783 vos_mem_free(wdiRssiMonitorInfo);
10784 vos_mem_free(pRssiMonitorReqParam);
10785 return VOS_STATUS_E_NOMEM;
10786 }
10787
10788 wdiRssiMonitorInfo->requestId = pRssiMonitorReqParam->requestId;
10789 vos_mem_copy(wdiRssiMonitorInfo->currentBssId,
10790 &(pRssiMonitorReqParam->currentBssId), sizeof(tSirMacAddr));
10791
10792 pWdaParams->pWdaContext = pWDA;
10793 pWdaParams->wdaMsgParam = pRssiMonitorReqParam;
10794 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRssiMonitorInfo;
10795
10796 wstatus = WDI_StopRssiMonitorReq(wdiRssiMonitorInfo,
10797 (WDI_RssiMonitorStopRspCb)WDA_RssiMonitorStopRspCallback,
10798 pWdaParams);
10799 if(IS_WDI_STATUS_FAILURE(wstatus))
10800 {
10801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10802 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
10803 status = CONVERT_WDI2VOS_STATUS(wstatus);
10804 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10805 vos_mem_free(pWdaParams->wdaMsgParam);
10806 vos_mem_free(pWdaParams);
10807 }
10808
10809 return status;
10810}
10811
10812
10813/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010814 * FUNCTION: WDA_WdiIndicationCallback
10815 *
10816 */
10817void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
10818 void* pUserData)
10819{
10820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010821 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010822}
Jeff Johnson295189b2012-06-20 16:38:30 -070010823/*
10824 * FUNCTION: WDA_ProcessWlanSuspendInd
10825 *
10826 */
10827VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
10828 tSirWlanSuspendParam *pWlanSuspendParam)
10829{
10830 WDI_Status wdiStatus;
10831 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010833 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010834 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
10835 pWlanSuspendParam->configuredMcstBcstFilterSetting;
10836 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
10837 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -070010839 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
10840 if(WDI_STATUS_PENDING == wdiStatus)
10841 {
10842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010843 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070010844 }
10845 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
10846 {
10847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010848 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070010849 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010850 vos_mem_free(pWlanSuspendParam);
10851 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
10852}
10853
Chet Lanctot186b5732013-03-18 10:26:30 -070010854#ifdef WLAN_FEATURE_11W
10855/*
10856 * FUNCTION: WDA_ProcessExcludeUnecryptInd
10857 *
10858 */
10859VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
10860 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
10861{
10862 WDI_Status wdiStatus;
10863 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
10864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10865 "------> %s ", __func__);
10866
10867 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
10868 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
10869 sizeof(tSirMacAddr));
10870
10871 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
10872 wdiExclUnencryptParams.pUserData = pWDA;
10873
10874 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
10875 if(WDI_STATUS_PENDING == wdiStatus)
10876 {
10877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10878 "Pending received for %s:%d ", __func__, __LINE__ );
10879 }
10880 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
10881 {
10882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10883 "Failure in %s:%d ", __func__, __LINE__ );
10884 }
10885 vos_mem_free(pExclUnencryptParam);
10886 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
10887}
10888#endif
10889
Jeff Johnson295189b2012-06-20 16:38:30 -070010890/*
10891 * FUNCTION: WDA_ProcessWlanResumeCallback
10892 *
10893 */
10894void WDA_ProcessWlanResumeCallback(
10895 WDI_SuspendResumeRspParamsType *resumeRspParams,
10896 void* pUserData)
10897{
10898 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010900 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010901 if(NULL == pWdaParams)
10902 {
10903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010904 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010905 VOS_ASSERT(0) ;
10906 return ;
10907 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010908 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
10909 {
10910 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080010911 "%s: Process Wlan Resume failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070010912 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010913 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10914 vos_mem_free(pWdaParams->wdaMsgParam);
10915 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010916 return ;
10917}
Jeff Johnson295189b2012-06-20 16:38:30 -070010918/*
10919 * FUNCTION: WDA_ProcessWlanResumeReq
10920 *
10921 */
10922VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
10923 tSirWlanResumeParam *pWlanResumeParam)
10924{
10925 WDI_Status wdiStatus;
10926 WDI_ResumeParamsType *wdiResumeParams =
10927 (WDI_ResumeParamsType *)vos_mem_malloc(
10928 sizeof(WDI_ResumeParamsType) ) ;
10929 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010931 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010932 if(NULL == wdiResumeParams)
10933 {
10934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010935 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010936 VOS_ASSERT(0);
10937 return VOS_STATUS_E_NOMEM;
10938 }
10939 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10940 if(NULL == pWdaParams)
10941 {
10942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010943 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010944 VOS_ASSERT(0);
10945 vos_mem_free(wdiResumeParams);
10946 return VOS_STATUS_E_NOMEM;
10947 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010948 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
10949 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -070010951 wdiResumeParams->wdiReqStatusCB = NULL;
10952 pWdaParams->wdaMsgParam = pWlanResumeParam;
10953 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
10954 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070010955 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
10956 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
10957 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010958 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10959 {
10960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10961 "Failure in Host Resume REQ WDI API, free all the memory " );
10962 VOS_ASSERT(0);
10963 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10964 vos_mem_free(pWdaParams->wdaMsgParam);
10965 vos_mem_free(pWdaParams);
10966 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010967 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
10968}
10969
Jeff Johnson295189b2012-06-20 16:38:30 -070010970/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010971 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010972 *
10973 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010974void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010975{
10976 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010978 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010979 if(NULL == pWdaParams)
10980 {
10981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010982 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010983 VOS_ASSERT(0) ;
10984 return ;
10985 }
10986
10987 vos_mem_free(pWdaParams->wdaMsgParam) ;
10988 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10989 vos_mem_free(pWdaParams) ;
10990 /*
10991 * No respone required for SetBeaconFilter req so just free the request
10992 * param here
10993 */
10994
Jeff Johnson295189b2012-06-20 16:38:30 -070010995 return ;
10996}
Jeff Johnson295189b2012-06-20 16:38:30 -070010997/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010998 * FUNCTION: WDA_SetBeaconFilterReqCallback
10999 * Free memory.
11000 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
11001 */
11002void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
11003{
11004 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11005
11006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11007 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11008
11009 if(NULL == pWdaParams)
11010 {
11011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11012 "%s: pWdaParams received NULL", __func__);
11013 VOS_ASSERT(0);
11014 return;
11015 }
11016
11017 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11018 {
11019 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11020 vos_mem_free(pWdaParams->wdaMsgParam);
11021 vos_mem_free(pWdaParams);
11022 }
11023
11024 return;
11025}
11026/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011027 * FUNCTION: WDA_SetBeaconFilterReq
11028 * Request to WDI to send the beacon filtering related information.
11029 */
11030VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
11031 tBeaconFilterMsg* pBeaconFilterInfo)
11032{
11033 WDI_Status status = WDI_STATUS_SUCCESS;
11034 tANI_U8 *dstPtr, *srcPtr;
11035 tANI_U8 filterLength;
11036 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
11037 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
11038 sizeof(WDI_BeaconFilterReqParamsType) ) ;
11039 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011041 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011042 if(NULL == wdiBeaconFilterInfo)
11043 {
11044 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011045 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011046 VOS_ASSERT(0);
11047 return VOS_STATUS_E_NOMEM;
11048 }
11049 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11050 if(NULL == pWdaParams)
11051 {
11052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011053 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011054 VOS_ASSERT(0);
11055 vos_mem_free(wdiBeaconFilterInfo);
11056 return VOS_STATUS_E_NOMEM;
11057 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011058 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
11059 pBeaconFilterInfo->beaconInterval;
11060 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
11061 pBeaconFilterInfo->capabilityInfo;
11062 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
11063 pBeaconFilterInfo->capabilityMask;
11064 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -070011065
11066 //Fill the BssIdx
11067 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
11068
Jeff Johnson295189b2012-06-20 16:38:30 -070011069 //Fill structure with info contained in the beaconFilterTable
11070 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
11071 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
11072 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
11073 if(WDI_BEACON_FILTER_LEN < filterLength)
11074 {
11075 filterLength = WDI_BEACON_FILTER_LEN;
11076 }
11077 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -070011078 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
11079 wdiBeaconFilterInfo->pUserData = pWdaParams;
11080
Jeff Johnson295189b2012-06-20 16:38:30 -070011081 /* Store param pointer as passed in by caller */
11082 /* store Params pass it to WDI */
11083 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
11084 pWdaParams->pWdaContext = pWDA;
11085 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
11086
Jeff Johnson295189b2012-06-20 16:38:30 -070011087 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011088 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011089 if(IS_WDI_STATUS_FAILURE(status))
11090 {
11091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11092 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
11093 vos_mem_free(pWdaParams->wdaMsgParam) ;
11094 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11095 vos_mem_free(pWdaParams) ;
11096 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011097 return CONVERT_WDI2VOS_STATUS(status) ;
11098}
Jeff Johnson295189b2012-06-20 16:38:30 -070011099/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011100 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011101 *
11102 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011103void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011104{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011105 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
11106
Jeff Johnson295189b2012-06-20 16:38:30 -070011107 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011108 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011109
11110 if(NULL == pWdaParams)
11111 {
11112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011113 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011114 VOS_ASSERT(0) ;
11115 return ;
11116 }
11117
11118 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11119 vos_mem_free(pWdaParams->wdaMsgParam);
11120 vos_mem_free(pWdaParams);
11121
Jeff Johnson295189b2012-06-20 16:38:30 -070011122 //print a msg, nothing else to do
11123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011124 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011125 return ;
11126}
Yue Ma7f44bbe2013-04-12 11:47:39 -070011127/*
11128 * FUNCTION: WDA_RemBeaconFilterReqCallback
11129 * Free memory.
11130 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
11131 */
11132void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
11133{
11134 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11135
11136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11137 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11138
11139 if(NULL == pWdaParams)
11140 {
11141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11142 "%s: pWdaParams received NULL", __func__);
11143 VOS_ASSERT(0);
11144 return;
11145 }
11146
11147 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11148 {
11149 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11150 vos_mem_free(pWdaParams->wdaMsgParam);
11151 vos_mem_free(pWdaParams);
11152 }
11153
11154 return;
11155}
Jeff Johnson295189b2012-06-20 16:38:30 -070011156 // TODO: PE does not have this feature for now implemented,
11157 // but the support for removing beacon filter exists between
11158 // HAL and FW. This function can be called whenever PE defines
11159 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -070011160/*
11161 * FUNCTION: WDA_RemBeaconFilterReq
11162 * Request to WDI to send the removal of beacon filtering related information.
11163 */
11164VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
11165 tRemBeaconFilterMsg* pBeaconFilterInfo)
11166{
11167 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011168 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011169 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
11170 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
11171 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011172 tWDA_ReqParams *pWdaParams ;
11173
Jeff Johnson295189b2012-06-20 16:38:30 -070011174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011175 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011176 if(NULL == wdiBeaconFilterInfo)
11177 {
11178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011179 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011180 VOS_ASSERT(0);
11181 return VOS_STATUS_E_NOMEM;
11182 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011183 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11184 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070011185 {
11186 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011187 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011188 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011189 vos_mem_free(wdiBeaconFilterInfo);
11190 vos_mem_free(pBeaconFilterInfo);
11191 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -070011192 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011193
11194 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
11195 pBeaconFilterInfo->ucIeCount;
11196 //Fill structure with info contained in the ucRemIeId
11197 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
11198 pBeaconFilterInfo->ucRemIeId,
11199 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
11200 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
11201 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011202
11203 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011204 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -070011205 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011206 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
11207
11208 pWdaParams->pWdaContext = pWDA;
11209
Jeff Johnson43971f52012-07-17 12:26:56 -070011210 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011211 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011212 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011213 {
11214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11215 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011216 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011217 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11218 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070011219 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011220 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011221 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011222}
Jeff Johnson295189b2012-06-20 16:38:30 -070011223/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011224 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011225 *
11226 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011227void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011228{
11229 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011231 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011232 if(NULL == pWdaParams)
11233 {
11234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011235 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011236 VOS_ASSERT(0) ;
11237 return ;
11238 }
11239
11240 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11241 vos_mem_free(pWdaParams) ;
11242
Jeff Johnson295189b2012-06-20 16:38:30 -070011243 return ;
11244}
Jeff Johnson295189b2012-06-20 16:38:30 -070011245/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011246 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
11247 * Free memory.
11248 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
11249 */
11250void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
11251{
11252 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11253
11254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11255 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11256
11257 if(NULL == pWdaParams)
11258 {
11259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11260 "%s: pWdaParams received NULL", __func__);
11261 VOS_ASSERT(0);
11262 return;
11263 }
11264
11265 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11266 {
11267 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11268 vos_mem_free(pWdaParams);
11269 }
11270
11271 return;
11272}
11273/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011274 * FUNCTION: WDA_SetRSSIThresholdsReq
11275 * Request to WDI to set the RSSI thresholds (sta mode).
11276 */
11277VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
11278{
11279 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011280 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011281 tWDA_CbContext *pWDA = NULL ;
11282 v_PVOID_t pVosContext = NULL;
11283 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
11284 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
11285 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
11286 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011288 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011289 if(NULL == wdiRSSIThresholdsInfo)
11290 {
11291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011292 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011293 VOS_ASSERT(0);
11294 return VOS_STATUS_E_NOMEM;
11295 }
11296 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11297 if(NULL == pWdaParams)
11298 {
11299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011300 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011301 VOS_ASSERT(0);
11302 vos_mem_free(wdiRSSIThresholdsInfo);
11303 return VOS_STATUS_E_NOMEM;
11304 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011305 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -070011306 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
11307 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
11308 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -070011309 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
11310 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
11311 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -070011312 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
11313 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
11314 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011315 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
11316 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011317 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
11318 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
11319
Jeff Johnson295189b2012-06-20 16:38:30 -070011320 /* Store param pointer as passed in by caller */
11321 /* store Params pass it to WDI */
11322 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
11323 pWdaParams->pWdaContext = pWDA;
11324 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -070011325 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011326 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011327 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011328 {
11329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11330 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011331 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011332 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11333 vos_mem_free(pWdaParams) ;
11334 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011335 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011336
11337}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011338/*
Yue Madb90ac12013-04-04 13:39:13 -070011339 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011340 *
11341 */
Yue Madb90ac12013-04-04 13:39:13 -070011342void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011343{
11344 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
11345
11346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011347 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011348 if(NULL == pWdaParams)
11349 {
11350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011351 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011352 VOS_ASSERT(0) ;
11353 return ;
11354 }
11355
11356 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11357 vos_mem_free(pWdaParams->wdaMsgParam);
11358 vos_mem_free(pWdaParams) ;
11359
11360 //print a msg, nothing else to do
11361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -070011362 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011363 return ;
11364}
Jeff Johnson295189b2012-06-20 16:38:30 -070011365/*
Yue Madb90ac12013-04-04 13:39:13 -070011366 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -070011367 * Free memory.
11368 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -070011369 */
11370void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
11371{
11372 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11373
11374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11375 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11376
11377 if(NULL == pWdaParams)
11378 {
11379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11380 "%s: Invalid pWdaParams pointer", __func__);
11381 VOS_ASSERT(0);
11382 return;
11383 }
11384
11385 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11386 {
11387 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11388 vos_mem_free(pWdaParams->wdaMsgParam);
11389 vos_mem_free(pWdaParams);
11390 }
11391
11392 return;
11393}
11394/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011395 * FUNCTION: WDA_ProcessHostOffloadReq
11396 * Request to WDI to set the filter to minimize unnecessary host wakeup due
11397 * to broadcast traffic (sta mode).
11398 */
11399VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
11400 tSirHostOffloadReq *pHostOffloadParams)
11401{
11402 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011403 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011404 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
11405 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
11406 sizeof(WDI_HostOffloadReqParamsType)) ;
11407 tWDA_ReqParams *pWdaParams ;
11408
11409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011410 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -070011411
11412 if(NULL == wdiHostOffloadInfo)
11413 {
11414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011415 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011416 VOS_ASSERT(0);
11417 return VOS_STATUS_E_NOMEM;
11418 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011419 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11420 if(NULL == pWdaParams)
11421 {
11422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011423 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011424 VOS_ASSERT(0);
11425 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011426 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011427 return VOS_STATUS_E_NOMEM;
11428 }
11429
11430 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
11431 pHostOffloadParams->offloadType;
11432 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
11433 pHostOffloadParams->enableOrDisable;
11434
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011435 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
11436 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
11437
Jeff Johnson295189b2012-06-20 16:38:30 -070011438 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
11439 {
11440 case SIR_IPV4_ARP_REPLY_OFFLOAD:
11441 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
11442 pHostOffloadParams->params.hostIpv4Addr,
11443 4);
11444 break;
11445 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
11446 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
11447 pHostOffloadParams->params.hostIpv6Addr,
11448 16);
11449 break;
11450 case SIR_IPV6_NS_OFFLOAD:
11451 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
11452 pHostOffloadParams->params.hostIpv6Addr,
11453 16);
11454
11455#ifdef WLAN_NS_OFFLOAD
11456 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
11457 {
11458 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
11459 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
11460 16);
11461 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
11462 }
11463 else
11464 {
11465 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
11466 }
11467
11468 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
11469 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
11470 16);
11471 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
11472 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
11473 6);
11474
11475 //Only two are supported so let's go through them without a loop
11476 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
11477 {
11478 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
11479 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
11480 16);
11481 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
11482 }
11483 else
11484 {
11485 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
11486 }
11487
11488 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
11489 {
11490 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
11491 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
11492 16);
11493 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
11494 }
11495 else
11496 {
11497 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
11498 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +053011499 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
11500 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070011501 break;
11502#endif //WLAN_NS_OFFLOAD
11503 default:
11504 {
11505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11506 "No Handling for Offload Type %x in WDA "
11507 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
11508 //WDA_VOS_ASSERT(0) ;
11509 }
11510 }
Yue Madb90ac12013-04-04 13:39:13 -070011511 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
11512 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011513
Jeff Johnson295189b2012-06-20 16:38:30 -070011514 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011515 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011516 /* store Params pass it to WDI */
11517 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
11518 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011519
Jeff Johnson295189b2012-06-20 16:38:30 -070011520
Jeff Johnson43971f52012-07-17 12:26:56 -070011521 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -070011522 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011523
Jeff Johnson43971f52012-07-17 12:26:56 -070011524 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011525 {
11526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
c_hpothu86feba52014-10-28 15:51:18 +053011527 "Failure in host offload REQ WDI API, free all the memory %d",
11528 wstatus);
Jeff Johnson43971f52012-07-17 12:26:56 -070011529 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011530 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11531 vos_mem_free(pWdaParams->wdaMsgParam);
11532 vos_mem_free(pWdaParams) ;
11533 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011534 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011535
11536}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011537/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011538 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011539 *
11540 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011541void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011542{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011543 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
11544
Jeff Johnson295189b2012-06-20 16:38:30 -070011545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011546 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011547
11548 if(NULL == pWdaParams)
11549 {
11550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011551 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011552 VOS_ASSERT(0) ;
11553 return ;
11554 }
11555
11556 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11557 vos_mem_free(pWdaParams->wdaMsgParam);
11558 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -070011559
Jeff Johnson295189b2012-06-20 16:38:30 -070011560 //print a msg, nothing else to do
11561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011562 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011563 return ;
11564}
Jeff Johnson295189b2012-06-20 16:38:30 -070011565/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011566 * FUNCTION: WDA_KeepAliveReqCallback
11567 * Free memory.
11568 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
11569 */
11570void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
11571{
11572 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11573
11574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11575 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11576
11577 if(NULL == pWdaParams)
11578 {
11579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11580 "%s: pWdaParams received NULL", __func__);
11581 VOS_ASSERT(0);
11582 return;
11583 }
11584
11585 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11586 {
11587 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11588 vos_mem_free(pWdaParams->wdaMsgParam);
11589 vos_mem_free(pWdaParams);
11590 }
11591
11592 return;
11593}
11594/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011595 * FUNCTION: WDA_ProcessKeepAliveReq
11596 * Request to WDI to send Keep Alive packets to minimize unnecessary host
11597 * wakeup due to broadcast traffic (sta mode).
11598 */
11599VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
11600 tSirKeepAliveReq *pKeepAliveParams)
11601{
11602 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011603 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011604 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
11605 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
11606 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011607 tWDA_ReqParams *pWdaParams;
11608
Jeff Johnson295189b2012-06-20 16:38:30 -070011609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011610 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011611 if(NULL == wdiKeepAliveInfo)
11612 {
11613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011614 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011615 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011616 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011617 return VOS_STATUS_E_NOMEM;
11618 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011619
11620 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11621 if(NULL == pWdaParams)
11622 {
11623 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011624 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011625 VOS_ASSERT(0);
11626 vos_mem_free(wdiKeepAliveInfo);
11627 vos_mem_free(pKeepAliveParams);
11628 return VOS_STATUS_E_NOMEM;
11629 }
11630
Jeff Johnson295189b2012-06-20 16:38:30 -070011631 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
11632 pKeepAliveParams->packetType;
11633 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
11634 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011635
11636 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
11637 pKeepAliveParams->bssId,
11638 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011639
11640 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
11641 {
11642 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
11643 pKeepAliveParams->hostIpv4Addr,
11644 SIR_IPV4_ADDR_LEN);
11645 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
11646 pKeepAliveParams->destIpv4Addr,
11647 SIR_IPV4_ADDR_LEN);
11648 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
11649 pKeepAliveParams->destMacAddr,
11650 SIR_MAC_ADDR_LEN);
11651 }
11652 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
11653 {
11654 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
11655 SIR_IPV4_ADDR_LEN,
11656 0);
11657 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
11658 SIR_IPV4_ADDR_LEN,
11659 0);
11660 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
11661 SIR_MAC_ADDR_LEN,
11662 0);
11663 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011664 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
11665 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011666
Jeff Johnson295189b2012-06-20 16:38:30 -070011667 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011668 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011669 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011670 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
11671 pWdaParams->pWdaContext = pWDA;
11672
Jeff Johnson295189b2012-06-20 16:38:30 -070011673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
11674 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
11675 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
11676 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
11677 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
11678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
11679 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
11680 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
11681 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
11682 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
11683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11684 "WDA DMAC : %d:%d:%d:%d:%d:%d",
11685 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
11686 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
11687 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
11688 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
11689 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
11690 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
11691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11692 "TimePeriod %d PacketType %d",
11693 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
11694 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -070011695 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011696 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011697
Jeff Johnson43971f52012-07-17 12:26:56 -070011698 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011699 {
11700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11701 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011702 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011703 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11704 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070011705 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011706 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011707 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011708
11709}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011710/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011711 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011712 *
11713 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011714void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011715 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
11716 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011717{
11718 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011720 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011721 if(NULL == pWdaParams)
11722 {
11723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011724 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011725 VOS_ASSERT(0) ;
11726 return ;
11727 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011728 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11729 vos_mem_free(pWdaParams->wdaMsgParam);
11730 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011731 return ;
11732}
Jeff Johnson295189b2012-06-20 16:38:30 -070011733/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011734 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
11735 * Free memory.
11736 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
11737 */
11738void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
11739{
11740 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11741
11742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11743 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11744
11745 if(NULL == pWdaParams)
11746 {
11747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11748 "%s: pWdaParams received NULL", __func__);
11749 VOS_ASSERT(0);
11750 return;
11751 }
11752
11753 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11754 {
11755 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11756 vos_mem_free(pWdaParams->wdaMsgParam);
11757 vos_mem_free(pWdaParams);
11758 }
11759
11760 return;
11761}
11762
11763/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011764 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
11765 * Request to WDI to add WOWL Bcast pattern
11766 */
11767VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
11768 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
11769{
11770 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011771 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011772 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
11773 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
11774 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
11775 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011776 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011777 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011778 if(NULL == wdiWowlAddBcPtrnInfo)
11779 {
11780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011781 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011782 VOS_ASSERT(0);
11783 return VOS_STATUS_E_NOMEM;
11784 }
11785 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11786 if(NULL == pWdaParams)
11787 {
11788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011789 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011790 VOS_ASSERT(0);
11791 vos_mem_free(wdiWowlAddBcPtrnInfo);
11792 return VOS_STATUS_E_NOMEM;
11793 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011794 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
11795 pWowlAddBcPtrnParams->ucPatternId;
11796 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
11797 pWowlAddBcPtrnParams->ucPatternByteOffset;
11798 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
11799 pWowlAddBcPtrnParams->ucPatternMaskSize;
11800 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
11801 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -070011802 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
11803 {
11804 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
11805 pWowlAddBcPtrnParams->ucPattern,
11806 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
11807 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
11808 pWowlAddBcPtrnParams->ucPatternMask,
11809 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
11810 }
11811 else
11812 {
11813 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
11814 pWowlAddBcPtrnParams->ucPattern,
11815 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
11816 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
11817 pWowlAddBcPtrnParams->ucPatternMask,
11818 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
11819
11820 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
11821 pWowlAddBcPtrnParams->ucPatternExt,
11822 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
11823 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
11824 pWowlAddBcPtrnParams->ucPatternMaskExt,
11825 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
11826 }
11827
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011828 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
11829 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
11830
Yue Ma7f44bbe2013-04-12 11:47:39 -070011831 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
11832 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011833 /* Store param pointer as passed in by caller */
11834 /* store Params pass it to WDI */
11835 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
11836 pWdaParams->pWdaContext = pWDA;
11837 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070011838 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011839 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011840 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011841 {
11842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11843 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011844 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011845 vos_mem_free(pWdaParams->wdaMsgParam) ;
11846 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11847 vos_mem_free(pWdaParams) ;
11848 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011849 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011850
11851}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011852/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011853 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011854 *
11855 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011856void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011857 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
11858 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011859{
11860 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011862 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011863 if(NULL == pWdaParams)
11864 {
11865 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011866 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011867 VOS_ASSERT(0) ;
11868 return ;
11869 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011870 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11871 vos_mem_free(pWdaParams->wdaMsgParam);
11872 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011873 return ;
11874}
Jeff Johnson295189b2012-06-20 16:38:30 -070011875/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011876 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
11877 * Free memory.
11878 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
11879 */
11880void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
11881{
11882 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11883
11884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11885 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11886
11887 if(NULL == pWdaParams)
11888 {
11889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11890 "%s: pWdaParams received NULL", __func__);
11891 VOS_ASSERT(0);
11892 return;
11893 }
11894
11895 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11896 {
11897 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11898 vos_mem_free(pWdaParams->wdaMsgParam);
11899 vos_mem_free(pWdaParams);
11900 }
11901
11902 return;
11903}
11904/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011905 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
11906 * Request to WDI to delete WOWL Bcast pattern
11907 */
11908VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
11909 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
11910{
11911 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011912 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011913 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
11914 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
11915 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
11916 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011917 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011918 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011919 if(NULL == wdiWowlDelBcPtrnInfo)
11920 {
11921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011922 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011923 VOS_ASSERT(0);
11924 return VOS_STATUS_E_NOMEM;
11925 }
11926 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11927 if(NULL == pWdaParams)
11928 {
11929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011930 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011931 VOS_ASSERT(0);
11932 vos_mem_free(wdiWowlDelBcPtrnInfo);
11933 return VOS_STATUS_E_NOMEM;
11934 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011935 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
11936 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011937
11938 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
11939 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
11940
Yue Ma7f44bbe2013-04-12 11:47:39 -070011941 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
11942 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011943 /* Store param pointer as passed in by caller */
11944 /* store Params pass it to WDI */
11945 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
11946 pWdaParams->pWdaContext = pWDA;
11947 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070011948 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011949 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011950 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011951 {
11952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11953 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011954 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011955 vos_mem_free(pWdaParams->wdaMsgParam) ;
11956 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11957 vos_mem_free(pWdaParams) ;
11958 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011959 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011960
11961}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011962/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011963 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011964 *
11965 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011966void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011967{
11968 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011969 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011970 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011972 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011973 if(NULL == pWdaParams)
11974 {
11975 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011976 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011977 VOS_ASSERT(0) ;
11978 return ;
11979 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011980 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011981 if (NULL == pWDA)
11982 {
11983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11984 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053011985
11986 if(pWdaParams->wdaWdiApiMsgParam)
11987 {
11988 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11989 }
11990 vos_mem_free(pWdaParams);
11991
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011992 VOS_ASSERT(0);
11993 return ;
11994 }
11995
Jeff Johnson295189b2012-06-20 16:38:30 -070011996 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
11997
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011998 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
11999
Jeff Johnson295189b2012-06-20 16:38:30 -070012000 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12001 vos_mem_free(pWdaParams) ;
12002
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012003 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070012004 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012005 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012006 return ;
12007}
Jeff Johnson295189b2012-06-20 16:38:30 -070012008/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012009 * FUNCTION: WDA_WowlEnterReqCallback
12010 * Free memory and send WOWL Enter RSP back to PE.
12011 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
12012 */
12013void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
12014{
12015 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012016 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012017 tSirHalWowlEnterParams *pWowlEnterParams;
12018
12019 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12020 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12021
12022 if(NULL == pWdaParams)
12023 {
12024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12025 "%s: pWdaParams received NULL", __func__);
12026 VOS_ASSERT(0);
12027 return;
12028 }
12029
12030 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012031 if (NULL == pWDA)
12032 {
12033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12034 "%s:pWDA is NULL", __func__);
12035 VOS_ASSERT(0);
12036 return ;
12037 }
12038
Yue Ma7f44bbe2013-04-12 11:47:39 -070012039 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
12040 pWowlEnterParams->status = wdiStatus;
12041
12042 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12043 {
12044 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12045 vos_mem_free(pWdaParams);
12046 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
12047 }
12048
12049 return;
12050}
12051/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012052 * FUNCTION: WDA_ProcessWowlEnterReq
12053 * Request to WDI to enter WOWL
12054 */
12055VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
12056 tSirHalWowlEnterParams *pWowlEnterParams)
12057{
12058 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012059 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012060 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
12061 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
12062 sizeof(WDI_WowlEnterReqParamsType)) ;
12063 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012065 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012066 if(NULL == wdiWowlEnterInfo)
12067 {
12068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012069 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012070 VOS_ASSERT(0);
12071 return VOS_STATUS_E_NOMEM;
12072 }
12073 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12074 if(NULL == pWdaParams)
12075 {
12076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012077 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012078 VOS_ASSERT(0);
12079 vos_mem_free(wdiWowlEnterInfo);
12080 return VOS_STATUS_E_NOMEM;
12081 }
Kumar Anandaca924e2013-07-22 14:35:34 -070012082
12083 vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
12084
Jeff Johnson295189b2012-06-20 16:38:30 -070012085 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
12086 pWowlEnterParams->magicPtrn,
12087 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012088 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
12089 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070012090 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
12091 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070012092 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
12093 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070012094 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
12095 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070012096 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
12097 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070012098 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
12099 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070012100 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
12101 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -070012102 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
12103 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -070012104#ifdef WLAN_WAKEUP_EVENTS
12105 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
12106 pWowlEnterParams->ucWoWEAPIDRequestEnable;
12107
12108 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
12109 pWowlEnterParams->ucWoWEAPOL4WayEnable;
12110
12111 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
12112 pWowlEnterParams->ucWowNetScanOffloadMatch;
12113
12114 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
12115 pWowlEnterParams->ucWowGTKRekeyError;
12116
12117 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
12118 pWowlEnterParams->ucWoWBSSConnLoss;
12119#endif // WLAN_WAKEUP_EVENTS
12120
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012121 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
12122 pWowlEnterParams->bssIdx;
12123
Yue Ma7f44bbe2013-04-12 11:47:39 -070012124 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
12125 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012126 /* Store param pointer as passed in by caller */
12127 /* store Params pass it to WDI */
12128 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
12129 pWdaParams->pWdaContext = pWDA;
12130 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070012131 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012132 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070012133 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012134 {
12135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12136 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012137 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070012138 vos_mem_free(pWdaParams->wdaMsgParam) ;
12139 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12140 vos_mem_free(pWdaParams) ;
12141 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012142 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012143
12144}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012145/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012146 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012147 *
12148 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012149void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012150{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012151 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012152 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012153 tSirHalWowlExitParams *pWowlExitParams;
12154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012155 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012156 if(NULL == pWdaParams)
12157 {
12158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012159 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012160 VOS_ASSERT(0) ;
12161 return ;
12162 }
12163 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012164 if (NULL == pWDA)
12165 {
12166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12167 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053012168
12169 if(pWdaParams->wdaWdiApiMsgParam)
12170 {
12171 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12172 }
12173 vos_mem_free(pWdaParams);
12174
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012175 VOS_ASSERT(0);
12176 return ;
12177 }
12178
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012179 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
12180
12181 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070012182 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012183
12184 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12185 vos_mem_free(pWdaParams) ;
12186
Jeff Johnson295189b2012-06-20 16:38:30 -070012187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012188 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012189 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012190 return ;
12191}
Jeff Johnson295189b2012-06-20 16:38:30 -070012192/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012193 * FUNCTION: WDA_WowlExitReqCallback
12194 * Free memory and send WOWL Exit RSP back to PE.
12195 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
12196 */
12197void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
12198{
12199 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012200 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012201 tSirHalWowlExitParams *pWowlExitParams;
12202
12203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12204 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12205
12206 if(NULL == pWdaParams)
12207 {
12208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12209 "%s: pWdaParams received NULL", __func__);
12210 VOS_ASSERT(0);
12211 return;
12212 }
12213
12214 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012215 if (NULL == pWDA)
12216 {
12217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12218 "%s:pWDA is NULL", __func__);
12219 VOS_ASSERT(0);
12220 return ;
12221 }
12222
Yue Ma7f44bbe2013-04-12 11:47:39 -070012223 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
12224 pWowlExitParams->status = wdiStatus;
12225
12226 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12227 {
12228 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12229 vos_mem_free(pWdaParams);
12230 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
12231 }
12232
12233 return;
12234}
12235/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012236 * FUNCTION: WDA_ProcessWowlExitReq
12237 * Request to WDI to add WOWL Bcast pattern
12238 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012239VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
12240 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070012241{
12242 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012243 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012244 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
12245 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
12246 sizeof(WDI_WowlExitReqParamsType)) ;
12247 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012249 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012250 if(NULL == wdiWowlExitInfo)
12251 {
12252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012253 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012254 VOS_ASSERT(0);
12255 return VOS_STATUS_E_NOMEM;
12256 }
12257 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12258 if(NULL == pWdaParams)
12259 {
12260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012261 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012262 VOS_ASSERT(0);
12263 vos_mem_free(wdiWowlExitInfo);
12264 return VOS_STATUS_E_NOMEM;
12265 }
12266
12267 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
12268 pWowlExitParams->bssIdx;
12269
Yue Ma7f44bbe2013-04-12 11:47:39 -070012270 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
12271 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012272
12273 /* Store param pointer as passed in by caller */
12274 /* store Params pass it to WDI */
12275 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
12276 pWdaParams->pWdaContext = pWDA;
12277 pWdaParams->wdaMsgParam = pWowlExitParams;
12278
12279 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012280 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012281
Jeff Johnson43971f52012-07-17 12:26:56 -070012282 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012283 {
12284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12285 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012286 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012287 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12288 vos_mem_free(pWdaParams->wdaMsgParam);
12289 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012290 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012291 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012292}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012293/*
12294 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
12295 * Request to WDI to determine whether a given station is capable of
12296 * using HW-based frame translation
12297 */
12298v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
12299 tANI_U8 staIdx)
12300{
12301 return WDI_IsHwFrameTxTranslationCapable(staIdx);
12302}
Katya Nigam6201c3e2014-05-27 17:51:42 +053012303
12304/*
12305 * FUNCTION: WDA_IsSelfSTA
12306 * Request to WDI to determine whether a given STAID is self station
12307 * index.
12308 */
12309v_BOOL_t WDA_IsSelfSTA(v_PVOID_t pVosContext, tANI_U8 ucSTAIdx)
12310{
12311
12312 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
12313
Girish Gowli05cf44e2014-06-12 21:53:37 +053012314 if (NULL != pWDA)
12315 return WDI_IsSelfSTA(pWDA->pWdiContext,ucSTAIdx);
12316 else
12317 return VOS_TRUE;
Katya Nigam6201c3e2014-05-27 17:51:42 +053012318}
Jeff Johnson295189b2012-06-20 16:38:30 -070012319/*
12320 * FUNCTION: WDA_NvDownloadReqCallback
12321 * send NV Download RSP back to PE
12322 */
12323void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
12324 void* pUserData)
12325{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012326
12327 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012328 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012329
Jeff Johnson295189b2012-06-20 16:38:30 -070012330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012331 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012332
12333 if(NULL == pWdaParams)
12334 {
12335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012336 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012337 VOS_ASSERT(0) ;
12338 return ;
12339 }
12340
12341 pWDA = pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012342 if (NULL == pWDA)
12343 {
12344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12345 "%s:pWDA is NULL", __func__);
Anand N Sunkadc5ab6092015-03-16 14:22:00 +053012346
12347 if(pWdaParams->wdaWdiApiMsgParam)
12348 {
12349 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12350 }
12351 vos_mem_free(pWdaParams);
12352
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012353 VOS_ASSERT(0);
12354 return ;
12355 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012356
Jeff Johnson295189b2012-06-20 16:38:30 -070012357 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012358 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12359 vos_mem_free(pWdaParams);
12360
Jeff Johnson295189b2012-06-20 16:38:30 -070012361 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070012362 return ;
12363}
Jeff Johnson295189b2012-06-20 16:38:30 -070012364/*
12365 * FUNCTION: WDA_ProcessNvDownloadReq
12366 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
12367 */
12368VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
12369{
12370 /* Initialize the local Variables*/
12371 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
12372 v_VOID_t *pNvBuffer=NULL;
12373 v_SIZE_t bufferSize = 0;
12374 WDI_Status status = WDI_STATUS_E_FAILURE;
12375 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012376 tWDA_ReqParams *pWdaParams ;
12377
Jeff Johnson295189b2012-06-20 16:38:30 -070012378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012379 "------> %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012380 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070012381 {
12382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012383 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012384 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070012385 return VOS_STATUS_E_FAILURE;
12386 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012387
Jeff Johnson295189b2012-06-20 16:38:30 -070012388 /* Get the NV structure base address and size from VOS */
Prasanna Kumarf6c94ae2013-04-11 20:05:21 -070012389 vos_nv_getNVEncodedBuffer(&pNvBuffer,&bufferSize);
12390
Jeff Johnson295189b2012-06-20 16:38:30 -070012391 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
12392 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012393 if(NULL == wdiNvDownloadReqParam)
12394 {
12395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012396 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012397 VOS_ASSERT(0);
12398 return VOS_STATUS_E_NOMEM;
12399 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012400 /* Copy Params to wdiNvDownloadReqParam*/
12401 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
12402 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012403
12404 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12405 if(NULL == pWdaParams)
12406 {
12407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012408 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012409 VOS_ASSERT(0);
12410 vos_mem_free(wdiNvDownloadReqParam);
12411 return VOS_STATUS_E_NOMEM;
12412 }
12413
Jeff Johnson295189b2012-06-20 16:38:30 -070012414 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012415 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
12416 pWdaParams->wdaMsgParam = NULL;
12417 pWdaParams->pWdaContext = pWDA;
12418
12419
Jeff Johnson295189b2012-06-20 16:38:30 -070012420 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012421
Jeff Johnson295189b2012-06-20 16:38:30 -070012422 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012423 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
12424
Jeff Johnson295189b2012-06-20 16:38:30 -070012425 if(IS_WDI_STATUS_FAILURE(status))
12426 {
12427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12428 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012429 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12430 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012431 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012432 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012433}
12434/*
12435 * FUNCTION: WDA_FlushAcReqCallback
12436 * send Flush AC RSP back to TL
12437 */
12438void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
12439{
12440 vos_msg_t wdaMsg = {0} ;
12441 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12442 tFlushACReq *pFlushACReqParams;
12443 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012445 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012446 if(NULL == pWdaParams)
12447 {
12448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012449 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012450 VOS_ASSERT(0) ;
12451 return ;
12452 }
12453
12454 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
12455 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
12456 if(NULL == pFlushACRspParams)
12457 {
12458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012459 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012460 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070012461 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012462 return ;
12463 }
12464 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
12465 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
12466 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
12467 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
12468 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070012469 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012470 vos_mem_free(pWdaParams->wdaMsgParam) ;
12471 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12472 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012473 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
12474 wdaMsg.bodyptr = (void *)pFlushACRspParams;
12475 // POST message to TL
12476 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
12477
Jeff Johnson295189b2012-06-20 16:38:30 -070012478 return ;
12479}
Jeff Johnson295189b2012-06-20 16:38:30 -070012480/*
12481 * FUNCTION: WDA_ProcessFlushAcReq
12482 * Request to WDI to Update the DELBA REQ params.
12483 */
12484VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
12485 tFlushACReq *pFlushAcReqParams)
12486{
12487 WDI_Status status = WDI_STATUS_SUCCESS ;
12488 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
12489 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
12490 sizeof(WDI_FlushAcReqParamsType)) ;
12491 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012492 if(NULL == wdiFlushAcReqParam)
12493 {
12494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012495 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012496 VOS_ASSERT(0);
12497 return VOS_STATUS_E_NOMEM;
12498 }
12499 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12500 if(NULL == pWdaParams)
12501 {
12502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012503 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012504 VOS_ASSERT(0);
12505 vos_mem_free(wdiFlushAcReqParam);
12506 return VOS_STATUS_E_NOMEM;
12507 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012509 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012510 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
12511 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
12512 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
12513 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -070012514 /* Store Flush AC pointer, as this will be used for response */
12515 /* store Params pass it to WDI */
12516 pWdaParams->pWdaContext = pWDA;
12517 pWdaParams->wdaMsgParam = pFlushAcReqParams;
12518 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012519 status = WDI_FlushAcReq(wdiFlushAcReqParam,
12520 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012521 if(IS_WDI_STATUS_FAILURE(status))
12522 {
12523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12524 "Failure in Flush AC REQ Params WDI API, free all the memory " );
12525 vos_mem_free(pWdaParams->wdaMsgParam) ;
12526 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12527 vos_mem_free(pWdaParams) ;
12528 //TODO: respond to TL with failure
12529 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012530 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012531}
Jeff Johnson295189b2012-06-20 16:38:30 -070012532/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012533 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012534 *
12535 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012536void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012537{
12538 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012539 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070012540 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012541
12542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012543 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012544 if(NULL == pWdaParams)
12545 {
12546 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012547 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012548 VOS_ASSERT(0) ;
12549 return ;
12550 }
12551 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012552 if (NULL == pWDA)
12553 {
12554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12555 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +053012556 vos_mem_free(pWdaParams->wdaMsgParam) ;
12557 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12558 vos_mem_free(pWdaParams) ;
12559
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012560 VOS_ASSERT(0);
12561 return ;
12562 }
12563
Jeff Johnson295189b2012-06-20 16:38:30 -070012564 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
12565 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
12566 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
12567 {
12568 pWDA->wdaAmpSessionOn = VOS_FALSE;
12569 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012570 vos_mem_free(pWdaParams->wdaMsgParam) ;
12571 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12572 vos_mem_free(pWdaParams) ;
12573 /*
12574 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
12575 * param here
12576 */
Jeff Johnson295189b2012-06-20 16:38:30 -070012577 return ;
12578}
Yue Ma7f44bbe2013-04-12 11:47:39 -070012579/*
12580 * FUNCTION: WDA_BtAmpEventReqCallback
12581 * Free memory.
12582 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
12583 */
12584void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
12585{
12586 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012587 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012588 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012589
Yue Ma7f44bbe2013-04-12 11:47:39 -070012590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12591 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12592
12593 if(NULL == pWdaParams)
12594 {
12595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12596 "%s: pWdaParams received NULL", __func__);
12597 VOS_ASSERT(0);
12598 return;
12599 }
12600
12601 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012602 if (NULL == pWDA)
12603 {
12604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12605 "%s:pWDA is NULL", __func__);
12606 VOS_ASSERT(0);
12607 return ;
12608 }
12609
Yue Ma7f44bbe2013-04-12 11:47:39 -070012610 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
12611
12612 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
12613 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
12614 {
12615 pWDA->wdaAmpSessionOn = VOS_FALSE;
12616 }
12617
12618 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12619 {
12620 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12621 vos_mem_free(pWdaParams->wdaMsgParam);
12622 vos_mem_free(pWdaParams);
12623 }
12624
12625 return;
12626}
Jeff Johnson295189b2012-06-20 16:38:30 -070012627/*
12628 * FUNCTION: WDA_ProcessBtAmpEventReq
12629 * Request to WDI to Update with BT AMP events.
12630 */
12631VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
12632 tSmeBtAmpEvent *pBtAmpEventParams)
12633{
12634 WDI_Status status = WDI_STATUS_SUCCESS ;
12635 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
12636 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
12637 sizeof(WDI_BtAmpEventParamsType)) ;
12638 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012640 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012641 if(NULL == wdiBtAmpEventParam)
12642 {
12643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012644 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012645 VOS_ASSERT(0);
12646 return VOS_STATUS_E_NOMEM;
12647 }
12648 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12649 if(NULL == pWdaParams)
12650 {
12651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012652 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012653 VOS_ASSERT(0);
12654 vos_mem_free(wdiBtAmpEventParam);
12655 return VOS_STATUS_E_NOMEM;
12656 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012657 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
12658 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012659 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
12660 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012661 /* Store BT AMP event pointer, as this will be used for response */
12662 /* store Params pass it to WDI */
12663 pWdaParams->pWdaContext = pWDA;
12664 pWdaParams->wdaMsgParam = pBtAmpEventParams;
12665 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012666 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012667 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012668 if(IS_WDI_STATUS_FAILURE(status))
12669 {
12670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12671 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
12672 vos_mem_free(pWdaParams->wdaMsgParam) ;
12673 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12674 vos_mem_free(pWdaParams) ;
12675 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012676 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
12677 {
12678 pWDA->wdaAmpSessionOn = VOS_TRUE;
12679 }
12680 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012681}
12682
Jeff Johnson295189b2012-06-20 16:38:30 -070012683/*
12684 * FUNCTION: WDA_FTMCommandReqCallback
12685 * Handle FTM CMD response came from HAL
12686 * Route responce to HDD FTM
12687 */
12688void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
12689 void *usrData)
12690{
12691 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012692 if((NULL == pWDA) || (NULL == ftmCmdRspData))
12693 {
12694 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053012695 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070012696 return;
12697 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012698 /* Release Current FTM Command Request */
12699 vos_mem_free(pWDA->wdaFTMCmdReq);
12700 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012701 /* Post FTM Responce to HDD FTM */
12702 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070012703 return;
12704}
Jeff Johnson295189b2012-06-20 16:38:30 -070012705/*
12706 * FUNCTION: WDA_ProcessFTMCommand
12707 * Send FTM command to WDI
12708 */
12709VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
12710 tPttMsgbuffer *pPTTFtmCmd)
12711{
12712 WDI_Status status = WDI_STATUS_SUCCESS;
12713 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012714 ftmCMDReq = (WDI_FTMCommandReqType *)
12715 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
12716 if(NULL == ftmCMDReq)
12717 {
12718 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12719 "WDA FTM Command buffer alloc fail");
12720 return VOS_STATUS_E_NOMEM;
12721 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012722 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
12723 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -070012724 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -070012725 /* Send command to WDI */
12726 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070012727 return status;
12728}
Jeff Johnsone7245742012-09-05 17:12:55 -070012729#ifdef FEATURE_OEM_DATA_SUPPORT
12730/*
12731 * FUNCTION: WDA_StartOemDataReqCallback
12732 *
12733 */
12734void WDA_StartOemDataReqCallback(
12735 WDI_oemDataRspParamsType *wdiOemDataRspParams,
12736 void* pUserData)
12737{
12738 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012739 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012740 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070012741 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012742
Jeff Johnsone7245742012-09-05 17:12:55 -070012743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012744 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012745
12746 if(NULL == pWdaParams)
12747 {
12748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012749 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012750 VOS_ASSERT(0) ;
12751 return ;
12752 }
12753 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
12754
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012755 if (NULL == pWDA)
Jeff Johnsone7245742012-09-05 17:12:55 -070012756 {
12757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012758 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070012759 VOS_ASSERT(0);
12760 return ;
12761 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012762
Jeff Johnsone7245742012-09-05 17:12:55 -070012763 /*
12764 * Allocate memory for response params sent to PE
12765 */
12766 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
12767
12768 // Check if memory is allocated for OemdataMeasRsp Params.
12769 if(NULL == pOemDataRspParams)
12770 {
12771 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12772 "OEM DATA WDA callback alloc fail");
12773 VOS_ASSERT(0) ;
12774 return;
12775 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012776
Jeff Johnsone7245742012-09-05 17:12:55 -070012777 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012778 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12779 vos_mem_free(pWdaParams->wdaMsgParam);
12780 vos_mem_free(pWdaParams) ;
12781
Jeff Johnsone7245742012-09-05 17:12:55 -070012782 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080012783 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -070012784 * Also, here success always means that we have atleast one BSSID.
12785 */
12786 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
12787
12788 //enable Tx
12789 status = WDA_ResumeDataTx(pWDA);
12790 if(status != VOS_STATUS_SUCCESS)
12791 {
12792 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
12793 }
12794 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
12795 return ;
12796}
12797/*
12798 * FUNCTION: WDA_ProcessStartOemDataReq
12799 * Send Start Oem Data Req to WDI
12800 */
12801VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
12802 tStartOemDataReq *pOemDataReqParams)
12803{
12804 WDI_Status status = WDI_STATUS_SUCCESS;
12805 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012806 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -070012807
12808 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
12809
12810 if(NULL == wdiOemDataReqParams)
12811 {
12812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012813 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070012814 VOS_ASSERT(0);
12815 return VOS_STATUS_E_NOMEM;
12816 }
12817
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012818 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
12819 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
12820 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
12821 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -070012822
12823 wdiOemDataReqParams->wdiReqStatusCB = NULL;
12824
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012825 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12826 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -070012827 {
12828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012829 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070012830 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012831 vos_mem_free(pOemDataReqParams);
12832 VOS_ASSERT(0);
12833 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -070012834 }
Jeff Johnsone7245742012-09-05 17:12:55 -070012835
Bernald44a1ae2013-01-09 08:30:39 -080012836 pWdaParams->pWdaContext = (void*)pWDA;
12837 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
12838 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012839
12840 status = WDI_StartOemDataReq(wdiOemDataReqParams,
12841 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070012842
12843 if(IS_WDI_STATUS_FAILURE(status))
12844 {
12845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12846 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012847 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12848 vos_mem_free(pWdaParams->wdaMsgParam);
12849 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070012850 }
12851 return CONVERT_WDI2VOS_STATUS(status) ;
12852}
12853#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070012854/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012855 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012856 *
12857 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012858void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012859{
12860 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012862 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012863 if(NULL == pWdaParams)
12864 {
12865 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012866 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012867 VOS_ASSERT(0) ;
12868 return ;
12869 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012870
12871 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12872 vos_mem_free(pWdaParams->wdaMsgParam);
12873 vos_mem_free(pWdaParams);
12874
12875 return ;
12876}
12877/*
12878 * FUNCTION: WDA_SetTxPerTrackingReqCallback
12879 * Free memory.
12880 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
12881 */
12882void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
12883{
12884 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12885
12886 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12887 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12888
12889 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070012890 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070012891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12892 "%s: pWdaParams received NULL", __func__);
12893 VOS_ASSERT(0);
12894 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070012895 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012896
12897 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012898 {
12899 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -070012900 vos_mem_free(pWdaParams->wdaMsgParam);
12901 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012902 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012903
12904 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070012905}
Jeff Johnson295189b2012-06-20 16:38:30 -070012906#ifdef WLAN_FEATURE_GTK_OFFLOAD
12907/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012908 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012909 *
12910 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012911void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012912 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012913{
12914 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12915
12916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012917 "<------ %s " ,__func__);
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080012918 if(NULL == pWdaParams)
12919 {
12920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12921 "%s: pWdaParams received NULL", __func__);
12922 VOS_ASSERT(0);
12923 return;
12924 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012925
Jeff Johnson295189b2012-06-20 16:38:30 -070012926 vos_mem_free(pWdaParams->wdaMsgParam) ;
12927 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12928 vos_mem_free(pWdaParams) ;
12929
12930 //print a msg, nothing else to do
12931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012932 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070012933
12934 return ;
12935}
Yue Ma7f44bbe2013-04-12 11:47:39 -070012936/*
12937 * FUNCTION: WDA_GTKOffloadReqCallback
12938 * Free memory.
12939 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
12940 */
12941void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
12942{
12943 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012944
Yue Ma7f44bbe2013-04-12 11:47:39 -070012945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12946 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12947
12948 if(NULL == pWdaParams)
12949 {
12950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12951 "%s: pWdaParams received NULL", __func__);
12952 VOS_ASSERT(0);
12953 return;
12954 }
12955
12956 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12957 {
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053012958 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
12959 sizeof(WDI_GtkOffloadReqMsg));
12960 vos_mem_zero(pWdaParams->wdaMsgParam,
12961 sizeof(tSirGtkOffloadParams));
Yue Ma7f44bbe2013-04-12 11:47:39 -070012962 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12963 vos_mem_free(pWdaParams->wdaMsgParam);
12964 vos_mem_free(pWdaParams);
12965 }
12966
12967 return;
12968}
Jeff Johnson295189b2012-06-20 16:38:30 -070012969/*
12970 * FUNCTION: WDA_ProcessGTKOffloadReq
12971 * Request to WDI to set the filter to minimize unnecessary host wakeup due
12972 * to broadcast traffic (sta mode).
12973 */
12974VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
12975 tpSirGtkOffloadParams pGtkOffloadParams)
12976{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053012977 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012978 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
12979 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
12980 sizeof(WDI_GtkOffloadReqMsg)) ;
12981 tWDA_ReqParams *pWdaParams ;
12982
12983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012984 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012985
12986 if(NULL == wdiGtkOffloadReqMsg)
12987 {
12988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012989 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012990 VOS_ASSERT(0);
12991 return VOS_STATUS_E_NOMEM;
12992 }
12993
12994 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12995 if(NULL == pWdaParams)
12996 {
12997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012998 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012999 VOS_ASSERT(0);
13000 vos_mem_free(wdiGtkOffloadReqMsg);
13001 return VOS_STATUS_E_NOMEM;
13002 }
13003
13004 //
13005 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
13006 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013007
13008 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013009 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013010
Jeff Johnson295189b2012-06-20 16:38:30 -070013011 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
13012 // Copy KCK
13013 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
13014 // Copy KEK
13015 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
13016 // Copy KeyReplayCounter
13017 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
13018 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
13019
Yue Ma7f44bbe2013-04-12 11:47:39 -070013020 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
13021 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013022
Jeff Johnson295189b2012-06-20 16:38:30 -070013023
13024 /* Store Params pass it to WDI */
13025 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
13026 pWdaParams->pWdaContext = pWDA;
13027 /* Store param pointer as passed in by caller */
13028 pWdaParams->wdaMsgParam = pGtkOffloadParams;
13029
Yue Ma7f44bbe2013-04-12 11:47:39 -070013030 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013031
13032 if(IS_WDI_STATUS_FAILURE(status))
13033 {
13034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13035 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053013036 vos_mem_zero(wdiGtkOffloadReqMsg, sizeof(WDI_GtkOffloadReqMsg));
13037 vos_mem_zero(pGtkOffloadParams, sizeof(tSirGtkOffloadParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070013038 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13039 vos_mem_free(pWdaParams->wdaMsgParam);
13040 vos_mem_free(pWdaParams);
13041 }
13042
13043 return CONVERT_WDI2VOS_STATUS(status) ;
13044}
13045
13046/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013047 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013048 *
13049 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013050void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013051 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013052{
13053 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13054 tWDA_CbContext *pWDA;
13055 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Nirav Shah374de6e2014-02-13 16:40:01 +053013056 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070013057 vos_msg_t vosMsg;
13058
13059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013060 "<------ %s " ,__func__);
Nirav Shah374de6e2014-02-13 16:40:01 +053013061
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080013062 if(NULL == pWdaParams)
13063 {
13064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13065 "%s: pWdaParams received NULL", __func__);
13066 VOS_ASSERT(0);
13067 return;
13068 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013069
Nirav Shah374de6e2014-02-13 16:40:01 +053013070 pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams));
13071 if(NULL == pGtkOffloadGetInfoRsp)
13072 {
13073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13074 "%s: vos_mem_malloc failed ", __func__);
13075 VOS_ASSERT(0);
13076 return;
13077 }
13078
Jeff Johnson295189b2012-06-20 16:38:30 -070013079 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
13080 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
13081
13082 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
13083 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
13084
13085 /* Message Header */
13086 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
Kiran Kumar Lokerefdf42412013-07-17 17:40:58 -070013087 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013088
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013089 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
13090 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
13091 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
13092 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
13093 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070013094
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013095 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
13096 pwdiGtkOffloadGetInfoRsparams->bssId,
13097 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013098 /* VOS message wrapper */
13099 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
13100 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
13101 vosMsg.bodyval = 0;
13102
13103 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13104 {
13105 /* free the mem and return */
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053013106 vos_mem_zero(pGtkOffloadGetInfoRsp,
13107 sizeof(tSirGtkOffloadGetInfoRspParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070013108 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
13109 }
13110
13111 vos_mem_free(pWdaParams->wdaMsgParam) ;
13112 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13113 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013114
13115 return;
13116}
13117/*
13118 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
13119 * Free memory and send RSP back to SME.
13120 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
13121 */
13122void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
13123{
13124 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13125 vos_msg_t vosMsg;
13126
13127 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13128 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13129
13130 if(NULL == pWdaParams)
13131 {
13132 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13133 "%s: pWdaParams received NULL", __func__);
13134 VOS_ASSERT(0);
13135 return;
13136 }
13137
13138 /* VOS message wrapper */
13139 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
13140 vosMsg.bodyptr = NULL;
13141 vosMsg.bodyval = 0;
13142
13143 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13144 {
13145 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13146 vos_mem_free(pWdaParams->wdaMsgParam);
13147 vos_mem_free(pWdaParams);
13148 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
13149 }
13150
13151 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070013152}
13153#endif
13154
13155/*
13156 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
13157 * Request to WDI to set Tx Per Tracking configurations
13158 */
13159VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
13160{
13161 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070013162 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070013163 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
13164 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
13165 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
13166 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013168 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013169 if(NULL == pwdiSetTxPerTrackingReqParams)
13170 {
13171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013172 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013173 vos_mem_free(pTxPerTrackingParams);
13174 VOS_ASSERT(0);
13175 return VOS_STATUS_E_NOMEM;
13176 }
13177 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13178 if(NULL == pWdaParams)
13179 {
13180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013181 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013182 vos_mem_free(pwdiSetTxPerTrackingReqParams);
13183 vos_mem_free(pTxPerTrackingParams);
13184 VOS_ASSERT(0);
13185 return VOS_STATUS_E_NOMEM;
13186 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013187 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
13188 pTxPerTrackingParams->ucTxPerTrackingEnable;
13189 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
13190 pTxPerTrackingParams->ucTxPerTrackingPeriod;
13191 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
13192 pTxPerTrackingParams->ucTxPerTrackingRatio;
13193 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
13194 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013195 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
13196 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013197 /* Store param pointer as passed in by caller */
13198 /* store Params pass it to WDI
13199 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
13200 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
13201 pWdaParams->pWdaContext = pWDA;
13202 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070013203 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013204 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070013205 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070013206 {
13207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13208 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070013209 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070013210 vos_mem_free(pWdaParams->wdaMsgParam) ;
13211 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13212 vos_mem_free(pWdaParams) ;
13213 }
Jeff Johnson43971f52012-07-17 12:26:56 -070013214 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013215
13216}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070013217/*
13218 * FUNCTION: WDA_HALDumpCmdCallback
13219 * Send the VOS complete .
13220 */
13221void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
13222 void* pUserData)
13223{
13224 tANI_U8 *buffer = NULL;
13225 tWDA_CbContext *pWDA = NULL;
Siddharth Bhal68115602015-01-18 20:44:55 +053013226 tWDA_HalDumpReqParams *pWdaParams = (tWDA_HalDumpReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013227 if(NULL == pWdaParams)
13228 {
13229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013230 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013231 VOS_ASSERT(0) ;
13232 return ;
13233 }
Bhargav Shah1a2cceb2016-03-28 11:56:10 +053013234
13235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13236 "%s: WDA HAL DUMP Resp Received",__func__);
13237
Jeff Johnson295189b2012-06-20 16:38:30 -070013238 pWDA = pWdaParams->pWdaContext;
13239 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070013240 if(wdiRspParams->usBufferLen > 0)
13241 {
13242 /*Copy the Resp data to UMAC supplied buffer*/
13243 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
13244 }
Siddharth Bhal68115602015-01-18 20:44:55 +053013245
13246 if (!pWdaParams->wdaHALDumpAsync)
13247 {/* Indicate VOSS about the start complete */
13248 vos_WDAComplete_cback(pWDA->pVosContext);
13249 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013250 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13251 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013252 return ;
13253}
13254
Jeff Johnson295189b2012-06-20 16:38:30 -070013255/*
13256 * FUNCTION: WDA_ProcessHALDumpCmdReq
13257 * Send Dump command to WDI
13258 */
13259VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
13260 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
Siddharth Bhal68115602015-01-18 20:44:55 +053013261 tANI_U32 arg4, tANI_U8 *pBuffer, wpt_boolean async)
Jeff Johnson295189b2012-06-20 16:38:30 -070013262{
13263 WDI_Status status = WDI_STATUS_SUCCESS;
13264 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
13265 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
Siddharth Bhal68115602015-01-18 20:44:55 +053013266 tWDA_HalDumpReqParams *pWdaParams ;
13267
Jeff Johnson295189b2012-06-20 16:38:30 -070013268 pVosContextType pVosContext = NULL;
13269 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070013270 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
13271 (void *)pMac);
Katya Nigame4bafe02014-02-28 15:37:57 +053013272 if(pVosContext)
13273 {
13274 if (pVosContext->isLogpInProgress)
13275 {
13276 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
13277 "%s:LOGP in Progress. Ignore!!!", __func__);
13278 return VOS_STATUS_E_BUSY;
13279 }
13280 }
13281 else
13282 {
13283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13284 "%s: VOS Context Null", __func__);
13285 return VOS_STATUS_E_RESOURCES;
13286 }
13287
Siddharth Bhal68115602015-01-18 20:44:55 +053013288 if (NULL == pVosContext->pWDAContext)
13289 {
13290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13291 "%s: WDA Context Null", __func__);
13292 return VOS_STATUS_E_RESOURCES;
13293 }
13294 pWdaParams = (tWDA_HalDumpReqParams *)vos_mem_malloc(sizeof(tWDA_HalDumpReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013295 if(NULL == pWdaParams)
13296 {
13297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013298 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013299 return VOS_STATUS_E_NOMEM;
13300 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013301 /* Allocate memory WDI request structure*/
13302 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
13303 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
13304 if(NULL == wdiHALDumpCmdReqParam)
13305 {
13306 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13307 "WDA HAL DUMP Command buffer alloc fail");
13308 vos_mem_free(pWdaParams);
13309 return WDI_STATUS_E_FAILURE;
13310 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013311 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070013312 /* Extract the arguments */
13313 wdiHalDumpCmdInfo->command = cmd;
13314 wdiHalDumpCmdInfo->argument1 = arg1;
13315 wdiHalDumpCmdInfo->argument2 = arg2;
13316 wdiHalDumpCmdInfo->argument3 = arg3;
13317 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070013318 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013319 pWdaParams->pWdaContext = pVosContext->pWDAContext;
Siddharth Bhal68115602015-01-18 20:44:55 +053013320 pWdaParams->wdaHALDumpAsync = async;
Jeff Johnson295189b2012-06-20 16:38:30 -070013321
13322 /* Response message will be passed through the buffer */
13323 pWdaParams->wdaMsgParam = (void *)pBuffer;
13324
13325 /* store Params pass it to WDI */
13326 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Bhargav Shah1a2cceb2016-03-28 11:56:10 +053013327
13328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13329 "%s: WDA HAL DUMP Command sent",__func__);
13330
Jeff Johnson295189b2012-06-20 16:38:30 -070013331 /* Send command to WDI */
Siddharth Bhal68115602015-01-18 20:44:55 +053013332 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback,
13333 pWdaParams);
13334 /* For Sync event only wait for rsp until completion of wdaCompleteEvent*/
13335 if (!async)
Jeff Johnson295189b2012-06-20 16:38:30 -070013336 {
Siddharth Bhal68115602015-01-18 20:44:55 +053013337 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent),
13338 WDA_DUMPCMD_WAIT_TIMEOUT );
13339 if ( vStatus != VOS_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -070013340 {
Siddharth Bhal68115602015-01-18 20:44:55 +053013341 if ( vStatus == VOS_STATUS_E_TIMEOUT )
13342 {
13343 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
13344 "%s: Timeout occurred before WDA_HALDUMP complete",__func__);
13345 }
13346 else
13347 {
13348 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
13349 "%s: WDA_HALDUMP reporting other error",__func__);
13350 }
Bhargav Shah1a2cceb2016-03-28 11:56:10 +053013351 VOS_BUG(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070013352 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013353 }
13354 return status;
13355}
Jeff Johnson295189b2012-06-20 16:38:30 -070013356#ifdef WLAN_FEATURE_GTK_OFFLOAD
13357/*
13358 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
13359 * Request to WDI to get GTK Offload Information
13360 */
13361VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
13362 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
13363{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013364 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013365 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
13366 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
13367 tWDA_ReqParams *pWdaParams ;
13368
13369 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
13370 {
13371 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013372 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013373 VOS_ASSERT(0);
13374 return VOS_STATUS_E_NOMEM;
13375 }
13376
13377 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13378 if(NULL == pWdaParams)
13379 {
13380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013381 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013382 VOS_ASSERT(0);
13383 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
13384 return VOS_STATUS_E_NOMEM;
13385 }
13386
Yue Ma7f44bbe2013-04-12 11:47:39 -070013387 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
13388 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013389
Jeff Johnson295189b2012-06-20 16:38:30 -070013390 /* Store Params pass it to WDI */
13391 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
13392 pWdaParams->pWdaContext = pWDA;
13393 /* Store param pointer as passed in by caller */
13394 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
13395
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013396 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053013397 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013398
Yue Ma7f44bbe2013-04-12 11:47:39 -070013399 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013400
13401 if(IS_WDI_STATUS_FAILURE(status))
13402 {
13403 /* failure returned by WDI API */
13404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13405 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
13406 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13407 vos_mem_free(pWdaParams) ;
13408 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
13409 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
13410 }
13411
13412 return CONVERT_WDI2VOS_STATUS(status) ;
13413}
13414#endif // WLAN_FEATURE_GTK_OFFLOAD
13415
13416/*
Yue Mab9c86f42013-08-14 15:59:08 -070013417 * FUNCTION: WDA_ProcessAddPeriodicTxPtrnInd
13418 *
13419 */
13420VOS_STATUS WDA_ProcessAddPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
13421 tSirAddPeriodicTxPtrn *pAddPeriodicTxPtrnParams)
13422{
13423 WDI_Status wdiStatus;
13424 WDI_AddPeriodicTxPtrnParamsType *addPeriodicTxPtrnParams;
13425
13426 addPeriodicTxPtrnParams =
13427 vos_mem_malloc(sizeof(WDI_AddPeriodicTxPtrnParamsType));
13428
13429 if (NULL == addPeriodicTxPtrnParams)
13430 {
13431 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13432 "%s: Not able to allocate memory for addPeriodicTxPtrnParams!",
13433 __func__);
13434
13435 return VOS_STATUS_E_NOMEM;
13436 }
13437
13438 vos_mem_copy(&(addPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams),
13439 pAddPeriodicTxPtrnParams, sizeof(tSirAddPeriodicTxPtrn));
13440
13441 addPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
13442 addPeriodicTxPtrnParams->pUserData = pWDA;
13443
13444 wdiStatus = WDI_AddPeriodicTxPtrnInd(addPeriodicTxPtrnParams);
13445
13446 if (WDI_STATUS_PENDING == wdiStatus)
13447 {
13448 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13449 "Pending received for %s:%d", __func__, __LINE__ );
13450 }
13451 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13452 {
13453 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13454 "Failure in %s:%d", __func__, __LINE__ );
13455 }
13456
13457 vos_mem_free(addPeriodicTxPtrnParams);
13458
13459 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13460}
13461
13462/*
13463 * FUNCTION: WDA_ProcessDelPeriodicTxPtrnInd
13464 *
13465 */
13466VOS_STATUS WDA_ProcessDelPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
13467 tSirDelPeriodicTxPtrn *pDelPeriodicTxPtrnParams)
13468{
13469 WDI_Status wdiStatus;
13470 WDI_DelPeriodicTxPtrnParamsType *delPeriodicTxPtrnParams;
13471
13472 delPeriodicTxPtrnParams =
13473 vos_mem_malloc(sizeof(WDI_DelPeriodicTxPtrnParamsType));
13474
13475 if (NULL == delPeriodicTxPtrnParams)
13476 {
13477 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13478 "%s: Not able to allocate memory for delPeriodicTxPtrnParams!",
13479 __func__);
13480
13481 return VOS_STATUS_E_NOMEM;
13482 }
13483
13484 vos_mem_copy(&(delPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams),
13485 pDelPeriodicTxPtrnParams, sizeof(tSirDelPeriodicTxPtrn));
13486
13487 delPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
13488 delPeriodicTxPtrnParams->pUserData = pWDA;
13489
13490 wdiStatus = WDI_DelPeriodicTxPtrnInd(delPeriodicTxPtrnParams);
13491
13492 if (WDI_STATUS_PENDING == wdiStatus)
13493 {
13494 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13495 "Pending received for %s:%d", __func__, __LINE__ );
13496 }
13497 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13498 {
13499 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13500 "Failure in %s:%d", __func__, __LINE__ );
13501 }
13502
13503 vos_mem_free(delPeriodicTxPtrnParams);
13504
13505 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13506}
13507
Abhishek Singh00b71972016-01-07 10:51:04 +053013508/*
13509 * FUNCTION: WDA_ProcessRateUpdateInd
13510 *
13511 */
13512VOS_STATUS WDA_ProcessRateUpdateInd(tWDA_CbContext *pWDA,
13513 tSirRateUpdateInd *pRateUpdateParams)
13514{
13515 WDI_Status wdiStatus;
13516 WDI_RateUpdateIndParams rateUpdateParams;
13517
13518 vos_mem_copy(rateUpdateParams.bssid,
13519 pRateUpdateParams->bssid, sizeof(tSirMacAddr));
13520
13521 rateUpdateParams.ucastDataRateTxFlag =
13522 pRateUpdateParams->ucastDataRateTxFlag;
13523 rateUpdateParams.rmcDataRateTxFlag =
13524 pRateUpdateParams->rmcDataRateTxFlag;
13525 rateUpdateParams.mcastDataRate24GHzTxFlag =
13526 pRateUpdateParams->mcastDataRate24GHzTxFlag;
13527 rateUpdateParams.mcastDataRate5GHzTxFlag =
13528 pRateUpdateParams->mcastDataRate5GHzTxFlag;
13529
13530 rateUpdateParams.ucastDataRate = pRateUpdateParams->ucastDataRate;
13531 rateUpdateParams.rmcDataRate =
13532 pRateUpdateParams->rmcDataRate;
13533 rateUpdateParams.mcastDataRate24GHz = pRateUpdateParams->mcastDataRate24GHz;
13534 rateUpdateParams.mcastDataRate5GHz = pRateUpdateParams->mcastDataRate5GHz;
13535
13536 rateUpdateParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
13537 rateUpdateParams.pUserData = pWDA;
13538
13539 wdiStatus = WDI_RateUpdateInd(&rateUpdateParams);
13540
13541 if (WDI_STATUS_PENDING == wdiStatus)
13542 {
13543 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13544 "Pending received for %s:%d", __func__, __LINE__ );
13545 }
13546 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13547 {
13548 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13549 "Failure in %s:%d", __func__, __LINE__ );
13550 }
13551
13552 vos_mem_free(pRateUpdateParams);
13553
13554 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13555}
13556
13557
Rajeev79dbe4c2013-10-05 11:03:42 +053013558#ifdef FEATURE_WLAN_BATCH_SCAN
13559/*
13560 * FUNCTION: WDA_ProcessStopBatchScanInd
13561 *
13562 * DESCRIPTION: This function sends stop batch scan inidcation message to WDI
13563 *
13564 * PARAM:
13565 * pWDA: pointer to WDA context
13566 * pReq: pointer to stop batch scan request
13567 */
13568VOS_STATUS WDA_ProcessStopBatchScanInd(tWDA_CbContext *pWDA,
13569 tSirStopBatchScanInd *pReq)
13570{
13571 WDI_Status wdiStatus;
13572 WDI_StopBatchScanIndType wdiReq;
13573
13574 wdiReq.param = pReq->param;
13575
13576 wdiStatus = WDI_StopBatchScanInd(&wdiReq);
13577
13578 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13579 {
13580 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13581 "Stop batch scan ind failed %s:%d", __func__, wdiStatus);
13582 }
13583
13584 vos_mem_free(pReq);
13585
13586 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13587}
13588/*==========================================================================
13589 FUNCTION WDA_ProcessTriggerBatchScanResultInd
13590
13591 DESCRIPTION
13592 API to pull batch scan result from FW
13593
13594 PARAMETERS
13595 pWDA: Pointer to WDA context
13596 pGetBatchScanReq: Pointer to get batch scan result indication
13597
13598 RETURN VALUE
13599 NONE
13600
13601===========================================================================*/
13602VOS_STATUS WDA_ProcessTriggerBatchScanResultInd(tWDA_CbContext *pWDA,
13603 tSirTriggerBatchScanResultInd *pReq)
13604{
13605 WDI_Status wdiStatus;
13606 WDI_TriggerBatchScanResultIndType wdiReq;
13607
13608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13609 "------> %s " ,__func__);
13610
13611 wdiReq.param = pReq->param;
13612
13613 wdiStatus = WDI_TriggerBatchScanResultInd(&wdiReq);
13614
13615 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
13616 {
13617 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13618 "Trigger batch scan result ind failed %s:%d",
13619 __func__, wdiStatus);
13620 }
13621
13622 vos_mem_free(pReq);
13623
13624 return CONVERT_WDI2VOS_STATUS(wdiStatus);
13625}
13626
13627/*==========================================================================
13628 FUNCTION WDA_SetBatchScanRespCallback
13629
13630 DESCRIPTION
13631 API to process set batch scan response from FW
13632
13633 PARAMETERS
13634 pRsp: Pointer to set batch scan response
13635 pUserData: Pointer to user data
13636
13637 RETURN VALUE
13638 NONE
13639
13640===========================================================================*/
13641void WDA_SetBatchScanRespCallback
13642(
13643 WDI_SetBatchScanRspType *pRsp,
13644 void* pUserData
13645)
13646{
13647 tSirSetBatchScanRsp *pHddSetBatchScanRsp;
13648 tpAniSirGlobal pMac;
13649 void *pCallbackContext;
13650 tWDA_CbContext *pWDA = NULL ;
13651 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13652
13653
13654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13655 "<------ %s " ,__func__);
13656 if (NULL == pWdaParams)
13657 {
13658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13659 "%s: pWdaParams received NULL", __func__);
13660 VOS_ASSERT(0) ;
13661 return ;
13662 }
13663
13664 /*extract WDA context*/
13665 pWDA = pWdaParams->pWdaContext;
13666 if (NULL == pWDA)
13667 {
13668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13669 "%s:pWDA is NULL can't invole HDD callback",
13670 __func__);
13671 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13672 vos_mem_free(pWdaParams->wdaMsgParam);
13673 vos_mem_free(pWdaParams);
13674 VOS_ASSERT(0);
13675 return;
13676 }
13677
13678 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13679 vos_mem_free(pWdaParams->wdaMsgParam);
13680 vos_mem_free(pWdaParams);
13681
13682 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13683 if (NULL == pMac)
13684 {
13685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13686 "%s:pMac is NULL", __func__);
13687 VOS_ASSERT(0);
13688 return;
13689 }
13690
13691 pHddSetBatchScanRsp =
13692 (tSirSetBatchScanRsp *)vos_mem_malloc(sizeof(tSirSetBatchScanRsp));
13693 if (NULL == pHddSetBatchScanRsp)
13694 {
13695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13696 "%s: VOS MEM Alloc Failure can't invoke HDD callback", __func__);
13697 VOS_ASSERT(0);
13698 return;
13699 }
13700
13701 pHddSetBatchScanRsp->nScansToBatch = pRsp->nScansToBatch;
13702
13703 pCallbackContext = pMac->pmc.setBatchScanReqCallbackContext;
13704 /*call hdd callback with set batch scan response data*/
13705 if(pMac->pmc.setBatchScanReqCallback)
13706 {
13707 pMac->pmc.setBatchScanReqCallback(pCallbackContext, pHddSetBatchScanRsp);
13708 }
13709 else
13710 {
13711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13712 "%s:HDD callback is null", __func__);
13713 VOS_ASSERT(0);
13714 }
13715
13716 vos_mem_free(pHddSetBatchScanRsp);
13717 return ;
13718}
13719
13720/*==========================================================================
13721 FUNCTION WDA_ProcessSetBatchScanReq
13722
13723 DESCRIPTION
13724 API to send set batch scan request to WDI
13725
13726 PARAMETERS
13727 pWDA: Pointer to WDA context
13728 pSetBatchScanReq: Pointer to set batch scan req
13729
13730 RETURN VALUE
13731 NONE
13732
13733===========================================================================*/
13734VOS_STATUS WDA_ProcessSetBatchScanReq(tWDA_CbContext *pWDA,
13735 tSirSetBatchScanReq *pSetBatchScanReq)
13736{
13737 WDI_Status status;
13738 tWDA_ReqParams *pWdaParams ;
13739 WDI_SetBatchScanReqType *pWdiSetBatchScanReq;
13740
13741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13742 "------> %s " ,__func__);
13743
13744 pWdiSetBatchScanReq =
13745 (WDI_SetBatchScanReqType *)vos_mem_malloc(sizeof(WDI_SetBatchScanReqType));
13746 if (NULL == pWdiSetBatchScanReq)
13747 {
13748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13749 "%s: VOS MEM Alloc Failure", __func__);
13750 vos_mem_free(pSetBatchScanReq);
13751 VOS_ASSERT(0);
13752 return VOS_STATUS_E_NOMEM;
13753 }
13754
13755 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
13756 if (NULL == pWdaParams)
13757 {
13758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13759 "%s: VOS MEM Alloc Failure", __func__);
13760 VOS_ASSERT(0);
13761 vos_mem_free(pSetBatchScanReq);
13762 vos_mem_free(pWdiSetBatchScanReq);
13763 return VOS_STATUS_E_NOMEM;
13764 }
13765
13766 pWdiSetBatchScanReq->scanFrequency = pSetBatchScanReq->scanFrequency;
13767 pWdiSetBatchScanReq->numberOfScansToBatch =
13768 pSetBatchScanReq->numberOfScansToBatch;
13769 pWdiSetBatchScanReq->bestNetwork = pSetBatchScanReq->bestNetwork;
13770 pWdiSetBatchScanReq->rfBand = pSetBatchScanReq->rfBand;
13771 pWdiSetBatchScanReq->rtt = pSetBatchScanReq->rtt;
13772
13773 pWdaParams->wdaWdiApiMsgParam = pWdiSetBatchScanReq;
13774 pWdaParams->pWdaContext = pWDA;
13775 pWdaParams->wdaMsgParam = pSetBatchScanReq;
13776
13777 status = WDI_SetBatchScanReq(pWdiSetBatchScanReq, pWdaParams,
13778 (WDI_SetBatchScanCb)WDA_SetBatchScanRespCallback);
13779 if (IS_WDI_STATUS_FAILURE(status))
13780 {
13781 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13782 "Failure in Set Batch Scan REQ WDI API, free all the memory " );
13783 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13784 vos_mem_free(pWdaParams->wdaMsgParam);
13785 vos_mem_free(pWdaParams);
13786 }
13787 return CONVERT_WDI2VOS_STATUS(status);
13788}
13789
13790#endif
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053013791/*
13792 * FUNCTION: WDA_ProcessHT40OBSSScanInd
13793 *
13794 * DESCRIPTION: This function sends start/update OBSS scan
13795 * inidcation message to WDI
13796 *
13797 * PARAM:
13798 * pWDA: pointer to WDA context
13799 * pReq: pointer to start OBSS scan request
13800 */
13801VOS_STATUS WDA_ProcessHT40OBSSScanInd(tWDA_CbContext *pWDA,
13802 tSirHT40OBSSScanInd *pReq)
13803{
13804 WDI_Status status;
13805 WDI_HT40ObssScanParamsType wdiOBSSScanParams;
13806 WDI_HT40ObssScanIndType *pWdiOBSSScanInd;
Rajeev79dbe4c2013-10-05 11:03:42 +053013807
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053013808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13809 "------> %s " ,__func__);
13810 wdiOBSSScanParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
13811 wdiOBSSScanParams.pUserData = pWDA;
13812
13813 pWdiOBSSScanInd = &(wdiOBSSScanParams.wdiHT40ObssScanParam);
13814 pWdiOBSSScanInd->cmdType = pReq->cmdType;
13815 pWdiOBSSScanInd->scanType = pReq->scanType;
13816 pWdiOBSSScanInd->OBSSScanActiveDwellTime =
13817 pReq->OBSSScanActiveDwellTime;
13818 pWdiOBSSScanInd->OBSSScanPassiveDwellTime =
13819 pReq->OBSSScanPassiveDwellTime;
13820 pWdiOBSSScanInd->BSSChannelWidthTriggerScanInterval =
13821 pReq->BSSChannelWidthTriggerScanInterval;
13822 pWdiOBSSScanInd->BSSWidthChannelTransitionDelayFactor =
13823 pReq->BSSWidthChannelTransitionDelayFactor;
13824 pWdiOBSSScanInd->OBSSScanActiveTotalPerChannel =
13825 pReq->OBSSScanActiveTotalPerChannel;
13826 pWdiOBSSScanInd->OBSSScanPassiveTotalPerChannel =
13827 pReq->OBSSScanPassiveTotalPerChannel;
13828 pWdiOBSSScanInd->OBSSScanActivityThreshold =
13829 pReq->OBSSScanActivityThreshold;
13830 pWdiOBSSScanInd->channelCount = pReq->channelCount;
13831 vos_mem_copy(pWdiOBSSScanInd->channels,
13832 pReq->channels,
13833 pReq->channelCount);
13834 pWdiOBSSScanInd->selfStaIdx = pReq->selfStaIdx;
13835 pWdiOBSSScanInd->fortyMHZIntolerent = pReq->fortyMHZIntolerent;
13836 pWdiOBSSScanInd->bssIdx = pReq->bssIdx;
13837 pWdiOBSSScanInd->currentOperatingClass = pReq->currentOperatingClass;
13838 pWdiOBSSScanInd->ieFieldLen = pReq->ieFieldLen;
13839
13840 vos_mem_copy(pWdiOBSSScanInd->ieField,
13841 pReq->ieField,
13842 pReq->ieFieldLen);
13843
13844 status = WDI_HT40OBSSScanInd(&wdiOBSSScanParams);
13845 if (WDI_STATUS_PENDING == status)
13846 {
13847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13848 "Pending received for %s:%d ",__func__,__LINE__ );
13849 }
13850 else if (WDI_STATUS_SUCCESS_SYNC != status)
13851 {
13852 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13853 "Failure in %s:%d ",__func__,__LINE__ );
13854 }
13855 return CONVERT_WDI2VOS_STATUS(status) ;
13856}
13857/*
13858 * FUNCTION: WDA_ProcessHT40OBSSStopScanInd
13859 *
13860 * DESCRIPTION: This function sends stop OBSS scan inidcation message to WDI
13861 *
13862 * PARAM:
13863 * pWDA: pointer to WDA context
13864 * pReq: pointer to stop batch scan request
13865 */
13866VOS_STATUS WDA_ProcessHT40OBSSStopScanInd(tWDA_CbContext *pWDA,
13867 tANI_U8 *bssIdx)
13868{
13869 WDI_Status status;
13870
13871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13872 "------> %s " ,__func__);
13873
13874 status = WDI_HT40OBSSStopScanInd(*bssIdx);
13875 if (WDI_STATUS_PENDING == status)
13876 {
13877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13878 "Pending received for %s:%d ",__func__,__LINE__ );
13879 }
13880 else if (WDI_STATUS_SUCCESS_SYNC != status)
13881 {
13882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13883 "Failure in %s:%d ",__func__,__LINE__ );
13884 }
13885 return CONVERT_WDI2VOS_STATUS(status) ;
13886}
Yue Mab9c86f42013-08-14 15:59:08 -070013887/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013888 * -------------------------------------------------------------------------
13889 * DATA interface with WDI for Mgmt Frames
13890 * -------------------------------------------------------------------------
13891 */
Jeff Johnson295189b2012-06-20 16:38:30 -070013892/*
13893 * FUNCTION: WDA_TxComplete
13894 * Callback function for the WDA_TxPacket
13895 */
13896VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
13897 VOS_STATUS status )
13898{
13899
13900 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
13901 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Anjaneedevi Kapparapuf4883a72015-11-12 18:18:35 +053013902 tANI_U64 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013903
Mihir Shete63341222015-03-24 15:39:18 +053013904 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Enter:%s", __func__);
13905
Jeff Johnson295189b2012-06-20 16:38:30 -070013906 if(NULL == wdaContext)
13907 {
13908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13909 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013910 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013911 VOS_ASSERT(0);
Sushant Kaushik8355d202014-12-17 16:48:10 +053013912 vos_pkt_return_packet(pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070013913 return VOS_STATUS_E_FAILURE;
13914 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070013915
13916 /*Check if frame was timed out or not*/
13917 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
13918 (v_PVOID_t)&uUserData);
13919
13920 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
13921 {
13922 /*Discard frame - no further processing is needed*/
Mihir Shete63341222015-03-24 15:39:18 +053013923 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
13924 "%s: MGMT Frame Tx timed out",
13925 __func__);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070013926 vos_pkt_return_packet(pData);
13927 return VOS_STATUS_SUCCESS;
13928 }
13929
Jeff Johnson295189b2012-06-20 16:38:30 -070013930 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
13931 if( NULL!=wdaContext->pTxCbFunc)
13932 {
13933 /*check if packet is freed already*/
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053013934 if(vos_atomic_set((uintptr_t*)&wdaContext->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED) == (uintptr_t)pData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013935 {
13936 wdaContext->pTxCbFunc(pMac, pData);
13937 }
13938 else
13939 {
13940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053013941 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013942 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070013943 //Return from here since we reaching here because the packet already timeout
13944 return status;
13945 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013946 }
13947
13948 /*
13949 * Trigger the event to bring the HAL TL Tx complete function to come
13950 * out of wait
13951 * Let the coe above to complete the packet first. When this event is set,
13952 * the thread waiting for the event may run and set Vospacket_freed causing the original
13953 * packet not being freed.
13954 */
13955 status = vos_event_set(&wdaContext->txFrameEvent);
13956 if(!VOS_IS_STATUS_SUCCESS(status))
13957 {
13958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013959 "NEW VOS Event Set failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070013960 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013961 return status;
13962}
Jeff Johnson295189b2012-06-20 16:38:30 -070013963/*
13964 * FUNCTION: WDA_TxPacket
13965 * Forward TX management frame to WDI
13966 */
13967VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
13968 void *pFrmBuf,
13969 tANI_U16 frmLen,
13970 eFrameType frmType,
13971 eFrameTxDir txDir,
13972 tANI_U8 tid,
13973 pWDATxRxCompFunc pCompFunc,
13974 void *pData,
13975 pWDAAckFnTxComp pAckTxComp,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053013976 tANI_U32 txFlag,
13977 tANI_U32 txBdToken
13978 )
Jeff Johnson295189b2012-06-20 16:38:30 -070013979{
13980 VOS_STATUS status = VOS_STATUS_SUCCESS ;
13981 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
13982 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
13983 tANI_U8 eventIdx = 0;
13984 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
13985 tpAniSirGlobal pMac;
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053013986 tpSirTxBdStatus txBdStatus = {0};
Abhishek Singhe721fb42015-11-30 14:22:10 +053013987 v_TIME_t time_snapshot;
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053013988
Jeff Johnson295189b2012-06-20 16:38:30 -070013989 if((NULL == pWDA)||(NULL == pFrmBuf))
13990 {
13991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053013992 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013993 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070013994 VOS_ASSERT(0);
13995 return VOS_STATUS_E_FAILURE;
13996 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013997
Jeff Johnson295189b2012-06-20 16:38:30 -070013998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053013999 "Tx Mgmt Frame Subtype: %d alloc(%p) txBdToken = %u",
14000 pFc->subType, pFrmBuf, txBdToken);
Jeff Johnson295189b2012-06-20 16:38:30 -070014001 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14002 if(NULL == pMac)
14003 {
14004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014005 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014006 VOS_ASSERT(0);
14007 return VOS_STATUS_E_FAILURE;
14008 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014009
Jeff Johnson295189b2012-06-20 16:38:30 -070014010 /* store the call back function in WDA context */
14011 pWDA->pTxCbFunc = pCompFunc;
14012 /* store the call back for the function of ackTxComplete */
14013 if( pAckTxComp )
14014 {
Jeff Johnsone7245742012-09-05 17:12:55 -070014015 if( NULL != pWDA->pAckTxCbFunc )
14016 {
14017 /* Already TxComp is active no need to active again */
Agarwal Ashish3b3f3cb2015-07-02 16:43:47 +053014018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014019 "There is already one request pending for tx complete");
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053014020 pWDA->pAckTxCbFunc( pMac, &txBdStatus);
Jeff Johnsone7245742012-09-05 17:12:55 -070014021 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070014022
Jeff Johnsone7245742012-09-05 17:12:55 -070014023 if( VOS_STATUS_SUCCESS !=
14024 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14025 {
14026 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14027 "Tx Complete timeout Timer Stop Failed ");
14028 }
14029 else
14030 {
Agarwal Ashish3b3f3cb2015-07-02 16:43:47 +053014031 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080014032 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070014033 }
14034 }
14035
14036 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
14037 pWDA->pAckTxCbFunc = pAckTxComp;
14038 if( VOS_STATUS_SUCCESS !=
14039 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
14040 {
14041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14042 "Tx Complete Timer Start Failed ");
14043 pWDA->pAckTxCbFunc = NULL;
14044 return eHAL_STATUS_FAILURE;
14045 }
14046 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014047 /* Reset the event to be not signalled */
14048 status = vos_event_reset(&pWDA->txFrameEvent);
14049 if(!VOS_IS_STATUS_SUCCESS(status))
14050 {
14051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014052 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014053 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
14054 if( pAckTxComp )
14055 {
14056 pWDA->pAckTxCbFunc = NULL;
14057 if( VOS_STATUS_SUCCESS !=
14058 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14059 {
14060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14061 "Tx Complete timeout Timer Stop Failed ");
14062 }
14063 }
14064 return VOS_STATUS_E_FAILURE;
14065 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014066
14067 /* If Peer Sta mask is set don't overwrite to self sta */
14068 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070014069 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014070 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070014071 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014072 else
14073 {
Ganesh K08bce952012-12-13 15:04:41 -080014074 /* Get system role, use the self station if in unknown role or STA role */
14075 systemRole = wdaGetGlobalSystemRole(pMac);
14076 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
14077 (( eSYSTEM_STA_ROLE == systemRole )
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080014078#if defined FEATURE_WLAN_ESE || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080014079 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080014080#endif
Ganesh K08bce952012-12-13 15:04:41 -080014081 ))
14082 {
14083 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
14084 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080014085 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014086
Jeff Johnsone7245742012-09-05 17:12:55 -070014087 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
14088 disassoc frame reaches the HW, HAL has already deleted the peer station */
14089 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070014090 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080014091 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070014092 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070014093 {
Jeff Johnson295189b2012-06-20 16:38:30 -070014094 /*Send Probe request frames on self sta idx*/
14095 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070014096 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014097 /* Since we donot want probe responses to be retried, send probe responses
14098 through the NO_ACK queues */
14099 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
14100 {
14101 //probe response is sent out using self station and no retries options.
14102 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
14103 }
14104 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
14105 {
14106 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
14107 }
14108 }
Pradeep Reddy POTTETI01710062015-06-29 13:35:53 +053014109#ifdef FEATURE_WLAN_TDLS
14110 /* TDLS Management frames are sent using Peer Sta mask */
14111 else if ((pFc->type == SIR_MAC_DATA_FRAME) &&
14112 (txFlag & HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME))
14113 {
14114 txFlag |= HAL_USE_PEER_STA_REQUESTED_MASK;
14115
14116 }
14117#endif
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053014118 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
Jeff Johnson295189b2012-06-20 16:38:30 -070014119
14120 /*Set frame tag to 0
14121 We will use the WDA user data in order to tag a frame as expired*/
14122 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
14123 (v_PVOID_t)0);
14124
14125
14126 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +053014127 frmLen, ucTypeSubType, tid, WDA_TxComplete, NULL, txFlag,
14128 txBdToken))!= VOS_STATUS_SUCCESS)
Jeff Johnson295189b2012-06-20 16:38:30 -070014129 {
14130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014131 "Sending Mgmt Frame failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014132 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053014133 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);/*reset the VosPacket_freed*/
Jeff Johnson295189b2012-06-20 16:38:30 -070014134 if( pAckTxComp )
14135 {
14136 pWDA->pAckTxCbFunc = NULL;
14137 if( VOS_STATUS_SUCCESS !=
14138 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14139 {
14140 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14141 "Tx Complete timeout Timer Stop Failed ");
14142 }
14143 }
14144 return VOS_STATUS_E_FAILURE;
14145 }
Abhishek Singhe721fb42015-11-30 14:22:10 +053014146 time_snapshot = vos_timer_get_system_time();
Jeff Johnson295189b2012-06-20 16:38:30 -070014147 /*
14148 * Wait for the event to be set by the TL, to get the response of TX
14149 * complete, this event should be set by the Callback function called by TL
14150 */
14151 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
14152 &eventIdx);
14153 if(!VOS_IS_STATUS_SUCCESS(status))
14154 {
14155 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14156 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014157 __func__, status);
Sushant Kaushik8355d202014-12-17 16:48:10 +053014158
14159 /*Tag Frame as timed out for later deletion*/
14160 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
14161 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
Jeff Johnson295189b2012-06-20 16:38:30 -070014162 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
14163 after the packet gets completed(packet freed once)*/
14164
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070014165 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
Katya Nigam53677462014-08-04 11:37:28 +053014166 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070014167
Jeff Johnson295189b2012-06-20 16:38:30 -070014168 /* check whether the packet was freed already,so need not free again when
14169 * TL calls the WDA_Txcomplete routine
14170 */
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053014171 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED);
14172 /*if(vos_atomic_set(uintptr_t *)&pWDA->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED) == (v_U32_t)pFrmBuf)
Jeff Johnson295189b2012-06-20 16:38:30 -070014173 {
14174 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070014175 } */
Abhishek Singh849366d2015-11-26 16:53:47 +053014176
14177 WLANTL_TLDebugMessage(WLANTL_DEBUG_FW_CLEANUP);
14178
Abhishek Singh837adf22015-10-01 17:37:37 +053014179 if (vos_isFatalEventEnabled())
14180 vos_fatal_event_logs_req(WLAN_LOG_TYPE_FATAL,
14181 WLAN_LOG_INDICATOR_HOST_DRIVER,
14182 WLAN_LOG_REASON_MGMT_FRAME_TIMEOUT,
14183 FALSE, TRUE);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070014184
Jeff Johnson295189b2012-06-20 16:38:30 -070014185 if( pAckTxComp )
14186 {
14187 pWDA->pAckTxCbFunc = NULL;
14188 if( VOS_STATUS_SUCCESS !=
14189 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14190 {
14191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14192 "Tx Complete timeout Timer Stop Failed ");
14193 }
14194 }
Abhishek Singhe721fb42015-11-30 14:22:10 +053014195 pWDA->mgmtTxfailureCnt++;
14196
14197 /* SSR if timeout continously for
14198 * WDA_TX_FAILURE_RECOVERY_THRESHOLD times.
14199 */
14200 if (WDA_TX_FAILURE_RECOVERY_THRESHOLD ==
14201 pWDA->mgmtTxfailureCnt)
14202 {
14203 vos_wlanRestart();
14204 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014205 status = VOS_STATUS_E_FAILURE;
14206 }
Abhishek Singhe721fb42015-11-30 14:22:10 +053014207
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +053014208#ifdef WLAN_DUMP_MGMTFRAMES
14209 if (VOS_IS_STATUS_SUCCESS(status))
14210 {
14211 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14212 "%s() TX packet : SubType %d", __func__,pFc->subType);
14213 VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14214 pData, frmLen);
14215 }
14216#endif
14217
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080014218 if (VOS_IS_STATUS_SUCCESS(status))
14219 {
Abhishek Singhe721fb42015-11-30 14:22:10 +053014220 pWDA->mgmtTxfailureCnt = 0;
14221 if ((vos_timer_get_system_time() - time_snapshot) >=
14222 WDA_TX_TIME_THRESHOLD)
14223 {
14224 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14225 "Tx Complete took %lu ms",
14226 vos_timer_get_system_time() - time_snapshot);
14227 }
14228
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080014229 if (pMac->fEnableDebugLog & 0x1)
14230 {
14231 if ((pFc->type == SIR_MAC_MGMT_FRAME) &&
14232 (pFc->subType != SIR_MAC_MGMT_PROBE_REQ) &&
14233 (pFc->subType != SIR_MAC_MGMT_PROBE_RSP))
14234 {
14235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "TX MGMT - Type %hu, SubType %hu",
14236 pFc->type, pFc->subType);
14237 }
14238 }
14239 }
14240
14241
Jeff Johnson295189b2012-06-20 16:38:30 -070014242 return status;
14243}
Jeff Johnson295189b2012-06-20 16:38:30 -070014244/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014245 * FUNCTION: WDA_ProcessDHCPStartInd
14246 * Forward DHCP Start to WDI
14247 */
14248static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
14249 tAniDHCPInd *dhcpStartInd)
14250{
14251 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053014252 WDI_DHCPInd wdiDHCPInd;
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014253
c_hpothu0b0cab72014-02-13 21:52:40 +053014254 wdiDHCPInd.device_mode = dhcpStartInd->device_mode;
14255 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStartInd->macAddr,
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014256 sizeof(tSirMacAddr));
14257
c_hpothu0b0cab72014-02-13 21:52:40 +053014258 status = WDI_dhcpStartInd(&wdiDHCPInd);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014259
c_hpothu0b0cab72014-02-13 21:52:40 +053014260 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014261 {
c_hpothu0b0cab72014-02-13 21:52:40 +053014262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14263 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014264 }
c_hpothu0b0cab72014-02-13 21:52:40 +053014265 else if (WDI_STATUS_SUCCESS_SYNC != status)
14266 {
14267 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14268 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
14269 }
14270
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014271 vos_mem_free(dhcpStartInd);
14272 return CONVERT_WDI2VOS_STATUS(status) ;
14273}
14274
14275 /*
14276 * FUNCTION: WDA_ProcessDHCPStopInd
14277 * Forward DHCP Stop to WDI
14278 */
14279 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
14280 tAniDHCPInd *dhcpStopInd)
14281 {
14282 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053014283 WDI_DHCPInd wdiDHCPInd;
14284
14285 wdiDHCPInd.device_mode = dhcpStopInd->device_mode;
14286 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
14287
14288 status = WDI_dhcpStopInd(&wdiDHCPInd);
14289
14290 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014291 {
c_hpothu0b0cab72014-02-13 21:52:40 +053014292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14293 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014294 }
c_hpothu0b0cab72014-02-13 21:52:40 +053014295 else if (WDI_STATUS_SUCCESS_SYNC != status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014296 {
c_hpothu0b0cab72014-02-13 21:52:40 +053014297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14298 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014299 }
c_hpothu0b0cab72014-02-13 21:52:40 +053014300
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014301 vos_mem_free(dhcpStopInd);
c_hpothu0b0cab72014-02-13 21:52:40 +053014302
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014303 return CONVERT_WDI2VOS_STATUS(status) ;
14304 }
14305
Abhishek Singh00b71972016-01-07 10:51:04 +053014306#ifdef WLAN_FEATURE_RMC
14307
14308void
14309WDA_RMCRulerRspCallback(WDI_RmcRspParamsType *wdiRmcResponse, void *pUserData)
14310{
14311 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14312 tWDA_CbContext *pWDA = pWdaParams->pWdaContext;
14313
14314 switch (wdiRmcResponse->cmd)
14315 {
14316 case eWDI_BECOME_RULER_CMD :
14317 {
14318 tSirRmcBecomeRulerInd *pRmcBecomeRulerInd;
14319
14320 pRmcBecomeRulerInd = (tSirRmcBecomeRulerInd *)
14321 vos_mem_malloc(sizeof(*pRmcBecomeRulerInd));
14322
14323 if (NULL == pRmcBecomeRulerInd)
14324 {
14325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14326 "%s: unable to allocate pRmcBecomeRulerInd", __func__);
14327 break;
14328 }
14329
14330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14331 "Received eWDI_BECOME_RULER_CMD from WDI");
14332
14333 pRmcBecomeRulerInd->status = wdiRmcResponse->status;
14334
14335 vos_mem_copy(pRmcBecomeRulerInd->mcastTransmitter,
14336 wdiRmcResponse->mcastTransmitter,
14337 sizeof(tSirMacAddr));
14338 vos_mem_copy(pRmcBecomeRulerInd->mcastGroup,
14339 wdiRmcResponse->mcastGroup,
14340 sizeof(tSirMacAddr));
14341
14342 WDA_SendMsg(pWDA, WDA_RMC_BECOME_RULER,
14343 (void *)pRmcBecomeRulerInd, 0) ;
14344 break;
14345 }
14346 case eWDI_SUGGEST_RULER_CMD :
14347 {
14348 tSirRmcRulerSelectInd *pRmcRulerSelectInd;
14349
14350 pRmcRulerSelectInd = (tSirRmcRulerSelectInd *)
14351 vos_mem_malloc(sizeof(tSirRmcRulerSelectInd));
14352
14353 if (NULL == pRmcRulerSelectInd)
14354 {
14355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14356 "%s: unable to allocate pRmcRulerSelectInd", __func__);
14357 break;
14358 }
14359
14360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14361 "Received eWDI_SUGGEST_RULER_CMD from WDI");
14362
14363 pRmcRulerSelectInd->status = wdiRmcResponse->status;
14364
14365 vos_mem_copy(pRmcRulerSelectInd->mcastTransmitter,
14366 wdiRmcResponse->mcastTransmitter,
14367 sizeof(tSirMacAddr));
14368 vos_mem_copy(pRmcRulerSelectInd->mcastGroup,
14369 wdiRmcResponse->mcastGroup,
14370 sizeof(tSirMacAddr));
14371 vos_mem_copy(pRmcRulerSelectInd->ruler,
14372 wdiRmcResponse->ruler,
14373 sizeof(pRmcRulerSelectInd->ruler));
14374
14375 WDA_SendMsg(pWDA, WDA_RMC_RULER_SELECT_RESP,
14376 (void *)pRmcRulerSelectInd, 0) ;
14377 break;
14378 }
14379 }
14380
14381 /* free the config structure */
14382 if (pWdaParams->wdaWdiApiMsgParam != NULL)
14383 {
14384 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14385 }
14386 vos_mem_free(pWdaParams->wdaMsgParam);
14387 vos_mem_free(pWdaParams);
14388
14389}
14390
14391void WDA_RMCRulerReqCallback(WDI_Status wdiStatus, void* pUserData)
14392{
14393 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14394
14395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14396 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14397
14398 if (NULL == pWdaParams)
14399 {
14400 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14401 "%s: pWdaParams received NULL", __func__);
14402 VOS_ASSERT(0);
14403 return;
14404 }
14405
14406 if (IS_WDI_STATUS_FAILURE(wdiStatus))
14407 {
14408 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14409 vos_mem_free(pWdaParams->wdaMsgParam);
14410 vos_mem_free(pWdaParams);
14411 }
14412
14413 return;
14414}
14415
14416static VOS_STATUS
14417WDA_ProcessRMCRulerReq(tWDA_CbContext *pWDA,
14418 tSirRmcRulerReq *rmcRulerReq)
14419{
14420 WDI_Status status;
14421 WDI_RmcRulerReqParams *wdiRulerReq;
14422 tWDA_ReqParams *pWdaParams;
14423
14424 wdiRulerReq = (WDI_RmcRulerReqParams *)
14425 vos_mem_malloc(sizeof(*wdiRulerReq));
14426
14427 if (NULL == wdiRulerReq)
14428 {
14429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14430 "%s: VOS MEM Alloc Failure", __func__);
14431 VOS_ASSERT(0);
14432 vos_mem_free(rmcRulerReq);
14433 return VOS_STATUS_E_NOMEM;
14434 }
14435
14436 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
14437 if (NULL == pWdaParams)
14438 {
14439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14440 "%s: VOS MEM Alloc Failure", __func__);
14441 VOS_ASSERT(0);
14442 vos_mem_free(rmcRulerReq);
14443 vos_mem_free(wdiRulerReq);
14444 return VOS_STATUS_E_NOMEM;
14445 }
14446
14447 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiRulerReq;
14448 /* Store param pointer as passed in by caller */
14449 pWdaParams->wdaMsgParam = rmcRulerReq;
14450 pWdaParams->pWdaContext = pWDA;
14451
14452 wdiRulerReq->cmd = rmcRulerReq->cmd;
14453
14454 vos_mem_copy(wdiRulerReq->mcastTransmitter,
14455 rmcRulerReq->mcastTransmitter, sizeof(tSirMacAddr));
14456 vos_mem_copy(wdiRulerReq->mcastGroup,
14457 rmcRulerReq->mcastGroup, sizeof(tSirMacAddr));
14458 vos_mem_copy(wdiRulerReq->blacklist,
14459 rmcRulerReq->blacklist, sizeof(wdiRulerReq->blacklist));
14460
14461 wdiRulerReq->wdiReqStatusCB = WDA_RMCRulerReqCallback;
14462
14463 status = WDI_RmcRulerReq(wdiRulerReq,
14464 (WDI_RmcRulerRspCb)WDA_RMCRulerRspCallback,
14465 (void *)pWdaParams);
14466 if (IS_WDI_STATUS_FAILURE(status))
14467 {
14468 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14469 vos_mem_free(pWdaParams->wdaMsgParam);
14470 vos_mem_free(pWdaParams) ;
14471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14472 "Ruler Request failed");
14473 }
14474 return CONVERT_WDI2VOS_STATUS(status) ;
14475}
14476
14477/*
14478 * FUNCTION: WDA_ProcessRMCUpdateInd
14479 * Forward Update Indication to WDI
14480*/
14481static VOS_STATUS
14482WDA_ProcessRMCUpdateInd(tWDA_CbContext *pWDA,
14483 tSirRmcUpdateInd *rmcUpdateInd)
14484{
14485 WDI_Status status;
14486 WDI_RmcUpdateIndParams wdiUpdateInd;
14487
14488 /* Copy the paramters for Update_Ind */
14489
14490 wdiUpdateInd.indication = rmcUpdateInd->indication;
14491 wdiUpdateInd.role = rmcUpdateInd->role;
14492
14493 vos_mem_copy(wdiUpdateInd.mcastTransmitter,
14494 rmcUpdateInd->mcastTransmitter, sizeof(tSirMacAddr));
14495
14496 vos_mem_copy(wdiUpdateInd.mcastGroup,
14497 rmcUpdateInd->mcastGroup, sizeof(tSirMacAddr));
14498
14499 vos_mem_copy(wdiUpdateInd.mcastRuler,
14500 rmcUpdateInd->mcastRuler, sizeof(tSirMacAddr));
14501
14502 wdiUpdateInd.wdiReqStatusCB = WDA_WdiIndicationCallback;
14503 wdiUpdateInd.pUserData = pWDA;
14504 status = WDI_RmcUpdateInd(&wdiUpdateInd);
14505
14506 if (WDI_STATUS_PENDING == status)
14507 {
14508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14509 "Pending received for %s:%d ",__func__,__LINE__ );
14510 }
14511 else if (WDI_STATUS_SUCCESS_SYNC != status)
14512 {
14513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14514 "Failure in %s:%d ",__func__,__LINE__ );
14515 }
14516
14517 vos_mem_free(rmcUpdateInd);
14518
14519 return CONVERT_WDI2VOS_STATUS(status) ;
14520}
14521
14522void WDA_GetIbssPeerInfoRspCallback(WDI_IbssPeerInfoRspParams *peerInfoRspParams
14523 ,void* pUserData)
14524{
14525
14526 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14527 WDI_IbssPeerInfoParams *pIbssPeerInfoParams;
14528 tWDA_CbContext *pWDA;
14529 tpSirIbssGetPeerInfoRspParams pIbssGetPeerInfoRsp;
14530 vos_msg_t vosMsg;
14531 v_U32_t wdaCnt = 0;
14532
14533 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14534 "<------ %s " ,__func__);
14535 if (NULL == pWdaParams)
14536 {
14537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14538 "%s: pWdaParams received NULL", __func__);
14539 VOS_ASSERT(0);
14540 return;
14541 }
14542
14543 if (NULL == peerInfoRspParams)
14544 {
14545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14546 "%s: peerInfoRspParams received NULL", __func__);
14547 if(pWdaParams->wdaMsgParam)
14548 vos_mem_free(pWdaParams->wdaMsgParam);
14549 if(pWdaParams->wdaWdiApiMsgParam)
14550 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14551 vos_mem_free(pWdaParams);
14552
14553 VOS_ASSERT(0);
14554 return;
14555 }
14556
14557 pIbssPeerInfoParams =
14558 (WDI_IbssPeerInfoParams *)peerInfoRspParams->wdiPeerInfoParams;
14559
14560 pIbssGetPeerInfoRsp =
14561 vos_mem_malloc(sizeof(tSirIbssGetPeerInfoRspParams));
14562
14563 if(NULL == pIbssGetPeerInfoRsp)
14564 {
14565 if(pWdaParams->wdaMsgParam)
14566 vos_mem_free(pWdaParams->wdaMsgParam);
14567 if(pWdaParams->wdaWdiApiMsgParam)
14568 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14569 vos_mem_free(pWdaParams);
14570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14571 "%s: Memory allocation failed for pIbssGetPeerInfoRsp",
14572 __func__);
14573 VOS_ASSERT(0);
14574 return;
14575
14576 }
14577
14578 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
14579
14580
14581 if (peerInfoRspParams->wdiNumPeers > 32)
14582 {
14583 pr_info("%s] Number of peers is more than 32, returning\n", __func__);
14584 /* free the mem and return */
14585 vos_mem_free((v_VOID_t *) pIbssGetPeerInfoRsp);
14586 if(pWdaParams->wdaMsgParam)
14587 vos_mem_free(pWdaParams->wdaMsgParam);
14588 if(pWdaParams->wdaWdiApiMsgParam)
14589 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14590 vos_mem_free(pWdaParams);
14591
14592 return;
14593 }
14594
14595 /* Message Header */
14596 pIbssGetPeerInfoRsp->mesgType = eWNI_SME_IBSS_PEER_INFO_RSP;
14597 pIbssGetPeerInfoRsp->mesgLen = sizeof(tSirIbssGetPeerInfoRspParams);
14598 pIbssGetPeerInfoRsp->ibssPeerInfoRspParams.status = peerInfoRspParams->wdiStatus;
14599 pIbssGetPeerInfoRsp->ibssPeerInfoRspParams.numPeers = peerInfoRspParams->wdiNumPeers;
14600
14601 for (wdaCnt = 0; wdaCnt < peerInfoRspParams->wdiNumPeers; wdaCnt++)
14602 {
14603 WDI_IbssPeerInfoParams *pWdiTmp = &pIbssPeerInfoParams[wdaCnt];
14604 tSirIbssPeerInfoParams *pSmeTmp =
14605 &pIbssGetPeerInfoRsp->ibssPeerInfoRspParams.peerInfoParams[wdaCnt];
14606
14607 pSmeTmp->staIdx = pWdiTmp->wdiStaIdx;
14608 pSmeTmp->mcsIndex = pWdiTmp->wdiMcsIndex;
14609 pSmeTmp->rssi = pWdiTmp->wdiRssi;
14610 pSmeTmp->txRate = pWdiTmp->wdiTxRate;
14611 pSmeTmp->txRateFlags = pWdiTmp->wdiTxRateFlags;
14612 }
14613
14614 /* VOS message wrapper */
14615 vosMsg.type = eWNI_SME_IBSS_PEER_INFO_RSP;
14616 vosMsg.bodyptr = (void *)pIbssGetPeerInfoRsp;
14617 vosMsg.bodyval = 0;
14618
14619 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14620 {
14621 /* free the mem and return */
14622 vos_mem_free((v_VOID_t *) pIbssGetPeerInfoRsp);
14623 }
14624
14625 if(NULL != pWdaParams)
14626 {
14627 if(pWdaParams->wdaMsgParam)
14628 vos_mem_free(pWdaParams->wdaMsgParam);
14629 if(pWdaParams->wdaWdiApiMsgParam)
14630 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14631 vos_mem_free(pWdaParams);
14632 }
14633
14634 return;
14635}
14636
14637static VOS_STATUS
14638WDA_ProcessIbssPeerInfoReq(tWDA_CbContext *pWDA,
14639 tSirIbssGetPeerInfoReqParams *ibssPeerInfoReqParams)
14640{
14641 WDI_Status status;
14642 WDI_IbssPeerInfoReqType *wdiPeerInfoReq;
14643 tWDA_ReqParams *pWdaParams;
14644
14645 wdiPeerInfoReq = (WDI_IbssPeerInfoReqType *)
14646 vos_mem_malloc(sizeof(WDI_IbssPeerInfoReqType));
14647 if (NULL == wdiPeerInfoReq)
14648 {
14649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14650 "%s: VOS MEM Alloc Failure", __func__);
14651 VOS_ASSERT(0);
14652 vos_mem_free(ibssPeerInfoReqParams);
14653 return VOS_STATUS_E_NOMEM;
14654 }
14655
14656 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
14657 if (NULL == pWdaParams)
14658 {
14659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14660 "%s: VOS MEM Alloc Failure", __func__);
14661 VOS_ASSERT(0);
14662 vos_mem_free(wdiPeerInfoReq);
14663 vos_mem_free(ibssPeerInfoReqParams);
14664 return VOS_STATUS_E_NOMEM;
14665 }
14666
14667 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiPeerInfoReq;
14668 /* Store param pointer as passed in by caller */
14669 pWdaParams->wdaMsgParam = ibssPeerInfoReqParams;
14670 pWdaParams->pWdaContext = pWDA;
14671
14672 wdiPeerInfoReq->wdiAllPeerInfoReqd =
14673 ibssPeerInfoReqParams->allPeerInfoReqd;
14674 wdiPeerInfoReq->wdiStaIdx =
14675 ibssPeerInfoReqParams->staIdx;
14676
14677 status = WDI_IbssPeerInfoReq(wdiPeerInfoReq,
14678 (WDI_IbssPeerInfoReqCb)WDA_GetIbssPeerInfoRspCallback,
14679 (void *)pWdaParams);
14680 if (IS_WDI_STATUS_FAILURE(status))
14681 {
14682 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14683 vos_mem_free(pWdaParams->wdaMsgParam);
14684 vos_mem_free(pWdaParams) ;
14685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14686 "IBSS Peer Info Request failed");
14687 }
14688 return CONVERT_WDI2VOS_STATUS(status) ;
14689
14690}
14691
14692/*
14693 * FUNCTION: WDA_ProcessTXFailMonitorInd
14694 * Forward TX Fail Monitor to WDI
14695 */
14696static VOS_STATUS WDA_ProcessTXFailMonitorInd(
14697 tWDA_CbContext *pWDA,
14698 tAniTXFailMonitorInd *txFailMonitorInd)
14699{
14700 WDI_Status status;
14701 WDI_TXFailMonitorInd *wdiTXFailMonitorInd =
14702 (WDI_TXFailMonitorInd *)vos_mem_malloc(sizeof(WDI_TXFailMonitorInd));
14703
14704 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14705 "<------ %s " ,__func__);
14706
14707 if (NULL == wdiTXFailMonitorInd)
14708 {
14709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14710 "%s: VOS MEM Alloc Failure", __func__);
14711 VOS_ASSERT(0);
14712 vos_mem_free(txFailMonitorInd);
14713 return VOS_STATUS_E_NOMEM;
14714 }
14715
14716 wdiTXFailMonitorInd->tx_fail_count = txFailMonitorInd->tx_fail_count;
14717
14718 wdiTXFailMonitorInd->wdiReqStatusCB = WDA_WdiIndicationCallback;
14719 wdiTXFailMonitorInd->pUserData = pWDA;
14720
14721 status = WDI_TXFailMonitorStartStopInd(wdiTXFailMonitorInd);
14722
14723 if (WDI_STATUS_PENDING == status)
14724 {
14725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14726 "TX Fail Monitor Indication Pending");
14727 }
14728 else if (WDI_STATUS_SUCCESS_SYNC == status)
14729 {
14730 if (0 == txFailMonitorInd->tx_fail_count)
14731 pWDA->txFailIndCallback = NULL;
14732 else
14733 pWDA->txFailIndCallback = txFailMonitorInd->txFailIndCallback;
14734 }
14735 else
14736 {
14737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14738 "TX Fail Monitor Indication Failed");
14739 }
14740
14741 vos_mem_free(wdiTXFailMonitorInd);
14742 vos_mem_free(txFailMonitorInd);
14743
14744 return CONVERT_WDI2VOS_STATUS(status) ;
14745}
14746#endif /* WLAN_FEATURE_RMC */
14747
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014748/*
Siddharth Bhal171788a2014-09-29 21:02:40 +053014749 * FUNCTION: WDA_ProcessSetSpoofMacAddrReq
14750 *
14751 * DESCRIPTION: This function sends Spoof Mac Addr Req to WDI
14752 *
14753 * PARAM:
14754 * pWDA: pointer to WDA context
14755 * pReq: pointer to stop batch scan request
14756 */
14757VOS_STATUS WDA_ProcessSetSpoofMacAddrReq(tWDA_CbContext *pWDA,
14758 tpSpoofMacAddrReqParams pReq)
14759{
14760 WDI_Status wdiStatus;
14761 WDI_SpoofMacAddrInfoType *WDI_SpoofMacAddrInfoParams;
14762 tWDA_ReqParams *pWdaParams;
14763
14764 WDI_SpoofMacAddrInfoParams = (WDI_SpoofMacAddrInfoType *)vos_mem_malloc(
14765 sizeof(WDI_SpoofMacAddrInfoType));
14766 if(NULL == WDI_SpoofMacAddrInfoParams) {
14767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14768 "%s: VOS MEM Alloc Failure in Spoof Req", __func__);
14769 VOS_ASSERT(0);
14770 return VOS_STATUS_E_NOMEM;
14771 }
14772 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14773 if(NULL == pWdaParams) {
14774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14775 "%s: VOS MEM Alloc Failure", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +053014776 vos_mem_free(WDI_SpoofMacAddrInfoParams);
Siddharth Bhal171788a2014-09-29 21:02:40 +053014777 VOS_ASSERT(0);
14778 return VOS_STATUS_E_NOMEM;
14779 }
14780
14781 vos_mem_copy(WDI_SpoofMacAddrInfoParams->macAddr,
14782 pReq->macAddr, VOS_MAC_ADDRESS_LEN);
14783
14784 pWdaParams->pWdaContext = pWDA;
14785 /* Store Upper layer req pointer, as this will be used for response */
Siddharth Bhal029d6732014-10-09 21:31:23 +053014786 pWdaParams->wdaMsgParam = (void *)pReq;
14787
14788 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, WDA_MAC_ADDRESS_STR,
14789 WDA_MAC_ADDR_ARRAY(WDI_SpoofMacAddrInfoParams->macAddr));
14790
Siddharth Bhal171788a2014-09-29 21:02:40 +053014791 /* store Params pass it to WDI */
14792 pWdaParams->wdaWdiApiMsgParam = (void *)WDI_SpoofMacAddrInfoParams ;
14793
14794 wdiStatus = WDI_SetSpoofMacAddrReq(WDI_SpoofMacAddrInfoParams,
Siddharth Bhal029d6732014-10-09 21:31:23 +053014795 (WDI_SetSpoofMacAddrRspCb) WDA_SpoofMacAddrRspCallback,
14796 pWdaParams );
Siddharth Bhal171788a2014-09-29 21:02:40 +053014797
14798 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14799 {
14800 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14801 "Failure in SetSpoofMacAddrReq Params WDI API, free all the memory " );
14802 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14803 vos_mem_free(pWdaParams->wdaMsgParam);
14804 vos_mem_free(pWdaParams);
14805 }
14806
14807 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
14808}
14809
c_manjeecfd1efb2015-09-25 19:32:34 +053014810
14811/*
14812 * FUNCTION: WDA_FwrMemDumpRespCallback
14813 * recieves Mgmt Logging init response from FW
14814 */
14815 void WDA_FwrMemDumpRespCallback(WDI_FwrMemDumpRsp* wdiRsp,
14816 void* pUserData)
14817{
14818 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14819 tAniFwrDumpReq *pFwrMemDumpReq;
14820 tAniFwrDumpRsp *pFwrMemDumpRsp;
14821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14822 "<------ %s " ,__func__);
14823
14824 if(NULL == pWdaParams)
14825 {
14826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14827 "%s: pWdaParams received NULL", __func__);
14828 VOS_ASSERT(0);
14829 return ;
14830 }
14831
14832 if(NULL == pWdaParams->wdaMsgParam)
14833 {
14834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14835 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
14836 VOS_ASSERT(0);
14837 vos_mem_free(pWdaParams);
14838 return ;
14839 }
14840
14841 pFwrMemDumpRsp = (tAniFwrDumpRsp *)vos_mem_malloc(sizeof(tAniFwrDumpRsp));
14842 if(pFwrMemDumpRsp == NULL)
14843 {
14844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14845 "%s: pFwrMemDumpRsp is NULL", __func__);
14846 VOS_ASSERT(0);
14847 vos_mem_free(pWdaParams);
14848 return ;
14849 }
14850
14851 pFwrMemDumpRsp->dump_status = wdiRsp->dump_status;
14852 pFwrMemDumpReq = (tAniFwrDumpReq *)pWdaParams->wdaMsgParam;
14853
14854 if(pFwrMemDumpReq->fwMemDumpReqCallback)
14855 {
14856 pFwrMemDumpReq->fwMemDumpReqCallback(
14857 pFwrMemDumpReq->fwMemDumpReqContext,
14858 pFwrMemDumpRsp);
14859 }
14860 else
14861 {
14862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14863 "%s: FwrMemDump callback is NULL", __func__);
14864 }
14865
14866 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14867 vos_mem_free(pWdaParams->wdaMsgParam);
14868 vos_mem_free(pWdaParams);
14869 vos_mem_free(pFwrMemDumpRsp);
14870
14871 return ;
14872}
14873
14874VOS_STATUS WDA_ProcessFwrMemDumpReq(tWDA_CbContext * pWDA,
14875 tAniFwrDumpReq* pFwrMemDumpReq)
14876{
14877 VOS_STATUS status = VOS_STATUS_SUCCESS;
14878 WDI_Status wstatus;
14879 WDI_FwrMemDumpReqType * pWdiFwrMemDumpReq;
14880 tWDA_ReqParams *pWdaParams ;
14881
14882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14883 "------> %s " ,__func__);
14884 /* Sanity Check*/
14885 if(NULL == pFwrMemDumpReq)
14886 {
14887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14888 "%s: pFwrMemDumpReq received NULL", __func__);
14889 VOS_ASSERT(0) ;
14890 return VOS_STATUS_E_FAULT;
14891 }
14892
14893 pWdiFwrMemDumpReq = (WDI_FwrMemDumpReqType *)vos_mem_malloc(sizeof(WDI_FwrMemDumpReqType));
14894 if(NULL == pWdiFwrMemDumpReq)
14895 {
14896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14897 "%s: pWdiFwrMemDumpReq Alloc Failure", __func__);
14898 VOS_ASSERT(0);
14899 return VOS_STATUS_E_NOMEM;
14900 }
14901
14902 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14903 if(NULL == pWdaParams)
14904 {
14905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14906 "%s: pWdaParams Alloc Failure", __func__);
14907 VOS_ASSERT(0);
14908 vos_mem_free(pWdiFwrMemDumpReq);
14909 return VOS_STATUS_E_NOMEM;
14910 }
14911
14912 /* Store Params pass it to WDI */
14913 pWdaParams->wdaWdiApiMsgParam = (void *)pWdiFwrMemDumpReq;
14914 pWdaParams->pWdaContext = pWDA;
14915 /* Store param pointer as passed in by caller */
14916 pWdaParams->wdaMsgParam = pFwrMemDumpReq;
14917
14918 status = WDI_FwrMemDumpReq(pWdiFwrMemDumpReq,
14919 (WDI_FwrMemDumpCb)WDA_FwrMemDumpRespCallback,
14920 pWdaParams);
14921
14922 if(IS_WDI_STATUS_FAILURE(wstatus))
14923 {
14924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14925 FL("Fwr Mem Dump Req failed, free all the memory"));
14926 status = CONVERT_WDI2VOS_STATUS(wstatus);
14927 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14928 vos_mem_free(pWdaParams->wdaMsgParam);
14929 vos_mem_free(pWdaParams);
14930 pWdaParams->wdaWdiApiMsgParam = NULL;
14931 pWdaParams->wdaMsgParam = NULL;
14932 }
14933
14934 return status;
14935
14936}
14937
Selvaraj, Sridharc045b8b2016-04-06 12:22:35 +053014938/**
14939 * wda_process_set_allowed_action_frames_ind() - Set allowed action frames to FW
14940 *
14941 * @pWDA: WDA Call back context
14942 * @allowed_action_frames: Pointer to struct sir_allowed_action_frames
14943 * that holds allowed action frames bitmask
14944 *
14945 * This function sets the allowed action frames that the FW needs to
14946 * handover to host.The Action frames other than the requested ones
14947 * can be dropped in FW
14948 *
14949 * Return: VOS_STATUS enumeration
14950 */
14951VOS_STATUS wda_process_set_allowed_action_frames_ind(tWDA_CbContext *pWDA,
14952 struct sir_allowed_action_frames *allowed_action_frames)
14953{
14954 WDI_Status status;
14955 struct WDI_AllowedActionFramesInd *wdi_allowed_action_frames;
14956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14957 FL("---> %s"), __func__);
c_manjeecfd1efb2015-09-25 19:32:34 +053014958
Selvaraj, Sridharc045b8b2016-04-06 12:22:35 +053014959 wdi_allowed_action_frames = (struct WDI_AllowedActionFramesInd*)
14960 vos_mem_malloc(sizeof
14961 (*wdi_allowed_action_frames));
14962 if (!wdi_allowed_action_frames) {
14963 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14964 "%s: VOS MEM Alloc Failure", __func__);
14965 vos_mem_free(allowed_action_frames);
14966 return VOS_STATUS_E_NOMEM;
14967 }
14968
14969 wdi_allowed_action_frames->bitmask = allowed_action_frames->bitmask;
14970 wdi_allowed_action_frames->reserved = allowed_action_frames->reserved;
14971
14972 status = WDI_SetAllowedActionFramesInd(wdi_allowed_action_frames);
14973 if (WDI_STATUS_PENDING == status) {
14974 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14975 FL("pending status received"));
14976 } else if (WDI_STATUS_SUCCESS_SYNC != status &&
14977 (WDI_STATUS_SUCCESS != status)) {
14978 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14979 FL("Failure in allowed_action_frames API %d"), status);
14980 }
14981
14982 vos_mem_free(wdi_allowed_action_frames);
14983 vos_mem_free(allowed_action_frames);
14984 return CONVERT_WDI2VOS_STATUS(status) ;
14985}
c_manjeecfd1efb2015-09-25 19:32:34 +053014986
Siddharth Bhal171788a2014-09-29 21:02:40 +053014987/*
Jeff Johnson295189b2012-06-20 16:38:30 -070014988 * FUNCTION: WDA_McProcessMsg
14989 * Trigger DAL-AL to start CFG download
14990 */
14991VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
14992{
14993 VOS_STATUS status = VOS_STATUS_SUCCESS;
14994 tWDA_CbContext *pWDA = NULL ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014995 if(NULL == pMsg)
Jeff Johnson295189b2012-06-20 16:38:30 -070014996 {
14997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014998 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014999 VOS_ASSERT(0);
15000 return VOS_STATUS_E_FAILURE;
15001 }
15002
15003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015004 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070015005
15006 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
15007 if(NULL == pWDA )
15008 {
15009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053015010 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015011 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070015012 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070015013 return VOS_STATUS_E_FAILURE;
15014 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015015 /* Process all the WDA messages.. */
15016 switch( pMsg->type )
15017 {
15018 case WNI_CFG_DNLD_REQ:
15019 {
15020 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070015021 /* call WDA complete event if config download success */
15022 if( VOS_IS_STATUS_SUCCESS(status) )
15023 {
15024 vos_WDAComplete_cback(pVosContext);
15025 }
15026 else
15027 {
15028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15029 "WDA Config Download failure" );
15030 }
15031 break ;
15032 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015033 /*
15034 * Init SCAN request from PE, convert it into DAL format
15035 * and send it to DAL
15036 */
15037 case WDA_INIT_SCAN_REQ:
15038 {
15039 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
15040 break ;
15041 }
15042 /* start SCAN request from PE */
15043 case WDA_START_SCAN_REQ:
15044 {
15045 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
15046 break ;
15047 }
15048 /* end SCAN request from PE */
15049 case WDA_END_SCAN_REQ:
15050 {
15051 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
15052 break ;
15053 }
15054 /* end SCAN request from PE */
15055 case WDA_FINISH_SCAN_REQ:
15056 {
15057 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
15058 break ;
15059 }
15060 /* join request from PE */
15061 case WDA_CHNL_SWITCH_REQ:
15062 {
15063 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
15064 {
15065 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
15066 }
15067 else
15068 {
Kalikinkar dhara1e83b772014-02-06 12:59:22 -080015069 if (IS_FEATURE_SUPPORTED_BY_FW(CH_SWITCH_V1) &&
15070 eHAL_CHANNEL_SWITCH_SOURCE_CSA ==
15071 ((tSwitchChannelParams*)pMsg->bodyptr)->channelSwitchSrc )
15072 {
15073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15074 "call ProcessChannelSwitchReq_V1" );
15075 WDA_ProcessChannelSwitchReq_V1(pWDA,
15076 (tSwitchChannelParams*)pMsg->bodyptr) ;
15077 }
15078 else
15079 {
15080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15081 "call ProcessChannelSwitchReq" );
15082 WDA_ProcessChannelSwitchReq(pWDA,
15083 (tSwitchChannelParams*)pMsg->bodyptr) ;
15084 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015085 }
15086 break ;
15087 }
15088 /* ADD BSS request from PE */
15089 case WDA_ADD_BSS_REQ:
15090 {
15091 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
15092 break ;
15093 }
15094 case WDA_ADD_STA_REQ:
15095 {
15096 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
15097 break ;
15098 }
15099 case WDA_DELETE_BSS_REQ:
15100 {
Jeff Johnson295189b2012-06-20 16:38:30 -070015101 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
15102 break ;
15103 }
15104 case WDA_DELETE_STA_REQ:
15105 {
Jeff Johnson295189b2012-06-20 16:38:30 -070015106 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
15107 break ;
15108 }
15109 case WDA_CONFIG_PARAM_UPDATE_REQ:
15110 {
15111 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
15112 break ;
15113 }
15114 case WDA_SET_BSSKEY_REQ:
15115 {
15116 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
15117 break ;
15118 }
15119 case WDA_SET_STAKEY_REQ:
15120 {
15121 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
15122 break ;
15123 }
15124 case WDA_SET_STA_BCASTKEY_REQ:
15125 {
15126 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
15127 break ;
15128 }
15129 case WDA_REMOVE_BSSKEY_REQ:
15130 {
15131 WDA_ProcessRemoveBssKeyReq(pWDA,
15132 (tRemoveBssKeyParams *)pMsg->bodyptr);
15133 break ;
15134 }
15135 case WDA_REMOVE_STAKEY_REQ:
15136 {
15137 WDA_ProcessRemoveStaKeyReq(pWDA,
15138 (tRemoveStaKeyParams *)pMsg->bodyptr);
15139 break ;
15140 }
15141 case WDA_REMOVE_STA_BCASTKEY_REQ:
15142 {
15143 /* TODO: currently UMAC is not sending this request, Add the code for
15144 handling this request when UMAC supports */
15145 break;
15146 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015147#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -070015148 case WDA_TSM_STATS_REQ:
15149 {
Srinivas Girigowda5cecb202013-10-08 09:13:25 -070015150 WDA_ProcessTsmStatsReq(pWDA, (tpAniGetTsmStatsReq)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070015151 break;
15152 }
15153#endif
15154 case WDA_UPDATE_EDCA_PROFILE_IND:
15155 {
15156 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
15157 break;
15158 }
15159 case WDA_ADD_TS_REQ:
15160 {
15161 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
15162 break;
15163 }
15164 case WDA_DEL_TS_REQ:
15165 {
15166 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
15167 break;
15168 }
15169 case WDA_ADDBA_REQ:
15170 {
15171 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
15172 break;
15173 }
15174 case WDA_DELBA_IND:
15175 {
15176 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
15177 break;
15178 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080015179 case WDA_UPDATE_CHAN_LIST_REQ:
15180 {
15181 WDA_ProcessUpdateChannelList(pWDA,
15182 (tSirUpdateChanList *)pMsg->bodyptr);
15183 break;
15184 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015185 case WDA_SET_LINK_STATE:
15186 {
15187 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
15188 break;
15189 }
15190 case WDA_GET_STATISTICS_REQ:
15191 {
15192 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
15193 break;
15194 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015195#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080015196 case WDA_GET_ROAM_RSSI_REQ:
15197 {
15198 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
15199 break;
15200 }
15201#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070015202 case WDA_PWR_SAVE_CFG:
15203 {
15204 if(pWDA->wdaState == WDA_READY_STATE)
15205 {
15206 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
15207 }
15208 else
15209 {
15210 if(NULL != pMsg->bodyptr)
15211 {
15212 vos_mem_free(pMsg->bodyptr);
15213 }
15214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15215 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
15216 }
15217 break;
15218 }
15219 case WDA_ENTER_IMPS_REQ:
15220 {
15221 if(pWDA->wdaState == WDA_READY_STATE)
15222 {
15223 WDA_ProcessEnterImpsReq(pWDA);
15224 }
15225 else
15226 {
15227 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15228 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
15229 }
15230 break;
15231 }
15232 case WDA_EXIT_IMPS_REQ:
15233 {
15234 if(pWDA->wdaState == WDA_READY_STATE)
15235 {
15236 WDA_ProcessExitImpsReq(pWDA);
15237 }
15238 else
15239 {
15240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15241 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
15242 }
15243 break;
15244 }
15245 case WDA_ENTER_BMPS_REQ:
15246 {
15247 if(pWDA->wdaState == WDA_READY_STATE)
15248 {
15249 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
15250 }
15251 else
15252 {
15253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15254 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
15255 }
15256 break;
15257 }
15258 case WDA_EXIT_BMPS_REQ:
15259 {
15260 if(pWDA->wdaState == WDA_READY_STATE)
15261 {
15262 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
15263 }
15264 else
15265 {
15266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15267 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
15268 }
15269 break;
15270 }
15271 case WDA_ENTER_UAPSD_REQ:
15272 {
15273 if(pWDA->wdaState == WDA_READY_STATE)
15274 {
15275 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
15276 }
15277 else
15278 {
15279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15280 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
15281 }
15282 break;
15283 }
15284 case WDA_EXIT_UAPSD_REQ:
15285 {
15286 if(pWDA->wdaState == WDA_READY_STATE)
15287 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015288 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070015289 }
15290 else
15291 {
15292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15293 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
15294 }
15295 break;
15296 }
15297 case WDA_UPDATE_UAPSD_IND:
15298 {
15299 if(pWDA->wdaState == WDA_READY_STATE)
15300 {
15301 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
15302 }
15303 else
15304 {
15305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15306 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
15307 }
15308 break;
15309 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015310 case WDA_REGISTER_PE_CALLBACK :
15311 {
15312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
15313 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
15314 /*TODO: store the PE callback */
15315 /* Do Nothing? MSG Body should be freed at here */
15316 if(NULL != pMsg->bodyptr)
15317 {
15318 vos_mem_free(pMsg->bodyptr);
15319 }
15320 break;
15321 }
15322 case WDA_SYS_READY_IND :
15323 {
15324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
15325 "Handling msg type WDA_SYS_READY_IND " );
15326 pWDA->wdaState = WDA_READY_STATE;
15327 if(NULL != pMsg->bodyptr)
15328 {
15329 vos_mem_free(pMsg->bodyptr);
15330 }
15331 break;
15332 }
15333 case WDA_BEACON_FILTER_IND :
15334 {
15335 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
15336 break;
15337 }
15338 case WDA_BTC_SET_CFG:
15339 {
15340 /*TODO: handle this while dealing with BTC */
15341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
15342 "Handling msg type WDA_BTC_SET_CFG " );
15343 /* Do Nothing? MSG Body should be freed at here */
15344 if(NULL != pMsg->bodyptr)
15345 {
15346 vos_mem_free(pMsg->bodyptr);
15347 }
15348 break;
15349 }
15350 case WDA_SIGNAL_BT_EVENT:
15351 {
15352 /*TODO: handle this while dealing with BTC */
15353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
15354 "Handling msg type WDA_SIGNAL_BT_EVENT " );
15355 /* Do Nothing? MSG Body should be freed at here */
15356 if(NULL != pMsg->bodyptr)
15357 {
15358 vos_mem_free(pMsg->bodyptr);
15359 }
15360 break;
15361 }
15362 case WDA_CFG_RXP_FILTER_REQ:
15363 {
15364 WDA_ProcessConfigureRxpFilterReq(pWDA,
15365 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
15366 break;
15367 }
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053015368 case WDA_MGMT_LOGGING_INIT_REQ:
15369 {
Siddharth Bhald1be97f2015-05-27 22:39:59 +053015370 WDA_ProcessFWLoggingInitReq(pWDA,
15371 (tSirFWLoggingInitParam *)pMsg->bodyptr);
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053015372 break;
15373 }
Siddharth Bhal64246172015-02-27 01:04:37 +053015374 case WDA_GET_FRAME_LOG_REQ:
15375 {
15376 WDA_ProcessGetFrameLogReq(pWDA,
15377 (tAniGetFrameLogReq *)pMsg->bodyptr);
15378 break;
15379 }
Gupta, Kapil7c34b322015-09-30 13:12:35 +053015380 case WDA_START_RSSI_MONITOR_REQ:
15381 {
15382 WDA_ProcessStartRssiMonitorReq(pWDA,(tSirRssiMonitorReq *)pMsg->bodyptr);
15383 break;
15384 }
15385 case WDA_STOP_RSSI_MONITOR_REQ:
15386 {
15387 WDA_ProcessStopRssiMonitorReq(pWDA,(tSirRssiMonitorReq *)pMsg->bodyptr);
15388 break;
15389 }
Karthick Sa35b0692015-08-21 15:57:05 +053015390 case WDA_SEND_LOG_DONE_IND:
15391 {
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053015392 WDA_FWLoggingDXEdoneInd(pMsg->bodyval);
Karthick Sa35b0692015-08-21 15:57:05 +053015393 break;
15394 }
Sachin Ahuja715aafc2015-07-21 23:35:10 +053015395 case WDA_FATAL_EVENT_LOGS_REQ:
15396 {
15397 WDA_ProcessFatalEventLogsReq(pWDA,
15398 (tSirFatalEventLogsReqParam *)pMsg->bodyptr);
15399 break;
15400 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015401 case WDA_SET_HOST_OFFLOAD:
15402 {
15403 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
15404 break;
15405 }
15406 case WDA_SET_KEEP_ALIVE:
15407 {
15408 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
15409 break;
15410 }
15411#ifdef WLAN_NS_OFFLOAD
15412 case WDA_SET_NS_OFFLOAD:
15413 {
15414 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
15415 break;
15416 }
15417#endif //WLAN_NS_OFFLOAD
15418 case WDA_ADD_STA_SELF_REQ:
15419 {
15420 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
15421 break;
15422 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015423 case WDA_DEL_STA_SELF_REQ:
15424 {
15425 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
15426 break;
15427 }
15428 case WDA_WOWL_ADD_BCAST_PTRN:
15429 {
15430 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
15431 break;
15432 }
15433 case WDA_WOWL_DEL_BCAST_PTRN:
15434 {
15435 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
15436 break;
15437 }
15438 case WDA_WOWL_ENTER_REQ:
15439 {
15440 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
15441 break;
15442 }
15443 case WDA_WOWL_EXIT_REQ:
15444 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015445 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070015446 break;
15447 }
15448 case WDA_TL_FLUSH_AC_REQ:
15449 {
15450 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
15451 break;
15452 }
15453 case WDA_SIGNAL_BTAMP_EVENT:
15454 {
15455 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
15456 break;
15457 }
Abhishek Singh85b74712014-10-08 11:38:19 +053015458 case WDA_FW_STATS_GET_REQ:
15459 {
15460 WDA_ProcessFWStatsGetReq(pWDA,
15461 (tSirFWStatsGetReq *)pMsg->bodyptr);
15462 break;
15463 }
Sunil Duttbd736ed2014-05-26 21:19:41 +053015464#ifdef WLAN_FEATURE_LINK_LAYER_STATS
15465 case WDA_LINK_LAYER_STATS_SET_REQ:
15466 {
15467 WDA_ProcessLLStatsSetReq(pWDA, (tSirLLStatsSetReq *)pMsg->bodyptr);
15468 break;
15469 }
15470 case WDA_LINK_LAYER_STATS_GET_REQ:
15471 {
15472 WDA_ProcessLLStatsGetReq(pWDA, (tSirLLStatsGetReq *)pMsg->bodyptr);
15473 break;
15474 }
15475 case WDA_LINK_LAYER_STATS_CLEAR_REQ:
15476 {
15477 WDA_ProcessLLStatsClearReq(pWDA, (tSirLLStatsClearReq *)pMsg->bodyptr);
15478 break;
15479 }
15480#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Dino Mycle41bdc942014-06-10 11:30:24 +053015481#ifdef WLAN_FEATURE_EXTSCAN
15482 case WDA_EXTSCAN_GET_CAPABILITIES_REQ:
15483 {
15484 WDA_ProcessEXTScanGetCapabilitiesReq(pWDA,
15485 (tSirGetEXTScanCapabilitiesReqParams *)pMsg->bodyptr);
15486 break;
15487 }
15488 case WDA_EXTSCAN_START_REQ:
15489 {
15490 WDA_ProcessEXTScanStartReq(pWDA,
15491 (tSirEXTScanStartReqParams *)pMsg->bodyptr);
15492 break;
15493 }
15494 case WDA_EXTSCAN_STOP_REQ:
15495 {
15496 WDA_ProcessEXTScanStopReq(pWDA,
15497 (tSirEXTScanStopReqParams *)pMsg->bodyptr);
15498 break;
15499 }
15500 case WDA_EXTSCAN_GET_CACHED_RESULTS_REQ:
15501 {
15502 WDA_ProcessEXTScanGetCachedResultsReq(pWDA,
15503 (tSirEXTScanGetCachedResultsReqParams *)pMsg->bodyptr);
15504 break;
15505 }
15506 case WDA_EXTSCAN_SET_BSSID_HOTLIST_REQ:
15507 {
15508 WDA_ProcessEXTScanSetBSSIDHotlistReq(pWDA,
15509 (tSirEXTScanSetBssidHotListReqParams *)pMsg->bodyptr);
15510 break;
15511 }
15512 case WDA_EXTSCAN_RESET_BSSID_HOTLIST_REQ:
15513 {
15514 WDA_ProcessEXTScanResetBSSIDHotlistReq(pWDA,
15515 (tSirEXTScanResetBssidHotlistReqParams *)pMsg->bodyptr);
15516 break;
15517 }
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053015518 case WDA_EXTSCAN_SET_SSID_HOTLIST_REQ:
15519 {
15520 WDA_ProcessEXTScanSetSSIDHotlistReq(pWDA,
15521 (tSirEXTScanSetSsidHotListReqParams *)pMsg->bodyptr);
15522 break;
15523 }
15524 case WDA_EXTSCAN_RESET_SSID_HOTLIST_REQ:
15525 {
15526 WDA_ProcessEXTScanResetSSIDHotlistReq(pWDA,
15527 (tSirEXTScanResetSsidHotlistReqParams *)pMsg->bodyptr);
15528 break;
15529 }
Padma, Santhosh Kumarc1f7f052015-08-26 12:29:01 +053015530 case WDA_HIGH_PRIORITY_DATA_INFO_IND:
15531 {
15532 WDA_ProcessHighPriorityDataInfoInd(pWDA,
15533 (tSirHighPriorityDataInfoInd *)pMsg->bodyptr);
15534 break;
15535 }
Dino Mycle41bdc942014-06-10 11:30:24 +053015536#endif /* WLAN_FEATURE_EXTSCAN */
Jeff Johnson295189b2012-06-20 16:38:30 -070015537#ifdef WDA_UT
15538 case WDA_WDI_EVENT_MSG:
15539 {
15540 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
15541 break ;
15542 }
15543#endif
15544 case WDA_UPDATE_BEACON_IND:
15545 {
15546 WDA_ProcessUpdateBeaconParams(pWDA,
15547 (tUpdateBeaconParams *)pMsg->bodyptr);
15548 break;
15549 }
15550 case WDA_SEND_BEACON_REQ:
15551 {
15552 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
15553 break;
15554 }
15555 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
15556 {
15557 WDA_ProcessUpdateProbeRspTemplate(pWDA,
15558 (tSendProbeRespParams *)pMsg->bodyptr);
15559 break;
15560 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015561#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -070015562 case WDA_SET_MAX_TX_POWER_REQ:
15563 {
15564 WDA_ProcessSetMaxTxPowerReq(pWDA,
15565 (tMaxTxPowerParams *)pMsg->bodyptr);
15566 break;
15567 }
15568#endif
Arif Hussaina5ebce02013-08-09 15:09:58 -070015569 case WDA_SET_MAX_TX_POWER_PER_BAND_REQ:
15570 {
15571 WDA_ProcessSetMaxTxPowerPerBandReq(pWDA, (tMaxTxPowerPerBandParams *)
15572 pMsg->bodyptr);
15573 break;
15574 }
schang86c22c42013-03-13 18:41:24 -070015575 case WDA_SET_TX_POWER_REQ:
15576 {
15577 WDA_ProcessSetTxPowerReq(pWDA,
15578 (tSirSetTxPowerReq *)pMsg->bodyptr);
15579 break;
15580 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015581 case WDA_SET_P2P_GO_NOA_REQ:
15582 {
15583 WDA_ProcessSetP2PGONOAReq(pWDA,
15584 (tP2pPsParams *)pMsg->bodyptr);
15585 break;
15586 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015587 /* timer related messages */
15588 case WDA_TIMER_BA_ACTIVITY_REQ:
15589 {
15590 WDA_BaCheckActivity(pWDA) ;
15591 break ;
15592 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015593
15594 /* timer related messages */
15595 case WDA_TIMER_TRAFFIC_STATS_IND:
15596 {
15597 WDA_TimerTrafficStatsInd(pWDA);
15598 break;
15599 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015600#ifdef WLAN_FEATURE_VOWIFI_11R
15601 case WDA_AGGR_QOS_REQ:
15602 {
15603 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
15604 break;
15605 }
15606#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070015607 case WDA_FTM_CMD_REQ:
15608 {
15609 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
15610 break ;
15611 }
Jeff Johnsone7245742012-09-05 17:12:55 -070015612#ifdef FEATURE_OEM_DATA_SUPPORT
15613 case WDA_START_OEM_DATA_REQ:
15614 {
15615 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
15616 break;
15617 }
15618#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070015619 /* Tx Complete Time out Indication */
15620 case WDA_TX_COMPLETE_TIMEOUT_IND:
15621 {
15622 WDA_ProcessTxCompleteTimeOutInd(pWDA);
15623 break;
15624 }
15625 case WDA_WLAN_SUSPEND_IND:
15626 {
15627 WDA_ProcessWlanSuspendInd(pWDA,
15628 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
15629 break;
15630 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015631 case WDA_WLAN_RESUME_REQ:
15632 {
15633 WDA_ProcessWlanResumeReq(pWDA,
15634 (tSirWlanResumeParam *)pMsg->bodyptr) ;
15635 break;
15636 }
15637
15638 case WDA_UPDATE_CF_IND:
15639 {
15640 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
15641 pMsg->bodyptr = NULL;
15642 break;
15643 }
15644#ifdef FEATURE_WLAN_SCAN_PNO
15645 case WDA_SET_PNO_REQ:
15646 {
15647 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
15648 break;
15649 }
15650 case WDA_UPDATE_SCAN_PARAMS_REQ:
15651 {
15652 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
15653 break;
15654 }
15655 case WDA_SET_RSSI_FILTER_REQ:
15656 {
15657 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
15658 break;
15659 }
15660#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015661#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015662 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015663 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015664 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015665 break;
15666 }
15667#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070015668 case WDA_SET_TX_PER_TRACKING_REQ:
15669 {
15670 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
15671 break;
15672 }
15673
15674#ifdef WLAN_FEATURE_PACKET_FILTERING
15675 case WDA_8023_MULTICAST_LIST_REQ:
15676 {
15677 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
15678 break;
15679 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015680 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
15681 {
15682 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
15683 break;
15684 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015685 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
15686 {
15687 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
15688 break;
15689 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015690 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
15691 {
15692 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
15693 break;
15694 }
15695#endif // WLAN_FEATURE_PACKET_FILTERING
15696
15697
15698 case WDA_TRANSMISSION_CONTROL_IND:
15699 {
15700 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
15701 break;
15702 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015703 case WDA_SET_POWER_PARAMS_REQ:
15704 {
15705 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
15706 break;
15707 }
c_manjeecfd1efb2015-09-25 19:32:34 +053015708 case WDA_FW_MEM_DUMP_REQ:
15709 {
15710 WDA_ProcessFwrMemDumpReq(pWDA, (tAniFwrDumpReq*)pMsg->bodyptr);
15711 break;
15712 }
15713
Jeff Johnson295189b2012-06-20 16:38:30 -070015714#ifdef WLAN_FEATURE_GTK_OFFLOAD
15715 case WDA_GTK_OFFLOAD_REQ:
15716 {
15717 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
15718 break;
15719 }
15720
15721 case WDA_GTK_OFFLOAD_GETINFO_REQ:
15722 {
15723 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
15724 break;
15725 }
15726#endif //WLAN_FEATURE_GTK_OFFLOAD
15727
15728 case WDA_SET_TM_LEVEL_REQ:
15729 {
15730 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
15731 break;
15732 }
Sandeep Puligilla60342762014-01-30 21:05:37 +053015733
Mohit Khanna4a70d262012-09-11 16:30:12 -070015734 case WDA_UPDATE_OP_MODE:
15735 {
Sandeep Puligilla60342762014-01-30 21:05:37 +053015736 if(WDA_getHostWlanFeatCaps(HT40_OBSS_SCAN) &&
15737 WDA_getFwWlanFeatCaps(HT40_OBSS_SCAN))
15738 {
15739 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
15740 }
15741 else if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
Mohit Khanna4a70d262012-09-11 16:30:12 -070015742 {
15743 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
15744 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
15745 else
15746 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015747 " VHT OpMode Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070015748 }
15749 else
15750 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015751 " 11AC Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070015752 break;
15753 }
Chet Lanctot186b5732013-03-18 10:26:30 -070015754#ifdef WLAN_FEATURE_11W
15755 case WDA_EXCLUDE_UNENCRYPTED_IND:
15756 {
15757 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
15758 break;
15759 }
15760#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053015761#ifdef FEATURE_WLAN_TDLS
15762 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
15763 {
15764 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
15765 break;
15766 }
15767#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015768 case WDA_DHCP_START_IND:
15769 {
15770 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
15771 break;
15772 }
15773 case WDA_DHCP_STOP_IND:
15774 {
15775 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
15776 break;
15777 }
Leo Chang9056f462013-08-01 19:21:11 -070015778#ifdef FEATURE_WLAN_LPHB
15779 case WDA_LPHB_CONF_REQ:
15780 {
15781 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
15782 break;
15783 }
15784#endif
Yue Mab9c86f42013-08-14 15:59:08 -070015785 case WDA_ADD_PERIODIC_TX_PTRN_IND:
15786 {
15787 WDA_ProcessAddPeriodicTxPtrnInd(pWDA,
15788 (tSirAddPeriodicTxPtrn *)pMsg->bodyptr);
15789 break;
15790 }
15791 case WDA_DEL_PERIODIC_TX_PTRN_IND:
15792 {
15793 WDA_ProcessDelPeriodicTxPtrnInd(pWDA,
15794 (tSirDelPeriodicTxPtrn *)pMsg->bodyptr);
15795 break;
15796 }
Abhishek Singh00b71972016-01-07 10:51:04 +053015797 case WDA_RATE_UPDATE_IND:
15798 {
15799 WDA_ProcessRateUpdateInd(pWDA, (tSirRateUpdateInd *)pMsg->bodyptr);
15800 break;
15801 }
15802#ifdef WLAN_FEATURE_RMC
15803 case WDA_RMC_RULER_REQ:
15804 {
15805 WDA_ProcessRMCRulerReq(pWDA, (tSirRmcRulerReq *)pMsg->bodyptr);
15806 break;
15807 }
15808 case WDA_RMC_UPDATE_IND:
15809 {
15810 WDA_ProcessRMCUpdateInd(pWDA, (tSirRmcUpdateInd *)pMsg->bodyptr);
15811 break;
15812 }
15813 case WDA_GET_IBSS_PEER_INFO_REQ:
15814 {
15815 WDA_ProcessIbssPeerInfoReq(pWDA,
15816 (tSirIbssGetPeerInfoReqParams *)pMsg->bodyptr);
15817 break;
15818 }
15819 case WDA_TX_FAIL_MONITOR_IND:
15820 {
15821 WDA_ProcessTXFailMonitorInd(pWDA, (tAniTXFailMonitorInd *)pMsg->bodyptr);
15822 break;
15823 }
15824#endif /* WLAN_FEATURE_RMC */
Yue Mab9c86f42013-08-14 15:59:08 -070015825
Rajeev79dbe4c2013-10-05 11:03:42 +053015826#ifdef FEATURE_WLAN_BATCH_SCAN
15827 case WDA_SET_BATCH_SCAN_REQ:
15828 {
15829 WDA_ProcessSetBatchScanReq(pWDA,
15830 (tSirSetBatchScanReq *)pMsg->bodyptr);
15831 break;
15832 }
15833 case WDA_TRIGGER_BATCH_SCAN_RESULT_IND:
15834 {
15835 WDA_ProcessTriggerBatchScanResultInd(pWDA,
15836 (tSirTriggerBatchScanResultInd *)pMsg->bodyptr);
15837 break;
15838 }
15839 case WDA_STOP_BATCH_SCAN_IND:
15840 {
15841 WDA_ProcessStopBatchScanInd(pWDA,
15842 (tSirStopBatchScanInd *)pMsg->bodyptr);
15843 break;
15844 }
c_hpothu92367912014-05-01 15:18:17 +053015845 case WDA_GET_BCN_MISS_RATE_REQ:
15846 WDA_ProcessGetBcnMissRateReq(pWDA,
15847 (tSirBcnMissRateReq *)pMsg->bodyptr);
15848 break;
Rajeev79dbe4c2013-10-05 11:03:42 +053015849#endif
15850
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053015851 case WDA_HT40_OBSS_SCAN_IND:
15852 {
15853 WDA_ProcessHT40OBSSScanInd(pWDA,
15854 (tSirHT40OBSSScanInd *)pMsg->bodyptr);
15855 break;
15856 }
15857 case WDA_HT40_OBSS_STOP_SCAN_IND:
15858 {
15859 WDA_ProcessHT40OBSSStopScanInd(pWDA,
15860 (tANI_U8*)pMsg->bodyptr);
15861 break;
15862 }
Atul Mittalc0f739f2014-07-31 13:47:47 +053015863// tdlsoffchan
15864#ifdef FEATURE_WLAN_TDLS
15865 case WDA_SET_TDLS_CHAN_SWITCH_REQ:
15866 {
15867 WDA_ProcessSetTdlsChanSwitchReq(pWDA, (tTdlsChanSwitchParams *)pMsg->bodyptr);
15868 break;
15869 }
15870#endif
Siddharth Bhal171788a2014-09-29 21:02:40 +053015871 case WDA_SPOOF_MAC_ADDR_REQ:
15872 {
15873 WDA_ProcessSetSpoofMacAddrReq(pWDA, (tpSpoofMacAddrReqParams)pMsg->bodyptr);
15874 break;
15875 }
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053015876 case WDA_ENCRYPT_MSG_REQ:
15877 {
15878 WDA_ProcessEncryptMsgReq(pWDA, (u8 *)pMsg->bodyptr);
15879 break;
15880 }
Srinivas Dasari32a79262015-02-19 13:04:49 +053015881
15882 case WDA_NAN_REQUEST:
15883 {
15884 WDA_ProcessNanRequest( pWDA, (tNanRequest *)pMsg->bodyptr);
15885 break;
15886 }
Abhishek Singh41988ba2015-05-25 19:42:29 +053015887 case WDA_SET_RTS_CTS_HTVHT:
15888 {
15889 WDA_ProcessSetRtsCtsHTVhtInd( pWDA, pMsg->bodyval);
15890 break;
15891 }
Katya Nigamf0511f62015-05-05 16:40:57 +053015892
15893 case WDA_MON_START_REQ:
15894 {
15895 WDA_ProcessMonStartReq(pWDA,(v_PVOID_t)pMsg->bodyptr);
15896 break;
15897 }
15898 case WDA_MON_STOP_REQ:
15899 {
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053015900 WDA_ProcessMonStopReq(pWDA, (v_PVOID_t)pMsg->bodyptr);
Katya Nigamf0511f62015-05-05 16:40:57 +053015901 break;
15902 }
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +053015903 case WDA_SEND_FREQ_RANGE_CONTROL_IND:
15904 {
15905 WDA_ProcessEnableDisableCAEventInd(pWDA, pMsg->bodyval);
15906 break;
15907 }
Arun Khandavalli7eeb1592015-10-19 21:36:57 +053015908 case WDA_WIFI_CONFIG_REQ:
15909 {
15910 WDA_ProcessWifiConfigReq(pWDA,(tSetWifiConfigParams *)pMsg->bodyptr);
15911 break;
15912 }
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053015913#ifdef FEATURE_OEM_DATA_SUPPORT
15914 case WDA_START_OEM_DATA_REQ_IND_NEW:
15915 {
15916 WDA_ProcessStartOemDataReqIndNew(pWDA,
15917 (tOemDataReqNewConfig *)pMsg->bodyptr);
15918 break;
15919 }
15920#endif
Mahesh A Saptasagarcfc65ae2015-12-22 15:06:10 +053015921 case WDA_ANTENNA_DIVERSITY_SELECTION_REQ:
15922 {
15923 WDA_ProcessAntennaDiversitySelectionReq(pWDA,
15924 (tSirAntennaDiversitySelectionReq *)pMsg->bodyptr);
15925 break;
15926 }
Mahesh A Saptasagar7d432952016-02-09 14:01:03 +053015927 case WDA_MODIFY_ROAM_PARAMS_IND:
15928 {
15929 WDA_ProcessBcnMissPenaltyCount(pWDA,
15930 (tModifyRoamParamsReqParams *)pMsg->bodyptr);
15931 break;
15932 }
Selvaraj, Sridharc045b8b2016-04-06 12:22:35 +053015933
15934 case WDA_SET_ALLOWED_ACTION_FRAMES_IND:
15935 wda_process_set_allowed_action_frames_ind(pWDA,
15936 (struct sir_allowed_action_frames*)pMsg->bodyptr);
15937 break;
15938
Jeff Johnson295189b2012-06-20 16:38:30 -070015939 default:
15940 {
Agarwal Ashishbf98caf2014-03-25 13:29:11 +053015941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070015942 "No Handling for msg type %x in WDA "
15943 ,pMsg->type);
15944 /* Do Nothing? MSG Body should be freed at here */
15945 if(NULL != pMsg->bodyptr)
15946 {
15947 vos_mem_free(pMsg->bodyptr);
15948 }
15949 //WDA_VOS_ASSERT(0) ;
15950 }
15951 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015952 return status ;
15953}
15954
Jeff Johnson295189b2012-06-20 16:38:30 -070015955/*
15956 * FUNCTION: WDA_LowLevelIndCallback
15957 * IND API callback from WDI, send Ind to PE
15958 */
15959void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
15960 void* pUserData )
15961{
15962 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
15963#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
15964 tSirRSSINotification rssiNotification;
15965#endif
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053015966 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070015967 {
15968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053015969 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015970 VOS_ASSERT(0);
15971 return ;
15972 }
15973
15974 switch(wdiLowLevelInd->wdiIndicationType)
15975 {
15976 case WDI_RSSI_NOTIFICATION_IND:
15977 {
15978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15979 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070015980#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
15981 rssiNotification.bReserved =
15982 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
15983 rssiNotification.bRssiThres1NegCross =
15984 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
15985 rssiNotification.bRssiThres1PosCross =
15986 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
15987 rssiNotification.bRssiThres2NegCross =
15988 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
15989 rssiNotification.bRssiThres2PosCross =
15990 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
15991 rssiNotification.bRssiThres3NegCross =
15992 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
15993 rssiNotification.bRssiThres3PosCross =
15994 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080015995 rssiNotification.avgRssi = (v_S7_t)
15996 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070015997 WLANTL_BMPSRSSIRegionChangedNotification(
15998 pWDA->pVosContext,
15999 &rssiNotification);
16000#endif
16001 break ;
16002 }
16003 case WDI_MISSED_BEACON_IND:
16004 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080016005 tpSirSmeMissedBeaconInd pMissBeacInd =
16006 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070016007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16008 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070016009 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080016010 if(NULL == pMissBeacInd)
16011 {
16012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16013 "%s: VOS MEM Alloc Failure", __func__);
16014 break;
16015 }
16016 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
16017 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
16018 pMissBeacInd->bssIdx =
16019 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
16020 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016021 break ;
16022 }
16023 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
16024 {
16025 /* TODO: Decode Ind and send Ind to PE */
16026 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16027 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
16028 break ;
16029 }
16030
16031 case WDI_MIC_FAILURE_IND:
16032 {
16033 tpSirSmeMicFailureInd pMicInd =
16034 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
16035
16036 if(NULL == pMicInd)
16037 {
16038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016039 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016040 break;
16041 }
16042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16043 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070016044 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
16045 pMicInd->length = sizeof(tSirSmeMicFailureInd);
16046 vos_mem_copy(pMicInd->bssId,
16047 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
16048 sizeof(tSirMacAddr));
16049 vos_mem_copy(pMicInd->info.srcMacAddr,
16050 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
16051 sizeof(tSirMacAddr));
16052 vos_mem_copy(pMicInd->info.taMacAddr,
16053 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
16054 sizeof(tSirMacAddr));
16055 vos_mem_copy(pMicInd->info.dstMacAddr,
16056 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
16057 sizeof(tSirMacAddr));
16058 vos_mem_copy(pMicInd->info.rxMacAddr,
16059 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
16060 sizeof(tSirMacAddr));
16061 pMicInd->info.multicast =
16062 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
16063 pMicInd->info.keyId=
16064 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
16065 pMicInd->info.IV1=
16066 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
16067 vos_mem_copy(pMicInd->info.TSC,
16068 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070016069 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
16070 (void *)pMicInd , 0) ;
16071 break ;
16072 }
16073 case WDI_FATAL_ERROR_IND:
16074 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070016075 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070016076 /* TODO: Decode Ind and send Ind to PE */
16077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16078 "Received WDI_FATAL_ERROR_IND from WDI ");
16079 break ;
16080 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016081 case WDI_DEL_STA_IND:
16082 {
Jeff Johnson295189b2012-06-20 16:38:30 -070016083 tpDeleteStaContext pDelSTACtx =
16084 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
16085
16086 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16087 "Received WDI_DEL_STA_IND from WDI ");
16088 if(NULL == pDelSTACtx)
16089 {
16090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016091 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016092 break;
16093 }
16094 vos_mem_copy(pDelSTACtx->addr2,
16095 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
16096 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070016097 vos_mem_copy(pDelSTACtx->bssId,
16098 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
16099 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070016100 pDelSTACtx->assocId =
16101 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
16102 pDelSTACtx->reasonCode =
16103 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
16104 pDelSTACtx->staId =
16105 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070016106 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
16107 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016108 break ;
16109 }
16110 case WDI_COEX_IND:
16111 {
16112 tANI_U32 index;
16113 vos_msg_t vosMsg;
c_hpothub3458992014-09-19 19:58:57 +053016114 tSirSmeCoexInd *pSmeCoexInd;
16115
16116 if (SIR_COEX_IND_TYPE_CXM_FEATURES_NOTIFICATION ==
16117 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType)
16118 {
16119 if(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData)
16120 {
16121 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16122 FL("Coex state: 0x%x coex feature: 0x%x"),
16123 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[0],
16124 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[1]);
16125
16126 if (wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2] << 16)
16127 {
16128 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, FL("power limit: 0x%x"),
16129 (tANI_U16)(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2]));
16130 }
16131 }
16132 break;
16133 }
16134
16135 pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070016136 if(NULL == pSmeCoexInd)
16137 {
16138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016139 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016140 break;
16141 }
16142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16143 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070016144 /* Message Header */
16145 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
16146 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070016147 /* Info from WDI Indication */
16148 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
16149 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
16150 {
16151 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
16152 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016153 /* VOS message wrapper */
16154 vosMsg.type = eWNI_SME_COEX_IND;
16155 vosMsg.bodyptr = (void *)pSmeCoexInd;
16156 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070016157 /* Send message to SME */
16158 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16159 {
16160 /* free the mem and return */
16161 vos_mem_free((v_VOID_t *)pSmeCoexInd);
16162 }
16163 else
16164 {
16165 /* DEBUG */
16166 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16167 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
16168 pSmeCoexInd->coexIndType,
16169 pSmeCoexInd->coexIndData[0],
16170 pSmeCoexInd->coexIndData[1],
16171 pSmeCoexInd->coexIndData[2],
16172 pSmeCoexInd->coexIndData[3]);
16173 }
16174 break;
16175 }
16176 case WDI_TX_COMPLETE_IND:
16177 {
16178 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
16179 /* Calling TxCompleteAck Indication from wda context*/
16180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16181 "Complete Indication received from HAL");
16182 if( pWDA->pAckTxCbFunc )
16183 {
16184 if( VOS_STATUS_SUCCESS !=
16185 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
16186 {
16187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16188 "Tx Complete timeout Timer Stop Failed ");
Ganesh Kondabattinib18b3292015-03-16 16:59:26 +053016189 }
Ganesh Kondabattinie1accae2015-06-11 17:18:00 +053016190 if (!IS_FEATURE_SUPPORTED_BY_FW(ENHANCED_TXBD_COMPLETION))
Ganesh Kondabattinib18b3292015-03-16 16:59:26 +053016191 pWDA->pAckTxCbFunc( pMac, &wdiLowLevelInd->wdiIndicationData.tx_complete_status);
16192 else
16193 pWDA->pAckTxCbFunc( pMac, &wdiLowLevelInd->wdiIndicationData.wdiTxBdInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070016194 pWDA->pAckTxCbFunc = NULL;
16195 }
16196 else
16197 {
Ratheesh S P36dbc932015-08-07 14:28:57 +053016198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070016199 "Tx Complete Indication is received after timeout ");
16200 }
16201 break;
16202 }
Viral Modid86bde22012-12-10 13:09:21 -080016203 case WDI_P2P_NOA_START_IND :
16204 {
16205 tSirP2PNoaStart *pP2pNoaStart =
16206 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
16207
16208 if (NULL == pP2pNoaStart)
16209 {
16210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16211 "Memory allocation failure, "
16212 "WDI_P2P_NOA_START_IND not forwarded");
16213 break;
16214 }
16215 pP2pNoaStart->status =
16216 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
16217 pP2pNoaStart->bssIdx =
16218 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
16219 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
16220 (void *)pP2pNoaStart , 0) ;
16221 break;
16222 }
16223
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053016224#ifdef FEATURE_WLAN_TDLS
16225 case WDI_TDLS_IND :
16226 {
16227 tSirTdlsInd *pTdlsInd =
16228 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
16229
16230 if (NULL == pTdlsInd)
16231 {
16232 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16233 "Memory allocation failure, "
16234 "WDI_TDLS_IND not forwarded");
16235 break;
16236 }
16237 pTdlsInd->status =
16238 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
16239 pTdlsInd->assocId =
16240 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
16241 pTdlsInd->staIdx =
16242 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
16243 pTdlsInd->reasonCode =
16244 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
16245 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
16246 (void *)pTdlsInd , 0) ;
16247 break;
16248 }
16249#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070016250 case WDI_P2P_NOA_ATTR_IND :
16251 {
16252 tSirP2PNoaAttr *pP2pNoaAttr =
16253 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070016254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16255 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070016256 if (NULL == pP2pNoaAttr)
16257 {
16258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16259 "Memory allocation failure, "
16260 "WDI_P2P_NOA_ATTR_IND not forwarded");
16261 break;
16262 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016263 pP2pNoaAttr->index =
16264 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
16265 pP2pNoaAttr->oppPsFlag =
16266 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
16267 pP2pNoaAttr->ctWin =
16268 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
16269
16270 pP2pNoaAttr->uNoa1IntervalCnt =
16271 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
16272 pP2pNoaAttr->uNoa1Duration =
16273 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
16274 pP2pNoaAttr->uNoa1Interval =
16275 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
16276 pP2pNoaAttr->uNoa1StartTime =
16277 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070016278 pP2pNoaAttr->uNoa2IntervalCnt =
16279 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
16280 pP2pNoaAttr->uNoa2Duration =
16281 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
16282 pP2pNoaAttr->uNoa2Interval =
16283 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
16284 pP2pNoaAttr->uNoa2StartTime =
16285 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070016286 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
16287 (void *)pP2pNoaAttr , 0) ;
16288 break;
16289 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016290#ifdef FEATURE_WLAN_SCAN_PNO
16291 case WDI_PREF_NETWORK_FOUND_IND:
16292 {
16293 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070016294 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
16295 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
16296 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
16297 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
16298
Jeff Johnson295189b2012-06-20 16:38:30 -070016299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16300 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070016301 if (NULL == pPrefNetworkFoundInd)
16302 {
16303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16304 "Memory allocation failure, "
16305 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
Kiet Lamb537cfb2013-11-07 12:56:49 +053016306 if (NULL !=
16307 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
16308 {
16309 wpalMemoryFree(
16310 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData
16311 );
16312 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
16313 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016314 break;
16315 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016316 /* Message Header */
16317 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070016318 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070016319
16320 /* Info from WDI Indication */
16321 pPrefNetworkFoundInd->ssId.length =
16322 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070016323 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070016324 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
16325 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
16326 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070016327 if (NULL !=
16328 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
16329 {
16330 pPrefNetworkFoundInd->frameLength =
16331 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
16332 vos_mem_copy( pPrefNetworkFoundInd->data,
16333 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
16334 pPrefNetworkFoundInd->frameLength);
16335 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
16336 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
16337 }
16338 else
16339 {
16340 pPrefNetworkFoundInd->frameLength = 0;
16341 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016342 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070016343 /* VOS message wrapper */
16344 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
16345 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
16346 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070016347 /* Send message to SME */
16348 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16349 {
16350 /* free the mem and return */
16351 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
16352 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016353 break;
16354 }
16355#endif // FEATURE_WLAN_SCAN_PNO
16356
16357#ifdef WLAN_WAKEUP_EVENTS
16358 case WDI_WAKE_REASON_IND:
16359 {
16360 vos_msg_t vosMsg;
16361 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
16362 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
16363 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
16364
16365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Sushant Kaushik1b645382014-10-13 16:39:36 +053016366 "[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 -070016367 wdiLowLevelInd->wdiIndicationType,
16368 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
16369 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
16370 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
16371
16372 if (NULL == pWakeReasonInd)
16373 {
16374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16375 "Memory allocation failure, "
16376 "WDI_WAKE_REASON_IND not forwarded");
16377 break;
16378 }
16379
16380 vos_mem_zero(pWakeReasonInd, allocSize);
16381
16382 /* Message Header */
16383 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
16384 pWakeReasonInd->mesgLen = allocSize;
16385
16386 /* Info from WDI Indication */
16387 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
16388 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
16389 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
16390 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
16391 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
16392 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
16393 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
16394 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
16395
16396 /* VOS message wrapper */
16397 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
16398 vosMsg.bodyptr = (void *) pWakeReasonInd;
16399 vosMsg.bodyval = 0;
16400
16401 /* Send message to SME */
16402 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16403 {
16404 /* free the mem and return */
16405 vos_mem_free((v_VOID_t *) pWakeReasonInd);
16406 }
16407
16408 break;
16409 }
16410#endif // WLAN_WAKEUP_EVENTS
16411
16412 case WDI_TX_PER_HIT_IND:
16413 {
16414 vos_msg_t vosMsg;
16415 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
16416 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
16417 /* VOS message wrapper */
16418 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
16419 vosMsg.bodyptr = NULL;
16420 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070016421 /* Send message to SME */
16422 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16423 {
16424 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
16425 }
16426 break;
16427 }
Abhishek Singh00b71972016-01-07 10:51:04 +053016428#ifdef WLAN_FEATURE_RMC
16429 case WDI_TX_FAIL_IND:
16430 {
16431 if (pWDA->txFailIndCallback)
16432 {
16433 pWDA->txFailIndCallback(
16434 wdiLowLevelInd->wdiIndicationData.wdiTXFailInd.macAddr,
16435 wdiLowLevelInd->wdiIndicationData.wdiTXFailInd.seqNo);
16436 }
16437 break;
16438 }
16439#endif /* WLAN_FEATURE_RMC */
Jeff Johnson295189b2012-06-20 16:38:30 -070016440
Leo Chang9056f462013-08-01 19:21:11 -070016441#ifdef FEATURE_WLAN_LPHB
Leo Changd9df8aa2013-09-26 13:32:26 -070016442 case WDI_LPHB_IND:
Leo Chang9056f462013-08-01 19:21:11 -070016443 {
Leo Changd9df8aa2013-09-26 13:32:26 -070016444 vos_msg_t vosMsg;
16445 tSirLPHBInd *lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070016446
Leo Changd9df8aa2013-09-26 13:32:26 -070016447 lphbInd =
16448 (tSirLPHBInd *)vos_mem_malloc(sizeof(tSirLPHBInd));
16449 if (NULL == lphbInd)
Leo Chang9056f462013-08-01 19:21:11 -070016450 {
16451 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16452 "%s: LPHB IND buffer alloc Fail", __func__);
16453 return ;
16454 }
16455
Leo Changd9df8aa2013-09-26 13:32:26 -070016456 lphbInd->sessionIdx =
Leo Chang9056f462013-08-01 19:21:11 -070016457 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
Leo Changd9df8aa2013-09-26 13:32:26 -070016458 lphbInd->protocolType =
Leo Chang9056f462013-08-01 19:21:11 -070016459 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
Leo Changd9df8aa2013-09-26 13:32:26 -070016460 lphbInd->eventReason =
Leo Chang9056f462013-08-01 19:21:11 -070016461 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
16462
16463 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Leo Changd9df8aa2013-09-26 13:32:26 -070016464 "Get WDI_LPHB_IND bssIdx %d",
Leo Chang9056f462013-08-01 19:21:11 -070016465 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
16466
Leo Changd9df8aa2013-09-26 13:32:26 -070016467 vosMsg.type = eWNI_SME_LPHB_IND;
16468 vosMsg.bodyptr = lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070016469 vosMsg.bodyval = 0;
16470 /* Send message to SME */
16471 if (VOS_STATUS_SUCCESS !=
16472 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16473 {
16474 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
16475 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
Leo Changd9df8aa2013-09-26 13:32:26 -070016476 vos_mem_free(lphbInd);
Leo Chang9056f462013-08-01 19:21:11 -070016477 }
16478 break;
16479 }
16480#endif /* FEATURE_WLAN_LPHB */
Yue Mab9c86f42013-08-14 15:59:08 -070016481 case WDI_PERIODIC_TX_PTRN_FW_IND:
16482 {
16483 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16484 "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, "
16485 "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__,
16486 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx,
16487 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx,
16488 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status,
16489 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap);
16490
16491 break;
16492 }
Leo Chang9056f462013-08-01 19:21:11 -070016493
Ravi Joshid2ca7c42013-07-23 08:37:49 -070016494 case WDI_IBSS_PEER_INACTIVITY_IND:
16495 {
16496 tSirIbssPeerInactivityInd *pIbssInd =
16497 (tSirIbssPeerInactivityInd *)
16498 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
16499
16500 if (NULL == pIbssInd)
16501 {
16502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16503 "Memory allocation failure, "
16504 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
16505 break;
16506 }
16507
16508 pIbssInd->bssIdx =
16509 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
16510 pIbssInd->staIdx =
16511 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
16512 vos_mem_copy(pIbssInd->peerAddr,
16513 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
16514 sizeof(tSirMacAddr));
16515 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
16516 break;
16517 }
16518
Abhishek Singh00b71972016-01-07 10:51:04 +053016519#ifdef WLAN_FEATURE_RMC
16520 case WDI_RMC_RULER_PICK_NEW :
16521 {
16522 tSirRmcUpdateInd *pRmcUpdateInd =
16523 (tSirRmcUpdateInd *)vos_mem_malloc(sizeof(tSirRmcUpdateInd));
16524
16525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16526 "Received WDI_RMC_UPDATE_IND from WDI");
16527 if (NULL == pRmcUpdateInd)
16528 {
16529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16530 "Memory allocation failure, "
16531 "WDI_RMC_UPDATE_IND not forwarded");
16532 break;
16533 }
16534
16535 pRmcUpdateInd->indication =
16536 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.indication;
16537 pRmcUpdateInd->role =
16538 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.role;
16539
16540 /* Copy the mcast transmitter which should be us */
16541 vos_mem_copy(pRmcUpdateInd->mcastTransmitter,
16542 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd. \
16543 mcastTransmitter,
16544 sizeof(tSirMacAddr));
16545 /* Copy the mcast group address */
16546 vos_mem_copy(pRmcUpdateInd->mcastGroup,
16547 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.mcastGroup,
16548 sizeof(tSirMacAddr));
16549 vos_mem_copy(pRmcUpdateInd->mcastRuler,
16550 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.mcastRuler,
16551 sizeof(tSirMacAddr));
16552 vos_mem_copy(pRmcUpdateInd->ruler,
16553 wdiLowLevelInd->wdiIndicationData.wdiRmcPickNewRulerInd.ruler,
16554 sizeof(pRmcUpdateInd->ruler));
16555
16556 WDA_SendMsg(pWDA, WDA_RMC_UPDATE_IND, (void *)pRmcUpdateInd, 0) ;
16557 break;
16558 }
16559#endif /* WLAN_FEATURE_RMC */
16560
Rajeev79dbe4c2013-10-05 11:03:42 +053016561#ifdef FEATURE_WLAN_BATCH_SCAN
16562 case WDI_BATCH_SCAN_RESULT_IND:
16563 {
16564 void *pBatchScanResult;
16565 void *pCallbackContext;
16566 tpAniSirGlobal pMac;
16567
16568 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
16569 "Received WDI_BATCHSCAN_RESULT_IND from FW");
16570
16571 /*sanity check*/
Sunil Duttbd736ed2014-05-26 21:19:41 +053016572 if (NULL == pWDA)
Rajeev79dbe4c2013-10-05 11:03:42 +053016573 {
16574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16575 "%s:pWDA is NULL", __func__);
16576 VOS_ASSERT(0);
16577 return;
16578 }
16579
16580 pBatchScanResult =
16581 (void *)wdiLowLevelInd->wdiIndicationData.pBatchScanResult;
16582 if (NULL == pBatchScanResult)
16583 {
16584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16585 "%s:Batch scan result from FW is null can't invoke HDD callback",
16586 __func__);
16587 VOS_ASSERT(0);
16588 return;
16589 }
16590
16591 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16592 if (NULL == pMac)
16593 {
16594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16595 "%s:pMac is NULL", __func__);
16596 VOS_ASSERT(0);
16597 return;
16598 }
16599
16600 pCallbackContext = pMac->pmc.batchScanResultCallbackContext;
16601 /*call hdd callback with set batch scan response data*/
16602 if(pMac->pmc.batchScanResultCallback)
16603 {
16604 pMac->pmc.batchScanResultCallback(pCallbackContext,
16605 pBatchScanResult);
16606 }
16607 else
16608 {
16609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16610 "%s:HDD callback is null", __func__);
16611 VOS_ASSERT(0);
16612 }
16613 break;
16614 }
16615#endif
16616
Leo Chang0b0e45a2013-12-15 15:18:55 -080016617#ifdef FEATURE_WLAN_CH_AVOID
16618 case WDI_CH_AVOID_IND:
16619 {
16620 vos_msg_t vosMsg;
16621 tSirChAvoidIndType *chAvoidInd;
16622
16623 chAvoidInd =
16624 (tSirChAvoidIndType *)vos_mem_malloc(sizeof(tSirChAvoidIndType));
16625 if (NULL == chAvoidInd)
16626 {
16627 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16628 "%s: CH_AVOID IND buffer alloc Fail", __func__);
16629 return ;
16630 }
16631
16632 chAvoidInd->avoidRangeCount =
16633 wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidRangeCount;
16634 wpalMemoryCopy((void *)chAvoidInd->avoidFreqRange,
16635 (void *)wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidFreqRange,
16636 chAvoidInd->avoidRangeCount * sizeof(tSirChAvoidFreqType));
16637
16638 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16639 "%s : WDA CH avoid notification", __func__);
16640
16641 vosMsg.type = eWNI_SME_CH_AVOID_IND;
16642 vosMsg.bodyptr = chAvoidInd;
16643 vosMsg.bodyval = 0;
16644 /* Send message to SME */
16645 if (VOS_STATUS_SUCCESS !=
16646 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16647 {
16648 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16649 "post eWNI_SME_CH_AVOID_IND to SME Failed");
16650 vos_mem_free(chAvoidInd);
16651 }
16652 break;
16653 }
16654#endif /* FEATURE_WLAN_CH_AVOID */
16655
Sunil Duttbd736ed2014-05-26 21:19:41 +053016656#ifdef WLAN_FEATURE_LINK_LAYER_STATS
16657 case WDI_LL_STATS_RESULTS_IND:
16658 {
16659 void *pLinkLayerStatsInd;
Sunil Duttbd736ed2014-05-26 21:19:41 +053016660 tpAniSirGlobal pMac;
16661
16662 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16663 "Received WDI_LL_STATS_RESULTS_IND from FW");
16664
16665 /*sanity check*/
16666 if (NULL == pWDA)
16667 {
16668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16669 "%s:pWDA is NULL", __func__);
16670 VOS_ASSERT(0);
16671 return;
16672 }
16673
16674 pLinkLayerStatsInd =
Dino Mycled3d50022014-07-07 12:58:25 +053016675 (void *)wdiLowLevelInd->
16676 wdiIndicationData.wdiLinkLayerStatsResults.pLinkLayerStatsResults;
Sunil Duttbd736ed2014-05-26 21:19:41 +053016677 if (NULL == pLinkLayerStatsInd)
16678 {
16679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16680 "%s:Link Layer Statistics from FW is null can't invoke HDD callback",
16681 __func__);
16682 VOS_ASSERT(0);
16683 return;
16684 }
16685
16686 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16687 if (NULL == pMac)
16688 {
16689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16690 "%s:pMac is NULL", __func__);
16691 VOS_ASSERT(0);
16692 return;
16693 }
16694
Dino Mycled3d50022014-07-07 12:58:25 +053016695 /* call hdd callback with Link Layer Statistics.
16696 * vdev_id/ifacId in link_stats_results will be
16697 * used to retrieve the correct HDD context
16698 */
Sunil Duttbd736ed2014-05-26 21:19:41 +053016699 if (pMac->sme.pLinkLayerStatsIndCallback)
16700 {
Dino Mycled3d50022014-07-07 12:58:25 +053016701 pMac->sme.pLinkLayerStatsIndCallback(pMac->pAdapter,
Sunil Duttbd736ed2014-05-26 21:19:41 +053016702 WDA_LINK_LAYER_STATS_RESULTS_RSP,
Dino Mycled3d50022014-07-07 12:58:25 +053016703 pLinkLayerStatsInd,
16704 wdiLowLevelInd->
16705 wdiIndicationData.wdiLinkLayerStatsResults.macAddr);
Sunil Duttbd736ed2014-05-26 21:19:41 +053016706 }
16707 else
16708 {
16709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16710 "%s:HDD callback is null", __func__);
16711 }
16712 break;
16713 }
16714#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
16715
Dino Mycle41bdc942014-06-10 11:30:24 +053016716#ifdef WLAN_FEATURE_EXTSCAN
16717 case WDI_EXTSCAN_PROGRESS_IND:
16718 case WDI_EXTSCAN_SCAN_AVAILABLE_IND:
16719 case WDI_EXTSCAN_SCAN_RESULT_IND:
16720 case WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND:
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053016721 case WDI_EXTSCAN_SSID_HOTLIST_RESULT_IND:
Dino Mycle41bdc942014-06-10 11:30:24 +053016722 {
16723 void *pEXTScanData;
16724 void *pCallbackContext;
16725 tpAniSirGlobal pMac;
16726 tANI_U16 indType;
16727
16728 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16729 "Received WDI_EXTSCAN Indications from FW");
16730 /*sanity check*/
16731 if (NULL == pWDA)
16732 {
16733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16734 "%s:pWDA is NULL", __func__);
16735 VOS_ASSERT(0);
16736 return;
16737 }
16738 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_PROGRESS_IND)
16739 {
16740 indType = WDA_EXTSCAN_PROGRESS_IND;
16741
16742 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16743 "WDI_EXTSCAN Indication is WDI_EXTSCAN_PROGRESS_IND");
16744 }
16745 if (wdiLowLevelInd->wdiIndicationType ==
16746 WDI_EXTSCAN_SCAN_AVAILABLE_IND)
16747 {
16748 indType = WDA_EXTSCAN_SCAN_AVAILABLE_IND;
16749
16750 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16751 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_AVAILABLE_IND");
16752 }
16753 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_SCAN_RESULT_IND)
16754 {
16755 indType = WDA_EXTSCAN_SCAN_RESULT_IND;
16756
16757 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16758 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_RESULT_IND");
16759 }
16760 if (wdiLowLevelInd->wdiIndicationType ==
16761 WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND)
16762 {
16763 indType = WDA_EXTSCAN_BSSID_HOTLIST_RESULT_IND;
16764
16765 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16766 "WDI_EXTSCAN Indication is WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND");
16767 }
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053016768 if (wdiLowLevelInd->wdiIndicationType ==
16769 WDI_EXTSCAN_SSID_HOTLIST_RESULT_IND)
16770 {
16771 indType = WDA_EXTSCAN_SSID_HOTLIST_RESULT_IND;
16772
16773 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16774 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SSID_HOTLIST_RESULT_IND");
16775 }
Dino Mycle41bdc942014-06-10 11:30:24 +053016776
16777 pEXTScanData =
16778 (void *)wdiLowLevelInd->wdiIndicationData.pEXTScanIndData;
16779 if (NULL == pEXTScanData)
16780 {
16781 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16782 "%s: EXTSCAN Indication Data is null, can't invoke HDD callback",
16783 __func__);
16784 VOS_ASSERT(0);
16785 return;
16786 }
16787
16788 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16789 if (NULL == pMac)
16790 {
16791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16792 "%s:pMac is NULL", __func__);
16793 VOS_ASSERT(0);
16794 return;
16795 }
16796
16797 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
16798
16799 if(pMac->sme.pEXTScanIndCb)
16800 {
16801 pMac->sme.pEXTScanIndCb(pCallbackContext,
16802 indType,
16803 pEXTScanData);
16804 }
16805 else
16806 {
16807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16808 "%s:HDD callback is null", __func__);
16809 }
16810 break;
16811 }
16812#endif /* WLAN_FEATURE_EXTSCAN */
Abhishek Singh66c16762014-08-14 19:13:19 +053016813 case WDI_DEL_BA_IND:
16814 {
16815 tpBADeleteParams pDelBAInd =
Sunkad, Anand Ningappa5c529e42016-02-05 15:32:22 +053016816 (tpBADeleteParams)vos_mem_malloc(sizeof(*pDelBAInd));
Abhishek Singh66c16762014-08-14 19:13:19 +053016817
16818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16819 "Received WDI_DEL_BA_IND from WDI ");
16820 if(NULL == pDelBAInd)
16821 {
16822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16823 "%s: VOS MEM Alloc Failure", __func__);
16824 break;
16825 }
16826 vos_mem_copy(pDelBAInd->peerMacAddr,
16827 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.peerMacAddr,
16828 sizeof(tSirMacAddr));
16829 vos_mem_copy(pDelBAInd->bssId,
16830 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.bssId,
16831 sizeof(tSirMacAddr));
16832 pDelBAInd->staIdx =
16833 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.staIdx;
16834 pDelBAInd->baTID =
16835 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baTID;
16836 pDelBAInd->baDirection =
16837 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baDirection;
16838 pDelBAInd->reasonCode =
16839 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.reasonCode;
16840
16841 WDA_SendMsg(pWDA, SIR_LIM_DEL_BA_IND,
16842 (void *)pDelBAInd , 0) ;
16843 break;
16844 }
Srinivas Dasari32a79262015-02-19 13:04:49 +053016845 case WDI_NAN_EVENT_IND:
16846 {
16847 vos_msg_t vosMsg;
16848 tpSirNanEvent pSirNanEvent = NULL;
16849
16850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16851 "Received WDI_NAN_EVENT");
16852
16853 pSirNanEvent = (tpSirNanEvent)vos_mem_malloc( sizeof( tSirNanEvent )
16854 - sizeof( pSirNanEvent->event_data)
16855 + wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len);
16856
16857 if (NULL == pSirNanEvent)
16858 {
16859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16860 "%s: VOS MEM Alloc Failure", __func__);
16861 VOS_ASSERT(0) ;
16862 break;
16863 }
16864
16865 pSirNanEvent->event_data_len =
16866 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len;
16867
16868 if (wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len)
16869 {
16870 vos_mem_copy( pSirNanEvent->event_data,
16871 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data,
16872 wdiLowLevelInd->wdiIndicationData.wdiNanEvent.event_data_len);
16873 }
16874
16875 /* VOS message wrapper */
16876 vosMsg.type = eWNI_SME_NAN_EVENT;
16877 vosMsg.bodyptr = pSirNanEvent;
16878 vosMsg.bodyval = 0;
16879
16880 /* Send message to SME */
16881 if (VOS_STATUS_SUCCESS
16882 != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16883 {
16884 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
16885 "post eWNI_SME_NAN_EVENT to SME Failed");
16886 vos_mem_free(pSirNanEvent);
16887 }
16888 break;
16889 }
Sachin Ahuja3d47fcd2015-08-28 16:02:06 +053016890 case WDI_LOST_LINK_PARAMS_IND:
16891 {
16892 tpSirSmeLostLinkParamsInd pLostLinkParamInd =
16893 (tpSirSmeLostLinkParamsInd)vos_mem_malloc(sizeof(tSirSmeLostLinkParamsInd));
Dino Mycle41bdc942014-06-10 11:30:24 +053016894
Sachin Ahuja3d47fcd2015-08-28 16:02:06 +053016895 if (NULL == pLostLinkParamInd)
16896 {
16897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16898 "%s: VOS MEM Alloc Failure", __func__);
16899 break;
16900 }
16901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16902 "Received WDI_LOST_LINK_PARAMS_IND from WDI ");
16903
16904 pLostLinkParamInd->messageType = eWNI_SME_LOST_LINK_PARAMS_IND;
16905 pLostLinkParamInd->length = sizeof(tSirSmeMicFailureInd);
16906 pLostLinkParamInd->info.bssIdx =
16907 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.bssIdx;
16908 pLostLinkParamInd->info.rssi =
16909 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.rssi;
16910 vos_mem_copy(pLostLinkParamInd->info.selfMacAddr,
16911 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.selfMacAddr,
16912 sizeof(tSirMacAddr));
16913 pLostLinkParamInd->info.linkFlCnt =
16914 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.linkFlCnt;
16915 pLostLinkParamInd->info.linkFlTx =
16916 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.linkFlTx;
16917 pLostLinkParamInd->info.lastDataRate =
16918 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.lastDataRate;
16919 pLostLinkParamInd->info.rsvd1 =
16920 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.rsvd1;
16921 pLostLinkParamInd->info.rsvd2 =
16922 wdiLowLevelInd->wdiIndicationData.wdiLostLinkParamsInd.rsvd2;
16923 WDA_SendMsg(pWDA, SIR_HAL_LOST_LINK_PARAMS_IND,
16924 (void *)pLostLinkParamInd , 0) ;
16925 break;
16926 }
Gupta, Kapil7c34b322015-09-30 13:12:35 +053016927 case WDI_RSSI_BREACHED_IND:
16928 {
16929 WDI_RssiBreachedIndType *pRssiBreachedInd;
16930 tpAniSirGlobal pMac;
16931
16932 pRssiBreachedInd =
16933 (WDI_RssiBreachedIndType *)vos_mem_malloc(sizeof(WDI_RssiBreachedIndType));
16934 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16935 "Received WDI_RSSI_BREACHED_IND from FW");
16936
16937 vos_mem_copy(pRssiBreachedInd,
16938 &wdiLowLevelInd->wdiIndicationData.wdiRssiBreachedInd,
16939 sizeof(WDI_RssiBreachedIndType));
16940
16941 /*sanity check*/
16942 if (NULL == pWDA)
16943 {
16944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16945 "%s:pWDA is NULL", __func__);
16946 vos_mem_free(pRssiBreachedInd);
16947 VOS_ASSERT(0);
16948 return;
16949 }
16950
16951 if (NULL == pRssiBreachedInd)
16952 {
16953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16954 "%s:Breach indication from FW is null can't invoke HDD callback",
16955 __func__);
16956 VOS_ASSERT(0);
16957 return;
16958 }
16959
16960 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16961 if (NULL == pMac)
16962 {
16963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16964 "%s:pMac is NULL", __func__);
16965 VOS_ASSERT(0);
16966 vos_mem_free(pRssiBreachedInd);
16967 return;
16968 }
16969
16970 if (pMac->sme.rssiThresholdBreachedCb)
16971 {
16972 pMac->sme.rssiThresholdBreachedCb(pMac->pAdapter, (void *)pRssiBreachedInd);
16973 }
16974 else
16975 {
16976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16977 "%s:HDD callback is null", __func__);
16978 }
16979 vos_mem_free(pRssiBreachedInd);
16980 break;
16981 }
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053016982#ifdef FEATURE_OEM_DATA_SUPPORT
16983 case WDI_START_OEM_DATA_RSP_IND_NEW:
16984 {
16985 void *pCallbackContext;
16986 tpAniSirGlobal pMac;
16987 tANI_U16 indType;
16988 void *pOemRspNewIndData;
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053016989 tANI_U32 OemRspNewLen;
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053016990
16991 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16992 "Received WDI_START_OEM_DATA_RSP_IND_NEW Indications from FW");
16993
16994 /*sanity check*/
16995 if (NULL == pWDA)
16996 {
16997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16998 "%s:pWDA is NULL", __func__);
16999 VOS_ASSERT(0);
17000 return;
17001 }
17002
17003 indType = WDA_START_OEM_DATA_RSP_IND_NEW;
17004 pOemRspNewIndData =
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053017005 (void *)wdiLowLevelInd->wdiIndicationData.wdiOemDataRspNew.
17006 pOemRspNewIndData;
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053017007 if (NULL == pOemRspNewIndData)
17008 {
17009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17010 "%s: OEM_DATA_RSP_IND_NEW Indication Data is null, can't invoke HDD callback",
17011 __func__);
17012 VOS_ASSERT(0);
17013 return;
17014 }
17015
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053017016 OemRspNewLen = wdiLowLevelInd->wdiIndicationData.wdiOemDataRspNew.
17017 OemRspNewLen;
17018
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053017019 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17020 if (NULL == pMac)
17021 {
17022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17023 "%s:pMac is NULL", __func__);
17024 VOS_ASSERT(0);
17025 return;
17026 }
17027
17028 pCallbackContext = pMac->sme.pOemDataCallbackContext;
17029
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053017030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17031 "%s: OemRspNewLen: %d", __func__, OemRspNewLen);
17032
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053017033 if(pMac->sme.pOemDataIndCb)
17034 {
17035 pMac->sme.pOemDataIndCb(pCallbackContext,
17036 indType,
Padma, Santhosh Kumaree7c3d22016-01-25 10:36:08 +053017037 pOemRspNewIndData,
17038 OemRspNewLen);
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053017039 }
17040 else
17041 {
17042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17043 "%s:HDD callback is null", __func__);
17044 }
17045 break;
17046 }
17047#endif /* FEATURE_OEM_DATA_SUPPORT */
17048
Jeff Johnson295189b2012-06-20 16:38:30 -070017049 default:
17050 {
17051 /* TODO error */
17052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17053 "Received UNKNOWN Indication from WDI ");
17054 }
17055 }
17056 return ;
17057}
17058
Jeff Johnson295189b2012-06-20 16:38:30 -070017059/*
17060 * BA related processing in WDA.
17061 */
Jeff Johnson295189b2012-06-20 16:38:30 -070017062void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
17063 void* pUserData)
17064{
17065 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17066 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070017067 if(NULL == pWdaParams)
17068 {
17069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017070 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017071 VOS_ASSERT(0) ;
17072 return ;
17073 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017074 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070017075 vos_mem_free(pWdaParams->wdaMsgParam) ;
17076 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17077 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017079 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017080 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
17081 {
17082 tANI_U8 i = 0 ;
17083 tBaActivityInd *baActivityInd = NULL ;
17084 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
17085 tANI_U8 allocSize = sizeof(tBaActivityInd)
17086 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
17087 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
17088 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017089 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017090 if(NULL == baActivityInd)
17091 {
17092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017093 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017094 VOS_ASSERT(0) ;
17095 return;
17096 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017097 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
17098 sizeof(tSirMacAddr)) ;
17099 baActivityInd->baCandidateCnt = baCandidateCount ;
17100
17101 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
17102 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
17103
17104 for(i = 0 ; i < baCandidateCount ; i++)
17105 {
17106 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017107 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
17108 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017109 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
17110 {
17111 baCandidate->baInfo[tid].fBaEnable =
17112 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
17113 baCandidate->baInfo[tid].startingSeqNum =
17114 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
17115 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070017116 wdiBaCandidate++ ;
17117 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017118 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017119 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
17120 }
17121 else
17122 {
17123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17124 "BA Trigger RSP with Failure received ");
17125 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017126 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017127}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080017128
17129
17130/*
17131 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
17132 * during MCC
17133 */
17134void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
17135{
17136 wpt_uint32 enabled;
17137 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
17138 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
17139 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
17140
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053017141 if (NULL == pMac )
17142 {
17143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17144 "%s: Invoked with invalid MAC context ", __func__ );
17145 VOS_ASSERT(0);
17146 return;
17147 }
17148
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080017149 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
17150 != eSIR_SUCCESS)
17151 {
17152 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17153 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
17154 return;
17155 }
17156
17157 if(!enabled)
17158 {
17159 return;
17160 }
17161
17162 if(NULL == pWDA)
17163 {
17164 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17165 "%s:WDA context is NULL", __func__);
17166 VOS_ASSERT(0);
17167 return;
17168 }
17169
17170 if(activate)
17171 {
17172 if( VOS_STATUS_SUCCESS !=
17173 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
17174 {
17175 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17176 "Traffic Stats Timer Start Failed ");
17177 return;
17178 }
17179 WDI_DS_ActivateTrafficStats();
17180 }
17181 else
17182 {
17183 WDI_DS_DeactivateTrafficStats();
17184 WDI_DS_ClearTrafficStats();
17185
17186 if( VOS_STATUS_SUCCESS !=
17187 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
17188 {
17189 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17190 "Traffic Stats Timer Stop Failed ");
17191 return;
17192 }
17193 }
17194}
17195
17196/*
17197 * Traffic Stats Timer handler
17198 */
17199void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
17200{
17201 WDI_Status wdiStatus;
17202 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
17203 WDI_TrafficStatsIndType trafficStatsIndParams;
17204 wpt_uint32 length, enabled;
17205 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17206
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053017207 if (NULL == pMac )
17208 {
17209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17210 "%s: Invoked with invalid MAC context ", __func__ );
17211 VOS_ASSERT(0);
17212 return;
17213 }
17214
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080017215 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
17216 != eSIR_SUCCESS)
17217 {
17218 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17219 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
17220 return;
17221 }
17222
17223 if(!enabled)
17224 {
17225 WDI_DS_DeactivateTrafficStats();
17226 return;
17227 }
17228
17229 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
17230
17231 if(pWdiTrafficStats != NULL)
17232 {
17233 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
17234 trafficStatsIndParams.length = length;
17235 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080017236 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080017237 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
17238 trafficStatsIndParams.pUserData = pWDA;
17239
17240 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
17241
17242 if(WDI_STATUS_PENDING == wdiStatus)
17243 {
17244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17245 "Pending received for %s:%d ",__func__,__LINE__ );
17246 }
17247 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
17248 {
17249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17250 "Failure in %s:%d ",__func__,__LINE__ );
17251 }
17252
17253 WDI_DS_ClearTrafficStats();
17254 }
17255 else
17256 {
17257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
17258 "pWdiTrafficStats is Null");
17259 }
17260
17261 if( VOS_STATUS_SUCCESS !=
17262 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
17263 {
17264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
17265 "Traffic Stats Timer Start Failed ");
17266 return;
17267 }
17268}
17269
Jeff Johnson295189b2012-06-20 16:38:30 -070017270/*
17271 * BA Activity check timer handler
17272 */
17273void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
17274{
17275 tANI_U8 curSta = 0 ;
17276 tANI_U8 tid = 0 ;
17277 tANI_U8 size = 0 ;
17278 tANI_U8 baCandidateCount = 0 ;
17279 tANI_U8 newBaCandidate = 0 ;
Abhishek Singh0644e482014-10-06 18:38:23 +053017280 tANI_U32 val;
Jeff Johnson295189b2012-06-20 16:38:30 -070017281 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
Abhishek Singh0644e482014-10-06 18:38:23 +053017282 tpAniSirGlobal pMac;
17283
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053017284 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070017285 {
17286 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053017287 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017288 VOS_ASSERT(0);
17289 return ;
17290 }
17291 if(WDA_MAX_STA < pWDA->wdaMaxSta)
17292 {
17293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17294 "Inconsistent STA entries in WDA");
17295 VOS_ASSERT(0) ;
Abhishek Singh0644e482014-10-06 18:38:23 +053017296 }
17297 if(NULL == pWDA->pVosContext)
17298 {
17299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17300 "%s: pVosContext is NULL",__func__);
17301 VOS_ASSERT(0);
17302 return ;
17303 }
17304 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Abhishek Singh68883952014-10-14 11:59:05 +053017305 if(NULL == pMac)
17306 {
17307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17308 "%s: pMac is NULL",__func__);
17309 VOS_ASSERT(0);
17310 return ;
17311 }
17312
Abhishek Singh0644e482014-10-06 18:38:23 +053017313 if (wlan_cfgGetInt(pMac,
17314 WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC, &val) !=
17315 eSIR_SUCCESS)
17316 {
17317 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17318 "Unable to get WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC");
17319 val = 0;
17320 }
17321
Jeff Johnson295189b2012-06-20 16:38:30 -070017322 /* walk through all STA entries and find out TX packet count */
17323 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
17324 {
Abhishek Singh0644e482014-10-06 18:38:23 +053017325 tANI_U32 currentOperChan = pWDA->wdaStaInfo[curSta].currentOperChan;
Gopichand Nakkala976e3252013-01-03 15:45:56 -080017326#ifdef WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053017327 // We can only do BA on "hard" STAs.
17328 if (!(IS_HWSTA_IDX(curSta)))
17329 {
17330 continue;
17331 }
Gopichand Nakkala976e3252013-01-03 15:45:56 -080017332#endif //WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053017333 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
17334 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070017335 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017336 tANI_U32 txPktCount = 0 ;
17337 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017338 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070017339 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
17340 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070017341 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
17342 curSta, tid, &txPktCount)))
17343 {
17344#if 0
17345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
17346 "************* %d:%d, %d ",curSta, txPktCount,
17347 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
17348#endif
Abhishek Singh0644e482014-10-06 18:38:23 +053017349 if(val && ( (currentOperChan >= SIR_11B_CHANNEL_BEGIN) &&
17350 (currentOperChan <= SIR_11B_CHANNEL_END)))
17351 {
17352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17353 "%s: BTC disabled aggregation - dont start "
17354 "TX ADDBA req",__func__);
17355 }
17356 else if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070017357 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Abhishek Singh424ae432014-12-05 11:54:54 +053017358 && (((eSYSTEM_STA_IN_IBSS_ROLE ==
17359 pWDA->wdaGlobalSystemRole) && txPktCount )
17360 || (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
17361 curSta, tid))))
Jeff Johnson295189b2012-06-20 16:38:30 -070017362 {
17363 /* get prepare for sending message to HAL */
17364 //baCandidate[baCandidateCount].staIdx = curSta ;
17365 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
17366 newBaCandidate = WDA_ENABLE_BA ;
17367 }
17368 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
17369 }
17370 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017371 /* fill the entry for all the sta with given TID's */
17372 if(WDA_ENABLE_BA == newBaCandidate)
17373 {
17374 /* move to next BA candidate */
17375 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
17376 size += sizeof(WDI_TriggerBAReqCandidateType) ;
17377 baCandidateCount++ ;
17378 newBaCandidate = WDA_DISABLE_BA ;
17379 }
17380 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017381 /* prepare and send message to hal */
17382 if( 0 < baCandidateCount)
17383 {
17384 WDI_Status status = WDI_STATUS_SUCCESS ;
17385 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
17386 tWDA_ReqParams *pWdaParams =
17387 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017388 if(NULL == pWdaParams)
17389 {
17390 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017391 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017392 VOS_ASSERT(0) ;
17393 return;
17394 }
17395 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
17396 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
17397 if(NULL == wdiTriggerBaReq)
17398 {
17399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017400 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017401 VOS_ASSERT(0) ;
17402 vos_mem_free(pWdaParams);
17403 return;
17404 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017405 do
17406 {
17407 WDI_TriggerBAReqinfoType *triggerBaInfo =
17408 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
17409 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
17410 /* TEMP_FIX: Need to see if WDI need check for assoc session for
17411 * for each request */
17412 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
17413 triggerBaInfo->ucBASessionID = 0;
17414 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
17415 } while(0) ;
17416 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
17417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017418 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017419 pWdaParams->pWdaContext = pWDA;
17420 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
17421 pWdaParams->wdaMsgParam = NULL;
Abhishek Singhac9abe62016-02-05 18:07:41 +053017422 status = WDI_TriggerBAReq(wdiTriggerBaReq, size,
Jeff Johnson295189b2012-06-20 16:38:30 -070017423 WDA_TriggerBaReqCallback, pWdaParams) ;
17424 if(IS_WDI_STATUS_FAILURE(status))
17425 {
17426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17427 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
17428 vos_mem_free(pWdaParams->wdaMsgParam) ;
17429 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17430 vos_mem_free(pWdaParams) ;
17431 }
17432 }
17433 else
17434 {
17435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
17436 "There is no TID for initiating BA");
17437 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017438 if( VOS_STATUS_SUCCESS !=
17439 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
17440 {
17441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17442 "BA Activity Timer Stop Failed ");
17443 return ;
17444 }
17445 if( VOS_STATUS_SUCCESS !=
17446 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
17447 {
17448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17449 "BA Activity Timer Start Failed ");
17450 return;
17451 }
17452 return ;
17453}
Jeff Johnson295189b2012-06-20 16:38:30 -070017454/*
17455 * WDA common routine to create timer used by WDA.
17456 */
17457static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
17458{
Jeff Johnson295189b2012-06-20 16:38:30 -070017459 VOS_STATUS status = VOS_STATUS_SUCCESS ;
17460 tANI_U32 val = 0 ;
17461 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17462
17463 if(NULL == pMac)
17464 {
17465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017466 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017467 VOS_ASSERT(0);
17468 return VOS_STATUS_E_FAILURE;
17469 }
17470 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
17471 != eSIR_SUCCESS)
17472 {
17473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17474 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
17475 return VOS_STATUS_E_FAILURE;
17476 }
17477 val = SYS_MS_TO_TICKS(val) ;
17478
17479 /* BA activity check timer */
17480 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
17481 "BA Activity Check timer", WDA_TimerHandler,
17482 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
17483 if(status != TX_SUCCESS)
17484 {
17485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17486 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080017487 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017488 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017489 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017490 /* Tx Complete Timeout timer */
17491 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
17492 "Tx Complete Check timer", WDA_TimerHandler,
17493 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017494 if(status != TX_SUCCESS)
17495 {
17496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17497 "Unable to create Tx Complete Timeout timer");
17498 /* Destroy timer of BA activity check timer */
17499 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
17500 if(status != TX_SUCCESS)
17501 {
17502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17503 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080017504 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017505 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080017506 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017507 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080017508
17509 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
17510
17511 /* Traffic Stats timer */
17512 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
17513 "Traffic Stats timer", WDA_TimerHandler,
17514 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
17515 if(status != TX_SUCCESS)
17516 {
17517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17518 "Unable to create traffic stats timer");
17519 /* Destroy timer of BA activity check timer */
17520 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
17521 if(status != TX_SUCCESS)
17522 {
17523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17524 "Unable to Destroy BA activity timer");
17525 }
17526 /* Destroy timer of tx complete timer */
17527 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
17528 if(status != TX_SUCCESS)
17529 {
17530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17531 "Unable to Tx complete timer");
17532 }
17533 return VOS_STATUS_E_FAILURE ;
17534 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080017535 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017536}
Jeff Johnson295189b2012-06-20 16:38:30 -070017537/*
17538 * WDA common routine to destroy timer used by WDA.
17539 */
17540static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
17541{
17542 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017543 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
17544 if(status != TX_SUCCESS)
17545 {
17546 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17547 "Unable to Destroy Tx Complete Timeout timer");
17548 return eSIR_FAILURE ;
17549 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017550 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
17551 if(status != TX_SUCCESS)
17552 {
17553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17554 "Unable to Destroy BA activity timer");
17555 return eSIR_FAILURE ;
17556 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080017557 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
17558 if(status != TX_SUCCESS)
17559 {
17560 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17561 "Unable to Destroy traffic stats timer");
17562 return eSIR_FAILURE ;
17563 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017564 return eSIR_SUCCESS ;
17565}
Jeff Johnson295189b2012-06-20 16:38:30 -070017566/*
17567 * WDA timer handler.
17568 */
17569void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
17570{
17571 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
17572 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017573 /*
17574 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
17575 */
17576 wdaMsg.type = timerInfo ;
17577 wdaMsg.bodyptr = NULL;
17578 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070017579 /* post the message.. */
17580 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
17581 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
17582 {
17583 vosStatus = VOS_STATUS_E_BADMSG;
17584 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017585}
Jeff Johnson295189b2012-06-20 16:38:30 -070017586/*
17587 * WDA Tx Complete timeout Indication.
17588 */
17589void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
17590{
17591 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053017592 tpSirTxBdStatus txBdStatus = {0};
17593
Jeff Johnson295189b2012-06-20 16:38:30 -070017594 if( pWDA->pAckTxCbFunc )
17595 {
17596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017597 "TxComplete timer expired");
Ganesh Kondabattini29d844f2015-06-15 17:17:16 +053017598 /*Indicate failure*/
17599 pWDA->pAckTxCbFunc( pMac, &txBdStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070017600 pWDA->pAckTxCbFunc = NULL;
17601 }
17602 else
17603 {
17604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017605 "There is no request pending for TxComplete and wait timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070017606 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017607}
Jeff Johnson295189b2012-06-20 16:38:30 -070017608/*
17609 * WDA Set REG Domain to VOS NV
17610 */
Abhishek Singha306a442013-11-07 18:39:01 +053017611eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId,
17612 tAniBool sendRegHint)
Jeff Johnson295189b2012-06-20 16:38:30 -070017613{
Abhishek Singha306a442013-11-07 18:39:01 +053017614 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId, sendRegHint))
Jeff Johnson295189b2012-06-20 16:38:30 -070017615 {
17616 return eHAL_STATUS_INVALID_PARAMETER;
17617 }
17618 return eHAL_STATUS_SUCCESS;
17619}
Jeff Johnson295189b2012-06-20 16:38:30 -070017620
Jeff Johnson295189b2012-06-20 16:38:30 -070017621#ifdef FEATURE_WLAN_SCAN_PNO
17622/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017623 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070017624 *
17625 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070017626void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070017627{
17628 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053017629 tSirPNOScanReq *pPNOScanReqParams;
17630
Jeff Johnson295189b2012-06-20 16:38:30 -070017631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053017632 "<------ %s, wdiStatus: %d",__func__, status);
Yue Ma7f44bbe2013-04-12 11:47:39 -070017633 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070017634 {
17635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017636 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017637 VOS_ASSERT(0) ;
17638 return ;
17639 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017640
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053017641 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
17642 if(pPNOScanReqParams->statusCallback)
17643 {
17644 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
17645 (status == WDI_STATUS_SUCCESS) ?
17646 VOS_STATUS_SUCCESS : VOS_STATUS_E_FAILURE);
17647 }
17648
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053017649 if (pPNOScanReqParams->enable == 1)
17650 {
17651 if (pPNOScanReqParams->aNetworks)
17652 vos_mem_free(pPNOScanReqParams->aNetworks);
17653 if (pPNOScanReqParams->p24GProbeTemplate)
17654 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
17655 if (pPNOScanReqParams->p5GProbeTemplate)
17656 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
17657 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070017658 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17659 vos_mem_free(pWdaParams->wdaMsgParam);
17660 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070017661
17662 return ;
17663}
Jeff Johnson295189b2012-06-20 16:38:30 -070017664/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017665 * FUNCTION: WDA_PNOScanReqCallback
17666 * Free memory.
17667 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
17668 */
17669void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070017670{
Yue Ma7f44bbe2013-04-12 11:47:39 -070017671 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053017672 tSirPNOScanReq *pPNOScanReqParams;
Yue Ma7f44bbe2013-04-12 11:47:39 -070017673
17674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17675 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
17676
17677 if(NULL == pWdaParams)
17678 {
17679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17680 "%s: pWdaParams received NULL", __func__);
17681 VOS_ASSERT(0);
17682 return;
17683 }
17684
17685 if(IS_WDI_STATUS_FAILURE(wdiStatus))
17686 {
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053017687 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
17688 if(pPNOScanReqParams->statusCallback)
17689 {
17690 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
17691 VOS_STATUS_E_FAILURE);
17692 }
17693
Hanumantha Reddy Pothula06e87b22015-03-02 18:02:23 +053017694 if (pPNOScanReqParams->enable == 1)
17695 {
17696 if (pPNOScanReqParams->aNetworks)
17697 vos_mem_free(pPNOScanReqParams->aNetworks);
17698 if (pPNOScanReqParams->p24GProbeTemplate)
17699 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
17700 if (pPNOScanReqParams->p5GProbeTemplate)
17701 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
17702 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070017703 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17704 vos_mem_free(pWdaParams->wdaMsgParam);
17705 vos_mem_free(pWdaParams);
17706 }
17707
17708 return;
17709}
17710/*
17711 * FUNCTION: WDA_UpdateScanParamsRespCallback
17712 *
17713 */
17714void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
17715{
17716 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070017717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017718 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070017719 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070017720 {
17721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017722 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017723 VOS_ASSERT(0) ;
17724 return ;
17725 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070017726
17727 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17728 vos_mem_free(pWdaParams->wdaMsgParam);
17729 vos_mem_free(pWdaParams);
17730
Jeff Johnson295189b2012-06-20 16:38:30 -070017731 return ;
17732}
Jeff Johnson295189b2012-06-20 16:38:30 -070017733/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070017734 * FUNCTION: WDA_UpdateScanParamsReqCallback
17735 * Free memory.
17736 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
17737 */
17738void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
17739{
17740 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17741
17742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17743 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
17744
17745 if(NULL == pWdaParams)
17746 {
17747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17748 "%s: pWdaParams received NULL", __func__);
17749 VOS_ASSERT(0);
17750 return;
17751 }
17752
17753 if(IS_WDI_STATUS_FAILURE(wdiStatus))
17754 {
17755 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17756 vos_mem_free(pWdaParams->wdaMsgParam);
17757 vos_mem_free(pWdaParams);
17758 }
17759
17760 return;
17761}
17762/*
Jeff Johnson295189b2012-06-20 16:38:30 -070017763 * FUNCTION: WDA_ProcessSetPreferredNetworkList
17764 * Request to WDI to set Preferred Network List.Offload
17765 */
17766VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
17767 tSirPNOScanReq *pPNOScanReqParams)
17768{
Jeff Johnson43971f52012-07-17 12:26:56 -070017769 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070017770 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
17771 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
17772 tWDA_ReqParams *pWdaParams ;
17773 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070017774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017775 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017776 if(NULL == pwdiPNOScanReqInfo)
17777 {
17778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017779 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017780 VOS_ASSERT(0);
17781 return VOS_STATUS_E_NOMEM;
17782 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017783 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17784 if(NULL == pWdaParams)
17785 {
17786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017787 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070017788 VOS_ASSERT(0);
17789 vos_mem_free(pwdiPNOScanReqInfo);
17790 return VOS_STATUS_E_NOMEM;
17791 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017792 //
17793 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
17794 //
17795 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
17796 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070017797 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
17798 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
17799 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070017800 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
17801 {
17802 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
17803 &pPNOScanReqParams->aNetworks[i],
17804 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
17805 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017806 /*Scan timer intervals*/
17807 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
17808 &pPNOScanReqParams->scanTimers,
17809 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070017810 /*Probe template for 2.4GHz band*/
17811 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
17812 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
17813 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070017814 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
17815 pPNOScanReqParams->p24GProbeTemplate,
17816 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070017817 /*Probe template for 5GHz band*/
17818 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
17819 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
17820 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070017821 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
17822 pPNOScanReqParams->p5GProbeTemplate,
17823 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070017824 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
17825 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070017826
Jeff Johnson295189b2012-06-20 16:38:30 -070017827 /* Store Params pass it to WDI */
17828 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
17829 pWdaParams->pWdaContext = pWDA;
17830 /* Store param pointer as passed in by caller */
17831 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070017832 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070017833 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070017834 if(IS_WDI_STATUS_FAILURE(status))
17835 {
17836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17837 "Failure in Set PNO REQ WDI API, free all the memory " );
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053017838 if(pPNOScanReqParams->statusCallback)
17839 {
17840 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
17841 VOS_STATUS_E_FAILURE);
17842 }
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053017843 if (pPNOScanReqParams->enable == 1)
17844 {
17845 if (pPNOScanReqParams->aNetworks)
17846 vos_mem_free(pPNOScanReqParams->aNetworks);
17847 if (pPNOScanReqParams->p24GProbeTemplate)
17848 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
17849 if (pPNOScanReqParams->p5GProbeTemplate)
17850 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
17851 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017852 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
17853 vos_mem_free(pWdaParams->wdaMsgParam);
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053017854
Jeff Johnson295189b2012-06-20 16:38:30 -070017855 pWdaParams->wdaWdiApiMsgParam = NULL;
17856 pWdaParams->wdaMsgParam = NULL;
17857 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017858 return CONVERT_WDI2VOS_STATUS(status) ;
17859}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017860
17861#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
17862
17863void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
17864{
17865 /*Convert the CSR Auth types to WDI Auth types */
17866 switch (csrAuthType)
17867 {
17868 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
17869 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
17870 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080017871#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017872 case eCSR_AUTH_TYPE_CCKM_WPA:
17873 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
17874 break;
17875#endif
17876 case eCSR_AUTH_TYPE_WPA:
17877 *AuthType = eWDA_AUTH_TYPE_WPA;
17878 break;
17879 case eCSR_AUTH_TYPE_WPA_PSK:
17880 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
17881 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080017882#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017883 case eCSR_AUTH_TYPE_CCKM_RSN:
17884 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
17885 break;
17886#endif
17887 case eCSR_AUTH_TYPE_RSN:
17888 *AuthType = eWDA_AUTH_TYPE_RSN;
17889 break;
17890 case eCSR_AUTH_TYPE_RSN_PSK:
17891 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
17892 break;
17893#if defined WLAN_FEATURE_VOWIFI_11R
17894 case eCSR_AUTH_TYPE_FT_RSN:
17895 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
17896 break;
17897 case eCSR_AUTH_TYPE_FT_RSN_PSK:
17898 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
17899 break;
17900#endif
17901#ifdef FEATURE_WLAN_WAPI
17902 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
17903 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
17904 break;
17905 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
17906 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
17907 break;
17908#endif /* FEATURE_WLAN_WAPI */
17909 case eCSR_AUTH_TYPE_SHARED_KEY:
17910 case eCSR_AUTH_TYPE_AUTOSWITCH:
17911 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
17912 break;
Kanchanapally, Vidyullatha3355dd32015-06-09 14:56:56 +053017913#ifdef WLAN_FEATURE_11W
17914 case eCSR_AUTH_TYPE_RSN_PSK_SHA256:
17915 *AuthType = eWDA_AUTH_TYPE_RSN_PSK_SHA256;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017916 break;
Kanchanapally, Vidyullatha3355dd32015-06-09 14:56:56 +053017917 case eCSR_AUTH_TYPE_RSN_8021X_SHA256:
17918 *AuthType = eWDA_AUTH_TYPE_RSN_8021X_SHA256;
17919 break;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017920#endif
17921 default:
Deepthi Gowribfd17132014-11-14 17:59:04 +053017922 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017923 "%s: Unknown Auth Type", __func__);
17924 break;
17925 }
17926}
17927void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
17928{
17929 switch (csrEncrType)
17930 {
17931 case eCSR_ENCRYPT_TYPE_NONE:
17932 *EncrType = WDI_ED_NONE;
17933 break;
17934 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
17935 case eCSR_ENCRYPT_TYPE_WEP40:
17936 *EncrType = WDI_ED_WEP40;
17937 break;
17938 case eCSR_ENCRYPT_TYPE_WEP104:
17939 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
17940 *EncrType = WDI_ED_WEP104;
17941 break;
17942 case eCSR_ENCRYPT_TYPE_TKIP:
17943 *EncrType = WDI_ED_TKIP;
17944 break;
17945 case eCSR_ENCRYPT_TYPE_AES:
17946 *EncrType = WDI_ED_CCMP;
17947 break;
17948#ifdef WLAN_FEATURE_11W
17949 case eCSR_ENCRYPT_TYPE_AES_CMAC:
17950 *EncrType = WDI_ED_AES_128_CMAC;
17951 break;
17952#endif
17953#ifdef FEATURE_WLAN_WAPI
17954 case eCSR_ENCRYPT_TYPE_WPI:
17955 *EncrType = WDI_ED_WPI;
17956 break;
17957#endif
17958 case eCSR_ENCRYPT_TYPE_ANY:
17959 *EncrType = WDI_ED_ANY;
17960 break;
17961
17962 default:
17963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17964 "%s: Unknown Encryption Type", __func__);
17965 break;
17966 }
17967}
17968
17969/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017970 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017971 * Request to WDI to set Roam Offload Scan
17972 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017973VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017974 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
17975{
17976 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017977 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
17978 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017979 tWDA_ReqParams *pWdaParams ;
17980 v_U8_t csrAuthType;
17981 WDI_RoamNetworkType *pwdiRoamNetworkType;
17982 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
17983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17984 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017985 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017986 {
17987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17988 "%s: VOS MEM Alloc Failure", __func__);
17989 VOS_ASSERT(0);
17990 return VOS_STATUS_E_NOMEM;
17991 }
17992 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17993 if (NULL == pWdaParams)
17994 {
17995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17996 "%s: VOS MEM Alloc Failure", __func__);
17997 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070017998 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070017999 return VOS_STATUS_E_NOMEM;
18000 }
18001
18002 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018003 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018004 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018005 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
18006 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018007 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
18008 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
18009 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
18010 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
18011 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
18012 sizeof(pwdiRoamNetworkType->currAPbssid));
18013 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
18014 csrAuthType);
18015 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
18016 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
18017 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
18018 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
18019 pwdiRoamOffloadScanInfo->LookupThreshold =
18020 pRoamOffloadScanReqParams->LookupThreshold ;
Varun Reddy Yeturu6c5e25c2014-01-09 21:55:37 -080018021 pwdiRoamOffloadScanInfo->RxSensitivityThreshold =
18022 pRoamOffloadScanReqParams->RxSensitivityThreshold;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018023 pwdiRoamOffloadScanInfo->RoamRssiDiff =
18024 pRoamOffloadScanReqParams->RoamRssiDiff ;
Sameer Thalappil4ae66ec2013-11-05 14:17:35 -080018025 pwdiRoamOffloadScanInfo->MAWCEnabled =
18026 pRoamOffloadScanReqParams->MAWCEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018027 pwdiRoamOffloadScanInfo->Command =
18028 pRoamOffloadScanReqParams->Command ;
18029 pwdiRoamOffloadScanInfo->StartScanReason =
18030 pRoamOffloadScanReqParams->StartScanReason ;
18031 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
18032 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
18033 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
18034 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
18035 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
18036 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
18037 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
18038 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
18039 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
18040 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080018041 pwdiRoamOffloadScanInfo->IsESEEnabled =
18042 pRoamOffloadScanReqParams->IsESEEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018043 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
18044 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
18045 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
18046 pwdiRoamNetworkType->ssId.ucLength =
18047 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
18048 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
18049 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
18050 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
18051 pwdiRoamNetworkType->ChannelCount =
18052 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
18053 pwdiRoamOffloadScanInfo->ChannelCacheType =
18054 pRoamOffloadScanReqParams->ChannelCacheType;
18055 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
18056 pRoamOffloadScanReqParams->ValidChannelList,
18057 pRoamOffloadScanReqParams->ValidChannelCount);
18058 pwdiRoamOffloadScanInfo->ValidChannelCount =
18059 pRoamOffloadScanReqParams->ValidChannelCount;
18060 pwdiRoamOffloadScanInfo->us24GProbeSize =
18061 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
18062 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
18063 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
18064 pRoamOffloadScanReqParams->p24GProbeTemplate,
18065 pwdiRoamOffloadScanInfo->us24GProbeSize);
18066 pwdiRoamOffloadScanInfo->us5GProbeSize =
18067 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
18068 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
18069 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
18070 pRoamOffloadScanReqParams->p5GProbeTemplate,
18071 pwdiRoamOffloadScanInfo->us5GProbeSize);
18072 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
18073 pRoamOffloadScanReqParams->MDID.mdiePresent;
18074 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
18075 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018076 pwdiRoamOffloadScanInfo->nProbes =
18077 pRoamOffloadScanReqParams->nProbes;
18078 pwdiRoamOffloadScanInfo->HomeAwayTime =
18079 pRoamOffloadScanReqParams->HomeAwayTime;
18080 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018081 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018082 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018083 pWdaParams->pWdaContext = pWDA;
18084 /* Store param pointer as passed in by caller */
18085 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070018086 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018087 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
18088 if(IS_WDI_STATUS_FAILURE(status))
18089 {
18090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18091 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
18092 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
18093 vos_mem_free(pWdaParams->wdaMsgParam);
18094 pWdaParams->wdaWdiApiMsgParam = NULL;
18095 pWdaParams->wdaMsgParam = NULL;
18096 }
18097 return CONVERT_WDI2VOS_STATUS(status) ;
18098}
18099#endif
18100
Jeff Johnson295189b2012-06-20 16:38:30 -070018101/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018102 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070018103 *
18104 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070018105void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070018106{
18107 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18108
18109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018110 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018111
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053018112 if(NULL == pWdaParams)
18113 {
18114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070018115 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053018116 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070018117 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053018118 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070018119
Jeff Johnson295189b2012-06-20 16:38:30 -070018120 vos_mem_free(pWdaParams->wdaMsgParam) ;
18121 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18122 vos_mem_free(pWdaParams) ;
18123
18124 return ;
18125}
18126/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018127 * FUNCTION: WDA_RssiFilterReqCallback
18128 * Free memory.
18129 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
18130 */
18131void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
18132{
18133 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18134
18135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18136 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
18137
18138 if(NULL == pWdaParams)
18139 {
18140 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18141 "%s: pWdaParams received NULL", __func__);
18142 VOS_ASSERT(0);
18143 return;
18144 }
18145
18146 if(IS_WDI_STATUS_FAILURE(wdiStatus))
18147 {
18148 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18149 vos_mem_free(pWdaParams->wdaMsgParam);
18150 vos_mem_free(pWdaParams);
18151 }
18152
18153 return;
18154}
18155/*
Hanumantha Reddy Pothula1e687da2015-03-31 13:44:31 +053018156 * FUNCTION: WDA_ProcessSetRssiFilterReq
Jeff Johnson295189b2012-06-20 16:38:30 -070018157 * Request to WDI to set Preferred Network List.Offload
18158 */
18159VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
18160 tSirSetRSSIFilterReq* pRssiFilterParams)
18161{
Jeff Johnson43971f52012-07-17 12:26:56 -070018162 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070018163 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
18164 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
18165 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018167 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018168 if(NULL == pwdiSetRssiFilterReqInfo)
18169 {
18170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018171 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018172 VOS_ASSERT(0);
18173 return VOS_STATUS_E_NOMEM;
18174 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018175 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18176 if(NULL == pWdaParams)
18177 {
18178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018179 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018180 VOS_ASSERT(0);
18181 vos_mem_free(pwdiSetRssiFilterReqInfo);
18182 return VOS_STATUS_E_NOMEM;
18183 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018184 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070018185 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
18186 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070018187
Jeff Johnson295189b2012-06-20 16:38:30 -070018188 /* Store Params pass it to WDI */
18189 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
18190 pWdaParams->pWdaContext = pWDA;
18191 /* Store param pointer as passed in by caller */
18192 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070018193 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070018194 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070018195 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070018196 if(IS_WDI_STATUS_FAILURE(status))
18197 {
18198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18199 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
18200 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
18201 vos_mem_free(pWdaParams->wdaMsgParam);
18202 pWdaParams->wdaWdiApiMsgParam = NULL;
18203 pWdaParams->wdaMsgParam = NULL;
18204 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018205 return CONVERT_WDI2VOS_STATUS(status) ;
18206}
18207
Jeff Johnson295189b2012-06-20 16:38:30 -070018208/*
18209 * FUNCTION: WDA_ProcessUpdateScanParams
18210 * Request to WDI to update Scan Parameters
18211 */
18212VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
18213 tSirUpdateScanParams *pUpdateScanParams)
18214{
Jeff Johnson43971f52012-07-17 12:26:56 -070018215 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070018216 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
18217 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
18218 sizeof(WDI_UpdateScanParamsInfoType)) ;
18219 tWDA_ReqParams *pWdaParams ;
18220 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070018221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018222 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018223 if(NULL == wdiUpdateScanParamsInfoType)
18224 {
18225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018226 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018227 VOS_ASSERT(0);
18228 return VOS_STATUS_E_NOMEM;
18229 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018230 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18231 if ( NULL == pWdaParams )
18232 {
18233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018234 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018235 VOS_ASSERT(0);
18236 vos_mem_free(wdiUpdateScanParamsInfoType);
18237 return VOS_STATUS_E_NOMEM;
18238 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018239 //
18240 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
18241 //
Jeff Johnson295189b2012-06-20 16:38:30 -070018242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18243 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
18244 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
18245 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
Jeff Johnson9a9ed0d2013-11-26 13:36:52 -080018246 "sir struct %zu wdi struct %zu",
Jeff Johnson295189b2012-06-20 16:38:30 -070018247 pUpdateScanParams->b11dEnabled,
18248 pUpdateScanParams->b11dResolved,
18249 pUpdateScanParams->ucChannelCount,
18250 pUpdateScanParams->usPassiveMinChTime,
18251 pUpdateScanParams->usPassiveMaxChTime,
18252 pUpdateScanParams->usActiveMinChTime,
18253 pUpdateScanParams->usActiveMaxChTime,
18254 sizeof(tSirUpdateScanParams),
18255 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
18256
Jeff Johnson295189b2012-06-20 16:38:30 -070018257 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
18258 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070018259 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
18260 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070018261 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
18262 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070018263 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
18264 pUpdateScanParams->usActiveMaxChTime;
18265 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
18266 pUpdateScanParams->usActiveMinChTime;
18267 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
18268 pUpdateScanParams->usPassiveMaxChTime;
18269 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
18270 pUpdateScanParams->usPassiveMinChTime;
18271
Jeff Johnson295189b2012-06-20 16:38:30 -070018272 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053018273 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
18274 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070018275
Jeff Johnson295189b2012-06-20 16:38:30 -070018276 for ( i = 0; i <
18277 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
18278 i++)
18279 {
18280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18281 "Update Scan Parameters channel: %d",
18282 pUpdateScanParams->aChannels[i]);
18283
18284 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
18285 pUpdateScanParams->aChannels[i];
18286 }
18287
Yue Ma7f44bbe2013-04-12 11:47:39 -070018288 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
18289 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070018290
Jeff Johnson295189b2012-06-20 16:38:30 -070018291 /* Store Params pass it to WDI */
18292 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
18293 pWdaParams->pWdaContext = pWDA;
18294 /* Store param pointer as passed in by caller */
18295 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070018296
Jeff Johnson295189b2012-06-20 16:38:30 -070018297
18298
18299 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070018300 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070018301 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070018302 if(IS_WDI_STATUS_FAILURE(status))
18303 {
18304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18305 "Failure in Update Scan Params EQ WDI API, free all the memory " );
18306 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
18307 vos_mem_free(pWdaParams->wdaMsgParam);
18308 vos_mem_free(pWdaParams);
18309 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018310 return CONVERT_WDI2VOS_STATUS(status) ;
18311}
18312#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018313
18314#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
18315/*
18316 * FUNCTION: WDA_RoamOffloadScanReqCallback
18317 *
18318 */
18319void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
18320{
18321 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070018322 vos_msg_t vosMsg;
18323 wpt_uint8 reason = 0;
18324
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070018325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018326 "<------ %s " ,__func__);
18327 if (NULL == pWdaParams)
18328 {
18329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18330 "%s: pWdaParams received NULL", __func__);
18331 VOS_ASSERT(0) ;
18332 return ;
18333 }
18334 if ( pWdaParams != NULL )
18335 {
18336 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
18337 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070018338 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018339 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18340 }
18341 if ( pWdaParams->wdaMsgParam != NULL)
18342 {
18343 vos_mem_free(pWdaParams->wdaMsgParam);
18344 }
18345
18346 vos_mem_free(pWdaParams) ;
18347 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070018348 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
18349 vosMsg.bodyptr = NULL;
18350 if (WDI_STATUS_SUCCESS != status)
18351 {
18352 reason = 0;
18353 }
18354 vosMsg.bodyval = reason;
18355 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
18356 {
18357 /* free the mem and return */
18358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsone384c822013-10-30 12:21:17 -070018359 "%s: Failed to post the rsp to UMAC", __func__);
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070018360 }
18361
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070018362 return ;
18363}
18364#endif
18365
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080018366/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018367 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080018368 *
18369 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070018370void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080018371{
18372 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18373
18374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18375 "<------ %s " ,__func__);
18376
18377 if(NULL == pWdaParams)
18378 {
18379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18380 "%s: pWdaParams received NULL", __func__);
18381 VOS_ASSERT(0);
18382 return;
18383 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070018384
18385 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18386 vos_mem_free(pWdaParams->wdaMsgParam);
18387 vos_mem_free(pWdaParams);
18388
18389 return;
18390}
18391/*
18392 * FUNCTION: WDA_SetPowerParamsReqCallback
18393 * Free memory.
18394 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
18395 */
18396void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
18397{
18398 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18399
18400 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18401 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
18402
18403 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080018404 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070018405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18406 "%s: pWdaParams received NULL", __func__);
18407 VOS_ASSERT(0);
18408 return;
18409 }
18410
18411 if(IS_WDI_STATUS_FAILURE(wdiStatus))
18412 {
18413 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18414 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080018415 vos_mem_free(pWdaParams);
18416 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070018417
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080018418 return;
18419}
18420
Jeff Johnson295189b2012-06-20 16:38:30 -070018421#ifdef WLAN_FEATURE_PACKET_FILTERING
18422/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018423 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070018424 *
18425 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070018426void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070018427 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
18428 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070018429{
18430 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070018431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018432 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018433 if(NULL == pWdaParams)
18434 {
18435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018436 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018437 VOS_ASSERT(0) ;
18438 return ;
18439 }
18440
18441 vos_mem_free(pWdaParams->wdaMsgParam) ;
18442 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18443 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018444 //print a msg, nothing else to do
18445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070018446 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070018447 return ;
18448}
Jeff Johnson295189b2012-06-20 16:38:30 -070018449/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018450 * FUNCTION: WDA_8023MulticastListReqCallback
18451 * Free memory.
18452 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
18453 */
18454void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
18455{
18456 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18457
18458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18459 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
18460
18461 if(NULL == pWdaParams)
18462 {
18463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18464 "%s: pWdaParams received NULL", __func__);
18465 VOS_ASSERT(0);
18466 return;
18467 }
18468
18469 if(IS_WDI_STATUS_FAILURE(wdiStatus))
18470 {
18471 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18472 vos_mem_free(pWdaParams->wdaMsgParam);
18473 vos_mem_free(pWdaParams);
18474 }
18475
18476 return;
18477}
18478/*
Jeff Johnson295189b2012-06-20 16:38:30 -070018479 * FUNCTION: WDA_Process8023MulticastListReq
18480 * Request to WDI to add 8023 Multicast List
18481 */
18482VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
18483 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
18484{
Jeff Johnson43971f52012-07-17 12:26:56 -070018485 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070018486 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
18487 tWDA_ReqParams *pWdaParams ;
18488 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070018489 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018490 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018491 pwdiFltPktSetMcListReqParamsType =
18492 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
18493 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
18494 ) ;
18495 if(NULL == pwdiFltPktSetMcListReqParamsType)
18496 {
18497 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018498 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018499 return VOS_STATUS_E_NOMEM;
18500 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018501 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18502 if(NULL == pWdaParams)
18503 {
18504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018505 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018506 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
18507 return VOS_STATUS_E_NOMEM;
18508 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070018509
Jeff Johnson295189b2012-06-20 16:38:30 -070018510 //
18511 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
18512 //
18513 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070018514 pRcvFltMcAddrList->ulMulticastAddrCnt;
18515
18516 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
18517 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
18518 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
18519 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
18520
Jeff Johnson295189b2012-06-20 16:38:30 -070018521 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
18522 {
18523 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
18524 &(pRcvFltMcAddrList->multicastAddr[i]),
18525 sizeof(tSirMacAddr));
18526 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070018527 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
18528 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070018529
Jeff Johnson295189b2012-06-20 16:38:30 -070018530 /* Store Params pass it to WDI */
18531 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
18532 pWdaParams->pWdaContext = pWDA;
18533 /* Store param pointer as passed in by caller */
18534 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070018535 status = WDI_8023MulticastListReq(
18536 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070018537 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070018538 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070018539 if(IS_WDI_STATUS_FAILURE(status))
18540 {
18541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18542 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
18543 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
18544 vos_mem_free(pWdaParams->wdaMsgParam);
18545 vos_mem_free(pWdaParams);
18546 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018547 return CONVERT_WDI2VOS_STATUS(status) ;
18548}
Jeff Johnson295189b2012-06-20 16:38:30 -070018549/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018550 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070018551 *
18552 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018553void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070018554 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
18555 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070018556{
18557 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070018558 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018559 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018560 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070018561 if(NULL == pWdaParams)
18562 {
18563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018564 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018565 VOS_ASSERT(0) ;
18566 return ;
18567 }
18568
18569 vos_mem_free(pWdaParams->wdaMsgParam) ;
18570 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18571 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018572 //print a msg, nothing else to do
18573 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018574 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070018575 return ;
18576}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018577
18578/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018579 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
18580 * Free memory.
18581 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018582 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070018583void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018584 void* pUserData)
18585{
18586 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18587
18588 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18589 "<------ %s, wdiStatus: %d",
18590 __func__, wdiStatus);
18591
18592 if (NULL == pWdaParams)
18593 {
18594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18595 "%s: Invalid pWdaParams pointer", __func__);
18596 VOS_ASSERT(0);
18597 return;
18598 }
18599
18600 if (IS_WDI_STATUS_FAILURE(wdiStatus))
18601 {
18602 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18603 vos_mem_free(pWdaParams->wdaMsgParam);
18604 vos_mem_free(pWdaParams);
18605 }
18606
18607 return;
18608}
18609
Jeff Johnson295189b2012-06-20 16:38:30 -070018610/*
18611 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
18612 * Request to WDI to set Receive Filters
18613 */
18614VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
18615 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
18616{
Jeff Johnson43971f52012-07-17 12:26:56 -070018617 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070018618 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
18619 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
18620 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
18621 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
18622 tWDA_ReqParams *pWdaParams ;
18623 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070018624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018625 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018626 if(NULL == pwdiSetRcvPktFilterReqParamsType)
18627 {
18628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018629 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018630 VOS_ASSERT(0);
18631 return VOS_STATUS_E_NOMEM;
18632 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018633 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18634 if(NULL == pWdaParams)
18635 {
18636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018637 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018638 VOS_ASSERT(0);
18639 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
18640 return VOS_STATUS_E_NOMEM;
18641 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018642 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
18643 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
18644 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
18645 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070018646 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
18647 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
18648
18649 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
18650 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070018651
18652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18653 "FID %d FT %d NParams %d CT %d",
18654 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
18655 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
18656 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
18657 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070018658 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
18659 {
18660 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
18661 &pRcvPktFilterCfg->paramsData[i],
18662 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070018663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080018664 "Proto %d Comp Flag %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070018665 pwdiSetRcvPktFilterReqParamsType->
18666 wdiPktFilterCfg.paramsData[i].protocolLayer,
18667 pwdiSetRcvPktFilterReqParamsType->
18668 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070018669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080018670 "Data Offset %d Data Len %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070018671 pwdiSetRcvPktFilterReqParamsType->
18672 wdiPktFilterCfg.paramsData[i].dataOffset,
18673 pwdiSetRcvPktFilterReqParamsType->
18674 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070018675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080018676 "CData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070018677 pwdiSetRcvPktFilterReqParamsType->
18678 wdiPktFilterCfg.paramsData[i].compareData[0],
18679 pwdiSetRcvPktFilterReqParamsType->
18680 wdiPktFilterCfg.paramsData[i].compareData[1],
18681 pwdiSetRcvPktFilterReqParamsType->
18682 wdiPktFilterCfg.paramsData[i].compareData[2],
18683 pwdiSetRcvPktFilterReqParamsType->
18684 wdiPktFilterCfg.paramsData[i].compareData[3],
18685 pwdiSetRcvPktFilterReqParamsType->
18686 wdiPktFilterCfg.paramsData[i].compareData[4],
18687 pwdiSetRcvPktFilterReqParamsType->
18688 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070018689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080018690 "MData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070018691 pwdiSetRcvPktFilterReqParamsType->
18692 wdiPktFilterCfg.paramsData[i].dataMask[0],
18693 pwdiSetRcvPktFilterReqParamsType->
18694 wdiPktFilterCfg.paramsData[i].dataMask[1],
18695 pwdiSetRcvPktFilterReqParamsType->
18696 wdiPktFilterCfg.paramsData[i].dataMask[2],
18697 pwdiSetRcvPktFilterReqParamsType->
18698 wdiPktFilterCfg.paramsData[i].dataMask[3],
18699 pwdiSetRcvPktFilterReqParamsType->
18700 wdiPktFilterCfg.paramsData[i].dataMask[4],
18701 pwdiSetRcvPktFilterReqParamsType->
18702 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070018703 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070018704 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018705 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070018706 /* Store Params pass it to WDI */
18707 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
18708 pWdaParams->pWdaContext = pWDA;
18709 /* Store param pointer as passed in by caller */
18710 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070018711 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018712 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070018713 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070018714 if(IS_WDI_STATUS_FAILURE(status))
18715 {
18716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18717 "Failure in SetFilter(),free all the memory,status %d ",status);
18718 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
18719 vos_mem_free(pWdaParams->wdaMsgParam);
18720 vos_mem_free(pWdaParams);
18721 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018722 return CONVERT_WDI2VOS_STATUS(status) ;
18723}
Jeff Johnson295189b2012-06-20 16:38:30 -070018724/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018725 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070018726 *
18727 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070018728void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070018729 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
18730 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070018731{
18732 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18733 tWDA_CbContext *pWDA;
18734 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
18735 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
18736 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
18737 tANI_U8 i;
18738 vos_msg_t vosMsg;
18739
18740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018741 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018742 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
18743
Jeff Johnsone7245742012-09-05 17:12:55 -070018744 if(NULL == pRcvFltPktMatchCntRsp)
18745 {
18746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018747 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070018748 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070018749 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070018750 return ;
18751 }
18752
Jeff Johnson295189b2012-06-20 16:38:30 -070018753 if(NULL == pWdaParams)
18754 {
18755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018756 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018757 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070018758 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070018759 return ;
18760 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018761 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
18762 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070018763 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
18764 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
18765
18766 /* Message Header */
18767 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
18768 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
18769
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070018770 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070018771
18772 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
18773 {
18774 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
18775 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
18776 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018777 /* VOS message wrapper */
18778 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
18779 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
18780 vosMsg.bodyval = 0;
18781 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
18782 {
18783 /* free the mem and return */
18784 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
18785 }
18786
18787 vos_mem_free(pWdaParams->wdaMsgParam) ;
18788 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18789 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070018790
18791 return;
18792}
18793/*
18794 * FUNCTION: WDA_FilterMatchCountReqCallback
18795 * Free memory and send RSP back to SME.
18796 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
18797 */
18798void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
18799{
18800 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18801 vos_msg_t vosMsg;
18802
18803 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18804 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
18805
18806 if(NULL == pWdaParams)
18807 {
18808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18809 "%s: pWdaParams received NULL", __func__);
18810 VOS_ASSERT(0);
18811 return;
18812 }
18813
18814 /* VOS message wrapper */
18815 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
18816 vosMsg.bodyptr = NULL;
18817 vosMsg.bodyval = 0;
18818
18819 if(IS_WDI_STATUS_FAILURE(wdiStatus))
18820 {
18821 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18822 vos_mem_free(pWdaParams->wdaMsgParam);
18823 vos_mem_free(pWdaParams);
18824 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
18825 }
18826
18827 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070018828}
Jeff Johnson295189b2012-06-20 16:38:30 -070018829/*
18830 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
18831 * Request to WDI to get PC Filter Match Count
18832 */
18833VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
18834{
Jeff Johnson43971f52012-07-17 12:26:56 -070018835 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070018836 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
18837 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
18838 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018840 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018841 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
18842 {
18843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018844 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018845 VOS_ASSERT(0);
18846 return VOS_STATUS_E_NOMEM;
18847 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018848 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18849 if(NULL == pWdaParams)
18850 {
18851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018852 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018853 VOS_ASSERT(0);
18854 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
18855 return VOS_STATUS_E_NOMEM;
18856 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070018857
Yue Ma7f44bbe2013-04-12 11:47:39 -070018858 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
18859 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070018860
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070018861 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
18862 pRcvFltPktMatchRsp->bssId,
18863 sizeof(wpt_macAddr));
18864
Jeff Johnson295189b2012-06-20 16:38:30 -070018865 /* Store Params pass it to WDI */
18866 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
18867 pWdaParams->pWdaContext = pWDA;
18868 /* Store param pointer as passed in by caller */
18869 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070018870 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070018871 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070018872 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070018873 if(IS_WDI_STATUS_FAILURE(status))
18874 {
18875 /* failure returned by WDI API */
18876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18877 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
18878 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18879 vos_mem_free(pWdaParams) ;
18880 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
18881 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
18882 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018883 return CONVERT_WDI2VOS_STATUS(status) ;
18884}
Jeff Johnson295189b2012-06-20 16:38:30 -070018885/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018886 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070018887 *
18888 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018889void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070018890 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
18891 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070018892{
18893 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070018894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018895 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018896/* WDA_VOS_ASSERT(NULL != pWdaParams); */
18897 if(NULL == pWdaParams)
18898 {
18899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018900 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018901 VOS_ASSERT(0) ;
18902 return ;
18903 }
18904
18905 vos_mem_free(pWdaParams->wdaMsgParam) ;
18906 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18907 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018908 //print a msg, nothing else to do
18909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018910 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070018911 return ;
18912}
Jeff Johnson295189b2012-06-20 16:38:30 -070018913/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070018914 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
18915 * Free memory.
18916 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
18917 */
18918void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
18919{
18920 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18921
18922 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18923 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
18924
18925 if(NULL == pWdaParams)
18926 {
18927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18928 "%s: Invalid pWdaParams pointer", __func__);
18929 VOS_ASSERT(0);
18930 return;
18931 }
18932
18933 if(IS_WDI_STATUS_FAILURE(wdiStatus))
18934 {
18935 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18936 vos_mem_free(pWdaParams->wdaMsgParam);
18937 vos_mem_free(pWdaParams);
18938 }
18939
18940 return;
18941}
18942/*
Jeff Johnson295189b2012-06-20 16:38:30 -070018943 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
18944 * Request to WDI to clear Receive Filters
18945 */
18946VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
18947 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
18948{
Jeff Johnson43971f52012-07-17 12:26:56 -070018949 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070018950 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
18951 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
18952 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070018953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018954 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018955 if(NULL == pwdiRcvFltPktClearReqParamsType)
18956 {
18957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018958 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018959 VOS_ASSERT(0);
18960 return VOS_STATUS_E_NOMEM;
18961 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018962 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
18963 if(NULL == pWdaParams)
18964 {
18965 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070018966 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070018967 VOS_ASSERT(0);
18968 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
18969 return VOS_STATUS_E_NOMEM;
18970 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018971 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
18972 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070018973 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
18974 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
18975 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
18976 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070018977
Yue Ma7f44bbe2013-04-12 11:47:39 -070018978 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018979 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070018980 /* Store Params pass it to WDI */
18981 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
18982 pWdaParams->pWdaContext = pWDA;
18983 /* Store param pointer as passed in by caller */
18984 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070018985 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080018986 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070018987 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070018988 if(IS_WDI_STATUS_FAILURE(status))
18989 {
18990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18991 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
18992 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080018993 vos_mem_free(pWdaParams->wdaMsgParam);
18994 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070018995 }
Jeff Johnson295189b2012-06-20 16:38:30 -070018996 return CONVERT_WDI2VOS_STATUS(status) ;
18997}
18998#endif // WLAN_FEATURE_PACKET_FILTERING
18999
Jeff Johnson295189b2012-06-20 16:38:30 -070019000/*
19001 * FUNCTION: WDA_ProcessSetPowerParamsReq
19002 * Request to WDI to set power params
19003 */
19004VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
19005 tSirSetPowerParamsReq *pPowerParams)
19006{
Jeff Johnson43971f52012-07-17 12:26:56 -070019007 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070019008 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
19009 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019010 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070019011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019012 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019013 if(NULL == pwdiSetPowerParamsReqInfo)
19014 {
19015 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019016 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019017 VOS_ASSERT(0);
19018 return VOS_STATUS_E_NOMEM;
19019 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019020 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19021 if(NULL == pWdaParams)
19022 {
19023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019024 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019025 VOS_ASSERT(0);
19026 vos_mem_free(pwdiSetPowerParamsReqInfo);
19027 return VOS_STATUS_E_NOMEM;
19028 }
Jeff Johnsone7245742012-09-05 17:12:55 -070019029
Jeff Johnson295189b2012-06-20 16:38:30 -070019030
19031 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
19032 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070019033 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
19034 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070019035 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
19036 pPowerParams->uListenInterval;
19037 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
19038 pPowerParams->uBcastMcastFilter;
19039 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
19040 pPowerParams->uEnableBET;
19041 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
19042 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070019043 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
19044 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070019045 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
19046 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070019047
Jeff Johnson295189b2012-06-20 16:38:30 -070019048 /* Store Params pass it to WDI */
19049 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
19050 pWdaParams->pWdaContext = pWDA;
19051 /* Store param pointer as passed in by caller */
19052 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070019053 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070019054 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070019055 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070019056 if(IS_WDI_STATUS_FAILURE(status))
19057 {
19058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19059 "Failure in Set power params REQ WDI API, free all the memory " );
19060 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
19061 vos_mem_free(pWdaParams->wdaMsgParam);
19062 pWdaParams->wdaWdiApiMsgParam = NULL;
19063 pWdaParams->wdaMsgParam = NULL;
19064 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019065 return CONVERT_WDI2VOS_STATUS(status) ;
19066}
19067
19068/*
19069 * FUNCTION: WDA_SetTmLevelRspCallback
19070 * Set TM Level response
19071 */
19072void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
19073{
19074 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19075
19076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019077 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019078
19079 if(NULL == pWdaParams)
19080 {
19081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019082 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019083 VOS_ASSERT(0) ;
19084 return ;
19085 }
19086
19087 /* Dose not need to send notification to upper layer
19088 * Just free allocated resources */
19089 if( pWdaParams != NULL )
19090 {
19091 if( pWdaParams->wdaWdiApiMsgParam != NULL )
19092 {
19093 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19094 }
19095 vos_mem_free(pWdaParams->wdaMsgParam) ;
19096 vos_mem_free(pWdaParams) ;
19097 }
19098}
19099
19100/*
19101 * FUNCTION: WDA_ProcessSetTmLevelReq
19102 * Set TM Level request
19103 */
19104VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
19105 tAniSetTmLevelReq *setTmLevelReq)
19106{
19107 WDI_Status status = WDI_STATUS_SUCCESS ;
19108 tWDA_ReqParams *pWdaParams ;
19109 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
19110 (WDI_SetTmLevelReqType *)vos_mem_malloc(
19111 sizeof(WDI_SetTmLevelReqType)) ;
19112 if(NULL == wdiSetTmLevelReq)
19113 {
19114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019115 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019116 VOS_ASSERT(0);
19117 return VOS_STATUS_E_NOMEM;
19118 }
19119
19120 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19121 if(NULL == pWdaParams)
19122 {
19123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019124 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019125 VOS_ASSERT(0);
19126 vos_mem_free(wdiSetTmLevelReq);
19127 return VOS_STATUS_E_NOMEM;
19128 }
19129
19130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019131 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019132
19133 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
19134 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
19135
19136 pWdaParams->pWdaContext = pWDA;
19137 pWdaParams->wdaMsgParam = setTmLevelReq;
19138 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
19139
19140 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
19141 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
19142
19143 if(IS_WDI_STATUS_FAILURE(status))
19144 {
19145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080019146 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070019147 vos_mem_free(pWdaParams->wdaMsgParam) ;
19148 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19149 vos_mem_free(pWdaParams) ;
19150 }
19151
19152 return CONVERT_WDI2VOS_STATUS(status) ;
19153}
19154
19155VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
19156 tpTxControlParams pTxCtrlParam)
19157{
19158 VOS_STATUS wdaStatus;
19159
19160 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019161 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019162 if( pTxCtrlParam == NULL )
19163 {
19164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019165 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070019166 return VOS_STATUS_E_FAILURE;
19167 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019168 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
19169 {
19170 wdaStatus = WDA_SuspendDataTx(pWDA);
19171 }
19172 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
19173 {
19174 wdaStatus = WDA_ResumeDataTx(pWDA);
19175 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019176 return wdaStatus;
19177}
19178
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053019179void WDA_FWLoggingDXEdoneInd(v_U32_t logType)
Mihir Shete5affadc2015-05-29 20:54:57 +053019180{
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053019181 WDI_Status status;
19182 status = WDI_FWLoggingDXEdoneInd(logType);
19183
Hanumantha Reddy Pothula5e509402015-09-23 09:45:57 +053019184 if (!(WDI_STATUS_SUCCESS_SYNC == status || WDI_STATUS_PENDING == status))
Hanumantha Reddy Pothulae00a7e22015-09-15 20:11:30 +053019185 {
19186 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19187 FL("Failure status %d"), status);
19188 }
Mihir Shete5affadc2015-05-29 20:54:57 +053019189}
19190
Jeff Johnson295189b2012-06-20 16:38:30 -070019191 /* FUNCTION WDA_featureCapsExchange
19192 * WDA API to invoke capability exchange between host and FW.
19193 */
19194void WDA_featureCapsExchange(v_PVOID_t pVosContext)
19195{
19196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019197 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070019198 WDI_featureCapsExchangeReq( NULL, pVosContext);
19199}
19200
Yathish9f22e662012-12-10 14:21:35 -080019201/* FUNCTION WDA_disableCapablityFeature
19202 * WDA API to diable Active mode offload in host.
19203 */
19204void WDA_disableCapablityFeature(tANI_U8 feature_index)
19205{
19206 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19207 "%s:enter", __func__ );
19208 WDI_disableCapablityFeature(feature_index);
19209}
19210
Jeff Johnson295189b2012-06-20 16:38:30 -070019211 /* FUNCTION WDA_getHostWlanFeatCaps
19212 * Wrapper for WDI API, that will return if the feature (enum value).passed
19213 * to this API is supported or not in Host
19214 * return value
19215 * 0 - implies feature is NOT Supported
19216 * any non zero value - implies feature is SUPPORTED
19217 */
19218tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
19219{
19220 return WDI_getHostWlanFeatCaps(featEnumValue);
19221}
19222
19223 /* FUNCTION WDA_getFwWlanFeatCaps
19224 * Wrapper for WDI API, that will return if the feature (enum value).passed
19225 * to this API is supported or not in FW
19226 * return value
19227 * 0 - implies feature is NOT Supported
19228 * any non zero value - implies feature is SUPPORTED
19229 */
19230tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
19231{
19232 return WDI_getFwWlanFeatCaps(featEnumValue);
19233}
19234
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053019235
Jeff Johnson295189b2012-06-20 16:38:30 -070019236/*
19237 * FUNCTION: WDA_shutdown
19238 * Shutdown WDA/WDI without handshaking with Riva.
19239 * Synchronous function.
19240 */
19241VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
19242{
19243 WDI_Status wdiStatus;
19244 //tANI_U8 eventIdx = 0;
19245 VOS_STATUS status = VOS_STATUS_SUCCESS;
19246 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070019247 if (NULL == pWDA)
19248 {
19249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019250 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070019251 VOS_ASSERT(0);
19252 return VOS_STATUS_E_FAILURE;
19253 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019254 /* FTM mode stay START_STATE */
19255 if( (WDA_READY_STATE != pWDA->wdaState) &&
19256 (WDA_INIT_STATE != pWDA->wdaState) &&
19257 (WDA_START_STATE != pWDA->wdaState) )
19258 {
19259 VOS_ASSERT(0);
19260 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070019261
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053019262 if (eDRIVER_TYPE_MFG != pWDA->driverMode)
Jeff Johnson295189b2012-06-20 16:38:30 -070019263 {
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053019264 if(VOS_TRUE == pWDA->wdaTimersCreated)
19265 {
19266 wdaDestroyTimers(pWDA);
19267 pWDA->wdaTimersCreated = VOS_FALSE;
19268 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019269 }
Leo Chang9d76f622013-08-23 16:34:52 -070019270 else
19271 {
19272 vos_event_destroy(&pWDA->ftmStopDoneEvent);
Hanumantha Reddy Pothulab5c67c02015-07-14 21:27:50 +053019273 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070019274
Jeff Johnson295189b2012-06-20 16:38:30 -070019275 /* call WDI shutdown */
19276 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070019277 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
19278 {
19279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19280 "error in WDA Stop" );
19281 status = VOS_STATUS_E_FAILURE;
19282 }
19283 /* WDI stop is synchrnous, shutdown is complete when it returns */
19284 pWDA->wdaState = WDA_STOP_STATE;
19285
Jeff Johnson295189b2012-06-20 16:38:30 -070019286 /* shutdown should perform the stop & close actions. */
19287 /* Destroy the event */
19288 status = vos_event_destroy(&pWDA->txFrameEvent);
19289 if(!VOS_IS_STATUS_SUCCESS(status))
19290 {
19291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080019292 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070019293 status = VOS_STATUS_E_FAILURE;
19294 }
19295 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
19296 if(!VOS_IS_STATUS_SUCCESS(status))
19297 {
19298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080019299 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070019300 status = VOS_STATUS_E_FAILURE;
19301 }
19302 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
19303 if(!VOS_IS_STATUS_SUCCESS(status))
19304 {
19305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080019306 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070019307 status = VOS_STATUS_E_FAILURE;
19308 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019309 /* free WDA context */
19310 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
19311 if ( !VOS_IS_STATUS_SUCCESS(status) )
19312 {
19313 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19314 "error in WDA close " );
19315 status = VOS_STATUS_E_FAILURE;
19316 }
Jeff Johnson295189b2012-06-20 16:38:30 -070019317 return status;
19318}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080019319
Jeff Johnsone7245742012-09-05 17:12:55 -070019320/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080019321 * FUNCTION: WDA_setNeedShutdown
19322 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070019323 */
19324
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080019325void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070019326{
19327 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070019328 if(pWDA == NULL)
19329 {
19330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19331 "Could not get the WDA Context pointer" );
19332 return;
19333 }
Jeff Johnsone7245742012-09-05 17:12:55 -070019334 pWDA->needShutdown = TRUE;
19335}
19336/*
19337 * FUNCTION: WDA_needShutdown
19338 * WDA needs a shutdown
19339 */
19340
19341v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
19342{
19343 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070019344 if(pWDA == NULL)
19345 {
19346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19347 "Could not get the WDA Context pointer" );
19348 return 0;
19349 }
19350 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070019351}
19352
Mohit Khanna4a70d262012-09-11 16:30:12 -070019353#ifdef WLAN_FEATURE_11AC
19354/*
19355 * FUNCTION: WDA_SetBeaconFilterReqCallback
19356 *
19357 */
19358void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
19359{
19360 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019362 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070019363 if(NULL == pWdaParams)
19364 {
19365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019366 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070019367 VOS_ASSERT(0) ;
19368 return ;
19369 }
Jeff Johnsone7245742012-09-05 17:12:55 -070019370
Mohit Khanna4a70d262012-09-11 16:30:12 -070019371 vos_mem_free(pWdaParams->wdaMsgParam) ;
19372 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19373 vos_mem_free(pWdaParams) ;
19374 /*
19375 * No respone required for SetBeaconFilter req so just free the request
19376 * param here
19377 */
19378
19379 return ;
19380}
19381
19382VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
19383 tUpdateVHTOpMode *pData)
19384{
19385 WDI_Status status = WDI_STATUS_SUCCESS ;
19386 tWDA_ReqParams *pWdaParams ;
19387 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
19388 sizeof(WDI_UpdateVHTOpMode)) ;
19389 if(NULL == wdiTemp)
19390 {
19391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019392 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070019393 VOS_ASSERT(0);
19394 return VOS_STATUS_E_NOMEM;
19395 }
19396 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19397 if(NULL == pWdaParams)
19398 {
19399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070019400 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070019401 VOS_ASSERT(0);
19402 vos_mem_free(wdiTemp);
19403 return VOS_STATUS_E_NOMEM;
19404 }
Abhishek Singhdf8eb312014-11-15 00:49:28 +053019405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19406 "------> %s Opmode = %d and staid = %d" ,
19407 __func__, pData->opMode, pData->staId);
Mohit Khanna4a70d262012-09-11 16:30:12 -070019408 wdiTemp->opMode = pData->opMode;
19409 wdiTemp->staId = pData->staId;
19410
19411 pWdaParams->pWdaContext = pWDA;
19412 /* Store Req pointer, as this will be used for response */
19413 pWdaParams->wdaMsgParam = (void *)pData;
19414 /* store Params pass it to WDI */
19415 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
19416
19417 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
19418
19419 if(IS_WDI_STATUS_FAILURE(status))
19420 {
19421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19422 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
19423 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
19424 vos_mem_free(pWdaParams->wdaMsgParam);
19425 vos_mem_free(pWdaParams);
19426 }
19427 return CONVERT_WDI2VOS_STATUS(status) ;
19428}
19429#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070019430
19431/*==========================================================================
19432 FUNCTION WDA_TransportChannelDebug
19433
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070019434 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070019435 Display Transport Channel debugging information
19436 User may request to display DXE channel snapshot
19437 Or if host driver detects any abnormal stcuk may display
19438
19439 PARAMETERS
schang6295e542013-03-12 15:31:23 -070019440 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080019441 displaySnapshot : Display DXE snapshot option
Mihir Shete40a55652014-03-02 14:14:47 +053019442 debugFlags : Enable stall detect features
19443 defined by WPAL_DeviceDebugFlags
19444 These features may effect
19445 data performance.
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070019446
19447 RETURN VALUE
19448 NONE
19449
19450===========================================================================*/
19451void WDA_TransportChannelDebug
19452(
schang6295e542013-03-12 15:31:23 -070019453 tpAniSirGlobal pMac,
19454 v_BOOL_t displaySnapshot,
Mihir Shete40a55652014-03-02 14:14:47 +053019455 v_U8_t debugFlags
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070019456)
19457{
Mihir Shete40a55652014-03-02 14:14:47 +053019458 WDI_TransportChannelDebug(displaySnapshot, debugFlags);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070019459 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070019460}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070019461
19462/*==========================================================================
Sravan Kumar Kairame9d186c2015-11-27 23:37:02 +053019463 FUNCTION WDA_TransportKickDxe
19464
19465 DESCRIPTION
19466 Request Kick Dxe when first hdd TX time out
19467 happens
19468
19469 PARAMETERS
19470 NONE
19471
19472 RETURN VALUE
19473 NONE
19474
19475===========================================================================*/
19476void WDA_TransportKickDxe()
19477{
19478 WDI_TransportKickDxe();
19479 return;
19480}
19481
19482
19483/*==========================================================================
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070019484 FUNCTION WDA_SetEnableSSR
19485
19486 DESCRIPTION
19487 API to enable/disable SSR on WDI timeout
19488
19489 PARAMETERS
19490 enableSSR : enable/disable SSR
19491
19492 RETURN VALUE
19493 NONE
19494
19495===========================================================================*/
19496void WDA_SetEnableSSR(v_BOOL_t enableSSR)
19497{
19498 WDI_SetEnableSSR(enableSSR);
19499}
Leo Chang9056f462013-08-01 19:21:11 -070019500
Agrawal Ashish0552be02016-03-02 18:03:43 +053019501/**
19502 * WDA_SetMgmtPktViaWQ5() - Set INI params sendMgmtPktViaWQ5 to WDI.
19503 * @sendMgmtPktViaWQ5: INI params to enable/disable sending mgmt pkt via WQ5.
19504 *
19505 * Return: void
19506 */
19507void WDA_SetMgmtPktViaWQ5(v_BOOL_t sendMgmtPktViaWQ5)
19508{
19509 WDI_SetMgmtPktViaWQ5(sendMgmtPktViaWQ5);
19510}
19511
Leo Chang9056f462013-08-01 19:21:11 -070019512#ifdef FEATURE_WLAN_LPHB
19513/*
19514 * FUNCTION: WDA_LPHBconfRspCallback
19515 *
19516 */
19517void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
19518{
19519 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19520
19521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19522 "<------ %s " ,__func__);
19523 if (NULL == pWdaParams)
19524 {
19525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19526 "%s: pWdaParams received NULL", __func__);
19527 VOS_ASSERT(0) ;
19528 return ;
19529 }
19530
19531 /* Do not need to send notification to upper layer
19532 * Just free allocated resources */
19533 if (pWdaParams != NULL)
19534 {
19535 if (pWdaParams->wdaWdiApiMsgParam != NULL)
19536 {
19537 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19538 }
19539 vos_mem_free(pWdaParams->wdaMsgParam) ;
19540 vos_mem_free(pWdaParams) ;
19541 }
19542
19543 return;
19544}
19545
19546/*
19547 * FUNCTION: WDA_ProcessLPHBConfReq
19548 *
19549 */
19550VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
19551 tSirLPHBReq *pData)
19552{
19553 WDI_Status wdiStatus;
19554 tWDA_ReqParams *pWdaParams ;
19555
19556 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19557 "------> %s " , __func__);
19558
19559 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
19560 if (NULL == pWdaParams)
19561 {
19562 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19563 "%s: VOS MEM Alloc Failure", __func__);
19564 VOS_ASSERT(0);
19565 vos_mem_free(pData);
19566 return VOS_STATUS_E_NOMEM;
19567 }
19568
19569 pWdaParams->pWdaContext = pWDA;
19570 pWdaParams->wdaMsgParam = (void *)pData;
19571 pWdaParams->wdaWdiApiMsgParam = NULL;
19572
19573 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
19574 if (WDI_STATUS_PENDING == wdiStatus)
19575 {
19576 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19577 "Pending received for %s:%d ", __func__, __LINE__);
19578 }
19579 else if (WDI_STATUS_SUCCESS != wdiStatus)
19580 {
19581 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19582 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
19583 vos_mem_free(pWdaParams->wdaMsgParam);
19584 vos_mem_free(pWdaParams);
19585 }
19586
19587 return CONVERT_WDI2VOS_STATUS(wdiStatus);
19588}
19589#endif /* FEATURE_WLAN_LPHB */
19590
c_hpothu92367912014-05-01 15:18:17 +053019591void WDA_GetBcnMissRateCallback(tANI_U8 status, tANI_U32 bcnMissRate,
19592 void* pUserData)
19593{
19594 tSirBcnMissRateInfo *pBcnMissRateInfo = (tSirBcnMissRateInfo *)pUserData;
19595
19596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19597 "<------ %s " ,__func__);
19598 if (NULL == pBcnMissRateInfo)
19599 {
19600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19601 "%s: pWdaParams received NULL", __func__);
19602 VOS_ASSERT(0) ;
19603 return ;
19604 }
19605 if (pBcnMissRateInfo->callback)
19606 {
19607 pBcnMissRateInfo->callback(status, bcnMissRate,
19608 pBcnMissRateInfo->data);
19609 }
19610 vos_mem_free(pUserData);
19611
19612 return;
19613}
19614
19615v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
19616 tSirBcnMissRateReq *pData)
19617{
19618 WDI_Status wdiStatus;
19619 tSirBcnMissRateInfo *pBcnMissRateInfo;
19620
19621 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19622 "------> %s " , __func__);
19623
19624 pBcnMissRateInfo =
19625 (tSirBcnMissRateInfo *)vos_mem_malloc(sizeof(tSirBcnMissRateInfo));
19626 if (NULL == pBcnMissRateInfo)
19627 {
19628 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19629 "%s: VOS MEM Alloc Failure", __func__);
19630 VOS_ASSERT(0);
19631 vos_mem_free(pData);
19632 return;
19633 }
19634
19635 pBcnMissRateInfo->callback = (pGetBcnMissRateCB)(pData->callback);
19636 pBcnMissRateInfo->data = pData->data;
19637
19638 wdiStatus = WDI_GetBcnMissRate(pBcnMissRateInfo,
19639 WDA_GetBcnMissRateCallback,
19640 pData->bssid);
19641 if (WDI_STATUS_PENDING == wdiStatus)
19642 {
19643 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19644 "Pending received for %s:%d ", __func__, __LINE__);
19645 }
19646 else if (WDI_STATUS_SUCCESS != wdiStatus)
19647 {
19648 if (pBcnMissRateInfo->callback)
19649 {
19650 pBcnMissRateInfo->callback(VOS_STATUS_E_FAILURE,
19651 -1, pBcnMissRateInfo->data);
19652 }
19653 }
19654 vos_mem_free(pData);
19655}
Dino Mycle41bdc942014-06-10 11:30:24 +053019656
19657#ifdef WLAN_FEATURE_EXTSCAN
19658
19659/*==========================================================================
19660 FUNCTION WDA_EXTScanStartRspCallback
19661
19662 DESCRIPTION
19663 API to send EXTScan Start Response to HDD
19664
19665 PARAMETERS
19666 pEventData: Response from FW
19667 pUserData:
19668===========================================================================*/
19669void WDA_EXTScanStartRspCallback(void *pEventData, void* pUserData)
19670{
19671 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19672 tWDA_CbContext *pWDA = NULL;
19673 void *pCallbackContext;
19674 tpAniSirGlobal pMac;
19675
19676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19677 "%s:", __func__);
19678 if (NULL == pWdaParams)
19679 {
19680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19681 "%s: pWdaParams received NULL", __func__);
19682 VOS_ASSERT(0);
19683 return;
19684 }
19685
19686 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
19687
19688 if (NULL == pWDA)
19689 {
19690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19691 "%s: pWDA received NULL", __func__);
19692 VOS_ASSERT(0);
19693 goto error;
19694 }
19695
19696 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
19697 if (NULL == pMac)
19698 {
19699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19700 "%s:pMac is NULL", __func__);
19701 VOS_ASSERT(0);
19702 goto error;
19703 }
19704
19705 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
19706
19707 if (pMac->sme.pEXTScanIndCb)
19708 {
19709 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_START_RSP,
19710 pEventData);
19711 }
19712 else
19713 {
19714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19715 "%s:HDD callback is null", __func__);
19716 VOS_ASSERT(0);
19717 }
19718
19719error:
19720
19721 if (pWdaParams->wdaWdiApiMsgParam != NULL)
19722 {
19723 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19724 }
19725 if (pWdaParams->wdaMsgParam != NULL)
19726 {
19727 vos_mem_free(pWdaParams->wdaMsgParam);
19728 }
19729 vos_mem_free(pWdaParams) ;
19730
19731 return;
19732}
19733
19734/*==========================================================================
19735 FUNCTION WDA_EXTScanStopRspCallback
19736
19737 DESCRIPTION
19738 API to send EXTScan Stop Response to HDD
19739
19740 PARAMETERS
19741 pEventData: Response from FW
19742 pUserData:
19743===========================================================================*/
19744void WDA_EXTScanStopRspCallback(void *pEventData, void* pUserData)
19745{
19746 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19747 tWDA_CbContext *pWDA = NULL;
19748 void *pCallbackContext;
19749 tpAniSirGlobal pMac;
19750
19751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19752 "%s:", __func__);
19753 if (NULL == pWdaParams)
19754 {
19755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19756 "%s: pWdaParams received NULL", __func__);
19757 VOS_ASSERT(0);
19758 return;
19759 }
19760
19761 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
19762
19763 if (NULL == pWDA)
19764 {
19765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19766 "%s: pWDA received NULL", __func__);
19767 VOS_ASSERT(0);
19768 goto error;
19769 }
19770
19771 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
19772 if (NULL == pMac)
19773 {
19774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19775 "%s:pMac is NULL", __func__);
19776 VOS_ASSERT(0);
19777 goto error;
19778 }
19779 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
19780
19781 if (pMac->sme.pEXTScanIndCb)
19782 {
19783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19784 "%s:HDD call back function called", __func__);
19785 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_STOP_RSP,
19786 pEventData);
19787 }
19788 else
19789 {
19790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19791 "%s:HDD callback is null", __func__);
19792 VOS_ASSERT(0);
19793 }
19794
19795error:
19796
19797 if (pWdaParams->wdaWdiApiMsgParam != NULL)
19798 {
19799 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19800 }
19801 if (pWdaParams->wdaMsgParam != NULL)
19802 {
19803 vos_mem_free(pWdaParams->wdaMsgParam);
19804 }
19805 vos_mem_free(pWdaParams) ;
19806
19807
19808 return;
19809}
19810
19811/*==========================================================================
19812 FUNCTION WDA_EXTScanGetCachedResultsRspCallback
19813
19814 DESCRIPTION
19815 API to send EXTScan Get Cached Results Response to HDD
19816
19817 PARAMETERS
19818 pEventData: Response from FW
19819 pUserData:
19820===========================================================================*/
19821void WDA_EXTScanGetCachedResultsRspCallback(void *pEventData, void* pUserData)
19822{
19823 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19824 tWDA_CbContext *pWDA = NULL;
19825 void *pCallbackContext;
19826 tpAniSirGlobal pMac;
19827
19828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19829 "%s: ", __func__);
19830 if (NULL == pWdaParams)
19831 {
19832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19833 "%s: pWdaParams received NULL", __func__);
19834 VOS_ASSERT(0);
19835 return;
19836 }
19837
19838 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
19839
19840 if (NULL == pWDA)
19841 {
19842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19843 "%s: pWDA received NULL", __func__);
19844 VOS_ASSERT(0);
19845 goto error;
19846 }
19847
19848 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
19849 if (NULL == pMac)
19850 {
19851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19852 "%s:pMac is NULL", __func__);
19853 VOS_ASSERT(0);
19854 goto error;
19855 }
19856
19857 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
19858
19859 if (pMac->sme.pEXTScanIndCb)
19860 {
19861 pMac->sme.pEXTScanIndCb(pCallbackContext,
19862 WDA_EXTSCAN_GET_CACHED_RESULTS_RSP,
19863 pEventData);
19864 }
19865 else
19866 {
19867 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19868 "%s:HDD callback is null", __func__);
19869 VOS_ASSERT(0);
19870 }
19871
19872
19873error:
19874
19875 if (pWdaParams->wdaWdiApiMsgParam != NULL)
19876 {
19877 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19878 }
19879 if (pWdaParams->wdaMsgParam != NULL)
19880 {
19881 vos_mem_free(pWdaParams->wdaMsgParam);
19882 }
19883 vos_mem_free(pWdaParams) ;
19884
19885 return;
19886}
19887
19888/*==========================================================================
19889 FUNCTION WDA_EXTScanGetCapabilitiesRspCallback
19890
19891 DESCRIPTION
19892 API to send EXTScan Get Capabilities Response to HDD
19893
19894 PARAMETERS
19895 pEventData: Response from FW
19896 pUserData:
19897===========================================================================*/
19898void WDA_EXTScanGetCapabilitiesRspCallback(void *pEventData, void* pUserData)
19899{
19900 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19901 tWDA_CbContext *pWDA = NULL;
19902 void *pCallbackContext;
19903 tpAniSirGlobal pMac;
19904
19905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19906 "%s:", __func__);
19907 if (NULL == pWdaParams)
19908 {
19909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19910 "%s: pWdaParams received NULL", __func__);
19911 VOS_ASSERT(0);
19912 return;
19913 }
19914
19915 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
19916
19917 if (NULL == pWDA)
19918 {
19919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19920 "%s: pWDA received NULL", __func__);
19921 VOS_ASSERT(0);
19922 goto error;
19923 }
19924
19925 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
19926 if (NULL == pMac)
19927 {
19928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19929 "%s:pMac is NULL", __func__);
19930 VOS_ASSERT(0);
19931 goto error;
19932 }
19933
19934 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
19935
19936 if (pMac->sme.pEXTScanIndCb)
19937 {
19938 pMac->sme.pEXTScanIndCb(pCallbackContext,
19939 WDA_EXTSCAN_GET_CAPABILITIES_RSP,
19940 pEventData);
19941 }
19942 else
19943 {
19944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19945 "%s:HDD callback is null", __func__);
19946 VOS_ASSERT(0);
19947 }
19948
19949
19950error:
19951
19952 if (pWdaParams->wdaWdiApiMsgParam != NULL)
19953 {
19954 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
19955 }
19956 if (pWdaParams->wdaMsgParam != NULL)
19957 {
19958 vos_mem_free(pWdaParams->wdaMsgParam);
19959 }
19960 vos_mem_free(pWdaParams) ;
19961
19962 return;
19963}
19964
19965/*==========================================================================
19966 FUNCTION WDA_EXTScanSetBSSIDHotlistRspCallback
19967
19968 DESCRIPTION
19969 API to send EXTScan Set BSSID Hotlist Response to HDD
19970
19971 PARAMETERS
19972 pEventData: Response from FW
19973 pUserData:
19974===========================================================================*/
19975void WDA_EXTScanSetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
19976{
19977 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
19978 tWDA_CbContext *pWDA = NULL;
19979 void *pCallbackContext;
19980 tpAniSirGlobal pMac;
19981
19982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
19983 "%s: ", __func__);
19984 if (NULL == pWdaParams)
19985 {
19986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19987 "%s: pWdaParams received NULL", __func__);
19988 VOS_ASSERT(0) ;
19989 return;
19990 }
19991
19992 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
19993
19994 if (NULL == pWDA)
19995 {
19996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
19997 "%s: pWDA received NULL", __func__);
19998 VOS_ASSERT(0);
19999 goto error;
20000 }
20001
20002 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20003 if (NULL == pMac)
20004 {
20005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20006 "%s:pMac is NULL", __func__);
20007 VOS_ASSERT(0);
20008 goto error;
20009 }
20010
20011 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
20012
20013 if (pMac->sme.pEXTScanIndCb)
20014 {
20015 pMac->sme.pEXTScanIndCb(pCallbackContext,
20016 WDA_EXTSCAN_SET_BSSID_HOTLIST_RSP,
20017 pEventData);
20018 }
20019 else
20020 {
20021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20022 "%s:HDD callback is null", __func__);
20023 VOS_ASSERT(0);
20024 }
20025
20026
20027error:
20028
20029 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20030 {
20031 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20032 }
20033 if (pWdaParams->wdaMsgParam != NULL)
20034 {
20035 vos_mem_free(pWdaParams->wdaMsgParam);
20036 }
20037 vos_mem_free(pWdaParams) ;
20038
20039 return;
20040}
20041
20042/*==========================================================================
20043 FUNCTION WDA_EXTScanResetBSSIDHotlistRspCallback
20044
20045 DESCRIPTION
20046 API to send EXTScan ReSet BSSID Hotlist Response to HDD
20047
20048 PARAMETERS
20049 pEventData: Response from FW
20050 pUserData:
20051===========================================================================*/
20052void WDA_EXTScanResetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
20053{
20054 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20055 tWDA_CbContext *pWDA = NULL;
20056 void *pCallbackContext;
20057 tpAniSirGlobal pMac;
20058
20059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20060 "%s:", __func__);
20061 if (NULL == pWdaParams)
20062 {
20063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20064 "%s: pWdaParams received NULL", __func__);
20065 VOS_ASSERT(0) ;
20066 return;
20067 }
20068
20069 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20070
20071 if (NULL == pWDA)
20072 {
20073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20074 "%s: pWDA received NULL", __func__);
20075 VOS_ASSERT(0);
20076 goto error;
20077 }
20078
20079 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20080 if (NULL == pMac)
20081 {
20082 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20083 "%s:pMac is NULL", __func__);
20084 VOS_ASSERT(0);
20085 goto error;
20086 }
20087
20088 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
20089
20090 if (pMac->sme.pEXTScanIndCb)
20091 {
20092 pMac->sme.pEXTScanIndCb(pCallbackContext,
20093 WDA_EXTSCAN_RESET_BSSID_HOTLIST_RSP,
20094 pEventData);
20095 }
20096 else
20097 {
20098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20099 "%s:HDD callback is null", __func__);
20100 VOS_ASSERT(0);
20101 }
20102
20103
20104error:
20105
20106 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20107 {
20108 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20109 }
20110 if (pWdaParams->wdaMsgParam != NULL)
20111 {
20112 vos_mem_free(pWdaParams->wdaMsgParam);
20113 }
20114 vos_mem_free(pWdaParams) ;
20115
20116 return;
20117}
20118
20119/*==========================================================================
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053020120 FUNCTION WDA_EXTScanSetSSIDHotlistRspCallback
20121
20122 DESCRIPTION
20123 API to send EXTScan Set SSID Hotlist Response to HDD
20124
20125 PARAMETERS
20126 pEventData: Response from FW
20127 pUserData:
20128===========================================================================*/
20129void WDA_EXTScanSetSSIDHotlistRspCallback(void *pEventData, void* pUserData)
20130{
20131 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20132 tWDA_CbContext *pWDA = NULL;
20133 void *pCallbackContext;
20134 tpAniSirGlobal pMac;
20135
20136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20137 "%s: ", __func__);
20138 if (NULL == pWdaParams)
20139 {
20140 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20141 "%s: pWdaParams received NULL", __func__);
20142 VOS_ASSERT(0) ;
20143 return;
20144 }
20145
20146 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20147
20148 if (NULL == pWDA)
20149 {
20150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20151 "%s: pWDA received NULL", __func__);
20152 VOS_ASSERT(0);
20153 goto error;
20154 }
20155
20156 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20157 if (NULL == pMac)
20158 {
20159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20160 "%s:pMac is NULL", __func__);
20161 VOS_ASSERT(0);
20162 goto error;
20163 }
20164
20165 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
20166
20167 if (pMac->sme.pEXTScanIndCb)
20168 {
20169 pMac->sme.pEXTScanIndCb(pCallbackContext,
20170 WDA_EXTSCAN_SET_SSID_HOTLIST_RSP,
20171 pEventData);
20172 }
20173 else
20174 {
20175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20176 "%s:HDD callback is null", __func__);
20177 VOS_ASSERT(0);
20178 }
20179
20180
20181error:
20182
20183 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20184 {
20185 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20186 }
20187 if (pWdaParams->wdaMsgParam != NULL)
20188 {
20189 vos_mem_free(pWdaParams->wdaMsgParam);
20190 }
20191 vos_mem_free(pWdaParams) ;
20192
20193 return;
20194}
20195
20196/*==========================================================================
20197 FUNCTION WDA_EXTScanResetSSIDHotlistRspCallback
20198
20199 DESCRIPTION
20200 API to send EXTScan ReSet SSID Hotlist Response to HDD
20201
20202 PARAMETERS
20203 pEventData: Response from FW
20204 pUserData:
20205===========================================================================*/
20206void WDA_EXTScanResetSSIDHotlistRspCallback(void *pEventData, void* pUserData)
20207{
20208 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20209 tWDA_CbContext *pWDA = NULL;
20210 void *pCallbackContext;
20211 tpAniSirGlobal pMac;
20212
20213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20214 "%s:", __func__);
20215 if (NULL == pWdaParams)
20216 {
20217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20218 "%s: pWdaParams received NULL", __func__);
20219 VOS_ASSERT(0) ;
20220 return;
20221 }
20222
20223 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20224
20225 if (NULL == pWDA)
20226 {
20227 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20228 "%s: pWDA received NULL", __func__);
20229 VOS_ASSERT(0);
20230 goto error;
20231 }
20232
20233 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
20234 if (NULL == pMac)
20235 {
20236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20237 "%s:pMac is NULL", __func__);
20238 VOS_ASSERT(0);
20239 goto error;
20240 }
20241
20242 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
20243
20244 if (pMac->sme.pEXTScanIndCb)
20245 {
20246 pMac->sme.pEXTScanIndCb(pCallbackContext,
20247 WDA_EXTSCAN_RESET_SSID_HOTLIST_RSP,
20248 pEventData);
20249 }
20250 else
20251 {
20252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20253 "%s:HDD callback is null", __func__);
20254 VOS_ASSERT(0);
20255 }
20256
20257
20258error:
20259
20260 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20261 {
20262 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20263 }
20264 if (pWdaParams->wdaMsgParam != NULL)
20265 {
20266 vos_mem_free(pWdaParams->wdaMsgParam);
20267 }
20268 vos_mem_free(pWdaParams) ;
20269
20270 return;
20271}
20272
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053020273/*==========================================================================
Dino Mycle41bdc942014-06-10 11:30:24 +053020274 FUNCTION WDA_ProcessEXTScanStartReq
20275
20276 DESCRIPTION
20277 API to send EXTScan Start Request to WDI
20278
20279 PARAMETERS
20280 pWDA: Pointer to WDA context
20281 wdaRequest: Pointer to EXTScan req parameters
20282===========================================================================*/
20283VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
20284 tSirEXTScanStartReqParams *wdaRequest)
20285{
20286 WDI_Status status = WDI_STATUS_SUCCESS;
20287 tWDA_ReqParams *pWdaParams;
20288
20289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20290 "%s: ", __func__);
20291 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20292 if (NULL == pWdaParams)
20293 {
20294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20295 "%s: VOS MEM Alloc Failure", __func__);
20296 VOS_ASSERT(0);
20297 return VOS_STATUS_E_NOMEM;
20298 }
20299 pWdaParams->pWdaContext = pWDA;
20300 pWdaParams->wdaMsgParam = wdaRequest;
20301 pWdaParams->wdaWdiApiMsgParam = NULL;
20302
20303 status = WDI_EXTScanStartReq((void *)wdaRequest,
20304 (WDI_EXTScanStartRspCb)WDA_EXTScanStartRspCallback,
20305 (void *)pWdaParams);
20306 if (IS_WDI_STATUS_FAILURE(status))
20307 {
20308 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20309 "Failure to request. Free all the memory " );
20310 vos_mem_free(pWdaParams->wdaMsgParam);
20311 vos_mem_free(pWdaParams);
20312 }
20313 return CONVERT_WDI2VOS_STATUS(status);
20314}
20315
20316/*==========================================================================
20317 FUNCTION WDA_ProcessEXTScanStopReq
20318
20319 DESCRIPTION
20320 API to send EXTScan Start Request to WDI
20321
20322 PARAMETERS
20323 pWDA: Pointer to WDA context
20324 wdaRequest: Pointer to EXTScan req parameters
20325===========================================================================*/
20326VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
20327 tSirEXTScanStopReqParams *wdaRequest)
20328{
20329 WDI_Status status = WDI_STATUS_SUCCESS;
20330 tWDA_ReqParams *pWdaParams;
20331
20332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20333 "%s:", __func__);
20334 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20335 if (NULL == pWdaParams)
20336 {
20337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20338 "%s: VOS MEM Alloc Failure", __func__);
20339 VOS_ASSERT(0);
20340 return VOS_STATUS_E_NOMEM;
20341 }
20342 pWdaParams->pWdaContext = pWDA;
20343 pWdaParams->wdaMsgParam = wdaRequest;
20344 pWdaParams->wdaWdiApiMsgParam = NULL;
20345
20346 status = WDI_EXTScanStopReq((void *)wdaRequest,
20347 (WDI_EXTScanStopRspCb)WDA_EXTScanStopRspCallback,
20348 (void *)pWdaParams);
20349 if (IS_WDI_STATUS_FAILURE(status))
20350 {
20351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20352 "Failure to request. Free all the memory " );
20353 vos_mem_free(pWdaParams->wdaMsgParam);
20354 vos_mem_free(pWdaParams);
20355 }
20356 return CONVERT_WDI2VOS_STATUS(status);
20357}
20358
20359/*==========================================================================
20360 FUNCTION WDA_ProcessEXTScanGetCachedResultsReq
20361
20362 DESCRIPTION
20363 API to send EXTScan Get Cached Results Request to WDI
20364
20365 PARAMETERS
20366 pWDA: Pointer to WDA context
20367 wdaRequest: Pointer to EXTScan req parameters
20368===========================================================================*/
20369VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
20370 tSirEXTScanGetCachedResultsReqParams *wdaRequest)
20371{
20372 WDI_Status status = WDI_STATUS_SUCCESS;
20373 tWDA_ReqParams *pWdaParams;
20374
20375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20376 "%s: ", __func__);
20377 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20378 if (NULL == pWdaParams)
20379 {
20380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20381 "%s: VOS MEM Alloc Failure", __func__);
20382 VOS_ASSERT(0);
20383 return VOS_STATUS_E_NOMEM;
20384 }
20385 pWdaParams->pWdaContext = pWDA;
20386 pWdaParams->wdaMsgParam = wdaRequest;
20387 pWdaParams->wdaWdiApiMsgParam = NULL;
20388
20389 status = WDI_EXTScanGetCachedResultsReq((void *)wdaRequest,
20390 (WDI_EXTScanGetCachedResultsRspCb)WDA_EXTScanGetCachedResultsRspCallback,
20391 (void *)pWdaParams);
20392 if (IS_WDI_STATUS_FAILURE(status))
20393 {
20394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20395 "Failure to request. Free all the memory " );
20396 vos_mem_free(pWdaParams->wdaMsgParam);
20397 vos_mem_free(pWdaParams);
20398 }
20399 return CONVERT_WDI2VOS_STATUS(status);
20400}
20401
20402/*==========================================================================
20403 FUNCTION WDA_ProcessEXTScanGetCapabilitiesReq
20404
20405 DESCRIPTION
20406 API to send EXTScan Get Capabilities Request to WDI
20407
20408 PARAMETERS
20409 pWDA: Pointer to WDA context
20410 wdaRequest: Pointer to EXTScan req parameters
20411===========================================================================*/
20412VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
20413 tSirGetEXTScanCapabilitiesReqParams *wdaRequest)
20414{
20415 WDI_Status status = WDI_STATUS_SUCCESS;
20416 tWDA_ReqParams *pWdaParams;
20417
20418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20419 "%s:", __func__);
20420 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20421 if (NULL == pWdaParams)
20422 {
20423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20424 "%s: VOS MEM Alloc Failure", __func__);
20425 VOS_ASSERT(0);
20426 return VOS_STATUS_E_NOMEM;
20427 }
20428 pWdaParams->pWdaContext = pWDA;
20429 pWdaParams->wdaMsgParam = wdaRequest;
20430 pWdaParams->wdaWdiApiMsgParam = NULL;
20431
20432 status = WDI_EXTScanGetCapabilitiesReq((void *)wdaRequest,
20433 (WDI_EXTScanGetCapabilitiesRspCb)WDA_EXTScanGetCapabilitiesRspCallback,
20434 (void *)pWdaParams);
20435 if (IS_WDI_STATUS_FAILURE(status))
20436 {
20437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20438 "Failure to request. Free all the memory " );
20439 vos_mem_free(pWdaParams->wdaMsgParam);
20440 vos_mem_free(pWdaParams);
20441 }
20442 return CONVERT_WDI2VOS_STATUS(status);
20443}
20444
20445/*==========================================================================
20446 FUNCTION WDA_ProcessEXTScanSetBSSIDHotlistReq
20447
20448 DESCRIPTION
20449 API to send Set BSSID Hotlist Request to WDI
20450
20451 PARAMETERS
20452 pWDA: Pointer to WDA context
20453 wdaRequest: Pointer to EXTScan req parameters
20454===========================================================================*/
20455VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
20456 tSirEXTScanSetBssidHotListReqParams *wdaRequest)
20457{
20458 WDI_Status status = WDI_STATUS_SUCCESS;
20459 tWDA_ReqParams *pWdaParams;
20460
20461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20462 "%s: ", __func__);
20463 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20464 if (NULL == pWdaParams)
20465 {
20466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20467 "%s: VOS MEM Alloc Failure", __func__);
20468 VOS_ASSERT(0);
20469 return VOS_STATUS_E_NOMEM;
20470 }
20471 pWdaParams->pWdaContext = pWDA;
20472 pWdaParams->wdaMsgParam = wdaRequest;
20473 pWdaParams->wdaWdiApiMsgParam = NULL;
20474
20475 status = WDI_EXTScanSetBSSIDHotlistReq((void *)wdaRequest,
20476 (WDI_EXTScanSetBSSIDHotlistRspCb)WDA_EXTScanSetBSSIDHotlistRspCallback,
20477 (void *)pWdaParams);
20478 if (IS_WDI_STATUS_FAILURE(status))
20479 {
20480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20481 "Failure to request. Free all the memory " );
20482 vos_mem_free(pWdaParams->wdaMsgParam);
20483 vos_mem_free(pWdaParams);
20484 }
20485 return CONVERT_WDI2VOS_STATUS(status);
20486}
20487
20488/*==========================================================================
20489 FUNCTION WDA_ProcessEXTScanReSetBSSIDHotlistReq
20490
20491 DESCRIPTION
20492 API to send Reset BSSID Hotlist Request to WDI
20493
20494 PARAMETERS
20495 pWDA: Pointer to WDA context
20496 wdaRequest: Pointer to EXTScan req parameters
20497===========================================================================*/
20498VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
20499 tSirEXTScanResetBssidHotlistReqParams *wdaRequest)
20500{
20501 WDI_Status status = WDI_STATUS_SUCCESS;
20502 tWDA_ReqParams *pWdaParams;
20503
20504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20505 "%s:", __func__);
20506 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20507 if (NULL == pWdaParams)
20508 {
20509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20510 "%s: VOS MEM Alloc Failure", __func__);
20511 VOS_ASSERT(0);
20512 return VOS_STATUS_E_NOMEM;
20513 }
20514 pWdaParams->pWdaContext = pWDA;
20515 pWdaParams->wdaMsgParam = wdaRequest;
20516 pWdaParams->wdaWdiApiMsgParam = NULL;
20517
20518 status = WDI_EXTScanResetBSSIDHotlistReq((void *)wdaRequest,
20519 (WDI_EXTScanResetBSSIDHotlistRspCb)WDA_EXTScanResetBSSIDHotlistRspCallback,
20520 (void *)pWdaParams);
20521 if (IS_WDI_STATUS_FAILURE(status))
20522 {
20523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20524 "Failure to request. Free all the memory " );
20525 vos_mem_free(pWdaParams->wdaMsgParam);
20526 vos_mem_free(pWdaParams);
20527 }
20528 return CONVERT_WDI2VOS_STATUS(status);
20529}
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053020530
20531/*==========================================================================
20532 FUNCTION WDA_ProcessEXTScanSetSSIDHotlistReq
20533
20534 DESCRIPTION
20535 API to send Set SSID Hotlist Request to WDI
20536
20537 PARAMETERS
20538 pWDA: Pointer to WDA context
20539 wdaRequest: Pointer to EXTScan req parameters
20540===========================================================================*/
20541VOS_STATUS WDA_ProcessEXTScanSetSSIDHotlistReq(tWDA_CbContext *pWDA,
20542 tSirEXTScanSetSsidHotListReqParams *wdaRequest)
20543{
20544 WDI_Status status = WDI_STATUS_SUCCESS;
20545 tWDA_ReqParams *pWdaParams;
20546
20547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20548 "%s: ", __func__);
20549 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20550 if (NULL == pWdaParams)
20551 {
20552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20553 "%s: VOS MEM Alloc Failure", __func__);
20554 VOS_ASSERT(0);
20555 return VOS_STATUS_E_NOMEM;
20556 }
20557 pWdaParams->pWdaContext = pWDA;
20558 pWdaParams->wdaMsgParam = wdaRequest;
20559 pWdaParams->wdaWdiApiMsgParam = NULL;
20560
20561 status = WDI_EXTScanSetSSIDHotlistReq((void *)wdaRequest,
20562 (WDI_EXTScanSetSSIDHotlistRspCb)WDA_EXTScanSetSSIDHotlistRspCallback,
20563 (void *)pWdaParams);
20564 if (IS_WDI_STATUS_FAILURE(status))
20565 {
20566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20567 "Failure to request. Free all the memory " );
20568 vos_mem_free(pWdaParams->wdaMsgParam);
20569 vos_mem_free(pWdaParams);
20570 }
20571 return CONVERT_WDI2VOS_STATUS(status);
20572}
20573
20574/*==========================================================================
20575 FUNCTION WDA_ProcessEXTScanReSetSSIDHotlistReq
20576
20577 DESCRIPTION
20578 API to send Reset SSID Hotlist Request to WDI
20579
20580 PARAMETERS
20581 pWDA: Pointer to WDA context
20582 wdaRequest: Pointer to EXTScan req parameters
20583===========================================================================*/
20584VOS_STATUS WDA_ProcessEXTScanResetSSIDHotlistReq(tWDA_CbContext *pWDA,
20585 tSirEXTScanResetSsidHotlistReqParams *wdaRequest)
20586{
20587 WDI_Status status = WDI_STATUS_SUCCESS;
20588 tWDA_ReqParams *pWdaParams;
20589
20590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20591 "%s:", __func__);
20592 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20593 if (NULL == pWdaParams)
20594 {
20595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20596 "%s: VOS MEM Alloc Failure", __func__);
20597 VOS_ASSERT(0);
20598 return VOS_STATUS_E_NOMEM;
20599 }
20600 pWdaParams->pWdaContext = pWDA;
20601 pWdaParams->wdaMsgParam = wdaRequest;
20602 pWdaParams->wdaWdiApiMsgParam = NULL;
20603
20604 status = WDI_EXTScanResetSSIDHotlistReq((void *)wdaRequest,
20605 (WDI_EXTScanResetSSIDHotlistRspCb)WDA_EXTScanResetSSIDHotlistRspCallback,
20606 (void *)pWdaParams);
20607 if (IS_WDI_STATUS_FAILURE(status))
20608 {
20609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20610 "Failure to request. Free all the memory " );
20611 vos_mem_free(pWdaParams->wdaMsgParam);
20612 vos_mem_free(pWdaParams);
20613 }
20614 return CONVERT_WDI2VOS_STATUS(status);
20615}
20616
Padma, Santhosh Kumarc1f7f052015-08-26 12:29:01 +053020617/*==========================================================================
20618 FUNCTION WDA_ProcessHighPriorityDataInfoInd
20619
20620 DESCRIPTION
20621 API to send Reset SSID Hotlist Request to WDI
20622
20623 PARAMETERS
20624 pWDA: Pointer to WDA context
20625 wdaRequest: Pointer to EXTScan req parameters
20626===========================================================================*/
20627VOS_STATUS WDA_ProcessHighPriorityDataInfoInd(tWDA_CbContext *pWDA,
20628 tSirHighPriorityDataInfoInd *wdaRequest)
20629{
20630 WDI_Status status = WDI_STATUS_SUCCESS;
20631
20632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20633 "%s:", __func__);
20634
20635 status = WDI_HighPriorityDataInfoInd((void *)wdaRequest);
20636 if (WDI_STATUS_PENDING == status)
20637 {
20638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20639 FL("pending status received "));
20640 }
20641 else if (WDI_STATUS_SUCCESS_SYNC != status)
20642 {
20643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20644 FL("Failure status %d"), status);
20645 }
20646 return CONVERT_WDI2VOS_STATUS(status);
20647}
Padma, Santhosh Kumar9acee012015-08-21 19:58:01 +053020648
Dino Mycle41bdc942014-06-10 11:30:24 +053020649#endif /* WLAN_FEATURE_EXTSCAN */
20650
Sunil Duttbd736ed2014-05-26 21:19:41 +053020651#ifdef WLAN_FEATURE_LINK_LAYER_STATS
20652
20653/*==========================================================================
20654 FUNCTION WDA_LLStatsSetRspCallback
20655
20656 DESCRIPTION
20657 API to process set link layer statistics response from FW
20658
20659 PARAMETERS
20660 pRsp: Pointer to set link layer statistics response
20661 pUserData: Pointer to user data
20662
20663 RETURN VALUE
20664 NONE
20665
20666===========================================================================*/
20667void WDA_LLStatsSetRspCallback(void *pEventData, void* pUserData)
20668{
20669 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20670
20671
20672 if (NULL == pWdaParams)
20673 {
20674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20675 "%s: pWdaParams received NULL", __func__);
20676 VOS_ASSERT(0) ;
20677 return ;
20678 }
20679
20680 /* Do not need to send notification to upper layer
20681 * Just free allocated resources */
20682 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20683 {
20684 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20685 }
20686 if (pWdaParams->wdaMsgParam != NULL)
20687 {
20688 vos_mem_free(pWdaParams->wdaMsgParam);
20689 }
20690 vos_mem_free(pWdaParams) ;
20691
20692 return;
20693}
20694
20695/*==========================================================================
20696 FUNCTION WDA_ProcessLLStatsSetReq
20697
20698 DESCRIPTION
20699 API to send Set Link Layer Stats request to WDI
20700
20701 PARAMETERS
20702 pWDA: Pointer to WDA context
20703 wdaRequest: Pointer to set Link Layer Stats req parameters
20704===========================================================================*/
20705VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
20706 tSirLLStatsSetReq *wdaRequest)
20707{
20708 WDI_Status status = WDI_STATUS_SUCCESS;
20709 tWDA_ReqParams *pWdaParams;
20710
20711 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20712 if (NULL == pWdaParams)
20713 {
20714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20715 "%s: VOS MEM Alloc Failure", __func__);
20716 VOS_ASSERT(0);
20717 return VOS_STATUS_E_NOMEM;
20718 }
20719 pWdaParams->pWdaContext = pWDA;
20720 pWdaParams->wdaMsgParam = wdaRequest;
20721 pWdaParams->wdaWdiApiMsgParam = NULL;
20722
20723 status = WDI_LLStatsSetReq((void *)wdaRequest,
20724 (WDI_LLStatsSetRspCb)WDA_LLStatsSetRspCallback,
20725 (void *)pWdaParams);
20726 if (IS_WDI_STATUS_FAILURE(status))
20727 {
20728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20729 "Failure to request. Free all the memory " );
20730 vos_mem_free(pWdaParams->wdaMsgParam);
20731 vos_mem_free(pWdaParams);
20732 }
20733 return CONVERT_WDI2VOS_STATUS(status);
20734}
20735
20736/*==========================================================================
20737 FUNCTION WDA_LLStatsGetRspCallback
20738
20739 DESCRIPTION
20740 API to process get link layer statistics response from FW
20741
20742 PARAMETERS
20743 pRsp: Pointer to get link layer statistics response
20744 pUserData: Pointer to user data
20745
20746 RETURN VALUE
20747 NONE
20748
20749===========================================================================*/
20750void WDA_LLStatsGetRspCallback(void *pEventData, void* pUserData)
20751{
20752 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20753
20754 if (NULL == pWdaParams)
20755 {
20756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20757 "%s: pWdaParams received NULL", __func__);
20758 VOS_ASSERT(0) ;
20759 return ;
20760 }
20761
20762 /* Do not need to send notification to upper layer
20763 * Just free allocated resources */
20764 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20765 {
20766 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20767 }
20768 if (pWdaParams->wdaMsgParam != NULL)
20769 {
20770 vos_mem_free(pWdaParams->wdaMsgParam);
20771 }
20772 vos_mem_free(pWdaParams) ;
20773
20774 return;
20775}
20776
20777/*==========================================================================
20778 FUNCTION WDA_ProcessLLStatsGetReq
20779
20780 DESCRIPTION
20781 API to send Get Link Layer Stats request to WDI
20782
20783 PARAMETERS
20784 pWDA: Pointer to WDA context
20785 wdaRequest: Pointer to get Link Layer Stats req parameters
20786===========================================================================*/
20787VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
20788 tSirLLStatsGetReq *wdaRequest)
20789{
20790 WDI_Status status = WDI_STATUS_SUCCESS;
20791 tWDA_ReqParams *pWdaParams;
20792
20793 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20794 if (NULL == pWdaParams)
20795 {
20796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20797 "%s: VOS MEM Alloc Failure", __func__);
20798 VOS_ASSERT(0);
20799 return VOS_STATUS_E_NOMEM;
20800 }
20801 pWdaParams->pWdaContext = pWDA;
20802 pWdaParams->wdaMsgParam = wdaRequest;
20803 pWdaParams->wdaWdiApiMsgParam = NULL;
20804
20805 status = WDI_LLStatsGetReq((void *) wdaRequest,
20806 (WDI_LLStatsGetRspCb)WDA_LLStatsGetRspCallback,
20807 (void *)pWdaParams);
20808 if (IS_WDI_STATUS_FAILURE(status))
20809 {
20810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20811 "Failure to request. Free all the memory " );
20812 vos_mem_free(pWdaParams->wdaMsgParam);
20813 vos_mem_free(pWdaParams);
20814 }
20815 return CONVERT_WDI2VOS_STATUS(status);
20816}
20817
20818/*==========================================================================
20819 FUNCTION WDA_LLStatsClearRspCallback
20820
20821 DESCRIPTION
20822 API to process clear link layer statistics response from FW
20823
20824 PARAMETERS
20825 pRsp: Pointer to clear link layer statistics response
20826 pUserData: Pointer to user data
20827
20828 RETURN VALUE
20829 NONE
20830
20831===========================================================================*/
20832void WDA_LLStatsClearRspCallback(void *pEventData, void* pUserData)
20833{
20834 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20835
20836
20837 if (NULL == pWdaParams)
20838 {
20839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20840 "%s: pWdaParams received NULL", __func__);
20841 VOS_ASSERT(0) ;
20842 return ;
20843 }
20844 /* Do not need to send notification to upper layer
20845 * Just free allocated resources */
20846 if (pWdaParams->wdaWdiApiMsgParam != NULL)
20847 {
20848 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
20849 }
20850 if (pWdaParams->wdaMsgParam != NULL)
20851 {
20852 vos_mem_free(pWdaParams->wdaMsgParam);
20853 }
20854 vos_mem_free(pWdaParams) ;
20855 return;
20856}
20857
20858/*==========================================================================
20859 FUNCTION WDA_ProcessLLStatsClearReq
20860
20861 DESCRIPTION
20862 API to send Clear Link Layer Stats request to WDI
20863
20864 PARAMETERS
20865 pWDA: Pointer to WDA context
20866 wdaRequest: Pointer to earLink Layer Stats req
20867===========================================================================*/
20868VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
20869 tSirLLStatsClearReq *wdaRequest)
20870{
20871 WDI_Status status = WDI_STATUS_SUCCESS;
20872 tWDA_ReqParams *pWdaParams;
20873
20874 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
20875 if (NULL == pWdaParams)
20876 {
20877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20878 "%s: VOS MEM Alloc Failure", __func__);
20879 VOS_ASSERT(0);
20880 return VOS_STATUS_E_NOMEM;
20881 }
20882 pWdaParams->pWdaContext = pWDA;
20883 pWdaParams->wdaMsgParam = wdaRequest;
20884 pWdaParams->wdaWdiApiMsgParam = NULL;
20885
20886 status = WDI_LLStatsClearReq((void *) wdaRequest,
20887 (WDI_LLStatsClearRspCb)WDA_LLStatsClearRspCallback,
20888 (void *)pWdaParams);
20889 if (IS_WDI_STATUS_FAILURE(status))
20890 {
20891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20892 "Failure to request. Free all the memory " );
20893 vos_mem_free(pWdaParams->wdaMsgParam);
20894 vos_mem_free(pWdaParams);
20895 }
20896 return CONVERT_WDI2VOS_STATUS(status);
20897}
20898
20899#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Abhishek Singh85b74712014-10-08 11:38:19 +053020900
Abhishek Singh85b74712014-10-08 11:38:19 +053020901void WDA_FWStatsGetRspCallback(WDI_Status status,void *fwStatsResp,void *pUserData)
20902{
20903 tSirFWStatsInfo *fwStatsinfo = (tSirFWStatsInfo *)pUserData;
20904
20905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20906 "<------ %s " ,__func__);
20907 if (NULL == fwStatsinfo)
20908 {
20909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20910 "%s: pWdaParams received NULL", __func__);
20911 VOS_ASSERT(0);
20912 return;
20913 }
20914
20915 if(fwStatsinfo->callback)
20916 fwStatsinfo->callback(status, fwStatsResp, fwStatsinfo->data);
20917
20918 vos_mem_free(pUserData);
20919 return;
20920}
20921
20922
20923v_VOID_t WDA_ProcessFWStatsGetReq(tWDA_CbContext *pWDA,
20924 tSirFWStatsGetReq *pData)
20925{
20926
20927 WDI_Status wdiStatus;
20928 tSirFWStatsInfo *fwStatsinfo;
20929
20930 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20931 "------> %s" , __func__);
20932
20933 fwStatsinfo =
20934 (tSirFWStatsInfo *)vos_mem_malloc(sizeof(tSirFWStatsInfo));
20935 if (NULL == fwStatsinfo)
20936 {
20937 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20938 "%s: VOS MEM Alloc Failure", __func__);
20939 VOS_ASSERT(0);
20940 vos_mem_free(pData);
20941 return;
20942 }
20943
20944 fwStatsinfo->callback = (tSirFWStatsCallback)(pData->callback);
20945 fwStatsinfo->data = pData->data;
20946
20947 wdiStatus = WDI_FWStatsGetReq(fwStatsinfo,
20948 WDA_FWStatsGetRspCallback,
20949 pData->stats);
20950 if (WDI_STATUS_PENDING == wdiStatus)
20951 {
20952 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20953 "Pending received for %s:%d ", __func__, __LINE__);
20954 }
20955 else if (WDI_STATUS_SUCCESS != wdiStatus)
20956 {
20957 if (fwStatsinfo->callback)
20958 {
20959 fwStatsinfo->callback(WDI_STATUS_E_FAILURE, NULL ,fwStatsinfo->data);
20960 }
20961 vos_mem_free(fwStatsinfo);
20962 }
20963 vos_mem_free(pData);
20964}
20965
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053020966/*==========================================================================
20967 FUNCTION WDA_EncryptMsgRspCallback
20968
20969 DESCRIPTION
20970 API to send Encrypt message response to HDD
20971
20972 PARAMETERS
20973 pEventData: Response from FW
20974 pUserData: Data sent to firmware as part of request
20975===========================================================================*/
20976void WDA_EncryptMsgRspCallback(WDI_Status status, void *pEventData,
20977 void* pUserData)
20978{
20979 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
20980 tWDA_CbContext *pWDA = NULL;
20981 tpAniSirGlobal pMac;
20982 vos_msg_t vosMsg;
20983 tpSirEncryptedDataRspParams pEncRspParams;
20984 tpSetEncryptedDataRspParams pEncryptedDataRsp;
20985
20986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
20987 FL("%s:"), __func__);
20988 if (NULL == pWdaParams)
20989 {
20990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
20991 FL("%s: pWdaParams received NULL"), __func__);
20992 VOS_ASSERT(0);
20993 return;
20994 }
20995
20996 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
20997
20998 if (NULL == pWDA)
20999 {
21000 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21001 FL("%s: pWDA received NULL"), __func__);
21002 VOS_ASSERT(0);
21003 goto error;
21004 }
21005
21006 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
21007 if (NULL == pMac)
21008 {
21009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21010 FL("%s:pMac is NULL"), __func__);
21011 VOS_ASSERT(0);
21012 goto error;
21013 }
21014
21015 pEncryptedDataRsp = (tpSetEncryptedDataRspParams) pEventData;
21016
21017 pEncRspParams = vos_mem_malloc(sizeof(tSirEncryptedDataRspParams));
21018 if (NULL == pEncRspParams)
21019 {
21020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21021 FL("%s: VOS MEM Alloc Failure"), __func__);
21022 VOS_ASSERT(0);
21023 goto error;
21024 }
21025
21026 /* Message Header */
21027 pEncRspParams->mesgType = eWNI_SME_ENCRYPT_MSG_RSP;
21028 pEncRspParams->mesgLen = sizeof(tSirEncryptedDataRspParams);
21029 pEncRspParams->encryptedDataRsp.encryptedPayload.length =
21030 pEncryptedDataRsp->encryptedPayload.length;
21031 vos_mem_copy(pEncRspParams->encryptedDataRsp.encryptedPayload.data,
21032 pEncryptedDataRsp->encryptedPayload.data,
21033 pEncryptedDataRsp->encryptedPayload.length);
21034
21035 /* VOS message wrapper */
21036 vosMsg.type = eWNI_SME_ENCRYPT_MSG_RSP;
21037 vosMsg.bodyptr = (void *)pEncRspParams;
21038 vosMsg.bodyval = 0;
21039
21040 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
21041 {
21042 /* free the mem */
21043 vos_mem_free((v_VOID_t *) pEncRspParams);
21044 }
21045
21046error:
21047
21048 if (pWdaParams->wdaWdiApiMsgParam != NULL)
21049 {
21050 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21051 }
21052 if (pWdaParams->wdaMsgParam != NULL)
21053 {
21054 vos_mem_free(pWdaParams->wdaMsgParam);
21055 }
21056 vos_mem_free(pWdaParams) ;
21057
21058 return;
21059}
21060/*==========================================================================
21061 FUNCTION WDA_ProcessEncryptMsgReq
21062
21063 DESCRIPTION
21064 API to send Encrypt message Request to WDI
21065
21066 PARAMETERS
21067 pWDA: Pointer to WDA context
21068 wdaRequest: Pointer to Encrypt_msg req parameters
21069===========================================================================*/
21070VOS_STATUS WDA_ProcessEncryptMsgReq(tWDA_CbContext *pWDA,
21071 u8 *wdaRequest)
21072{
21073 WDI_Status status = WDI_STATUS_SUCCESS;
21074 tWDA_ReqParams *pWdaParams;
21075
21076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21077 FL("%s: "), __func__);
21078 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21079 if (NULL == pWdaParams)
21080 {
21081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21082 FL("%s: VOS MEM Alloc Failure"), __func__);
21083 VOS_ASSERT(0);
21084 return VOS_STATUS_E_NOMEM;
21085 }
21086 pWdaParams->pWdaContext = pWDA;
21087 pWdaParams->wdaMsgParam = wdaRequest;
21088 pWdaParams->wdaWdiApiMsgParam = NULL;
21089
21090 status = WDI_EncryptMsgReq((void *)wdaRequest,
21091 (WDI_EncryptMsgRspCb)WDA_EncryptMsgRspCallback,
21092 (void *)pWdaParams);
21093 if (IS_WDI_STATUS_FAILURE(status))
21094 {
21095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21096 FL("Failure to request. Free all the memory " ));
21097 vos_mem_free(pWdaParams->wdaMsgParam);
21098 vos_mem_free(pWdaParams);
21099 }
21100 return CONVERT_WDI2VOS_STATUS(status);
21101}
Abhishek Singh41988ba2015-05-25 19:42:29 +053021102/*==========================================================================
21103 FUNCTION WDA_ProcessSetRtsCtsHTVhtInd
21104
21105 DESCRIPTION
21106 API to enable/disable RTS/CTS for different modes.
21107
21108 PARAMETERS
21109 pWDA: Pointer to WDA context
21110 rtsCtsVal : Bit mask value to enable RTS/CTS for different modes
21111===========================================================================*/
21112
21113VOS_STATUS
21114WDA_ProcessSetRtsCtsHTVhtInd(tWDA_CbContext *pWDA,
21115 tANI_U32 rtsCtsVal)
21116{
21117 WDI_Status status;
21118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21119 FL("---> %s"), __func__);
21120 status = WDI_SetRtsCtsHTVhtInd(rtsCtsVal);
21121 if (WDI_STATUS_PENDING == status)
21122 {
21123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21124 FL("pending status received "));
21125 }
21126 else if (WDI_STATUS_SUCCESS_SYNC != status)
21127 {
21128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21129 FL("Failure status %d"), status);
21130 }
21131 return CONVERT_WDI2VOS_STATUS(status) ;
21132}
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053021133
21134void WDA_MonModeRspCallback(void *pEventData, void* pUserData)
Katya Nigamf0511f62015-05-05 16:40:57 +053021135{
21136 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053021137 tSirMonModeReq *pData;
Katya Nigamf0511f62015-05-05 16:40:57 +053021138
21139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21140 "<------ %s " ,__func__);
21141 if (NULL == pWdaParams)
21142 {
21143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21144 "%s: pWdaParams received NULL", __func__);
21145 VOS_ASSERT(0) ;
21146 return ;
21147 }
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053021148 pData = (tSirMonModeReq *)pWdaParams->wdaMsgParam;
21149 if (pData != NULL) {
21150 pData->callback(pData->magic, pData->cmpVar);
21151 vos_mem_free(pWdaParams->wdaMsgParam);
21152 }
Katya Nigamf0511f62015-05-05 16:40:57 +053021153 vos_mem_free(pWdaParams) ;
21154
21155 return;
21156}
21157
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053021158VOS_STATUS WDA_ProcessMonStartReq( tWDA_CbContext *pWDA, void *wdaRequest)
Katya Nigamf0511f62015-05-05 16:40:57 +053021159{
21160
21161 WDI_Status status = WDI_STATUS_SUCCESS;
21162 tWDA_ReqParams *pWdaParams;
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053021163 tSirMonModeReq *pMonModeData = (tSirMonModeReq *)wdaRequest;
Katya Nigamf0511f62015-05-05 16:40:57 +053021164
21165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21166 FL("%s: "), __func__);
21167 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21168 if (NULL == pWdaParams)
21169 {
21170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21171 FL("%s: VOS MEM Alloc Failure"), __func__);
21172 VOS_ASSERT(0);
21173 return VOS_STATUS_E_NOMEM;
21174 }
21175 pWdaParams->pWdaContext = pWDA;
21176 pWdaParams->wdaMsgParam = wdaRequest;
21177 pWdaParams->wdaWdiApiMsgParam = NULL;
21178
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053021179 status = WDI_MonStartReq(pMonModeData->data,
21180 (WDI_MonModeRspCb)WDA_MonModeRspCallback,
Katya Nigamf0511f62015-05-05 16:40:57 +053021181 (void *)pWdaParams);
21182 if (IS_WDI_STATUS_FAILURE(status))
21183 {
21184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21185 "Failure to request. Free all the memory " );
21186 vos_mem_free(pWdaParams->wdaMsgParam);
21187 vos_mem_free(pWdaParams);
21188 }
21189 return CONVERT_WDI2VOS_STATUS(status);
21190}
21191
Katya Nigamf0511f62015-05-05 16:40:57 +053021192VOS_STATUS WDA_ProcessMonStopReq( tWDA_CbContext *pWDA, void* wdaRequest)
21193{
21194
21195 WDI_Status status = WDI_STATUS_SUCCESS;
21196 tWDA_ReqParams *pWdaParams;
21197
21198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21199 FL("%s: "), __func__);
21200 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
21201 if (NULL == pWdaParams)
21202 {
21203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21204 FL("%s: VOS MEM Alloc Failure"), __func__);
21205 VOS_ASSERT(0);
21206 return VOS_STATUS_E_NOMEM;
21207 }
21208 pWdaParams->pWdaContext = pWDA;
21209 pWdaParams->wdaMsgParam = wdaRequest;
21210 pWdaParams->wdaWdiApiMsgParam = NULL;
21211
Bhargav Shah1ae5de02015-07-20 13:32:31 +053021212 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21213 "%s: Processing Mon stop request", __func__);
Hanumantha Reddy Pothula91cdd7f2015-09-03 21:25:16 +053021214 status = WDI_MonStopReq((WDI_MonModeRspCb)WDA_MonModeRspCallback,
Katya Nigamf0511f62015-05-05 16:40:57 +053021215 (void *)pWdaParams);
21216
21217 if (IS_WDI_STATUS_FAILURE(status))
21218 {
21219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21220 "Failure to request. Free all the memory " );
21221 vos_mem_free(pWdaParams->wdaMsgParam);
21222 vos_mem_free(pWdaParams);
21223 }
21224 return CONVERT_WDI2VOS_STATUS(status);
21225}
Mahesh A Saptasagarbeca12c2015-09-07 16:21:06 +053021226
21227VOS_STATUS WDA_ProcessEnableDisableCAEventInd(tWDA_CbContext *pWDA, tANI_U8 val)
21228{
21229 WDI_Status status;
21230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21231 FL("---> %s"), __func__);
21232 status = WDI_EnableDisableCAEventInd(val);
21233 if (WDI_STATUS_PENDING == status)
21234 {
21235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21236 FL("pending status received "));
21237 }
21238 else if (WDI_STATUS_SUCCESS_SYNC != status)
21239 {
21240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21241 FL("Failure status %d"), status);
21242 }
21243 return CONVERT_WDI2VOS_STATUS(status) ;
21244}
Arun Khandavalli7eeb1592015-10-19 21:36:57 +053021245
21246/*==========================================================================
21247 FUNCTION WDA_WifiConfigSetRspCallback
21248
21249 DESCRIPTION
21250 API to process set WifiConfig response from FW
21251
21252 PARAMETERS
21253 pRsp: Pointer to set WifiConfig response
21254 pUserData: Pointer to user data
21255
21256 RETURN VALUE
21257 NONE
21258
21259===========================================================================*/
21260void WDA_WifiConfigSetRspCallback(void *pEventData, void* pUserData)
21261{
21262 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
21263
21264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21265 "<------ %s " ,__func__);
21266
21267 if(NULL == pWdaParams)
21268 {
21269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21270 "%s: pWdaParams received NULL", __func__);
21271 VOS_ASSERT(0);
21272 return ;
21273 }
21274
21275 if(NULL == pWdaParams->wdaMsgParam)
21276 {
21277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21278 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
21279 VOS_ASSERT(0);
21280 vos_mem_free(pWdaParams);
21281 return ;
21282 }
21283
21284 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
21285 vos_mem_free(pWdaParams->wdaMsgParam);
21286 vos_mem_free(pWdaParams);
21287
21288 return;
21289}
21290
21291/*==========================================================================
21292 FUNCTION WDA_ProcessWifiConfigReq
21293
21294 DESCRIPTION
21295 API to send Set WifiConfig params request to WDI
21296
21297 PARAMETERS
21298 pWDA: Pointer to WDA context
21299 wdaRequest: Pointer to set WifiConfig req parameters
21300===========================================================================*/
21301
21302VOS_STATUS WDA_ProcessWifiConfigReq(tWDA_CbContext *pWDA,
21303 tSetWifiConfigParams *pwdaWificonfig)
21304{
21305 WDI_Status status = WDI_STATUS_SUCCESS;
21306 WDI_WifiConfigSetReqType *pwdiWifConfigSetReqParams;
21307 tWDA_ReqParams *pWdaParams ;
21308 WDI_Status wstatus;
21309
21310 /* Sanity Check*/
21311 if(NULL == pwdaWificonfig)
21312 {
21313 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21314 "%s: tSetWifiConfigParams received NULL", __func__);
21315 VOS_ASSERT(0) ;
21316 return VOS_STATUS_E_FAULT;
21317 }
21318
21319 pwdiWifConfigSetReqParams = (WDI_WifiConfigSetReqType *)vos_mem_malloc(
21320 sizeof(WDI_WifiConfigSetReqType));
21321 if(NULL == pwdiWifConfigSetReqParams)
21322 {
21323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21324 "%s: VOS MEM Alloc Failure", __func__);
21325 VOS_ASSERT(0);
21326 vos_mem_free(pwdaWificonfig);
21327 return VOS_STATUS_E_NOMEM;
21328 }
21329
21330 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
21331 if(NULL == pWdaParams)
21332 {
21333 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21334 "%s: VOS MEM Alloc Failure", __func__);
21335 VOS_ASSERT(0);
21336 vos_mem_free(pwdiWifConfigSetReqParams);
21337 vos_mem_free(pwdaWificonfig);
21338 return VOS_STATUS_E_NOMEM;
21339 }
21340 pwdiWifConfigSetReqParams->paramType = pwdaWificonfig->paramType;
21341 pwdiWifConfigSetReqParams->paramValue = pwdaWificonfig->paramValue;
21342 vos_mem_copy(pwdiWifConfigSetReqParams->bssId,
21343 &(pwdaWificonfig->bssId), sizeof(tSirMacAddr));
21344
21345 pWdaParams->pWdaContext = pWDA;
Arun Khandavallic7ca4172015-10-21 10:42:42 +053021346 pWdaParams->wdaMsgParam = pwdaWificonfig;
Arun Khandavalli7eeb1592015-10-19 21:36:57 +053021347 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiWifConfigSetReqParams;
21348
21349 wstatus = WDI_WifiConfigSetReq(pwdiWifConfigSetReqParams,
21350 (WDI_WifiConfigSetRspCb)WDA_WifiConfigSetRspCallback,
21351 pWdaParams);
21352 if(IS_WDI_STATUS_FAILURE(wstatus))
21353 {
21354 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21355 "Failure in sendind WifiConfigReq, free all the memory" );
21356 status = CONVERT_WDI2VOS_STATUS(wstatus);
21357 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
21358 vos_mem_free(pWdaParams->wdaMsgParam);
21359 vos_mem_free(pWdaParams);
21360 }
21361
21362 return status;
21363
21364}
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053021365
21366#ifdef FEATURE_OEM_DATA_SUPPORT
21367/*
21368 * FUNCTION: WDA_ProcessStartOemDataReqIndNew
21369 * Request to WDI.
21370 */
21371VOS_STATUS WDA_ProcessStartOemDataReqIndNew(tWDA_CbContext *pWDA,
21372 tOemDataReqNewConfig *pOemDataReqNewConfig)
21373{
21374 VOS_STATUS status = VOS_STATUS_SUCCESS;
21375 WDI_Status wstatus;
21376 WDI_OemDataReqNewConfig *wdiOemDataReqNewConfig;
21377
21378 /* Sanity Check*/
21379 if(NULL == pOemDataReqNewConfig)
21380 {
21381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21382 "%s: pOemDataReqNewConfig received NULL", __func__);
21383 VOS_ASSERT(0) ;
21384 return VOS_STATUS_E_FAULT;
21385 }
21386
21387 wdiOemDataReqNewConfig = (WDI_OemDataReqNewConfig *)vos_mem_malloc(
21388 sizeof(WDI_OemDataReqNewConfig));
21389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21390 "------> %s " ,__func__);
21391
21392 if(NULL == wdiOemDataReqNewConfig)
21393 {
21394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21395 "%s: VOS MEM Alloc Failure", __func__);
21396 VOS_ASSERT(0);
21397 vos_mem_free(pOemDataReqNewConfig);
21398 return VOS_STATUS_E_NOMEM;
21399 }
21400
21401 vos_mem_copy(wdiOemDataReqNewConfig, pOemDataReqNewConfig,
21402 sizeof(WDI_OemDataReqNewConfig));
21403
21404 wstatus = WDI_StartOemDataReqIndNew(wdiOemDataReqNewConfig);
21405
21406 if (WDI_STATUS_PENDING == wstatus)
21407 {
21408 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21409 FL("pending status received "));
21410 }
21411 else if ((WDI_STATUS_SUCCESS_SYNC != wstatus) && (WDI_STATUS_SUCCESS != wstatus))
21412 {
21413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21414 FL("Failure in OemDataReqIndNew WDI API, free all memory %d"), wstatus);
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053021415 }
21416
Selvaraj, Sridhar2133b112016-04-13 14:45:00 +053021417 vos_mem_free(wdiOemDataReqNewConfig);
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053021418 vos_mem_free(pOemDataReqNewConfig);
21419
21420 return status;
21421}
Padma, Santhosh Kumar2ccac212015-10-20 17:27:27 +053021422
Mahesh A Saptasagarcfc65ae2015-12-22 15:06:10 +053021423void WDA_GetCurrentAntennaIndexCallback(WDI_Status status, void *params,
21424 void *pUserData)
21425{
21426 tSirAntennaDiversitySelectionInfo *pAntennaDivSelInfo =
21427 (tSirAntennaDiversitySelectionInfo *)pUserData;
21428
21429 tSirAntennaDivSelRsp *resParams = (tSirAntennaDivSelRsp *)params;
21430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21431 "<------ %s " ,__func__);
21432 if (NULL == pAntennaDivSelInfo)
21433 {
21434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21435 "%s: pWdaParams received NULL", __func__);
21436 VOS_ASSERT(0) ;
21437 return ;
21438 }
21439 if (NULL == resParams)
21440 {
21441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21442 "%s: resParams received NULL", __func__);
21443 VOS_ASSERT(0) ;
21444 return ;
21445 }
21446
21447 if (pAntennaDivSelInfo->callback)
21448 {
21449 if (WDI_STATUS_SUCCESS == status)
21450 {
21451 pAntennaDivSelInfo->callback(resParams->selectedAntennaId,
21452 pAntennaDivSelInfo->data);
21453 }
21454 else
21455 {
21456 pAntennaDivSelInfo->callback(-1,
21457 pAntennaDivSelInfo->data);
21458 }
21459 }
21460
21461 vos_mem_free(pUserData);
21462 return;
21463}
21464
21465/*
21466 * FUNCTION: WDA_ProcessAntennaDiversitySelectionReq
21467 * Request to WDI.
21468 */
21469v_VOID_t WDA_ProcessAntennaDiversitySelectionReq(tWDA_CbContext *pWDA,
21470 tSirAntennaDiversitySelectionReq *pData)
21471{
21472 WDI_Status wdiStatus;
21473 tSirAntennaDiversitySelectionInfo *pAntennaDivSelInfo;
21474
21475 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21476 "------> %s " , __func__);
21477
21478 pAntennaDivSelInfo = (tSirAntennaDiversitySelectionInfo *)
21479 vos_mem_malloc(sizeof(tSirAntennaDiversitySelectionInfo));
21480 if (NULL == pAntennaDivSelInfo)
21481 {
21482 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21483 "%s: VOS MEM Alloc Failure", __func__);
21484 VOS_ASSERT(0);
21485 vos_mem_free(pData);
21486 return;
21487 }
21488
21489 pAntennaDivSelInfo->callback = (tAntennaDivSelCB)(pData->callback);
21490 pAntennaDivSelInfo->data = pData->data;
21491
21492 wdiStatus = WDI_GetCurrentAntennaIndex(pAntennaDivSelInfo,
21493 WDA_GetCurrentAntennaIndexCallback, pData->reserved);
21494
21495 if (WDI_STATUS_PENDING == wdiStatus)
21496 {
21497 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21498 "Pending received for %s:%d ", __func__, __LINE__);
21499 }
21500 else if (WDI_STATUS_SUCCESS != wdiStatus)
21501 {
21502 if (pAntennaDivSelInfo->callback)
21503 {
21504 pAntennaDivSelInfo->callback(-1, pAntennaDivSelInfo->data);
21505 }
21506 }
21507
21508 vos_mem_free(pData);
21509 return;
21510}
21511
Mahesh A Saptasagar7d432952016-02-09 14:01:03 +053021512/*
21513 * FUNCTION: WDA_ProcessBcnMissPenaltyCount
21514 * Request to WDI.
21515 */
21516VOS_STATUS WDA_ProcessBcnMissPenaltyCount(tWDA_CbContext *pWDA,
21517 tModifyRoamParamsReqParams *params)
21518{
21519 WDI_Status status;
21520
21521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21522 FL("---> %s"), __func__);
21523
21524 if (NULL == params)
21525 {
21526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21527 FL("tModifyRoamParamsReqParams is received NULL"));
21528 return VOS_STATUS_E_NOMEM;
21529 }
21530
21531 status = WDI_SetBcnMissPenaltyCount((WDI_ModifyRoamParamsReqType *)params);
21532 if (WDI_STATUS_PENDING == status)
21533 {
21534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
21535 FL("pending status received "));
21536 }
21537 else if (WDI_STATUS_SUCCESS_SYNC != status)
21538 {
21539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
21540 FL("Failure status %d"), status);
21541 }
21542 vos_mem_free(params);
21543 return CONVERT_WDI2VOS_STATUS(status) ;
21544}
21545
Mahesh A Saptasagarcfc65ae2015-12-22 15:06:10 +053021546#endif