blob: 8efe026189c15cbbc4510aa2a6589c1aa481ca0a [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05302 * Copyright (c) 2012-2015 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
88#define IS_WDI_STATUS_FAILURE(status) \
89 ((WDI_STATUS_SUCCESS != (status)) && (WDI_STATUS_PENDING != (status)))
Jeff Johnson295189b2012-06-20 16:38:30 -070090#define CONVERT_WDI2VOS_STATUS(x) \
91 ((IS_WDI_STATUS_FAILURE(x)) ? VOS_STATUS_E_FAILURE : VOS_STATUS_SUCCESS)
92
93/* macro's for acessing TL API/data structures */
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070094#define WDA_TL_GET_STA_STATE(a, b, c) WLANTL_GetSTAState(a, b, c)
Jeff Johnson295189b2012-06-20 16:38:30 -070095#define WDA_TL_GET_TX_PKTCOUNT(a, b, c, d) WLANTL_GetTxPktCount(a, b, c, d)
Jeff Johnson295189b2012-06-20 16:38:30 -070096#define WDA_GET_BA_TXFLAG(a, b, c) \
97 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) & (1 << (c)))
98
99#define WDA_SET_BA_TXFLAG(a, b, c) \
100 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) |= (1 << (c)))
101
102#define WDA_CLEAR_BA_TXFLAG(a, b, c) \
103 (((a)->wdaStaInfo[b].ucUseBaBitmap) &= ~(1 << c))
Jeff Johnson295189b2012-06-20 16:38:30 -0700104#define WDA_TL_BA_SESSION_ADD(a, b, c, d, e, f, g) \
105 WLANTL_BaSessionAdd(a, b, c, d, e, f, g)
Jeff Johnson295189b2012-06-20 16:38:30 -0700106/* timer related Macros */
107#define WDA_CREATE_TIMER(a, b, c, d, e, f, g) \
108 tx_timer_create(a, b, c, d, e, f, g)
109#define WDA_START_TIMER(a) tx_timer_activate(a)
110#define WDA_STOP_TIMER(a) tx_timer_deactivate(a)
111#define WDA_DESTROY_TIMER(a) tx_timer_delete(a)
Jeff Johnson32d95a32012-09-10 13:15:23 -0700112#define WDA_WDI_START_TIMEOUT (WDI_RESPONSE_TIMEOUT + 5000)
Jeff Johnson295189b2012-06-20 16:38:30 -0700113
114#define WDA_LAST_POLLED_THRESHOLD(a, curSta, tid) \
115 ((a)->wdaStaInfo[curSta].framesTxed[tid] + WDA_BA_TX_FRM_THRESHOLD)
Jeff Johnson295189b2012-06-20 16:38:30 -0700116#define WDA_BA_MAX_WINSIZE (64)
Jeff Johnson295189b2012-06-20 16:38:30 -0700117#define WDA_INVALID_KEY_INDEX 0xFF
Jeff Johnson295189b2012-06-20 16:38:30 -0700118#define WDA_NUM_PWR_SAVE_CFG 11
Jeff Johnson295189b2012-06-20 16:38:30 -0700119#define WDA_TX_COMPLETE_TIME_OUT_VALUE 1000
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800120#define WDA_TRAFFIC_STATS_TIME_OUT_VALUE 1000
Jeff Johnson295189b2012-06-20 16:38:30 -0700121
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700122#define WDA_MAX_RETRIES_TILL_RING_EMPTY 1000 /* MAX 10000 msec = 10 seconds wait */
Jeff Johnson295189b2012-06-20 16:38:30 -0700123
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700124#define WDA_WAIT_MSEC_TILL_RING_EMPTY 10 /* 10 msec wait per cycle */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -0700125#define WDA_IS_NULL_MAC_ADDRESS(mac_addr) \
126 ((mac_addr[0] == 0x00) && (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) &&\
127 (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) && (mac_addr[3] == 0x00))
128
129#define WDA_MAC_ADDR_ARRAY(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
130#define WDA_MAC_ADDRESS_STR "%02x:%02x:%02x:%02x:%02x:%02x"
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -0800131#define WDA_DUMPCMD_WAIT_TIMEOUT 10000
132
Jeff Johnson295189b2012-06-20 16:38:30 -0700133/* extern declarations */
134extern void vos_WDAComplete_cback(v_PVOID_t pVosContext);
Hoonki Lee9af07cf2013-04-24 01:21:58 -0700135extern wpt_uint8 WDI_GetActiveSessionsCount (void *pWDICtx, wpt_macAddr macBSSID, wpt_boolean skipBSSID);
136
Jeff Johnson295189b2012-06-20 16:38:30 -0700137/* forward declarations */
138void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
139 void *pBodyptr, tANI_U32 bodyVal) ;
140VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
141 WDI_StartReqParamsType *wdiStartParams ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700142VOS_STATUS WDA_wdiCompleteCB(v_PVOID_t pVosContext) ;
143VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams);
144
145extern v_BOOL_t sys_validateStaConfig( void *pImage, unsigned long cbFile,
146 void **ppStaConfig, v_SIZE_t *pcbStaConfig ) ;
Sachin Ahujaa4b33a32014-06-18 13:22:00 +0530147void processCfgDownloadReq(tpAniSirGlobal pMac) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700148void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
149 WDI_ConfigBSSReqInfoType *wdiBssParams, tAddBssParams *wdaBssParams) ;
150void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
151 WDI_ConfigStaReqInfoType *wdiStaParams, tAddStaParams *wdaStaParams) ;
152void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
153 void* pUserData ) ;
154static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA) ;
155static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA);
156void WDA_BaCheckActivity(tWDA_CbContext *pWDA) ;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800157void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700158void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams, void* pUserData);
Jeff Johnson295189b2012-06-20 16:38:30 -0700159#ifdef WLAN_FEATURE_VOWIFI_11R
160VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA, tAggrAddTsParams *pAggrAddTsReqParams);
161#endif /* WLAN_FEATURE_VOWIFI_11R */
162
Jeff Johnson295189b2012-06-20 16:38:30 -0700163void WDA_TimerHandler(v_VOID_t *pWDA, tANI_U32 timerInfo) ;
164void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pContext) ;
165VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700166#ifdef FEATURE_WLAN_SCAN_PNO
167static VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA, tSirPNOScanReq *pPNOScanReqParams);
168static VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA, tSirSetRSSIFilterReq* pRssiFilterParams);
169static VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA, tSirUpdateScanParams *pUpdateScanParams);
170#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700171#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -0700172VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,tSirRoamOffloadScanReq *pRoamOffloadScanReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700173void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData);
174void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType);
175void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType);
176#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700177#ifdef WLAN_FEATURE_PACKET_FILTERING
178static VOS_STATUS WDA_Process8023MulticastListReq (
179 tWDA_CbContext *pWDA,
180 tSirRcvFltMcAddrList *pRcvFltMcAddrLis
181 );
182static VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (
183 tWDA_CbContext *pWDA,
184 tSirRcvPktFilterCfgType *pRcvPktFilterCfg
185 );
186static VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (
187 tWDA_CbContext *pWDA,
188 tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp
189 );
190static VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (
191 tWDA_CbContext *pWDA,
192 tSirRcvFltPktClearParam *pRcvFltPktClearParam
193 );
194#endif // WLAN_FEATURE_PACKET_FILTERING
Jeff Johnson295189b2012-06-20 16:38:30 -0700195VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA, tSirSetPowerParamsReq *pPowerParams);
Jeff Johnson295189b2012-06-20 16:38:30 -0700196static VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
197 tpTxControlParams pTxCtrlParam);
Jeff Johnson295189b2012-06-20 16:38:30 -0700198VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
199 v_U8_t *pDefaultKeyId,
200 v_U8_t *pNumKeys,
201 WDI_KeysType *pWdiKeys );
202
203#ifdef WLAN_FEATURE_GTK_OFFLOAD
204static VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA, tpSirGtkOffloadParams pGtkOffloadParams);
205static VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA, tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp);
206#endif // WLAN_FEATURE_GTK_OFFLOAD
207
c_hpothu92367912014-05-01 15:18:17 +0530208v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
209 tSirBcnMissRateReq *pData);
210
Jeff Johnson295189b2012-06-20 16:38:30 -0700211VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
212 tAniSetTmLevelReq *setTmLevelReq);
Mohit Khanna4a70d262012-09-11 16:30:12 -0700213#ifdef WLAN_FEATURE_11AC
214VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
215 tUpdateVHTOpMode *pData);
216#endif
Leo Chang9056f462013-08-01 19:21:11 -0700217
218#ifdef FEATURE_WLAN_LPHB
219VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
220 tSirLPHBReq *pData);
221#endif /* FEATURE_WLAN_LPHB */
Sunil Duttbd736ed2014-05-26 21:19:41 +0530222
Dino Mycle41bdc942014-06-10 11:30:24 +0530223#ifdef WLAN_FEATURE_EXTSCAN
224VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
225 tSirEXTScanStartReqParams *wdaRequest);
226VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
227 tSirEXTScanStopReqParams *wdaRequest);
228VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
229 tSirEXTScanGetCachedResultsReqParams *wdaRequest);
230VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
231 tSirGetEXTScanCapabilitiesReqParams *wdaRequest);
232VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
233 tSirEXTScanSetBssidHotListReqParams *wdaRequest);
234VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
235 tSirEXTScanResetBssidHotlistReqParams *wdaRequest);
236VOS_STATUS WDA_ProcessEXTScanSetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
237 tSirEXTScanSetSignificantChangeReqParams *wdaRequest);
238VOS_STATUS WDA_ProcessEXTScanResetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
239 tSirEXTScanResetSignificantChangeReqParams *wdaRequest);
240#endif /* WLAN_FEATURE_EXTSCAN */
241
Sunil Duttbd736ed2014-05-26 21:19:41 +0530242#ifdef WLAN_FEATURE_LINK_LAYER_STATS
243VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
244 tSirLLStatsSetReq *wdaRequest);
245
246VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
247 tSirLLStatsGetReq *wdaRequest);
248
249VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
250 tSirLLStatsClearReq *wdaRequest);
251#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Abhishek Singh85b74712014-10-08 11:38:19 +0530252
253v_VOID_t WDA_ProcessFWStatsGetReq(tWDA_CbContext *pWDA,
254 tSirFWStatsGetReq *wdaRequest);
255
Srinivas Dasari4dae48f2014-11-26 21:14:16 +0530256VOS_STATUS WDA_ProcessEncryptMsgReq(tWDA_CbContext *pWDA,
257 u8 *wdaRequest);
258
Jeff Johnson295189b2012-06-20 16:38:30 -0700259/*
260 * FUNCTION: WDA_open
261 * Allocate the WDA context
262 */
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530263VOS_STATUS WDA_open(v_PVOID_t pVosContext, v_PVOID_t devHandle,
Jeff Johnson295189b2012-06-20 16:38:30 -0700264 tMacOpenParameters *pMacParams )
265{
266 tWDA_CbContext *wdaContext;
267 VOS_STATUS status;
268 WDI_DeviceCapabilityType wdiDevCapability = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700269 /* Allocate WDA context */
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +0530270 status = vos_alloc_context(pVosContext, VOS_MODULE_ID_WDA,
Jeff Johnson295189b2012-06-20 16:38:30 -0700271 (v_VOID_t **)&wdaContext, sizeof(tWDA_CbContext)) ;
272 if(!VOS_IS_STATUS_SUCCESS(status))
273 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +0530274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "%s: Failed to "
275 "allocate context for WDA - status = %d",__func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700276 return VOS_STATUS_E_NOMEM;
277 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700278 /*__asm int 3;*/
279 vos_mem_zero(wdaContext,sizeof(tWDA_CbContext));
280
281 /* Initialize data structures */
282 wdaContext->pVosContext = pVosContext;
283 wdaContext->wdaState = WDA_INIT_STATE;
284 wdaContext->uTxFlowMask = WDA_TXFLOWMASK;
285
286 /* Initialize WDA-WDI synchronization event */
287 status = vos_event_init(&wdaContext->wdaWdiEvent);
288 if(!VOS_IS_STATUS_SUCCESS(status))
289 {
290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800291 "WDI Sync Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800292 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700293 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700294 /* Init Frame transfer event */
295 status = vos_event_init(&wdaContext->txFrameEvent);
296 if(!VOS_IS_STATUS_SUCCESS(status))
297 {
298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800299 "VOS Mgmt Frame Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800300 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700301 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700302 status = vos_event_init(&wdaContext->suspendDataTxEvent);
303 if(!VOS_IS_STATUS_SUCCESS(status))
304 {
305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800306 "VOS suspend data tx Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800307 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700308 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700309 status = vos_event_init(&wdaContext->waitOnWdiIndicationCallBack);
310 if(!VOS_IS_STATUS_SUCCESS(status))
311 {
312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800313 "VOS wait On Wdi Ind Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800314 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700315 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700316 vos_trace_setLevel(VOS_MODULE_ID_WDA,VOS_TRACE_LEVEL_ERROR);
Jeff Johnson295189b2012-06-20 16:38:30 -0700317 wdaContext->driverMode = pMacParams->driverType;
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530318 if(WDI_STATUS_SUCCESS != WDI_Init(devHandle, &wdaContext->pWdiContext,
Jeff Johnson295189b2012-06-20 16:38:30 -0700319 &wdiDevCapability, pMacParams->driverType))
320 {
321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
322 "WDI Init failed" );
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800323 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700324 }
325 else
326 {
327 pMacParams->maxStation = wdiDevCapability.ucMaxSTASupported ;
328 pMacParams->maxBssId = wdiDevCapability.ucMaxBSSSupported;
329 pMacParams->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
Jeff Johnson295189b2012-06-20 16:38:30 -0700330 /* update max STA in WDA used for BA */
331 wdaContext->wdaMaxSta = pMacParams->maxStation;
332 /* store the frameTransRequired flag in wdaContext, to send this to HAL
333 * in WDA_Start
334 */
335 wdaContext->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
336 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700337 return status;
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800338
339error:
340 vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
341 return VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -0700342}
343
Jeff Johnson295189b2012-06-20 16:38:30 -0700344/*
345 * FUNCTION: WDA_preStart
346 * Trigger DAL-AL to start CFG download
347 */
348VOS_STATUS WDA_preStart(v_PVOID_t pVosContext)
349{
350 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
351 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700352 /*
353 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
354 */
355 wdaMsg.type = WNI_CFG_DNLD_REQ ;
356 wdaMsg.bodyptr = NULL;
357 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700358 /* post the message.. */
359 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
360 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
361 {
362 vosStatus = VOS_STATUS_E_BADMSG;
363 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700364 return( vosStatus );
365}
Jeff Johnson295189b2012-06-20 16:38:30 -0700366/*
367 * FUNCTION: WDA_wdiStartCallback
368 * Once WDI_Start is finished, WDI start callback will be called by WDI
369 * to indicate completion of WDI_Start.
370 */
371void WDA_wdiStartCallback(WDI_StartRspParamsType *wdiRspParams,
372 void *pVosContext)
373{
374 tWDA_CbContext *wdaContext;
375 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700376 if (NULL == pVosContext)
377 {
378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700379 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700380 return;
381 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700382 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
383 if (NULL == wdaContext)
384 {
385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700386 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700387 return;
388 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700389 if (WDI_STATUS_SUCCESS != wdiRspParams->wdiStatus)
390 {
391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700392 "%s: WDI_Start() failure reported", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700393 }
394 else
395 {
396 wdaContext->wdaState = WDA_START_STATE;
397 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700398 /* extract and save version information from the Start Response */
399 wdaContext->wcnssWlanCompiledVersion.major =
400 wdiRspParams->wlanCompiledVersion.major;
401 wdaContext->wcnssWlanCompiledVersion.minor =
402 wdiRspParams->wlanCompiledVersion.minor;
403 wdaContext->wcnssWlanCompiledVersion.version =
404 wdiRspParams->wlanCompiledVersion.version;
405 wdaContext->wcnssWlanCompiledVersion.revision =
406 wdiRspParams->wlanCompiledVersion.revision;
407 wdaContext->wcnssWlanReportedVersion.major =
408 wdiRspParams->wlanReportedVersion.major;
409 wdaContext->wcnssWlanReportedVersion.minor =
410 wdiRspParams->wlanReportedVersion.minor;
411 wdaContext->wcnssWlanReportedVersion.version =
412 wdiRspParams->wlanReportedVersion.version;
413 wdaContext->wcnssWlanReportedVersion.revision =
414 wdiRspParams->wlanReportedVersion.revision;
415 wpalMemoryCopy(wdaContext->wcnssSoftwareVersionString,
416 wdiRspParams->wcnssSoftwareVersion,
417 sizeof(wdaContext->wcnssSoftwareVersionString));
418 wpalMemoryCopy(wdaContext->wcnssHardwareVersionString,
419 wdiRspParams->wcnssHardwareVersion,
420 sizeof(wdaContext->wcnssHardwareVersionString));
Jeff Johnson295189b2012-06-20 16:38:30 -0700421 /* Notify WDA_start that WDI_Start has completed */
422 status = vos_event_set(&wdaContext->wdaWdiEvent);
Jeff Johnson43971f52012-07-17 12:26:56 -0700423 if (VOS_STATUS_SUCCESS != status)
Jeff Johnson295189b2012-06-20 16:38:30 -0700424 {
425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700426 "%s: Unable to unblock WDA_start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700427 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700428 return;
429}
430
Jeff Johnson295189b2012-06-20 16:38:30 -0700431/*
432 * FUNCTION: WDA_start
433 * Prepare TLV configuration and call WDI_Start.
434 */
Jeff Johnson295189b2012-06-20 16:38:30 -0700435VOS_STATUS WDA_start(v_PVOID_t pVosContext)
436{
437 tWDA_CbContext *wdaContext;
438 VOS_STATUS status;
439 WDI_Status wdiStatus;
440 WDI_StartReqParamsType wdiStartParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700441 if (NULL == pVosContext)
442 {
443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700444 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700445 return VOS_STATUS_E_FAILURE;
446 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700447 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
448 if (NULL == wdaContext)
449 {
450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700451 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700452 return VOS_STATUS_E_FAILURE;
453 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700454 /* Non-FTM mode, WDA status for START must be INIT
455 * FTM mode, WDA Status for START can be INIT or STOP */
456 if ( (WDA_INIT_STATE != wdaContext->wdaState) &&
457 (WDA_STOP_STATE != wdaContext->wdaState) )
458 {
459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
460 "%s: Invoked from wrong state %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700461 __func__, wdaContext->wdaState );
Jeff Johnson295189b2012-06-20 16:38:30 -0700462 return VOS_STATUS_E_FAILURE;
463 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700464 /* initialize the wdiStartParam. Note that we can create this on
465 the stack since we won't exit until WDI_Start() completes or
466 times out */
467 vos_mem_set(&wdiStartParam, sizeof(wdiStartParam), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700468 wdiStartParam.wdiDriverType = wdaContext->driverMode;
Jeff Johnson295189b2012-06-20 16:38:30 -0700469 /* prepare the config TLV for the WDI */
470 status = WDA_prepareConfigTLV(pVosContext, &wdiStartParam);
471 if ( !VOS_IS_STATUS_SUCCESS(status) )
472 {
473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700474 "%s: Unable to prepare Config TLV", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700475 return VOS_STATUS_E_FAILURE;
476 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700477 /* note from here onwards if an error occurs we must
478 reclaim the config TLV buffer */
Jeff Johnson295189b2012-06-20 16:38:30 -0700479 wdiStartParam.wdiLowLevelIndCB = WDA_lowLevelIndCallback;
480 wdiStartParam.pIndUserData = (v_PVOID_t *)wdaContext;
481 wdiStartParam.wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700482 /* initialize the WDA-WDI synchronization event */
483 vos_event_reset(&wdaContext->wdaWdiEvent);
Jeff Johnson295189b2012-06-20 16:38:30 -0700484 /* call WDI start */
485 wdiStatus = WDI_Start(&wdiStartParam,
486 (WDI_StartRspCb)WDA_wdiStartCallback,
487 (v_VOID_t *)pVosContext);
488 if ( IS_WDI_STATUS_FAILURE(wdiStatus) )
489 {
490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700491 "%s: WDI Start failed", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700492 vos_mem_free(wdiStartParam.pConfigBuffer);
493 return VOS_STATUS_E_FAILURE;
494 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700495 /* wait for WDI start to invoke our callback */
496 status = vos_wait_single_event( &wdaContext->wdaWdiEvent,
497 WDA_WDI_START_TIMEOUT );
498 if ( !VOS_IS_STATUS_SUCCESS(status) )
499 {
500 if ( VOS_STATUS_E_TIMEOUT == status )
501 {
502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700503 "%s: Timeout occurred during WDI_Start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700504 }
505 else
506 {
507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
508 "%s: Error %d while waiting for WDI_Start",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700509 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700510 }
511 vos_mem_free(wdiStartParam.pConfigBuffer);
Siddharth Bhalbea38ad2014-10-12 14:10:52 +0530512 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700513 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700514 /* WDI_Start() has completed so we can resume our work */
Jeff Johnson295189b2012-06-20 16:38:30 -0700515 /* we no longer need the config TLV */
516 vos_mem_free(wdiStartParam.pConfigBuffer);
Jeff Johnson295189b2012-06-20 16:38:30 -0700517 /* if we are not in the START state then WDI_Start() failed */
518 if (WDA_START_STATE != wdaContext->wdaState)
519 {
520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700521 "%s: WDI_Start() failure detected", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700522 return VOS_STATUS_E_FAILURE;
523 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700524 /* FTM mode does not need to monitor BA activity */
525 if ( eDRIVER_TYPE_MFG != wdaContext->driverMode )
526 {
527 status = wdaCreateTimers(wdaContext) ;
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -0800528 if(VOS_STATUS_SUCCESS == status)
529 {
530 wdaContext->wdaTimersCreated = VOS_TRUE;
531 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700532 }
Leo Chang9d76f622013-08-23 16:34:52 -0700533 else
534 {
535 vos_event_init(&wdaContext->ftmStopDoneEvent);
536 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700537 return status;
538}
539
Jeff Johnson295189b2012-06-20 16:38:30 -0700540/*
541 * FUNCTION: WDA_prepareConfigTLV
542 * Function to prepare CFG for DAL(WDA)
543 */
544VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
545 WDI_StartReqParamsType *wdiStartParams )
546{
547 /* get pMac to acess CFG data base */
548 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
549 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
550 tHalCfg *tlvStruct = NULL ;
551 tANI_U8 *tlvStructStart = NULL ;
552 tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
553 v_PVOID_t *configParam;
554 tANI_U32 configParamSize;
555 tANI_U32 *configDataValue;
556 WDI_WlanVersionType wcnssCompiledApiVersion;
Wilson Tsaof8b37942013-09-06 10:49:00 -0700557 tANI_U8 i;
558
Jeff Johnson295189b2012-06-20 16:38:30 -0700559 if ((NULL == pMac)||(NULL == wdaContext))
560 {
561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700562 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700563 VOS_ASSERT(0);
564 return VOS_STATUS_E_FAILURE;
565 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700566 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
567 WNI_CFG_STA_ID_LEN +
568 WNI_CFG_EDCA_WME_ACBK_LEN +
569 WNI_CFG_EDCA_WME_ACBE_LEN +
570 WNI_CFG_EDCA_WME_ACVI_LEN +
571 WNI_CFG_EDCA_WME_ACVO_LEN +
572 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700573 /* malloc memory for all configs in one shot */
574 configParam = vos_mem_malloc(configParamSize);
575
576 if(NULL == configParam )
577 {
578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700579 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700580 VOS_ASSERT(0) ;
581 return VOS_STATUS_E_NOMEM;
582 }
583 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700584 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700585 tlvStruct = (tHalCfg *)configParam;
586 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700587 /* TODO: Remove Later */
588 /* QWLAN_HAL_CFG_STA_ID */
589 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
590 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
591 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
592 eSIR_SUCCESS)
593 {
594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
595 "Failed to get value for WNI_CFG_STA_ID");
596 goto handle_failure;
597 }
598 tlvStruct->length = strLength ;
599 /* calculate the pad bytes to have the CFG in aligned format */
600 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
601 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700602 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
603 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700604 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
605 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
606 tlvStruct->length = sizeof(tANI_U32);
607 configDataValue = (tANI_U32 *)(tlvStruct + 1);
608 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
609 != eSIR_SUCCESS)
610 {
611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
612 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
613 goto handle_failure;
614 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700615 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
616 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700617 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
618 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
619 tlvStruct->length = sizeof(tANI_U32);
620 configDataValue = (tANI_U32 *)(tlvStruct + 1);
621 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
622 eSIR_SUCCESS)
623 {
624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
625 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
626 goto handle_failure;
627 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700628 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
629 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700630 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
631 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
632 tlvStruct->length = sizeof(tANI_U32);
633 configDataValue = (tANI_U32 *)(tlvStruct + 1);
634 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
635 != eSIR_SUCCESS)
636 {
637 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
638 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
639 goto handle_failure;
640 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700641 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
642 + sizeof(tHalCfg) + tlvStruct->length)) ;
643
644 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
645 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
646 tlvStruct->length = sizeof(tANI_U32);
647 configDataValue = (tANI_U32 *)(tlvStruct + 1);
648 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
649 configDataValue ) != eSIR_SUCCESS)
650 {
651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
652 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
653 goto handle_failure;
654 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700655 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
656 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700657 /* QWLAN_HAL_CFG_CAL_PERIOD */
658 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
659 tlvStruct->length = sizeof(tANI_U32);
660 configDataValue = (tANI_U32 *)(tlvStruct + 1);
661 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
662 != eSIR_SUCCESS)
663 {
664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
665 "Failed to get value for WNI_CFG_CAL_PERIOD");
666 goto handle_failure;
667 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700668 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
669 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700670 /* QWLAN_HAL_CFG_CAL_CONTROL */
671 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
672 tlvStruct->length = sizeof(tANI_U32);
673 configDataValue = (tANI_U32 *)(tlvStruct + 1);
674 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
675 != eSIR_SUCCESS)
676 {
677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
678 "Failed to get value for WNI_CFG_CAL_CONTROL");
679 goto handle_failure;
680 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700681 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
682 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700683 /* QWLAN_HAL_CFG_PROXIMITY */
684 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
685 tlvStruct->length = sizeof(tANI_U32);
686 configDataValue = (tANI_U32 *)(tlvStruct + 1);
687 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
688 != eSIR_SUCCESS)
689 {
690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
691 "Failed to get value for WNI_CFG_PROXIMITY");
692 goto handle_failure;
693 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700694 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
695 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700696 /* QWLAN_HAL_CFG_NETWORK_DENSITY */
697 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
698 tlvStruct->length = sizeof(tANI_U32);
699 configDataValue = (tANI_U32 *)(tlvStruct + 1);
700 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
701 != eSIR_SUCCESS)
702 {
703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
704 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
705 goto handle_failure;
706 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700707 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
708 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700709 /* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */
710 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
711 tlvStruct->length = sizeof(tANI_U32);
712 configDataValue = (tANI_U32 *)(tlvStruct + 1);
713 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
714 eSIR_SUCCESS)
715 {
716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
717 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
718 goto handle_failure;
719 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700720 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
721 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700722 /* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */
723 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
724 tlvStruct->length = sizeof(tANI_U32);
725 configDataValue = (tANI_U32 *)(tlvStruct + 1);
726 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
727 configDataValue ) != eSIR_SUCCESS)
728 {
729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
730 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
731 goto handle_failure;
732 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700733 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
734 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700735 /* QWLAN_HAL_CFG_RTS_THRESHOLD */
736 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
737 tlvStruct->length = sizeof(tANI_U32);
738 configDataValue = (tANI_U32 *)(tlvStruct + 1);
739 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
740 eSIR_SUCCESS)
741 {
742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
743 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
744 goto handle_failure;
745 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700746 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
747 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700748 /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
749 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
750 tlvStruct->length = sizeof(tANI_U32);
751 configDataValue = (tANI_U32 *)(tlvStruct + 1);
752 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
753 eSIR_SUCCESS)
754 {
755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
756 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
757 goto handle_failure;
758 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700759 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
760 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700761 /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
762 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
763 tlvStruct->length = sizeof(tANI_U32);
764 configDataValue = (tANI_U32 *)(tlvStruct + 1);
765 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
766 eSIR_SUCCESS)
767 {
768 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
769 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
770 goto handle_failure;
771 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700772 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
773 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700774 /* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */
775 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
776 tlvStruct->length = sizeof(tANI_U32);
777 configDataValue = (tANI_U32 *)(tlvStruct + 1);
778 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
779 configDataValue ) != eSIR_SUCCESS)
780 {
781 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
782 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
783 goto handle_failure;
784 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700785 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
786 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700787 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
788 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
789 tlvStruct->length = sizeof(tANI_U32);
790 configDataValue = (tANI_U32 *)(tlvStruct + 1);
791 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
792 configDataValue ) != eSIR_SUCCESS)
793 {
794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
795 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
796 goto handle_failure;
797 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700798 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
799 + sizeof(tHalCfg) + tlvStruct->length));
800
801 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
802 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
803 tlvStruct->length = sizeof(tANI_U32);
804 configDataValue = (tANI_U32 *)(tlvStruct + 1);
805 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
806 configDataValue ) != eSIR_SUCCESS)
807 {
808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
809 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
810 goto handle_failure;
811 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700812 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
813 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700814 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
815 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
816 tlvStruct->length = sizeof(tANI_U32);
817 configDataValue = (tANI_U32 *)(tlvStruct + 1);
818 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
819 configDataValue ) != eSIR_SUCCESS)
820 {
821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
822 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
823 goto handle_failure;
824 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700825 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
826 + sizeof(tHalCfg) + tlvStruct->length));
827
828 /* QWLAN_HAL_CFG_FIXED_RATE */
829 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
830 tlvStruct->length = sizeof(tANI_U32);
831 configDataValue = (tANI_U32 *)(tlvStruct + 1);
832 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
833 != eSIR_SUCCESS)
834 {
835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
836 "Failed to get value for WNI_CFG_FIXED_RATE");
837 goto handle_failure;
838 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700839 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
840 + sizeof(tHalCfg) + tlvStruct->length));
841
842 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
843 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
844 tlvStruct->length = sizeof(tANI_U32);
845 configDataValue = (tANI_U32 *)(tlvStruct + 1);
846 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
847 != eSIR_SUCCESS)
848 {
849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
850 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
851 goto handle_failure;
852 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700853 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
854 + sizeof(tHalCfg) + tlvStruct->length));
855
856 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
857 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
858 tlvStruct->length = sizeof(tANI_U32);
859 configDataValue = (tANI_U32 *)(tlvStruct + 1);
860 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
861 configDataValue ) != eSIR_SUCCESS)
862 {
863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
864 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
865 goto handle_failure;
866 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700867 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
868 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700869 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
870 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
871 tlvStruct->length = sizeof(tANI_U32);
872 configDataValue = (tANI_U32 *)(tlvStruct + 1);
873 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
874 configDataValue ) != eSIR_SUCCESS)
875 {
876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
877 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
878 goto handle_failure;
879 }
880 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
881 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700882 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
883 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
884 tlvStruct->length = sizeof(tANI_U32);
885 configDataValue = (tANI_U32 *)(tlvStruct + 1);
886 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
887 configDataValue ) != eSIR_SUCCESS)
888 {
889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
890 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
891 goto handle_failure;
892 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700893 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
894 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700895 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
896 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
897 tlvStruct->length = sizeof(tANI_U32);
898 configDataValue = (tANI_U32 *)(tlvStruct + 1);
899 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
900 configDataValue ) != eSIR_SUCCESS)
901 {
902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
903 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
904 goto handle_failure;
905 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700906 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
907 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700908 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
909 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
910 tlvStruct->length = sizeof(tANI_U32);
911 configDataValue = (tANI_U32 *)(tlvStruct + 1);
912 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
913 configDataValue ) != eSIR_SUCCESS)
914 {
915 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
916 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
917 goto handle_failure;
918 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700919 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
920 + sizeof(tHalCfg) + tlvStruct->length);
921
Jeff Johnson295189b2012-06-20 16:38:30 -0700922 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
923 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
924 tlvStruct->length = sizeof(tANI_U32);
925 configDataValue = (tANI_U32 *)(tlvStruct + 1);
926 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
927 configDataValue ) != eSIR_SUCCESS)
928 {
929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
930 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
931 goto handle_failure;
932 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700933 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
934 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700935 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
936 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
937 tlvStruct->length = sizeof(tANI_U32);
938 configDataValue = (tANI_U32 *)(tlvStruct + 1);
939 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
940 configDataValue ) != eSIR_SUCCESS)
941 {
942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
943 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
944 goto handle_failure;
945 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700946 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
947 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700948 /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
949 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
950 tlvStruct->length = sizeof(tANI_U32);
951 configDataValue = (tANI_U32 *)(tlvStruct + 1);
952 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
953 eSIR_SUCCESS)
954 {
955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
956 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
957 goto handle_failure;
958 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700959 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
960 + sizeof(tHalCfg) + tlvStruct->length);
961
962 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
963 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
964 tlvStruct->length = sizeof(tANI_U32);
965 configDataValue = (tANI_U32 *)(tlvStruct + 1);
966 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
967 configDataValue ) != eSIR_SUCCESS)
968 {
969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
970 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
971 goto handle_failure;
972 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700973 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
974 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700975 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
976 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
977 tlvStruct->length = sizeof(tANI_U32);
978 configDataValue = (tANI_U32 *)(tlvStruct + 1);
979 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
980 configDataValue ) != eSIR_SUCCESS)
981 {
982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
983 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
984 goto handle_failure;
985 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700986 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
987 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700988 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
989 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
990 tlvStruct->length = sizeof(tANI_U32);
991 configDataValue = (tANI_U32 *)(tlvStruct + 1);
992 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
993 configDataValue ) != eSIR_SUCCESS)
994 {
995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
996 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
997 goto handle_failure;
998 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700999 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1000 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001001 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
1002 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
1003 tlvStruct->length = sizeof(tANI_U32);
1004 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1005 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
1006 configDataValue ) != eSIR_SUCCESS)
1007 {
1008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1009 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
1010 goto handle_failure;
1011 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001012 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1013 + sizeof(tHalCfg) + tlvStruct->length);
1014
1015 /* QWLAN_HAL_CFG_STATS_PERIOD */
1016 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
1017 tlvStruct->length = sizeof(tANI_U32);
1018 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1019 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
1020 eSIR_SUCCESS)
1021 {
1022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1023 "Failed to get value for WNI_CFG_STATS_PERIOD");
1024 goto handle_failure;
1025 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001026 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1027 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001028 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
1029 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
1030 tlvStruct->length = sizeof(tANI_U32);
1031 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1032 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
1033 eSIR_SUCCESS)
1034 {
1035 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1036 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
1037 goto handle_failure;
1038 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001039 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1040 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001041 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
1042 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
1043 tlvStruct->length = sizeof(tANI_U32);
1044 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1045 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
1046 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -07001047 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1048 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001049 /* QWLAN_HAL_CFG_DTIM_PERIOD */
1050 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
1051 tlvStruct->length = sizeof(tANI_U32);
1052 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1053 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
1054 != eSIR_SUCCESS)
1055 {
1056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1057 "Failed to get value for WNI_CFG_DTIM_PERIOD");
1058 goto handle_failure;
1059 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001060 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1061 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001062 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
1063 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
1064 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
1065 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1066 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
1067 &strLength) != eSIR_SUCCESS)
1068 {
1069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1070 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1071 goto handle_failure;
1072 }
1073 tlvStruct->length = strLength;
1074 /* calculate the pad bytes to have the CFG in aligned format */
1075 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1076 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001077 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1078 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001079 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1080 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1081 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1082 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1083 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1084 &strLength) != eSIR_SUCCESS)
1085 {
1086 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1087 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1088 goto handle_failure;
1089 }
1090 tlvStruct->length = strLength;
1091 /* calculate the pad bytes to have the CFG in aligned format */
1092 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1093 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001094 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1095 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001096 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1097 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1098 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1099 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1100 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1101 &strLength) != eSIR_SUCCESS)
1102 {
1103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1104 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1105 goto handle_failure;
1106 }
1107 tlvStruct->length = strLength;
1108 /* calculate the pad bytes to have the CFG in aligned format */
1109 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1110 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001111 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1112 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001113 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1114 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1115 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1116 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1117 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1118 &strLength) != eSIR_SUCCESS)
1119 {
1120 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1121 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1122 goto handle_failure;
1123 }
1124 tlvStruct->length = strLength;
1125 /* calculate the pad bytes to have the CFG in aligned format */
1126 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1127 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001128 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1129 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001130 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1131 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1132 tlvStruct->length = sizeof(tANI_U32);
1133 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1134 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1135 != eSIR_SUCCESS)
1136 {
1137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1138 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1139 goto handle_failure;
1140 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001141 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1142 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001143 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1144 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1145 tlvStruct->length = sizeof(tANI_U32);
1146 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1147 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1148 != eSIR_SUCCESS)
1149 {
1150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1151 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1152 goto handle_failure;
1153 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001154 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1155 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001156 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1157 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1158 tlvStruct->length = sizeof(tANI_U32);
1159 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1160 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1161 != eSIR_SUCCESS)
1162 {
1163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1164 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1165 goto handle_failure;
1166 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001167 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1168 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001169 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1170 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1171 tlvStruct->length = sizeof(tANI_U32);
1172 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1173 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1174 != eSIR_SUCCESS)
1175 {
1176 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1177 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1178 goto handle_failure;
1179 }
1180 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1181 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001182 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1183 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1184 tlvStruct->length = sizeof(tANI_U32);
1185 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1186 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1187 != eSIR_SUCCESS)
1188 {
1189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1190 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1191 goto handle_failure;
1192 }
1193 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1194 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001195 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1196 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1197 tlvStruct->length = sizeof(tANI_U32);
1198 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1199 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1200 != eSIR_SUCCESS)
1201 {
1202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1203 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1204 goto handle_failure;
1205 }
1206 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1207 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001208 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1209 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1210 tlvStruct->length = sizeof(tANI_U32);
1211 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1212 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1213 != eSIR_SUCCESS)
1214 {
1215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1216 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1217 goto handle_failure;
1218 }
1219 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1220 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001221 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1222 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1223 tlvStruct->length = sizeof(tANI_U32);
1224 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1225 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
1226 != eSIR_SUCCESS)
1227 {
1228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1229 "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
1230 goto handle_failure;
1231 }
1232 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1233 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001234 /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
1235 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1236 tlvStruct->length = sizeof(tANI_U32);
1237 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1238 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1239 != eSIR_SUCCESS)
1240 {
1241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1242 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1243 goto handle_failure;
1244 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001245 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1246 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001247 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1248 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1249 tlvStruct->length = sizeof(tANI_U32);
1250 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1251 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1252 != eSIR_SUCCESS)
1253 {
1254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1255 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1256 goto handle_failure;
1257 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001258 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1259 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001260 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1261 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1262 tlvStruct->length = sizeof(tANI_U32);
1263 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1264 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1265 != eSIR_SUCCESS)
1266 {
1267 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1268 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1269 goto handle_failure;
1270 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001271 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1272 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001273 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1274 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1275 * into FW, so the parameters are added here.
1276 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001277 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1278 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1279 tlvStruct->length = sizeof(tANI_U32);
1280 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1281 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1282 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1283 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001284 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1285 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1286 tlvStruct->length = sizeof(tANI_U32);
1287 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1288 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1289 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1290 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001291 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1292 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1293 tlvStruct->length = sizeof(tANI_U32);
1294 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1295 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1296 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1297 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001298 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1299 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1300 tlvStruct->length = sizeof(tANI_U32);
1301 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1302 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1303 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1304 + sizeof(tHalCfg) + tlvStruct->length) ;
1305
1306 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1307 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1308 tlvStruct->length = sizeof(tANI_U32);
1309 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1310 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1311 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1312 + sizeof(tHalCfg) + tlvStruct->length) ;
1313
1314 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1315 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1316 tlvStruct->length = sizeof(tANI_U32);
1317 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1318 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1319 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1320 + sizeof(tHalCfg) + tlvStruct->length) ;
1321
1322 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1323 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1324 tlvStruct->length = sizeof(tANI_U32);
1325 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1326 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1327 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1328 + sizeof(tHalCfg) + tlvStruct->length) ;
1329
1330 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1331 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1332 tlvStruct->length = sizeof(tANI_U32);
1333 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1334 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1335 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1336 + sizeof(tHalCfg) + tlvStruct->length) ;
1337
1338 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1339 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1340 tlvStruct->length = sizeof(tANI_U32);
1341 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1342 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1343 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1344 + sizeof(tHalCfg) + tlvStruct->length) ;
1345
1346 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1347 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1348 tlvStruct->length = sizeof(tANI_U32);
1349 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1350 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1351 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1352 + sizeof(tHalCfg) + tlvStruct->length) ;
1353
1354 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1355 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1356 tlvStruct->length = sizeof(tANI_U32);
1357 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1358 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1359 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1360 + sizeof(tHalCfg) + tlvStruct->length) ;
1361
1362 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1363 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1364 tlvStruct->length = sizeof(tANI_U32);
1365 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1366 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1367 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1368 + sizeof(tHalCfg) + tlvStruct->length) ;
1369
1370 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1371 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1372 tlvStruct->length = sizeof(tANI_U32);
1373 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1374 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1375 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1376 + sizeof(tHalCfg) + tlvStruct->length) ;
1377
1378 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1379 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1380 tlvStruct->length = sizeof(tANI_U32);
1381 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1382 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1383 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1384 + sizeof(tHalCfg) + tlvStruct->length) ;
1385
1386 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1387 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1388 tlvStruct->length = sizeof(tANI_U32);
1389 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1390 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1391 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1392 + sizeof(tHalCfg) + tlvStruct->length) ;
1393
1394 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1395 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1396 tlvStruct->length = sizeof(tANI_U32);
1397 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1398 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1399 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1400 + sizeof(tHalCfg) + tlvStruct->length) ;
1401
Wilson Tsaof8b37942013-09-06 10:49:00 -07001402 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_VICTIM; i++)
1403 {
1404 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WAN_FREQ */
1405 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WAN_FREQ + i*4;
1406 tlvStruct->length = sizeof(tANI_U32);
1407 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1408 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWANFreq[i];
1409 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1410 + sizeof(tHalCfg) + tlvStruct->length) ;
1411
1412 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WLAN_FREQ */
1413 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WLAN_FREQ + i*4;
1414 tlvStruct->length = sizeof(tANI_U32);
1415 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1416 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWLANFreq[i];
1417 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1418 + sizeof(tHalCfg) + tlvStruct->length) ;
1419
1420 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG */
1421 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG + i*4;
1422 tlvStruct->length = sizeof(tANI_U32);
1423 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1424 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig[i];
1425 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1426 + sizeof(tHalCfg) + tlvStruct->length) ;
1427
1428 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG2 */
1429 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG2 + i*4;
1430 tlvStruct->length = sizeof(tANI_U32);
1431 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1432 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig2[i];
1433 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1434 + sizeof(tHalCfg) + tlvStruct->length) ;
1435 }
1436
1437 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF */
1438 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF ;
1439 tlvStruct->length = sizeof(tANI_U32);
1440 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1441 *configDataValue = pMac->btc.btcConfig.mwsCoexModemBackoff;
1442 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1443 + sizeof(tHalCfg) + tlvStruct->length) ;
1444
1445 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_CONFIG; i++)
1446 {
1447 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_CONFIGX */
1448 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_CONFIG1 + i;
1449 tlvStruct->length = sizeof(tANI_U32);
1450 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1451 *configDataValue = pMac->btc.btcConfig.mwsCoexConfig[i];
1452 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1453 + sizeof(tHalCfg) + tlvStruct->length) ;
1454 }
1455
1456 /* [COEX] QWLAN_HAL_CFG_SAR_POWER_BACKOFF */
1457 tlvStruct->type = QWLAN_HAL_CFG_SAR_POWER_BACKOFF ;
1458 tlvStruct->length = sizeof(tANI_U32);
1459 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1460 *configDataValue = pMac->btc.btcConfig.SARPowerBackoff;
1461 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1462 + sizeof(tHalCfg) + tlvStruct->length) ;
1463
Jeff Johnson32d95a32012-09-10 13:15:23 -07001464 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001465 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1466 tlvStruct->length = sizeof(tANI_U32);
1467 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1468 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1469 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1470 wcnssCompiledApiVersion.minor,
1471 wcnssCompiledApiVersion.version,
1472 wcnssCompiledApiVersion.revision);
1473 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1474 + sizeof(tHalCfg) + tlvStruct->length) ;
1475
Jeff Johnsond13512a2012-07-17 11:42:19 -07001476 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1477 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1478 tlvStruct->length = sizeof(tANI_U32);
1479 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1480 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1481 configDataValue ) != eSIR_SUCCESS)
1482 {
1483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1484 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1485 goto handle_failure;
1486 }
1487
1488 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1489 + sizeof(tHalCfg) + tlvStruct->length) ;
1490 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1491 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1492 tlvStruct->length = sizeof(tANI_U32);
1493 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1494 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1495 configDataValue ) != eSIR_SUCCESS)
1496 {
1497 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1498 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1499 goto handle_failure;
1500 }
1501
1502 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1503 + sizeof(tHalCfg) + tlvStruct->length) ;
1504
1505 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1506 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1507 tlvStruct->length = sizeof(tANI_U32);
1508 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1509 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1510 != eSIR_SUCCESS)
1511 {
1512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1513 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1514 goto handle_failure;
1515 }
1516
1517 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1518 + sizeof(tHalCfg) + tlvStruct->length) ;
1519
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08001520 /* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */
1521 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION ;
1522 tlvStruct->length = sizeof(tANI_U32);
1523 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1524 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION, configDataValue)
1525 != eSIR_SUCCESS)
1526 {
1527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1528 "Failed to get value for WNI_CFG_ENABLE_LPWR_IMG_TRANSITION");
1529 goto handle_failure;
1530 }
1531
1532 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1533 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala976e3252013-01-03 15:45:56 -08001534#ifdef WLAN_SOFTAP_VSTA_FEATURE
1535 tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
1536 tlvStruct->length = sizeof(tANI_U32);
1537 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1538 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
1539 != eSIR_SUCCESS)
1540 {
1541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1542 "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
1543 goto handle_failure;
1544 }
1545
1546 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1547 + sizeof(tHalCfg) + tlvStruct->length) ;
1548#endif
1549
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08001550 /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
1551 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
1552 tlvStruct->length = sizeof(tANI_U32);
1553 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1554
1555 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
1556 != eSIR_SUCCESS)
1557 {
1558 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1559 "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
1560 goto handle_failure;
1561 }
1562
1563 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1564 + sizeof(tHalCfg) + tlvStruct->length) ;
1565
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301566/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */
1567 tlvStruct->type = QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT ;
1568 tlvStruct->length = sizeof(tANI_U32);
1569 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1570 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
1571 configDataValue ) != eSIR_SUCCESS)
1572 {
1573 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1574 "Failed to get value for WNI_CFG_AP_LINK_MONITOR_TIMEOUT");
1575 goto handle_failure;
1576 }
1577
1578 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1579 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301580#ifdef FEATURE_WLAN_TDLS
1581 /* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */
1582 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_MASK;
1583 tlvStruct->length = sizeof(tANI_U32);
1584 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1585 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK,
1586 configDataValue ) != eSIR_SUCCESS)
1587 {
1588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1589 "Failed to get value for WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK");
1590 goto handle_failure;
1591 }
1592 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1593 + sizeof(tHalCfg) + tlvStruct->length) ;
1594
1595 /* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */
1596 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE;
1597 tlvStruct->length = sizeof(tANI_U32);
1598 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1599 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_BUF_STA_ENABLED,
1600 configDataValue ) != eSIR_SUCCESS)
1601 {
1602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1603 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1604 goto handle_failure;
1605 }
1606 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1607 + sizeof(tHalCfg) + tlvStruct->length) ;
1608 /* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */
1609 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME;
1610 tlvStruct->length = sizeof(tANI_U32);
1611 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1612 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_PUAPSD_INACT_TIME,
1613 configDataValue ) != eSIR_SUCCESS)
1614 {
1615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1616 "Failed to get value for WNI_CFG_TDLS_PUAPSD_INACT_TIME");
1617 goto handle_failure;
1618 }
1619 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1620 + sizeof(tHalCfg) + tlvStruct->length) ;
1621 /* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */
1622 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP;
1623 tlvStruct->length = sizeof(tANI_U32);
1624 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1625 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_RX_FRAME_THRESHOLD,
1626 configDataValue ) != eSIR_SUCCESS)
1627 {
1628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1629 "Failed to get value for WNI_CFG_TDLS_RX_FRAME_THRESHOLD");
1630 goto handle_failure;
1631 }
1632 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1633 + sizeof(tHalCfg) + tlvStruct->length) ;
Naresh Jayaramf73f3762014-02-04 16:13:20 +05301634 /* QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE */
1635 tlvStruct->type = QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE;
1636 tlvStruct->length = sizeof(tANI_U32);
1637 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1638 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_OFF_CHANNEL_ENABLED,
1639 configDataValue ) != eSIR_SUCCESS)
1640 {
1641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1642 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1643 goto handle_failure;
1644 }
1645 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1646 + sizeof(tHalCfg) + tlvStruct->length) ;
1647
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301648#endif
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301649
Sudhir Sattayappa Kohallida1be202013-07-11 12:04:30 -07001650 /* QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN */
1651 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE ;
1652 tlvStruct->length = sizeof(tANI_U32);
1653 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1654 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_ADAPT_RX_DRAIN,
1655 configDataValue ) != eSIR_SUCCESS)
1656 {
1657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1658 "Failed to get value for WNI_CFG_ENABLE_ADAPT_RX_DRAIN");
1659 goto handle_failure;
1660 }
1661
1662 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1663 + sizeof(tHalCfg) + tlvStruct->length) ;
Yue Ma0fd23872013-08-01 15:56:47 -07001664
1665 /* QWLAN_HAL_CFG_FLEX_CONNECT_POWER_FACTOR */
1666 tlvStruct->type = QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR;
1667 tlvStruct->length = sizeof(tANI_U32);
1668 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1669 if(wlan_cfgGetInt(pMac, WNI_CFG_FLEX_CONNECT_POWER_FACTOR, configDataValue)
1670 != eSIR_SUCCESS)
1671 {
1672 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1673 "Failed to get value for WNI_CFG_FLEX_CONNECT_POWER_FACTOR");
1674 goto handle_failure;
1675 }
1676 tlvStruct = (tHalCfg *)(((tANI_U8 *) tlvStruct
1677 + sizeof(tHalCfg) + tlvStruct->length));
1678
Madan Mohan Koyyalamudica454572013-08-07 19:57:03 +05301679 /* QWLAN_HAL_CFG_ANTENNA_DIVERSITY */
1680 tlvStruct->type = QWLAN_HAL_CFG_ANTENNA_DIVERSITY;
1681 tlvStruct->length = sizeof(tANI_U32);
1682 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1683 if (wlan_cfgGetInt(pMac, WNI_CFG_ANTENNA_DIVESITY,
1684 configDataValue ) != eSIR_SUCCESS)
1685 {
1686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1687 "Failed to get value for WNI_CFG_ANTENNA_DIVESITY");
1688 goto handle_failure;
1689 }
1690
1691 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1692 + sizeof(tHalCfg) + tlvStruct->length) ;
1693
Madan Mohan Koyyalamudi2558bc92013-08-24 16:54:31 +05301694 /* QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT */
1695 tlvStruct->type = QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT ;
1696 tlvStruct->length = sizeof(tANI_U32);
1697 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1698 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_LINK_MONITOR_TIMEOUT,
1699 configDataValue ) != eSIR_SUCCESS)
1700 {
1701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1702 "Failed to get value for WNI_CFG_GO_LINK_MONITOR_TIMEOUT");
1703 goto handle_failure;
1704 }
1705 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1706 + sizeof(tHalCfg) + tlvStruct->length) ;
1707
Kiet Lam4bbd3cb2013-11-07 20:03:49 +05301708 /* QWLAN_HAL_CFG_ATH_DISABLE */
1709 tlvStruct->type = QWLAN_HAL_CFG_ATH_DISABLE ;
1710 tlvStruct->length = sizeof(tANI_U32);
1711 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1712 if(wlan_cfgGetInt(pMac, WNI_CFG_ATH_DISABLE,
1713 configDataValue ) != eSIR_SUCCESS)
1714 {
1715 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1716 "Failed to get value for WNI_CFG_ATH_DISABLE");
1717 goto handle_failure;
1718 }
1719 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1720 + sizeof(tHalCfg) + tlvStruct->length) ;
1721
c_hpothu6d7dc922013-12-02 12:36:41 +05301722 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_WLAN_LEN */
1723 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1724 tlvStruct->length = sizeof(tANI_U32);
1725 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1726 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_WLAN_LEN,
1727 configDataValue ) != eSIR_SUCCESS)
1728 {
1729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1730 "Failed to get value for WNI_CFG_BTC_ACTIVE_WLAN_LEN");
1731 goto handle_failure;
1732 }
1733 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1734 + sizeof(tHalCfg) + tlvStruct->length) ;
1735
1736 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1737 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1738 tlvStruct->length = sizeof(tANI_U32);
1739 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1740 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_BT_LEN,
1741 configDataValue ) != eSIR_SUCCESS)
1742 {
1743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1744 "Failed to get value for WNI_CFG_BTC_ACTIVE_BT_LEN");
1745 goto handle_failure;
1746 }
1747 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1748 + sizeof(tHalCfg) + tlvStruct->length) ;
1749
1750 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN */
1751 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1752 tlvStruct->length = sizeof(tANI_U32);
1753 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1754 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN,
1755 configDataValue ) != eSIR_SUCCESS)
1756 {
1757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1758 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN");
1759 goto handle_failure;
1760 }
1761 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1762 + sizeof(tHalCfg) + tlvStruct->length) ;
1763
1764 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1765 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1766 tlvStruct->length = sizeof(tANI_U32);
1767 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1768 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_BT_LEN,
1769 configDataValue ) != eSIR_SUCCESS)
1770 {
1771 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1772 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_BT_LEN");
1773 goto handle_failure;
1774 }
1775 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1776 + sizeof(tHalCfg) + tlvStruct->length) ;
1777
AnjaneeDevi Kapparapu50239e32014-01-07 18:09:33 +05301778 /* QWLAN_HAL_CFG_ASD_PROBE_INTERVAL */
1779 tlvStruct->type = QWLAN_HAL_CFG_ASD_PROBE_INTERVAL ;
1780 tlvStruct->length = sizeof(tANI_U32);
1781 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1782 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_PROBE_INTERVAL,
1783 configDataValue ) != eSIR_SUCCESS)
1784 {
1785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1786 "Failed to get value for WNI_CFG_ASD_PROBE_INTERVAL");
1787 goto handle_failure;
1788 }
1789 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1790 + sizeof(tHalCfg) + tlvStruct->length) ;
1791
1792 /* QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD */
1793 tlvStruct->type = QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD ;
1794 tlvStruct->length = sizeof(tANI_U32);
1795 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1796 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_TRIGGER_THRESHOLD,
1797 configDataValue ) != eSIR_SUCCESS)
1798 {
1799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1800 "Failed to get value for WNI_CFG_ASD_TRIGGER_THRESHOLD");
1801 goto handle_failure;
1802 }
1803 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1804 + sizeof(tHalCfg) + tlvStruct->length) ;
1805
1806 /* QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD */
1807 tlvStruct->type = QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD ;
1808 tlvStruct->length = sizeof(tANI_U32);
1809 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1810 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD,
1811 configDataValue ) != eSIR_SUCCESS)
1812 {
1813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1814 "Failed to get value for WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD");
1815 goto handle_failure;
1816 }
1817 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1818 + sizeof(tHalCfg) + tlvStruct->length) ;
1819
Leela Venkata Kiran Kumar Reddy Chirala22c159b2013-12-23 18:19:13 -08001820 /* QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO */
1821 tlvStruct->type = QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO ;
1822 tlvStruct->length = sizeof(tANI_U32);
1823 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1824 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CTS2S_DURING_SCO,
1825 configDataValue ) != eSIR_SUCCESS)
1826 {
1827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1828 "Failed to get value for WNI_CFG_BTC_CTS2S_DURING_SCO");
1829 goto handle_failure;
1830 }
1831 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1832 + sizeof(tHalCfg) + tlvStruct->length) ;
1833
c_hpothu5bd1ae42014-03-07 20:28:22 +05301834 /* QWLAN_HAL_CFG_RA_FILTER_ENABLE */
1835 tlvStruct->type = QWLAN_HAL_CFG_RA_FILTER_ENABLE ;
1836 tlvStruct->length = sizeof(tANI_U32);
1837 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1838
1839 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_FILTER_ENABLE,
1840 configDataValue ) != eSIR_SUCCESS)
1841 {
1842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1843 "Failed to get value for WNI_CFG_RA_FILTER_ENABLE");
1844 goto handle_failure;
1845 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05301846 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1847 + sizeof(tHalCfg) + tlvStruct->length) ;
1848
1849 /* QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL */
1850 tlvStruct->type = QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL ;
1851 tlvStruct->length = sizeof(tANI_U32);
1852 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1853
1854 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_RATE_LIMIT_INTERVAL,
1855 configDataValue ) != eSIR_SUCCESS)
1856 {
1857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1858 "Failed to get value for WNI_CFG_RA_RATE_LIMIT_INTERVAL");
1859 goto handle_failure;
1860 }
c_hpothu2d0f1c42014-04-01 18:38:51 +05301861 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1862 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu5bd1ae42014-03-07 20:28:22 +05301863
c_hpothu2d0f1c42014-04-01 18:38:51 +05301864 /* QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE */
1865 tlvStruct->type = QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE ;
1866 tlvStruct->length = sizeof(tANI_U32);
1867 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1868
1869 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE,
1870 configDataValue ) != eSIR_SUCCESS)
1871 {
1872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1873 "Failed to get value for WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE");
1874 goto handle_failure;
1875 }
1876 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1877 + sizeof(tHalCfg) + tlvStruct->length) ;
1878
1879 /* QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE */
1880 tlvStruct->type = QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE ;
1881 tlvStruct->length = sizeof(tANI_U32);
1882 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1883
1884 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE,
1885 configDataValue ) != eSIR_SUCCESS)
1886 {
1887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1888 "Failed to get value for WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE");
1889 goto handle_failure;
1890 }
1891 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1892 + sizeof(tHalCfg) + tlvStruct->length) ;
1893
1894 /* QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD */
1895 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD ;
1896 tlvStruct->length = sizeof(tANI_U32);
1897 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1898
1899 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD,
1900 configDataValue ) != eSIR_SUCCESS)
1901 {
1902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1903 "Failed to get value for WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD");
1904 goto handle_failure;
1905 }
1906 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1907 + sizeof(tHalCfg) + tlvStruct->length) ;
1908
1909 /* QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD */
1910 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD ;
1911 tlvStruct->length = sizeof(tANI_U32);
1912 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1913
1914 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD,
1915 configDataValue ) != eSIR_SUCCESS)
1916 {
1917 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1918 "Failed to get value for WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD");
1919 goto handle_failure;
1920 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05301921 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1922 + sizeof(tHalCfg) + tlvStruct->length) ;
1923
Mihir Shetec34258c2014-07-30 17:50:27 +05301924 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP */
1925 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP ;
1926 tlvStruct->length = sizeof(tANI_U32);
1927 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1928
1929 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_SP,
1930 configDataValue ) != eSIR_SUCCESS)
1931 {
1932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1933 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_SP");
1934 goto handle_failure;
1935 }
1936 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1937 + sizeof(tHalCfg) + tlvStruct->length) ;
1938
1939 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT */
1940 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT ;
1941 tlvStruct->length = sizeof(tANI_U32);
1942 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1943
1944 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT,
1945 configDataValue ) != eSIR_SUCCESS)
1946 {
1947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1948 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT");
1949 goto handle_failure;
1950 }
1951 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1952 + sizeof(tHalCfg) + tlvStruct->length) ;
1953
1954 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT */
1955 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT ;
1956 tlvStruct->length = sizeof(tANI_U32);
1957 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1958
1959 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT,
1960 configDataValue ) != eSIR_SUCCESS)
1961 {
1962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1963 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT");
1964 goto handle_failure;
1965 }
1966 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1967 + sizeof(tHalCfg) + tlvStruct->length) ;
1968
1969 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW */
1970 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW ;
1971 tlvStruct->length = sizeof(tANI_U32);
1972 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1973
1974 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW,
1975 configDataValue ) != eSIR_SUCCESS)
1976 {
1977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1978 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW");
1979 goto handle_failure;
1980 }
1981 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1982 + sizeof(tHalCfg) + tlvStruct->length) ;
1983
1984 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW */
1985 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW ;
1986 tlvStruct->length = sizeof(tANI_U32);
1987 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1988
1989 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW,
1990 configDataValue ) != eSIR_SUCCESS)
1991 {
1992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1993 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW");
1994 goto handle_failure;
1995 }
1996 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1997 + sizeof(tHalCfg) + tlvStruct->length) ;
1998
1999 /* QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE */
2000 tlvStruct->type = QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE ;
2001 tlvStruct->length = sizeof(tANI_U32);
2002 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2003
2004 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE,
2005 configDataValue ) != eSIR_SUCCESS)
2006 {
2007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2008 "Failed to get value for WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE");
2009 goto handle_failure;
2010 }
2011 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2012 + sizeof(tHalCfg) + tlvStruct->length) ;
2013
2014 /* QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS */
2015 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS ;
2016 tlvStruct->length = sizeof(tANI_U32);
2017 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2018
2019 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS,
2020 configDataValue ) != eSIR_SUCCESS)
2021 {
2022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2023 "Failed to get value for WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS");
2024 goto handle_failure;
2025 }
2026 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2027 + sizeof(tHalCfg) + tlvStruct->length) ;
2028
2029 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS */
2030 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS ;
2031 tlvStruct->length = sizeof(tANI_U32);
2032 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2033
2034 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_WMMPS,
2035 configDataValue ) != eSIR_SUCCESS)
2036 {
2037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2038 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_WMMPS");
2039 goto handle_failure;
2040 }
2041 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2042 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu03d961b2014-09-19 16:45:00 +05302043
2044 /* QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE */
2045 tlvStruct->type = QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE ;
2046 tlvStruct->length = sizeof(tANI_U32);
2047 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2048
2049 if (wlan_cfgGetInt(pMac, WNI_CFG_BURST_MODE_BE_TXOP_VALUE,
2050 configDataValue ) != eSIR_SUCCESS)
2051 {
2052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2053 "Failed to get value for WNI_CFG_BURST_MODE_BE_TXOP_VALUE");
2054 goto handle_failure;
2055 }
2056 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2057 + sizeof(tHalCfg) + tlvStruct->length) ;
2058
Deepthi Gowri9025aa62014-11-07 19:45:36 +05302059 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE */
2060 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE ;
2061 tlvStruct->length = sizeof(tANI_U32);
2062 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2063
2064 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE,
2065 configDataValue ) != eSIR_SUCCESS)
2066 {
2067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2068 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE");
2069 goto handle_failure;
2070 }
2071 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2072 + sizeof(tHalCfg) + tlvStruct->length) ;
2073
Naresh Jayaramf5bbe3f2014-12-29 18:32:47 +05302074 /* QWLAN_HAL_CFG_BTC_FAST_WLAN_CONN_PREF */
2075 tlvStruct->type = QWLAN_HAL_CFG_BTC_FAST_WLAN_CONN_PREF ;
2076 tlvStruct->length = sizeof(tANI_U32);
2077 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2078
2079 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FAST_WLAN_CONN_PREF,
2080 configDataValue ) != eSIR_SUCCESS)
2081 {
2082 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2083 "Failed to get value for WNI_CFG_BTC_FAST_WLAN_CONN_PREF");
2084 goto handle_failure;
2085 }
2086 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2087 + sizeof(tHalCfg) + tlvStruct->length) ;
Deepthi Gowri9025aa62014-11-07 19:45:36 +05302088
jagadeeshaf2d0ce2015-03-31 11:45:30 +05302089 /* QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT */
2090 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT;
2091 tlvStruct->length = sizeof(tANI_U32);
2092 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2093
2094 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_RTSCTS_HTVHT,
2095 configDataValue ) != eSIR_SUCCESS)
2096 {
2097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2098 "Failed to get value for WNI_CFG_ENABLE_RTSCTS_HTVHT");
2099 goto handle_failure;
2100 }
2101 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2102 + sizeof(tHalCfg) + tlvStruct->length) ;
2103
Jeff Johnson295189b2012-06-20 16:38:30 -07002104 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002105#ifdef WLAN_DEBUG
2106 {
2107 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07002108 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2109 "****** Dumping CFG TLV ***** ");
2110 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
2111 {
2112 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2113 "%02x %02x %02x %02x %02x %02x %02x %02x",
2114 tlvStructStart[i],
2115 tlvStructStart[i+1],
2116 tlvStructStart[i+2],
2117 tlvStructStart[i+3],
2118 tlvStructStart[i+4],
2119 tlvStructStart[i+5],
2120 tlvStructStart[i+6],
2121 tlvStructStart[i+7]);
2122 }
2123 /* Dump the bytes in the last line*/
2124 for (; i < wdiStartParams->usConfigBufferLen; i++)
2125 {
2126 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2127 "%02x ",tlvStructStart[i]);
2128 }
2129 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2130 "**************************** ");
2131 }
2132#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002133 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002134handle_failure:
2135 vos_mem_free(configParam);
2136 return VOS_STATUS_E_FAILURE;
2137}
Jeff Johnson295189b2012-06-20 16:38:30 -07002138/*
2139 * FUNCTION: WDA_wdiCompleteCB
2140 * call the voss call back function
2141 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002142void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07002143{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002144 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2145 tWDA_CbContext *wdaContext;
2146
2147 if(NULL == pWdaParams)
2148 {
2149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002150 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002151 VOS_ASSERT(0) ;
2152 return ;
2153 }
2154
2155 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
2156
Jeff Johnson295189b2012-06-20 16:38:30 -07002157 if (NULL == wdaContext)
2158 {
2159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002160 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002161 return ;
2162 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002163
Jeff Johnson295189b2012-06-20 16:38:30 -07002164 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002165 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07002166 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002167 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002168 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002169 vos_mem_free(pWdaParams);
2170
Jeff Johnson295189b2012-06-20 16:38:30 -07002171 if(WDI_STATUS_SUCCESS != status)
2172 {
2173 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2174 "WDI stop callback returned failure" );
2175 VOS_ASSERT(0) ;
2176 }
2177 else
2178 {
2179 wdaContext->wdaState = WDA_STOP_STATE;
2180 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002181
Leo Chang9d76f622013-08-23 16:34:52 -07002182 /* FTM Driver stop procedure should be synced.
2183 * Stop and Close will happen on same context */
2184 if (eDRIVER_TYPE_MFG == wdaContext->driverMode)
2185 {
2186 if (VOS_STATUS_SUCCESS != vos_event_set(&wdaContext->ftmStopDoneEvent))
2187 {
2188 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2189 "%s: FTM Stop Event Set Fail", __func__);
2190 VOS_ASSERT(0);
2191 }
2192 }
2193
Jeff Johnson295189b2012-06-20 16:38:30 -07002194 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002195 vos_WDAComplete_cback(wdaContext->pVosContext);
2196
Jeff Johnson295189b2012-06-20 16:38:30 -07002197 return ;
2198}
Jeff Johnson295189b2012-06-20 16:38:30 -07002199/*
2200 * FUNCTION: WDA_stop
2201 * call WDI_stop
2202 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002203VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
2204{
2205 WDI_Status wdiStatus;
2206 VOS_STATUS status = VOS_STATUS_SUCCESS;
2207 WDI_StopReqParamsType *wdiStopReq;
2208 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002209 tWDA_ReqParams *pWdaParams ;
2210
Jeff Johnson295189b2012-06-20 16:38:30 -07002211 if (NULL == pWDA)
2212 {
2213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002214 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002215 VOS_ASSERT(0);
2216 return VOS_STATUS_E_FAILURE;
2217 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002218 if (pWDA->wdiFailed == true)
2219 {
2220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002221 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002222 return VOS_STATUS_E_ALREADY;
2223 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002224
Jeff Johnson295189b2012-06-20 16:38:30 -07002225 /* FTM mode stay START_STATE */
2226 if( (WDA_READY_STATE != pWDA->wdaState) &&
2227 (WDA_INIT_STATE != pWDA->wdaState) &&
2228 (WDA_START_STATE != pWDA->wdaState) )
2229 {
2230 VOS_ASSERT(0);
2231 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002232 wdiStopReq = (WDI_StopReqParamsType *)
2233 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
2234 if(NULL == wdiStopReq)
2235 {
2236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002237 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002238 VOS_ASSERT(0);
2239 return VOS_STATUS_E_NOMEM;
2240 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002241
Jeff Johnson295189b2012-06-20 16:38:30 -07002242 wdiStopReq->wdiStopReason = reason;
2243 wdiStopReq->wdiReqStatusCB = NULL;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302244
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002245 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2246 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07002247 {
2248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002249 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002250 VOS_ASSERT(0);
2251 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002252 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07002253 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002254
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002255 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
2256 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07002257 {
2258 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002259 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002260 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002261
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002262 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
2263 pWdaParams->wdaMsgParam = NULL;
2264 pWdaParams->pWdaContext = pWDA;
2265
Jeff Johnson295189b2012-06-20 16:38:30 -07002266 /* call WDI stop */
2267 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002268 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
2269
Jeff Johnson295189b2012-06-20 16:38:30 -07002270 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
2271 {
2272 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2273 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002274 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2275 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002276 status = VOS_STATUS_E_FAILURE;
2277 }
Leo Chang9d76f622013-08-23 16:34:52 -07002278
2279 /* FTM Driver stop procedure should be synced.
2280 * Stop and Close will happen on same context */
2281 if (eDRIVER_TYPE_MFG == pWDA->driverMode)
2282 {
2283 status = vos_wait_single_event(&pWDA->ftmStopDoneEvent,
2284 WDI_RESPONSE_TIMEOUT);
2285 if (status != VOS_STATUS_SUCCESS)
2286 {
2287 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2288 "%s: FTM Stop Timepoout", __func__);
2289 VOS_ASSERT(0);
Leo Chang9d76f622013-08-23 16:34:52 -07002290 }
c_hpothu0d36bc42014-07-03 17:43:45 +05302291 vos_event_destroy(&pWDA->ftmStopDoneEvent);
Leo Chang9d76f622013-08-23 16:34:52 -07002292 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002293 return status;
2294}
Jeff Johnson295189b2012-06-20 16:38:30 -07002295/*
2296 * FUNCTION: WDA_close
2297 * call WDI_close and free the WDA context
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302298 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002299VOS_STATUS WDA_close(v_PVOID_t pVosContext)
2300{
Jeff Johnson43971f52012-07-17 12:26:56 -07002301 VOS_STATUS status = VOS_STATUS_SUCCESS;
2302 WDI_Status wstatus;
2303 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07002304 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07002305 if (NULL == wdaContext)
2306 {
2307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002308 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002309 return VOS_STATUS_E_FAILURE;
2310 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002311 if((WDA_INIT_STATE != wdaContext->wdaState) &&
2312 (WDA_STOP_STATE != wdaContext->wdaState))
2313 {
2314 VOS_ASSERT(0);
2315 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002316 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07002317 wstatus = WDI_Close();
2318 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07002319 {
2320 status = VOS_STATUS_E_FAILURE;
2321 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002322 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002323 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07002324 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
2325 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002326 {
2327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002328 "WDI Sync Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002329 status = VOS_STATUS_E_FAILURE;
2330 }
2331
Jeff Johnson43971f52012-07-17 12:26:56 -07002332 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002333 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002334 {
2335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002336 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002337 status = VOS_STATUS_E_FAILURE;
2338 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002339 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002340 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002341 {
2342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002343 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002344 status = VOS_STATUS_E_FAILURE;
2345 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002346 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07002347 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002348 {
2349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002350 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002351 status = VOS_STATUS_E_FAILURE;
2352 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002353 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07002354 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07002355 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07002356 {
2357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2358 "error in WDA close " );
2359 status = VOS_STATUS_E_FAILURE;
2360 }
2361 return status;
2362}
Jeff Johnson295189b2012-06-20 16:38:30 -07002363/*
2364 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
2365 * returns 1 if the compiled version is greater than or equal to the input version
2366 */
2367
2368uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2369{
2370 VOS_STATUS status = VOS_STATUS_SUCCESS;
2371 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2372 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002373 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002374 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
2375 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
2376 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
2377 (compiledVersion.revision >= revision)))
2378 return 1;
2379 else
2380 return 0;
2381}
Jeff Johnson295189b2012-06-20 16:38:30 -07002382/*
2383 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
2384 * returns 1 if the compiled version is greater than or equal to the input version
2385 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002386uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2387{
2388 VOS_STATUS status = VOS_STATUS_SUCCESS;
2389 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2390 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002391 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002392 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
2393 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
2394 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
2395 (reportedVersion.revision >= revision)))
2396 return 1;
2397 else
2398 return 0;
2399}
Jeff Johnson295189b2012-06-20 16:38:30 -07002400/*
2401 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
2402 * Returns the version of the WCNSS WLAN API with which the HOST
2403 * device driver was compiled
2404 */
2405VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
2406 tSirVersionType *pVersion)
2407{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302408 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002409 if ((NULL == pvosGCtx) || (NULL == pVersion))
2410 {
2411 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002412 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002413 VOS_ASSERT(0);
2414 return VOS_STATUS_E_FAILURE;
2415 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002416 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2417 if (NULL == pWDA )
2418 {
2419 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002420 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002421 VOS_ASSERT(0);
2422 return VOS_STATUS_E_FAILURE;
2423 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002424 *pVersion = pWDA->wcnssWlanCompiledVersion;
2425 return VOS_STATUS_SUCCESS;
2426}
Jeff Johnson295189b2012-06-20 16:38:30 -07002427/*
2428 * FUNCTION: WDA_GetWcnssWlanReportedVersion
2429 * Returns the version of the WCNSS WLAN API with which the WCNSS
2430 * device driver was compiled
2431 */
2432VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
2433 tSirVersionType *pVersion)
2434{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302435 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002436 if ((NULL == pvosGCtx) || (NULL == pVersion))
2437 {
2438 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002439 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002440 VOS_ASSERT(0);
2441 return VOS_STATUS_E_FAILURE;
2442 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002443 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2444 if (NULL == pWDA )
2445 {
2446 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002447 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002448 VOS_ASSERT(0);
2449 return VOS_STATUS_E_FAILURE;
2450 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002451 *pVersion = pWDA->wcnssWlanReportedVersion;
2452 return VOS_STATUS_SUCCESS;
2453}
Jeff Johnson295189b2012-06-20 16:38:30 -07002454/*
2455 * FUNCTION: WDA_GetWcnssSoftwareVersion
2456 * Returns the WCNSS Software version string
2457 */
2458VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
2459 tANI_U8 *pVersion,
2460 tANI_U32 versionBufferSize)
2461{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302462 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002463 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002464 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002465 if ((NULL == pvosGCtx) || (NULL == pVersion))
2466 {
2467 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002468 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002469 VOS_ASSERT(0);
2470 return VOS_STATUS_E_FAILURE;
2471 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002472 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2473 if (NULL == pWDA )
2474 {
2475 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002476 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002477 VOS_ASSERT(0);
2478 return VOS_STATUS_E_FAILURE;
2479 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002480 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
2481 return VOS_STATUS_SUCCESS;
2482}
Jeff Johnson295189b2012-06-20 16:38:30 -07002483/*
2484 * FUNCTION: WDA_GetWcnssHardwareVersion
2485 * Returns the WCNSS Hardware version string
2486 */
2487VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
2488 tANI_U8 *pVersion,
2489 tANI_U32 versionBufferSize)
2490{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302491 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002492 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002493 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002494 if ((NULL == pvosGCtx) || (NULL == pVersion))
2495 {
2496 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002497 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002498 VOS_ASSERT(0);
2499 return VOS_STATUS_E_FAILURE;
2500 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002501 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2502 if (NULL == pWDA )
2503 {
2504 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002505 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002506 VOS_ASSERT(0);
2507 return VOS_STATUS_E_FAILURE;
2508 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002509 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
2510 return VOS_STATUS_SUCCESS;
2511}
Jeff Johnson295189b2012-06-20 16:38:30 -07002512/*
2513 * FUNCTION: WDA_WniCfgDnld
2514 * Trigger CFG Download
2515 */
2516VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
2517{
2518 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302519 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnsonab81a082013-04-03 16:00:31 -07002520
Jeff Johnson295189b2012-06-20 16:38:30 -07002521 if (NULL == pMac )
2522 {
2523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002524 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002525 VOS_ASSERT(0);
2526 return VOS_STATUS_E_FAILURE;
2527 }
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302528 processCfgDownloadReq(pMac);
Jeff Johnson295189b2012-06-20 16:38:30 -07002529 return vosStatus;
2530}
Jeff Johnson295189b2012-06-20 16:38:30 -07002531/* -----------------------------------------------------------------
2532 * WDI interface
2533 * -----------------------------------------------------------------
2534 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002535/*
2536 * FUNCTION: WDA_suspendDataTxCallback
2537 * call back function called from TL after suspend Transmission
2538 */
2539VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
2540 v_U8_t* ucSTAId,
2541 VOS_STATUS vosStatus)
2542{
2543 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07002544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002545 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002546 if (NULL == pWDA )
2547 {
2548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002549 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002550 VOS_ASSERT(0);
2551 return VOS_STATUS_E_FAILURE;
2552 }
2553 if(VOS_IS_STATUS_SUCCESS(vosStatus))
2554 {
2555 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
2556 }
2557 else
2558 {
2559 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
2560 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002561 /* Trigger the event to bring the WDA TL suspend function to come
2562 * out of wait*/
2563 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
2564 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
2565 {
2566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002567 "NEW VOS Event Set failed - status = %d", vosStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07002568 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002569 /* If TL suspended had timedout before this callback was called, resume back
2570 * TL.*/
2571 if (pWDA->txSuspendTimedOut)
2572 {
2573 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002574 "Late TLSuspendCallback, resuming TL back again");
Jeff Johnson295189b2012-06-20 16:38:30 -07002575 WDA_ResumeDataTx(pWDA);
2576 pWDA->txSuspendTimedOut = FALSE;
2577 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002578 return VOS_STATUS_SUCCESS;
2579}
Jeff Johnson295189b2012-06-20 16:38:30 -07002580/*
2581 * FUNCTION: WDA_suspendDataTx
2582 * Update TL to suspend the data Transmission
2583 */
2584VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
2585{
2586 VOS_STATUS status = VOS_STATUS_E_FAILURE;
2587 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002588
2589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002590 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002591 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002592 if (pWDA->txSuspendTimedOut)
2593 {
2594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002595 "TL suspend timedout previously, CB not called yet");
Jeff Johnson295189b2012-06-20 16:38:30 -07002596 return status;
2597 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002598 /* Reset the event to be not signalled */
2599 status = vos_event_reset(&pWDA->suspendDataTxEvent);
2600 if(!VOS_IS_STATUS_SUCCESS(status))
2601 {
2602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002603 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002604 return VOS_STATUS_E_FAILURE;
2605 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002606 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07002607 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07002608 WDA_SuspendDataTxCallback);
2609 if(status != VOS_STATUS_SUCCESS)
2610 {
2611 return status;
2612 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002613 /* Wait for the event to be set by the TL, to get the response of
2614 * suspending the TX queues, this event should be set by the Callback
2615 * function called by TL*/
2616 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2617 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2618 if(!VOS_IS_STATUS_SUCCESS(status))
2619 {
2620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2621 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002622 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002623 /* Set this flag to true when TL suspend times out, so that when TL
2624 * suspend eventually happens and calls the callback, TL can be resumed
2625 * right away by looking at this flag when true.*/
2626 pWDA->txSuspendTimedOut = TRUE;
2627 }
2628 else
2629 {
2630 pWDA->txSuspendTimedOut = FALSE;
2631 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002632 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2633 {
2634 status = VOS_STATUS_SUCCESS;
2635 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002636 return status;
2637}
Jeff Johnson295189b2012-06-20 16:38:30 -07002638/*
2639 * FUNCTION: WDA_resumeDataTx
2640 * Update TL to resume the data Transmission
2641 */
2642VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
2643{
2644 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07002645
2646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002647 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07002648
2649 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07002650 return status;
2651}
Jeff Johnson295189b2012-06-20 16:38:30 -07002652/*
2653 * FUNCTION: WDA_InitScanReqCallback
2654 * Trigger Init SCAN callback
2655 */
2656void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2657{
2658 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2659 tWDA_CbContext *pWDA;
2660 tInitScanParams *pWDA_ScanParam ;
2661 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002663 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002664 if(NULL == pWdaParams)
2665 {
2666 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002667 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002668 VOS_ASSERT(0) ;
2669 return ;
2670 }
2671 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2672 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002673 if(NULL == pWDA_ScanParam)
2674 {
2675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002676 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002677 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002678 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2679 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002680 return ;
2681 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002682 if(WDI_STATUS_SUCCESS != wdiStatus)
2683 {
2684 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002685 if(VOS_STATUS_SUCCESS != status)
2686 {
2687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002688 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002689 }
2690 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002691 /* free WDI command buffer */
2692 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002693 vos_mem_free(pWdaParams) ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302694
2695
Jeff Johnson295189b2012-06-20 16:38:30 -07002696 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002697 /* without converting the Status to Failure or Success Just
2698 pass the same status to lim */
2699 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002700 /* send SCAN RSP message back to PE */
2701 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002702 return ;
2703}
2704
2705/*
2706 * FUNCTION: WDA_ProcessInitScanReq
2707 * Trigger Init SCAN in DAL
2708 */
2709VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2710 tInitScanParams *initScanParams)
2711{
2712 WDI_Status status = WDI_STATUS_SUCCESS ;
2713 WDI_InitScanReqParamsType *wdiInitScanParam =
2714 (WDI_InitScanReqParamsType *)vos_mem_malloc(
2715 sizeof(WDI_InitScanReqParamsType)) ;
2716 tWDA_ReqParams *pWdaParams;
2717 tANI_U8 i = 0;
2718
2719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002720 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002721 if(NULL == wdiInitScanParam)
2722 {
2723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002724 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002725 VOS_ASSERT(0);
2726 return VOS_STATUS_E_NOMEM;
2727 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002728 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2729 if(NULL == pWdaParams)
2730 {
2731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002732 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002733 VOS_ASSERT(0);
2734 vos_mem_free(wdiInitScanParam);
2735 return VOS_STATUS_E_NOMEM;
2736 }
2737
2738 /* Copy init Scan params to WDI structure */
2739 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
2740 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
2741 sizeof(tSirMacAddr)) ;
2742 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
2743 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
2744 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002745 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
2746 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07002747 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
2748 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002749 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
2750 {
2751 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2752 initScanParams->scanEntry.bssIdx[i] ;
2753 }
2754
2755 /* if Frame length, copy macMgmtHdr or WDI structure */
2756 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
2757 {
2758 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
2759 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
2760 }
2761 wdiInitScanParam->wdiReqStatusCB = NULL ;
2762
Jeff Johnson295189b2012-06-20 16:38:30 -07002763 /* Store Init Req pointer, as this will be used for response */
2764 pWdaParams->pWdaContext = pWDA;
2765 pWdaParams->wdaMsgParam = initScanParams;
2766 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002767 /* first try to suspend TX */
2768 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002769 if(WDI_STATUS_SUCCESS != status)
2770 {
2771 goto handleWdiFailure;
2772 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002773 /* call DAL API to pass init scan request to DAL */
2774 status = WDI_InitScanReq(wdiInitScanParam,
2775 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002776 if(IS_WDI_STATUS_FAILURE(status))
2777 {
2778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2779 "error in WDA Init Scan, Resume Tx " );
2780 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002781 VOS_ASSERT(0) ;
2782
2783 goto handleWdiFailure;
2784 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002785 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002786handleWdiFailure:
2787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2788 "Failure in WDI Api, free all the memory " );
2789 /* free WDI command buffer */
2790 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2791 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002792 /* send Failure to PE */
2793 initScanParams->status = eSIR_FAILURE ;
2794 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002795 return CONVERT_WDI2VOS_STATUS(status) ;
2796}
2797
Jeff Johnson295189b2012-06-20 16:38:30 -07002798/*
2799 * FUNCTION: WDA_StartScanReqCallback
2800 * send Start SCAN RSP back to PE
2801 */
2802void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
2803 void* pUserData)
2804{
2805 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2806 tWDA_CbContext *pWDA;
2807 tStartScanParams *pWDA_ScanParam;
2808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002809 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002810 if(NULL == pWdaParams)
2811 {
2812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002813 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002814 VOS_ASSERT(0) ;
2815 return ;
2816 }
2817 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2818 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002819 if(NULL == pWDA_ScanParam)
2820 {
2821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002822 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002823 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002824 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002825 return ;
2826 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002827 if(NULL == pWdaParams->wdaWdiApiMsgParam)
2828 {
2829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002830 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002831 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002832 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002833 return ;
2834 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002835 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2836 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002837
Jeff Johnson295189b2012-06-20 16:38:30 -07002838
2839 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002840 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002841 /* send SCAN RSP message back to PE */
2842 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002843 return ;
2844}
2845
Jeff Johnson295189b2012-06-20 16:38:30 -07002846/*
2847 * FUNCTION: WDA_ProcessStartScanReq
2848 * Trigger start SCAN in WDI
2849 */
2850VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
2851 tStartScanParams *startScanParams)
2852{
2853 WDI_Status status = WDI_STATUS_SUCCESS;
2854 WDI_StartScanReqParamsType *wdiStartScanParams =
2855 (WDI_StartScanReqParamsType *)vos_mem_malloc(
2856 sizeof(WDI_StartScanReqParamsType)) ;
2857 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002859 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002860 if(NULL == wdiStartScanParams)
2861 {
2862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002863 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002864 VOS_ASSERT(0);
2865 return VOS_STATUS_E_NOMEM;
2866 }
2867 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2868 if(NULL == pWdaParams)
2869 {
2870 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002871 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002872 VOS_ASSERT(0);
2873 vos_mem_free(wdiStartScanParams);
2874 return VOS_STATUS_E_NOMEM;
2875 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002876 /* Copy init Scan params to WDI structure */
2877 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
2878 wdiStartScanParams->wdiReqStatusCB = NULL ;
2879
Jeff Johnson295189b2012-06-20 16:38:30 -07002880 /* Store Init Req pointer, as this will be used for response */
2881 /* store Params pass it to WDI */
2882 pWdaParams->pWdaContext = pWDA;
2883 pWdaParams->wdaMsgParam = startScanParams;
2884 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002885 /* call DAL API to pass init scan request to DAL */
2886 status = WDI_StartScanReq(wdiStartScanParams,
2887 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002888 /* failure returned by WDI API */
2889 if(IS_WDI_STATUS_FAILURE(status))
2890 {
2891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2892 "Failure in Start Scan WDI API, free all the memory "
2893 "It should be due to previous abort scan." );
2894 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2895 vos_mem_free(pWdaParams) ;
2896 startScanParams->status = eSIR_FAILURE ;
2897 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
2898 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002899 return CONVERT_WDI2VOS_STATUS(status) ;
2900}
Jeff Johnson295189b2012-06-20 16:38:30 -07002901/*
2902 * FUNCTION: WDA_EndScanReqCallback
2903 * END SCAN callback
2904 */
2905void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
2906{
2907 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2908 tWDA_CbContext *pWDA;
2909 tEndScanParams *endScanParam;
2910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002911 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002912 if(NULL == pWdaParams)
2913 {
2914 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002915 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002916 VOS_ASSERT(0) ;
2917 return ;
2918 }
2919 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2920 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002921 if(NULL == endScanParam)
2922 {
2923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002924 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002925 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002926 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2927 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002928 return ;
2929 }
2930
2931 /* Free WDI command buffer */
2932 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2933 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002934 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002935 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002936 /* send response back to PE */
2937 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
2938 return ;
2939}
2940
Jeff Johnson295189b2012-06-20 16:38:30 -07002941/*
2942 * FUNCTION: WDA_ProcessEndScanReq
2943 * Trigger END SCAN in WDI
2944 */
2945VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
2946 tEndScanParams *endScanParams)
2947{
2948 WDI_Status status = WDI_STATUS_SUCCESS;
2949 WDI_EndScanReqParamsType *wdiEndScanParams =
2950 (WDI_EndScanReqParamsType *)vos_mem_malloc(
2951 sizeof(WDI_EndScanReqParamsType)) ;
2952 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002954 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002955 if(NULL == wdiEndScanParams)
2956 {
2957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002958 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002959 VOS_ASSERT(0);
2960 return VOS_STATUS_E_NOMEM;
2961 }
2962 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2963 if(NULL == pWdaParams)
2964 {
2965 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002966 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002967 VOS_ASSERT(0);
2968 vos_mem_free(wdiEndScanParams);
2969 return VOS_STATUS_E_NOMEM;
2970 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002971 /* Copy init Scan params to WDI structure */
2972 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
2973 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002974 /* Store Init Req pointer, as this will be used for response */
2975 /* store Params pass it to WDI */
2976 pWdaParams->pWdaContext = pWDA;
2977 pWdaParams->wdaMsgParam = endScanParams;
2978 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002979 /* call DAL API to pass init scan request to DAL */
2980 status = WDI_EndScanReq(wdiEndScanParams,
2981 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002982 if(IS_WDI_STATUS_FAILURE(status))
2983 {
2984 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2985 "Failure in End Scan WDI API, free all the memory "
2986 "It should be due to previous abort scan." );
2987 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2988 vos_mem_free(pWdaParams) ;
2989 endScanParams->status = eSIR_FAILURE ;
2990 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
2991 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002992 return CONVERT_WDI2VOS_STATUS(status) ;
2993}
Jeff Johnson295189b2012-06-20 16:38:30 -07002994/*
2995 * FUNCTION: WDA_FinishScanReqCallback
2996 * Trigger Finish SCAN callback
2997 */
2998void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2999{
3000 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3001 tWDA_CbContext *pWDA;
3002 tFinishScanParams *finishScanParam;
3003 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003005 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003006 if(NULL == pWdaParams)
3007 {
3008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003009 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003010 VOS_ASSERT(0) ;
3011 return ;
3012 }
3013
3014 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3015 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003016 if(NULL == finishScanParam)
3017 {
3018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003019 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003020 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003021 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3022 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003023 return ;
3024 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003025 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3026 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003027 /*
3028 * Now Resume TX, if we reached here means, TX is already suspended, we
3029 * have to resume it unconditionaly
3030 */
3031 status = WDA_ResumeDataTx(pWDA) ;
3032
3033 if(VOS_STATUS_SUCCESS != status)
3034 {
3035 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003036 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003037 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003038 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003039 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
3040 return ;
3041}
Jeff Johnson295189b2012-06-20 16:38:30 -07003042/*
3043 * FUNCTION: WDA_ProcessFinshScanReq
3044 * Trigger Finish SCAN in WDI
3045 */
3046VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
3047 tFinishScanParams *finishScanParams)
3048{
3049 WDI_Status status = WDI_STATUS_SUCCESS;
3050 WDI_FinishScanReqParamsType *wdiFinishScanParams =
3051 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
3052 sizeof(WDI_FinishScanReqParamsType)) ;
3053 tWDA_ReqParams *pWdaParams ;
3054 tANI_U8 i = 0;
3055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003056 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003057 if(NULL == wdiFinishScanParams)
3058 {
3059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003060 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003061 VOS_ASSERT(0);
3062 return VOS_STATUS_E_NOMEM;
3063 }
3064 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3065 if(NULL == pWdaParams)
3066 {
3067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003068 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003069 VOS_ASSERT(0);
3070 vos_mem_free(wdiFinishScanParams);
3071 return VOS_STATUS_E_NOMEM;
3072 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003073 /* Copy init Scan params to WDI structure */
3074 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
3075 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
3076 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003077 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
3078 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
3079 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
3080 finishScanParams->frameLength ;
3081 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
3082 finishScanParams->currentOperChannel ;
3083 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
3084 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
3085 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003086 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
3087 {
3088 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
3089 finishScanParams->scanEntry.bssIdx[i] ;
3090 }
3091
3092
Jeff Johnson295189b2012-06-20 16:38:30 -07003093 /* if Frame length, copy macMgmtHdr ro WDI structure */
3094 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
3095 {
3096 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
3097 &finishScanParams->macMgmtHdr,
3098 sizeof(WDI_MacMgmtHdr)) ;
3099 }
3100 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003101 /* Store Init Req pointer, as this will be used for response */
3102 /* store Params pass it to WDI */
3103 pWdaParams->pWdaContext = pWDA;
3104 pWdaParams->wdaMsgParam = finishScanParams;
3105 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003106 /* call DAL API to pass init scan request to DAL */
3107 status = WDI_FinishScanReq(wdiFinishScanParams,
3108 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003109
Jeff Johnson295189b2012-06-20 16:38:30 -07003110
3111 /*
3112 * WDI API returns failure..
3113 */
3114 if(IS_WDI_STATUS_FAILURE( status))
3115 {
3116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3117 "Failure in Finish Scan WDI API, free all the memory " );
3118 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3119 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003120 finishScanParams->status = eSIR_FAILURE ;
3121 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
3122 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003123 return CONVERT_WDI2VOS_STATUS(status) ;
3124}
Jeff Johnson295189b2012-06-20 16:38:30 -07003125/*---------------------------------------------------------------------
3126 * ASSOC API's
3127 *---------------------------------------------------------------------
3128 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003129/*
Sachin Ahuja935eda782014-07-30 14:57:41 +05303130 * FUNCTION: WDA_JoinRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07003131 * Trigger Init SCAN callback
3132 */
Sachin Ahuja935eda782014-07-30 14:57:41 +05303133void WDA_JoinRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07003134{
3135 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3136 tWDA_CbContext *pWDA;
3137 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003139 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003140 if(NULL == pWdaParams)
3141 {
3142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003143 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003144 VOS_ASSERT(0) ;
3145 return ;
3146 }
3147 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3148 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003149 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3150 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003151 /* reset macBSSID */
3152 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07003153 /* reset macSTASelf */
3154 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003155 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003156 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003157 return ;
3158}
Sachin Ahuja935eda782014-07-30 14:57:41 +05303159
3160/*
3161 * FUNCTION: WDA_JoinReqCallback
3162 * Free memory and send SWITCH CHANNEL RSP back to PE.
3163 * Invoked when Enter JOIN REQ failed in WDI and no RSP callback is generated.
3164 */
3165void WDA_JoinReqCallback(WDI_Status wdiStatus, void* pUserData)
3166{
3167 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3168 tWDA_CbContext *pWDA;
3169 tSwitchChannelParams *joinReqParam;
3170
3171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3172 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
3173
3174 if(NULL == pWdaParams)
3175 {
3176 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3177 "%s: pWdaParams received NULL", __func__);
3178 VOS_ASSERT(0);
3179 return;
3180 }
3181
3182 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3183 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3184 joinReqParam->status = wdiStatus;
3185
3186 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3187 {
3188 /* reset macBSSID */
3189 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
3190 /* reset macSTASelf */
3191 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
3192
3193 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3194 vos_mem_free(pWdaParams);
3195 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
3196 }
3197
3198 return;
3199}
3200
Jeff Johnson295189b2012-06-20 16:38:30 -07003201/*
3202 * FUNCTION: WDA_ProcessJoinReq
3203 * Trigger Join REQ in WDI
3204 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003205VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
3206 tSwitchChannelParams* joinReqParam)
3207{
3208 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003209 WDI_JoinReqParamsType *wdiJoinReqParam =
3210 (WDI_JoinReqParamsType *)vos_mem_malloc(
3211 sizeof(WDI_JoinReqParamsType)) ;
3212 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003214 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003215 if(NULL == wdiJoinReqParam)
3216 {
3217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003218 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003219 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003220 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003221 return VOS_STATUS_E_NOMEM;
3222 }
3223 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3224 if(NULL == pWdaParams)
3225 {
3226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003227 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003228 VOS_ASSERT(0);
3229 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003230 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003231 return VOS_STATUS_E_NOMEM;
3232 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003233
3234 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
3235 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
3236 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
3237 {
3238 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3239 "%s: received join request when BSSID or self-STA is NULL "
3240 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003241 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003242 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
3243 VOS_ASSERT(0);
3244 vos_mem_free(wdiJoinReqParam);
3245 vos_mem_free(pWdaParams);
3246 joinReqParam->status = eSIR_FAILURE ;
3247 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3248 return VOS_STATUS_E_INVAL;
3249 }
3250
Jeff Johnson295189b2012-06-20 16:38:30 -07003251 /* copy the BSSID for pWDA */
3252 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
3253 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003254 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
3255 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003256 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
3257 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07003258#ifdef WLAN_FEATURE_VOWIFI
3259 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
3260 joinReqParam->maxTxPower ;
3261#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003262 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
3263 joinReqParam->localPowerConstraint ;
3264#endif
3265 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
3266 joinReqParam->secondaryChannelOffset ;
3267 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
3268
Sachin Ahuja935eda782014-07-30 14:57:41 +05303269 wdiJoinReqParam->wdiReqStatusCB = WDA_JoinReqCallback;
3270 wdiJoinReqParam->pUserData = pWdaParams;
3271
Jeff Johnson295189b2012-06-20 16:38:30 -07003272 /* Store Init Req pointer, as this will be used for response */
3273 /* store Params pass it to WDI */
3274 pWdaParams->pWdaContext = pWDA;
3275 pWdaParams->wdaMsgParam = joinReqParam;
3276 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003277 status = WDI_JoinReq(wdiJoinReqParam,
Sachin Ahuja935eda782014-07-30 14:57:41 +05303278 (WDI_JoinRspCb )WDA_JoinRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003279 if(IS_WDI_STATUS_FAILURE(status))
3280 {
3281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3282 "Failure in Join WDI API, free all the memory " );
3283 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3284 vos_mem_free(pWdaParams) ;
3285 joinReqParam->status = eSIR_FAILURE ;
3286 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3287 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003288 return CONVERT_WDI2VOS_STATUS(status) ;
3289}
Jeff Johnson295189b2012-06-20 16:38:30 -07003290/*
3291 * FUNCTION: WDA_SwitchChannelReqCallback
3292 * send Switch channel RSP back to PE
3293 */
3294void WDA_SwitchChannelReqCallback(
3295 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
3296{
3297 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3298 tWDA_CbContext *pWDA;
3299 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003301 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003302 if(NULL == pWdaParams)
3303 {
3304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003305 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003306 VOS_ASSERT(0) ;
3307 return ;
3308 }
3309 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3310 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3311
3312#ifdef WLAN_FEATURE_VOWIFI
3313 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
3314#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003315 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3316 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003317 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003318 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003319 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003320 return ;
3321}
Jeff Johnson295189b2012-06-20 16:38:30 -07003322/*
3323 * FUNCTION: WDA_ProcessChannelSwitchReq
3324 * Request to WDI to switch channel REQ params.
3325 */
3326VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
3327 tSwitchChannelParams *pSwitchChanParams)
3328{
3329 WDI_Status status = WDI_STATUS_SUCCESS ;
3330 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
3331 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
3332 sizeof(WDI_SwitchChReqParamsType)) ;
3333 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003335 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003336 if(NULL == wdiSwitchChanParam)
3337 {
3338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003339 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003340 VOS_ASSERT(0);
3341 return VOS_STATUS_E_NOMEM;
3342 }
3343 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3344 if(NULL == pWdaParams)
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 vos_mem_free(wdiSwitchChanParam);
3350 return VOS_STATUS_E_NOMEM;
3351 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003352 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
3353#ifndef WLAN_FEATURE_VOWIFI
3354 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3355 pSwitchChanParams->localPowerConstraint;
3356#endif
3357 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3358 pSwitchChanParams->secondaryChannelOffset;
3359 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003360 /* Store req pointer, as this will be used for response */
3361 /* store Params pass it to WDI */
3362 pWdaParams->pWdaContext = pWDA;
3363 pWdaParams->wdaMsgParam = pSwitchChanParams;
3364 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003365#ifdef WLAN_FEATURE_VOWIFI
3366 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
3367 = pSwitchChanParams->maxTxPower;
3368 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3369 pSwitchChanParams ->selfStaMacAddr,
3370 sizeof(tSirMacAddr));
3371#endif
3372 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3373 pSwitchChanParams->bssId,
3374 sizeof(tSirMacAddr));
3375
3376 status = WDI_SwitchChReq(wdiSwitchChanParam,
3377 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003378 if(IS_WDI_STATUS_FAILURE(status))
3379 {
3380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3381 "Failure in process channel switch Req WDI API, free all the memory " );
3382 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3383 vos_mem_free(pWdaParams) ;
3384 pSwitchChanParams->status = eSIR_FAILURE ;
3385 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
3386 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003387 return CONVERT_WDI2VOS_STATUS(status) ;
3388}
Kalikinkar dhara1e83b772014-02-06 12:59:22 -08003389
3390/*
3391 * FUNCTION: WDA_SwitchChannelReqCallback_V1
3392 * send Switch channel RSP back to PE
3393 */
3394void WDA_SwitchChannelReqCallback_V1(
3395 WDI_SwitchChRspParamsType_V1 *wdiSwitchChanRsp,
3396 void* pUserData)
3397{
3398 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3399 tWDA_CbContext *pWDA;
3400 tSwitchChannelParams *pSwitchChanParams;
3401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3402 "<------ %s " ,__func__);
3403
3404 if (NULL == pWdaParams)
3405 {
3406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3407 "%s: pWdaParams received NULL", __func__);
3408 VOS_ASSERT(0);
3409 return ;
3410 }
3411 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3412 pSwitchChanParams =
3413 (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3414 pSwitchChanParams->channelSwitchSrc =
3415 wdiSwitchChanRsp->channelSwitchSrc;
3416#ifdef WLAN_FEATURE_VOWIFI
3417 pSwitchChanParams->txMgmtPower =
3418 wdiSwitchChanRsp->ucTxMgmtPower;
3419#endif
3420 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3421 vos_mem_free(pWdaParams);
3422 pSwitchChanParams->status =
3423 wdiSwitchChanRsp->wdiStatus ;
3424 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3425 (void *)pSwitchChanParams , 0);
3426 return;
3427}
3428
3429/*
3430 * FUNCTION: WDA_ProcessChannelSwitchReq_V1
3431 * Request to WDI to switch channel REQ params.
3432 */
3433VOS_STATUS WDA_ProcessChannelSwitchReq_V1(tWDA_CbContext *pWDA,
3434 tSwitchChannelParams *pSwitchChanParams)
3435{
3436 WDI_Status status = WDI_STATUS_SUCCESS ;
3437 WDI_SwitchChReqParamsType_V1 *wdiSwitchChanParam =
3438 (WDI_SwitchChReqParamsType_V1 *)vos_mem_malloc(
3439 sizeof(WDI_SwitchChReqParamsType_V1)) ;
3440 tWDA_ReqParams *pWdaParams ;
3441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3442 "------> %s " ,__func__);
3443 if (NULL == wdiSwitchChanParam)
3444 {
3445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3446 "%s: VOS MEM Alloc Failure", __func__);
3447 VOS_ASSERT(0);
3448 return VOS_STATUS_E_NOMEM;
3449 }
3450 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3451 if (NULL == pWdaParams)
3452 {
3453 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3454 "%s: VOS MEM Alloc Failure", __func__);
3455 VOS_ASSERT(0);
3456 vos_mem_free(wdiSwitchChanParam);
3457 return VOS_STATUS_E_NOMEM;
3458 }
3459 wdiSwitchChanParam->wdiChInfo.channelSwitchSrc =
3460 pSwitchChanParams->channelSwitchSrc;
3461
3462 wdiSwitchChanParam->wdiChInfo.ucChannel =
3463 pSwitchChanParams->channelNumber;
3464#ifndef WLAN_FEATURE_VOWIFI
3465 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3466 pSwitchChanParams->localPowerConstraint;
3467#endif
3468 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3469 pSwitchChanParams->secondaryChannelOffset;
3470 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
3471 /* Store req pointer, as this will be used for response */
3472 /* store Params pass it to WDI */
3473 pWdaParams->pWdaContext = pWDA;
3474 pWdaParams->wdaMsgParam = pSwitchChanParams;
3475 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
3476#ifdef WLAN_FEATURE_VOWIFI
3477 wdiSwitchChanParam->wdiChInfo.cMaxTxPower =
3478 pSwitchChanParams->maxTxPower;
3479 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3480 pSwitchChanParams ->selfStaMacAddr,
3481 sizeof(tSirMacAddr));
3482#endif
3483 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3484 pSwitchChanParams->bssId,
3485 sizeof(tSirMacAddr));
3486
3487 status = WDI_SwitchChReq_V1(wdiSwitchChanParam,
3488 (WDI_SwitchChRspCb_V1)WDA_SwitchChannelReqCallback_V1,
3489 pWdaParams);
3490 if (IS_WDI_STATUS_FAILURE(status))
3491 {
3492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3493 "Failure in process channel switch Req WDI "
3494 "API, free all the memory " );
3495 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3496 vos_mem_free(pWdaParams) ;
3497 pSwitchChanParams->status = eSIR_FAILURE ;
3498 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3499 (void *)pSwitchChanParams, 0) ;
3500 }
3501 return CONVERT_WDI2VOS_STATUS(status) ;
3502}
3503
Jeff Johnson295189b2012-06-20 16:38:30 -07003504/*
3505 * FUNCTION: WDA_ConfigBssReqCallback
3506 * config BSS Req Callback, called by WDI
3507 */
3508void WDA_ConfigBssReqCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
3509 ,void* pUserData)
3510{
3511 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3512 tWDA_CbContext *pWDA;
3513 tAddBssParams *configBssReqParam;
3514 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003516 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003517 if(NULL == pWdaParams)
3518 {
3519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003520 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003521 VOS_ASSERT(0) ;
3522 return ;
3523 }
3524 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3525 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
3526 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003527 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003528 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003529 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
3530 {
3531 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
3532 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003533 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
3534 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
3535 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
3536
3537 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
3538 {
3539 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
3540 {
3541 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
3542 staConfigBssParam->staType = STA_ENTRY_BSSID;
3543 }
3544 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
3545 (staConfigBssParam->staType == STA_ENTRY_SELF))
3546 {
3547 /* This is the 1st add BSS Req for the BTAMP STA */
3548 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3549 staConfigBssParam->staType = STA_ENTRY_BSSID;
3550 }
3551 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3552 (staConfigBssParam->staType == STA_ENTRY_PEER))
3553 {
3554 /* This is the 2nd ADD BSS Request that is sent
3555 * on the BTAMP STA side. The Sta type is
3556 * set to STA_ENTRY_PEER here.*/
3557 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3558 }
3559 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3560 (staConfigBssParam->staType == STA_ENTRY_SELF))
3561 {
3562 /* statype is already set by PE.
3563 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
3564 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
3565 staConfigBssParam->staType = STA_ENTRY_BSSID;
3566 }
3567 else
3568 {
3569 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
3570 staConfigBssParam->staType = STA_ENTRY_PEER;
3571 }
3572 }
3573 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
3574 {
3575 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
3576 staConfigBssParam->staType = STA_ENTRY_SELF;
3577 }
3578 else
3579 {
3580 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3581 "Invalid operation mode specified");
3582 VOS_ASSERT(0);
3583 }
3584
3585 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003586 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003587 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003588 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003589 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
3590 sizeof(tSirMacAddr));
3591 staConfigBssParam->txChannelWidthSet =
3592 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07003593 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
3594 staConfigBssParam->htCapable)
3595 {
3596 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
3597 wdiConfigBssRsp->ucBSSIdx;
3598 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
3599 WDA_VALID_STA_INDEX ;
Abhishek Singh0644e482014-10-06 18:38:23 +05303600 pWDA->wdaStaInfo[staConfigBssParam->staIdx].currentOperChan =
3601 configBssReqParam->currentOperChannel;
Jeff Johnson295189b2012-06-20 16:38:30 -07003602 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003603 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
3604 wdiConfigBssRsp->ucBSSIdx,
3605 wdiConfigBssRsp->ucSTAIdx))
3606 {
3607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003608 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003609 VOS_ASSERT(0) ;
3610 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003611 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
3612 {
3613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003614 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003615 VOS_ASSERT(0) ;
3616 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003617#ifdef WLAN_FEATURE_VOWIFI
3618 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
3619#endif
3620 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05303621 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
3622 sizeof(WDI_ConfigBSSReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07003623 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3624 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003625 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003626 return ;
3627}
Jeff Johnson295189b2012-06-20 16:38:30 -07003628/*
3629 * FUNCTION: WDA_UpdateEdcaParamsForAC
3630 * Update WDI EDCA params with PE edca params
3631 */
3632void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
3633 WDI_EdcaParamRecord *wdiEdcaParam,
3634 tSirMacEdcaParamRecord *macEdcaParam)
3635{
3636 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
3637 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
3638 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
3639 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
3640 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
3641 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
3642}
Jeff Johnson295189b2012-06-20 16:38:30 -07003643/*
3644 * FUNCTION: WDA_ProcessConfigBssReq
3645 * Configure BSS before starting Assoc with AP
3646 */
3647VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
3648 tAddBssParams* configBssReqParam)
3649{
3650 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303651 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003652 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003653 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003654 "------> %s " ,__func__);
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303655 if (NULL == configBssReqParam)
3656 {
3657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3658 "%s: configBssReqParam is NULL", __func__);
3659 return VOS_STATUS_E_INVAL;
3660 }
3661
3662 wdiConfigBssReqParam = (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
3663 sizeof(WDI_ConfigBSSReqParamsType)) ;
3664
Jeff Johnson295189b2012-06-20 16:38:30 -07003665 if(NULL == wdiConfigBssReqParam)
3666 {
3667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003668 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003669 VOS_ASSERT(0);
3670 return VOS_STATUS_E_NOMEM;
3671 }
3672 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3673 if(NULL == pWdaParams)
3674 {
3675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003676 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003677 VOS_ASSERT(0);
3678 vos_mem_free(wdiConfigBssReqParam);
3679 return VOS_STATUS_E_NOMEM;
3680 }
Kiran4a17ebe2013-01-31 10:43:43 -08003681 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3682 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07003683 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003684 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
3685 configBssReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003686 /* Store Init Req pointer, as this will be used for response */
3687 /* store Params pass it to WDI */
3688 pWdaParams->pWdaContext = pWDA;
3689 pWdaParams->wdaMsgParam = configBssReqParam;
3690 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003691 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
3692 (WDI_ConfigBSSRspCb )WDA_ConfigBssReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003693 if(IS_WDI_STATUS_FAILURE(status))
3694 {
3695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3696 "Failure in Config BSS WDI API, free all the memory " );
3697 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3698 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003699 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003700 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
3701 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003702 return CONVERT_WDI2VOS_STATUS(status) ;
3703}
Jeff Johnson295189b2012-06-20 16:38:30 -07003704#ifdef ENABLE_HAL_COMBINED_MESSAGES
3705/*
3706 * FUNCTION: WDA_PostAssocReqCallback
3707 * Post ASSOC req callback, send RSP back to PE
3708 */
3709void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
3710 void* pUserData)
3711{
3712 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
3713 tPostAssocParams *postAssocReqParam =
3714 (tPostAssocParams *)pWDA->wdaMsgParam ;
3715 /*STA context within the BSS Params*/
3716 tAddStaParams *staPostAssocParam =
3717 &postAssocReqParam->addBssParams.staContext ;
3718 /*STA Params for self STA*/
3719 tAddStaParams *selfStaPostAssocParam =
3720 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003722 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003723 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003724 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003725 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
3726 {
3727 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
3728 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
3729 sizeof(tSirMacAddr)) ;
3730 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
3731 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
3732 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003733 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
3734 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05303735 vos_mem_zero(pWDA->wdaWdiApiMsgParam, sizeof(WDI_PostAssocReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07003736 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3737 pWDA->wdaWdiApiMsgParam = NULL;
3738 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003739 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003740 return ;
3741}
Jeff Johnson295189b2012-06-20 16:38:30 -07003742/*
3743 * FUNCTION: WDA_ProcessPostAssocReq
3744 * Trigger POST ASSOC processing in WDI
3745 */
3746VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
3747 tPostAssocParams *postAssocReqParam)
3748{
Jeff Johnson295189b2012-06-20 16:38:30 -07003749 WDI_Status status = WDI_STATUS_SUCCESS ;
3750
3751 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
3752 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
3753 sizeof(WDI_PostAssocReqParamsType)) ;
3754 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003755 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003756
Jeff Johnson295189b2012-06-20 16:38:30 -07003757 if(NULL == wdiPostAssocReqParam)
3758 {
3759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003760 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003761 VOS_ASSERT(0);
3762 return VOS_STATUS_E_NOMEM;
3763 }
3764
3765 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
3766 {
3767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003768 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003769 VOS_ASSERT(0);
3770 return VOS_STATUS_E_FAILURE;
3771 }
3772
Jeff Johnson295189b2012-06-20 16:38:30 -07003773 /* update BSS params into WDI structure */
3774 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
3775 &postAssocReqParam->addBssParams) ;
3776 /* update STA params into WDI structure */
3777 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
3778 &postAssocReqParam->addStaParams) ;
3779
3780 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
3781 postAssocReqParam->addBssParams.highPerformance;
3782 WDA_UpdateEdcaParamsForAC(pWDA,
3783 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
3784 &postAssocReqParam->addBssParams.acbe);
3785 WDA_UpdateEdcaParamsForAC(pWDA,
3786 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
3787 &postAssocReqParam->addBssParams.acbk);
3788 WDA_UpdateEdcaParamsForAC(pWDA,
3789 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
3790 &postAssocReqParam->addBssParams.acvi);
3791 WDA_UpdateEdcaParamsForAC(pWDA,
3792 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
3793 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07003794 /* Store Init Req pointer, as this will be used for response */
3795 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003796 /* store Params pass it to WDI */
3797 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003798 status = WDI_PostAssocReq(wdiPostAssocReqParam,
3799 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003800 if(IS_WDI_STATUS_FAILURE(status))
3801 {
3802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3803 "Failure in Post Assoc WDI API, free all the memory " );
3804 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3805 pWDA->wdaWdiApiMsgParam = NULL;
3806 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003807 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003808 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
3809 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003810 return CONVERT_WDI2VOS_STATUS(status) ;
3811}
3812#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003813/*
3814 * FUNCTION: WDA_AddStaReqCallback
3815 * ADD STA req callback, send RSP back to PE
3816 */
3817void WDA_AddStaReqCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
3818 void* pUserData)
3819{
3820 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3821 tWDA_CbContext *pWDA;
3822 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003824 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003825 if(NULL == pWdaParams)
3826 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003828 VOS_ASSERT(0) ;
3829 return ;
3830 }
3831 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3832 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003833 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003834 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003835 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
3836 {
3837 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
3838 /*TODO: UMAC structure doesn't have these fields*/
3839 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
3840 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
3841 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
3842 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
3843 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
3844 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003845#ifdef FEATURE_WLAN_TDLS
3846 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
3847 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
3848#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003849 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003850#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003851 {
3852 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
3853 wdiConfigStaRsp->ucBssIdx;
3854 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
3855 WDA_VALID_STA_INDEX ;
Abhishek Singhf08a82b2014-10-07 11:00:42 +05303856 pWDA->wdaStaInfo[addStaReqParam->staIdx].currentOperChan =
3857 addStaReqParam->currentOperChan;
Jeff Johnson295189b2012-06-20 16:38:30 -07003858 }
3859 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
3860 {
3861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003862 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003863 VOS_ASSERT(0) ;
3864 return ;
3865 }
3866 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003867 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3868 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003869 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003870 return ;
3871}
Jeff Johnson295189b2012-06-20 16:38:30 -07003872/*
3873 * FUNCTION: WDA_ConfigStaReq
3874 * Trigger Config STA processing in WDI
3875 */
3876VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
3877 tAddStaParams *addStaReqParam)
3878{
Jeff Johnson295189b2012-06-20 16:38:30 -07003879 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003880 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
3881 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
3882 sizeof(WDI_ConfigSTAReqParamsType)) ;
3883 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003885 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003886 if(NULL == wdiConfigStaReqParam)
3887 {
3888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003889 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003890 VOS_ASSERT(0);
3891 return VOS_STATUS_E_NOMEM;
3892 }
3893 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3894 if(NULL == pWdaParams)
3895 {
3896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003897 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003898 VOS_ASSERT(0);
3899 vos_mem_free(wdiConfigStaReqParam);
3900 return VOS_STATUS_E_NOMEM;
3901 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003902 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003903 /* update STA params into WDI structure */
3904 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
3905 addStaReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003906 /* Store Init Req pointer, as this will be used for response */
3907 /* store Params pass it to WDI */
3908 pWdaParams->pWdaContext = pWDA;
3909 pWdaParams->wdaMsgParam = addStaReqParam;
3910 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003911 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
3912 (WDI_ConfigSTARspCb )WDA_AddStaReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003913 if(IS_WDI_STATUS_FAILURE(status))
3914 {
3915 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3916 "Failure in Config STA WDI API, free all the memory " );
3917 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3918 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003919 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003920 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
3921 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003922 return CONVERT_WDI2VOS_STATUS(status) ;
3923}
Jeff Johnson295189b2012-06-20 16:38:30 -07003924/*
3925 * FUNCTION: WDA_DelBSSReqCallback
3926 * Dens DEL BSS RSP back to PE
3927 */
3928void WDA_DelBSSReqCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
3929 void* pUserData)
3930{
3931 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3932 tWDA_CbContext *pWDA;
3933 tDeleteBssParams *delBssReqParam;
3934 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003935 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003936 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003937 if(NULL == pWdaParams)
3938 {
3939 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003940 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003941 VOS_ASSERT(0) ;
3942 return ;
3943 }
3944 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3945 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003946 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003947 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
3948 {
3949 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
3950 sizeof(tSirMacAddr)) ;
3951 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003952 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
3953 {
3954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003955 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003956 VOS_ASSERT(0) ;
3957 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003958 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
3959 {
3960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003961 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003962 VOS_ASSERT(0) ;
3963 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003964 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
3965 {
3966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003967 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003968 VOS_ASSERT(0) ;
3969 }
Mihir Shete2ab1d492014-06-04 14:21:05 +05303970
3971 WLANTL_StartForwarding(staIdx,0,0);
3972
Jeff Johnson295189b2012-06-20 16:38:30 -07003973 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3974 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003975 /* reset the the system role*/
3976 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
3977
3978 /* Reset the BA related information */
3979 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
3980 {
3981 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
3982 {
3983 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
3984 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05303985 pWDA->wdaStaInfo[staIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07003986 /* Reset framesTxed counters here */
3987 for(tid = 0; tid < STACFG_MAX_TC; tid++)
3988 {
3989 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
3990 }
3991 }
3992 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003993 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003994 return ;
3995}
3996
Jeff Johnson295189b2012-06-20 16:38:30 -07003997/*
3998 * FUNCTION: WDA_ProcessDelBssReq
3999 * Init DEL BSS req with WDI
4000 */
4001VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
4002 tDeleteBssParams *delBssParam)
4003{
4004 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004005 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
4006 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
4007 sizeof(WDI_DelBSSReqParamsType)) ;
4008 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004010 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004011 if(NULL == wdiDelBssReqParam)
4012 {
4013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004014 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004015 VOS_ASSERT(0);
4016 return VOS_STATUS_E_NOMEM;
4017 }
4018 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4019 if(NULL == pWdaParams)
4020 {
4021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004022 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004023 VOS_ASSERT(0);
4024 vos_mem_free(wdiDelBssReqParam);
4025 return VOS_STATUS_E_NOMEM;
4026 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004027 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
4028 wdiDelBssReqParam->wdiReqStatusCB = NULL ;
4029
4030 /* Store Init Req pointer, as this will be used for response */
4031 /* store Params pass it to WDI */
4032 pWdaParams->pWdaContext = pWDA;
4033 pWdaParams->wdaMsgParam = delBssParam;
4034 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004035 status = WDI_DelBSSReq(wdiDelBssReqParam,
4036 (WDI_DelBSSRspCb )WDA_DelBSSReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004037 if(IS_WDI_STATUS_FAILURE(status))
4038 {
4039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4040 "Failure in Del BSS WDI API, free all the memory " );
4041 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4042 vos_mem_free(pWdaParams) ;
4043 delBssParam->status = eSIR_FAILURE ;
4044 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
4045 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004046 return CONVERT_WDI2VOS_STATUS(status) ;
4047}
Jeff Johnson295189b2012-06-20 16:38:30 -07004048/*
4049 * FUNCTION: WDA_DelSTAReqCallback
4050 * Dens DEL STA RSP back to PE
4051 */
4052void WDA_DelSTAReqCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
4053 void* pUserData)
4054{
4055 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4056 tWDA_CbContext *pWDA;
4057 tDeleteStaParams *delStaReqParam;
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 if(NULL == pWdaParams)
4061 {
4062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004063 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004064 VOS_ASSERT(0) ;
4065 return ;
4066 }
4067 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4068 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004069 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004070 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
4071 {
4072 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
4073 {
4074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004075 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004076 VOS_ASSERT(0) ;
4077 }
4078 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
Mihir Shete2ab1d492014-06-04 14:21:05 +05304079 WLANTL_StartForwarding(delStaReqParam->staIdx,0,0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004080 }
4081 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4082 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004083 /*Reset the BA information corresponding to this STAIdx */
4084 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
4085 WDA_INVALID_STA_INDEX;
4086 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05304087 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004088 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004089 return ;
4090}
Jeff Johnson295189b2012-06-20 16:38:30 -07004091/*
4092 * FUNCTION: WDA_ProcessDelStaReq
4093 * Init DEL STA req with WDI
4094 */
4095VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
4096 tDeleteStaParams *delStaParam)
4097{
4098 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004099 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
4100 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
4101 sizeof(WDI_DelSTAReqParamsType)) ;
4102 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004104 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004105 if(NULL == wdiDelStaReqParam)
4106 {
4107 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004108 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004109 VOS_ASSERT(0);
4110 return VOS_STATUS_E_NOMEM;
4111 }
4112 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4113 if(NULL == pWdaParams)
4114 {
4115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004116 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004117 VOS_ASSERT(0);
4118 vos_mem_free(wdiDelStaReqParam);
4119 return VOS_STATUS_E_NOMEM;
4120 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004121 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
4122 wdiDelStaReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004123 /* Store Init Req pointer, as this will be used for response */
4124 /* store Params pass it to WDI */
4125 pWdaParams->pWdaContext = pWDA;
4126 pWdaParams->wdaMsgParam = delStaParam;
4127 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004128 status = WDI_DelSTAReq(wdiDelStaReqParam,
4129 (WDI_DelSTARspCb )WDA_DelSTAReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004130 if(IS_WDI_STATUS_FAILURE(status))
4131 {
4132 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4133 "Failure in Del STA WDI API, free all the memory status = %d",
4134 status );
4135 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4136 vos_mem_free(pWdaParams) ;
4137 delStaParam->status = eSIR_FAILURE ;
4138 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
4139 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004140 return CONVERT_WDI2VOS_STATUS(status) ;
4141}
Jeff Johnson295189b2012-06-20 16:38:30 -07004142void WDA_ProcessAddStaSelfRsp(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
4143{
4144 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4145 tWDA_CbContext *pWDA;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304146 tAddStaSelfParams *pAddStaSelfRsp = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004148 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004149 if(NULL == pWdaParams)
4150 {
4151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004152 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004153 VOS_ASSERT(0) ;
4154 return ;
4155 }
4156 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4157 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004158 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4159 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004160 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
4161 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
4162 pwdiAddSTASelfRsp->macSelfSta,
4163 sizeof(pAddStaSelfRsp->selfMacAddr));
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304164 pWDA->wdaAddSelfStaParams.ucSTASelfIdx = pwdiAddSTASelfRsp->ucSTASelfIdx;
4165 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaRspCounter++;
4166 if (pAddStaSelfRsp->status == eSIR_FAILURE)
4167 {
4168 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_RSP_WDI_FAIL;
4169 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
4170 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004171 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004172 return ;
4173}
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304174
Jeff Johnson295189b2012-06-20 16:38:30 -07004175/*
4176 * FUNCTION: WDA_ProcessAddStaSelfReq
4177 *
4178 */
4179VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
4180{
4181 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004182 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004183 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
4184 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
4185 sizeof(WDI_AddSTASelfReqParamsType)) ;
4186 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004188 "------> %s " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304189 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaReqCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004190 if( NULL == wdiAddStaSelfReq )
4191 {
4192 VOS_ASSERT( 0 );
4193 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004194 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304195 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4196 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004197 return( VOS_STATUS_E_NOMEM );
4198 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004199 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004200 if( NULL == pWdaParams )
4201 {
4202 VOS_ASSERT( 0 );
4203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004204 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304205 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4206 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004207 vos_mem_free(wdiAddStaSelfReq) ;
4208 return( VOS_STATUS_E_NOMEM );
4209 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004210 wdiAddStaSelfReq->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004211 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
Kiran Kumar Lokere0ad5cd32013-06-25 11:26:22 -07004212 wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004213 /* Store Init Req pointer, as this will be used for response */
4214 /* store Params pass it to WDI */
4215 pWdaParams->pWdaContext = pWDA;
4216 pWdaParams->wdaMsgParam = pAddStaSelfReq;
4217 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
Jeff Johnson43971f52012-07-17 12:26:56 -07004218 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq, WDA_ProcessAddStaSelfRsp, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004219
Jeff Johnson43971f52012-07-17 12:26:56 -07004220 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004221 {
4222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4223 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07004224 wstatus );
4225 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004226 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4227 vos_mem_free(pWdaParams) ;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304228 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_WDI_FAIL;
4229 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004230 pAddStaSelfReq->status = eSIR_FAILURE ;
4231 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
4232 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004233 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004234}
Jeff Johnson295189b2012-06-20 16:38:30 -07004235/*
4236 * FUNCTION: WDA_DelSTASelfRespCallback
4237 *
4238 */
4239void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
4240 wdiDelStaSelfRspParams , void* pUserData)
4241{
4242 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4243 tWDA_CbContext *pWDA;
4244 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004246 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004247 if (NULL == pWdaParams)
4248 {
4249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004250 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004251 VOS_ASSERT(0);
4252 return;
4253 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004254 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4255 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004256 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004257 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004258
4259 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4260 vos_mem_free(pWdaParams) ;
4261
4262 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004263 return ;
4264}
Jeff Johnson295189b2012-06-20 16:38:30 -07004265/*
4266 * FUNCTION: WDA_DelSTASelfReqCallback
4267 *
4268 */
4269void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
4270 void* pUserData)
4271{
4272 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4273 tWDA_CbContext *pWDA;
4274 tDelStaSelfParams *delStaSelfParams;
4275
4276 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05304277 "<------ %s, wdiStatus: %d pWdaParams: %p",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004278 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004279
4280 if (NULL == pWdaParams)
4281 {
4282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004283 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004284 VOS_ASSERT(0);
4285 return;
4286 }
4287
4288 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4289 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
4290
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004291 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004292
4293 if(IS_WDI_STATUS_FAILURE(wdiStatus))
4294 {
4295 VOS_ASSERT(0);
4296 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4297 vos_mem_free(pWdaParams) ;
4298 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
4299 }
4300
4301 return ;
4302}
4303
4304/*
4305 * FUNCTION: WDA_DelSTASelfReq
4306 * Trigger Config STA processing in WDI
4307 */
4308VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
4309 tDelStaSelfParams* pDelStaSelfReqParam)
4310{
4311 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004312 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004313 tWDA_ReqParams *pWdaParams = NULL;
4314 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
4315 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
4316 sizeof(WDI_DelSTASelfReqParamsType)) ;
4317
Jeff Johnson295189b2012-06-20 16:38:30 -07004318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004319 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004320 if( NULL == wdiDelStaSelfReq )
4321 {
4322 VOS_ASSERT( 0 );
4323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004324 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004325 return( VOS_STATUS_E_NOMEM );
4326 }
4327
4328 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4329 if( NULL == pWdaParams )
4330 {
4331 VOS_ASSERT( 0 );
4332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004333 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004334 vos_mem_free(wdiDelStaSelfReq) ;
4335 return( VOS_STATUS_E_NOMEM );
4336 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004337 pWdaParams->pWdaContext = pWDA;
4338 /* Store param pointer as passed in by caller */
4339 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
4340 /* store Params pass it to WDI */
4341 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07004342 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
4343 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
4344
4345 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
4346 wdiDelStaSelfReq->pUserData = pWdaParams;
4347
Jeff Johnson43971f52012-07-17 12:26:56 -07004348 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07004349 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
4350
Jeff Johnson43971f52012-07-17 12:26:56 -07004351 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004352 {
4353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
4354 "Failure in Del Sta Self REQ WDI API, free all the memory " );
4355 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07004356 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004357 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4358 vos_mem_free(pWdaParams) ;
4359 pDelStaSelfReqParam->status = eSIR_FAILURE ;
4360 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
4361 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004362 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004363}
4364
Jeff Johnson295189b2012-06-20 16:38:30 -07004365/*
4366 * FUNCTION: WDA_SendMsg
4367 * Send Message back to PE
4368 */
4369void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
4370 void *pBodyptr, tANI_U32 bodyVal)
4371{
4372 tSirMsgQ msg = {0} ;
4373 tANI_U32 status = VOS_STATUS_SUCCESS ;
4374 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07004375 msg.type = msgType;
4376 msg.bodyval = bodyVal;
4377 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07004378 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07004379 if (VOS_STATUS_SUCCESS != status)
4380 {
4381 if(NULL != pBodyptr)
4382 {
4383 vos_mem_free(pBodyptr);
4384 }
4385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004386 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004387 VOS_ASSERT(0) ;
4388 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004389 return ;
4390}
Jeff Johnson295189b2012-06-20 16:38:30 -07004391/*
4392 * FUNCTION: WDA_UpdateBSSParams
4393 * Translated WDA/PE BSS info into WDI BSS info..
4394 */
4395void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
4396 WDI_ConfigBSSReqInfoType *wdiBssParams,
4397 tAddBssParams *wdaBssParams)
4398{
4399 v_U8_t keyIndex = 0;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05304400 v_U8_t i = 0;
4401
Jeff Johnson295189b2012-06-20 16:38:30 -07004402 /* copy bssReq Params to WDI structure */
4403 vos_mem_copy(wdiBssParams->macBSSID,
4404 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
4405 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
4406 sizeof(tSirMacAddr)) ;
4407 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
4408 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
4409 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004410 wdiBssParams->ucShortSlotTimeSupported =
4411 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004412 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
4413 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
4414 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
4415 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
4416 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
4417
4418 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
4419 wdiBssParams->ucTXOPProtectionFullSupport =
4420 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004421 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
4422 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004423 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004424 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
4425 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
4426 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
4427 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
4428
Chet Lanctot186b5732013-03-18 10:26:30 -07004429 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
4430
Jeff Johnson295189b2012-06-20 16:38:30 -07004431 /* copy SSID into WDI structure */
4432 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
4433 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
4434 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004435 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
4436 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004437 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07004438#ifdef WLAN_FEATURE_VOWIFI
4439 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
4440#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004441 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07004442 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07004443#ifdef WLAN_FEATURE_VOWIFI_11R
4444 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07004445 if(wdiBssParams->bExtSetStaKeyParamValid)
4446 {
4447 /* copy set STA key params to WDI structure */
4448 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
4449 wdaBssParams->extSetStaKeyParam.staIdx;
4450 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
4451 wdaBssParams->extSetStaKeyParam.encType;
4452 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
4453 wdaBssParams->extSetStaKeyParam.wepType;
4454 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
4455 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004456 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
4457 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004458 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004459 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
4460 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4461 {
4462 WDA_GetWepKeysFromCfg( pWDA,
4463 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
4464 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
4465 wdiBssParams->wdiExtSetKeyParam.wdiKey );
4466 }
4467 else
4468 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004469 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4470 keyIndex++)
4471 {
4472 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
4473 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
4474 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
4475 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
4476 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
4477 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05304478
4479 if(WDA_getHostWlanFeatCaps(DISA) && WDA_getFwWlanFeatCaps(DISA))
4480 {
4481 for (i = 0; i < WLAN_MAX_KEY_RSC_LEN; i ++)
4482 {
4483 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc[i] =
4484 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc[i]);
4485 }
4486
4487 for (i = 0; i < SIR_MAC_MAX_KEY_LENGTH; i++)
4488 {
4489 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key[i] =
4490 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].key[i]);
4491 }
4492 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4493 FL("%s: Negated Keys"), __func__);
4494 }
4495 else
4496 {
4497 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4498 FL("%s: No change in Keys "), __func__);
4499 vos_mem_copy(
4500 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
4501 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc,
4502 WLAN_MAX_KEY_RSC_LEN);
4503 vos_mem_copy(
4504 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
4505 wdaBssParams->extSetStaKeyParam.key[keyIndex].key,
4506 SIR_MAC_MAX_KEY_LENGTH);
4507 }
4508
Jeff Johnson295189b2012-06-20 16:38:30 -07004509 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
4510 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
4511 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
4512 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07004513 }
Srinivas Dasari9b57b112014-11-27 12:25:23 +05304514 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
Jeff Johnson295189b2012-06-20 16:38:30 -07004515 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004516 }
4517 }
4518 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
4519 }
4520 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
4521 {
4522 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
4523 sizeof(wdaBssParams->extSetStaKeyParam) );
4524 }
4525#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07004526#ifdef WLAN_FEATURE_11AC
4527 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
4528 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
4529#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004530
4531 return ;
4532}
Jeff Johnson295189b2012-06-20 16:38:30 -07004533/*
4534 * FUNCTION: WDA_UpdateSTAParams
4535 * Translated WDA/PE BSS info into WDI BSS info..
4536 */
4537void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
4538 WDI_ConfigStaReqInfoType *wdiStaParams,
4539 tAddStaParams *wdaStaParams)
4540{
4541 tANI_U8 i = 0;
4542 /* Update STA params */
4543 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
4544 sizeof(tSirMacAddr)) ;
4545 wdiStaParams->usAssocId = wdaStaParams->assocId;
4546 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07004547 wdiStaParams->staIdx = wdaStaParams->staIdx;
4548
Jeff Johnson295189b2012-06-20 16:38:30 -07004549 wdiStaParams->ucShortPreambleSupported =
4550 wdaStaParams->shortPreambleSupported;
4551 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
4552 sizeof(tSirMacAddr)) ;
4553 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
4554
4555 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
4556
4557 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
4558 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
4559 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
4560 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
4561 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
4562 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
4563 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
4564
4565 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
4566 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07004567 wdiStaParams->wdiSupportedRates.opRateMode =
4568 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004569 for(i = 0;i < WDI_NUM_11B_RATES;i++)
4570 {
4571 wdiStaParams->wdiSupportedRates.llbRates[i] =
4572 wdaStaParams->supportedRates.llbRates[i];
4573 }
4574 for(i = 0;i < WDI_NUM_11A_RATES;i++)
4575 {
4576 wdiStaParams->wdiSupportedRates.llaRates[i] =
4577 wdaStaParams->supportedRates.llaRates[i];
4578 }
4579 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
4580 {
4581 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
4582 wdaStaParams->supportedRates.aniLegacyRates[i];
4583 }
4584 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
4585 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07004586#ifdef WLAN_FEATURE_11AC
4587 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
4588 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
4589 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
4590 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
4591#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004592 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
4593 {
4594 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
4595 wdaStaParams->supportedRates.supportedMCSSet[i];
4596 }
4597 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
4598 wdaStaParams->supportedRates.rxHighestDataRate;
4599
4600 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
4601
4602 wdiStaParams->wdiAction = wdaStaParams->updateSta;
4603
4604 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
4605 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
4606 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
4607
4608 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
4609 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
4610 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
4611 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07004612 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07004613#ifdef WLAN_FEATURE_11AC
4614 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
4615 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08004616 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Abhishek Singh6927fa02014-06-27 17:19:55 +05304617 wdiStaParams->vhtTxMUBformeeCapable = wdaStaParams->vhtTxMUBformeeCapable;
4618 /* When MU vhtTxMUBformeeCapable is set, SU ucVhtTxBFEnabled
4619 * must be set by default */
4620 if ( wdiStaParams->vhtTxMUBformeeCapable )
4621 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxMUBformeeCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07004622#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08004623 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
4624 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07004625 return ;
4626}
Jeff Johnson295189b2012-06-20 16:38:30 -07004627/*
4628 * -------------------------------------------------------------------------
4629 * CFG update to WDI
4630 * -------------------------------------------------------------------------
4631 */
4632
4633 /*
4634 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
4635 * Convert the WNI CFG ID to HAL CFG ID
4636 */
Jeff Johnsone7245742012-09-05 17:12:55 -07004637static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07004638{
4639 switch(wniCfgId)
4640 {
4641 case WNI_CFG_STA_ID:
4642 return QWLAN_HAL_CFG_STA_ID;
4643 case WNI_CFG_CURRENT_TX_ANTENNA:
4644 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
4645 case WNI_CFG_CURRENT_RX_ANTENNA:
4646 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
4647 case WNI_CFG_LOW_GAIN_OVERRIDE:
4648 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
4649 case WNI_CFG_POWER_STATE_PER_CHAIN:
4650 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
4651 case WNI_CFG_CAL_PERIOD:
4652 return QWLAN_HAL_CFG_CAL_PERIOD;
4653 case WNI_CFG_CAL_CONTROL:
4654 return QWLAN_HAL_CFG_CAL_CONTROL;
4655 case WNI_CFG_PROXIMITY:
4656 return QWLAN_HAL_CFG_PROXIMITY;
4657 case WNI_CFG_NETWORK_DENSITY:
4658 return QWLAN_HAL_CFG_NETWORK_DENSITY;
4659 case WNI_CFG_MAX_MEDIUM_TIME:
4660 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
4661 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
4662 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
4663 case WNI_CFG_RTS_THRESHOLD:
4664 return QWLAN_HAL_CFG_RTS_THRESHOLD;
4665 case WNI_CFG_SHORT_RETRY_LIMIT:
4666 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
4667 case WNI_CFG_LONG_RETRY_LIMIT:
4668 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
4669 case WNI_CFG_FRAGMENTATION_THRESHOLD:
4670 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
4671 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
4672 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
4673 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
4674 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
4675 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
4676 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
4677 case WNI_CFG_FIXED_RATE:
4678 return QWLAN_HAL_CFG_FIXED_RATE;
4679 case WNI_CFG_RETRYRATE_POLICY:
4680 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
4681 case WNI_CFG_RETRYRATE_SECONDARY:
4682 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
4683 case WNI_CFG_RETRYRATE_TERTIARY:
4684 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
4685 case WNI_CFG_FORCE_POLICY_PROTECTION:
4686 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
4687 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
4688 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
4689 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
4690 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
4691 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
4692 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
4693 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
4694 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
4695 case WNI_CFG_MAX_BA_SESSIONS:
4696 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
4697 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
4698 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
4699 case WNI_CFG_PS_ENABLE_BCN_FILTER:
4700 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
4701 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
4702 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
4703 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
4704 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
4705 case WNI_CFG_STATS_PERIOD:
4706 return QWLAN_HAL_CFG_STATS_PERIOD;
4707 case WNI_CFG_CFP_MAX_DURATION:
4708 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
4709#if 0 /*This is not part of CFG*/
4710 case WNI_CFG_FRAME_TRANS_ENABLED:
4711 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
4712#endif
4713 case WNI_CFG_DTIM_PERIOD:
4714 return QWLAN_HAL_CFG_DTIM_PERIOD;
4715 case WNI_CFG_EDCA_WME_ACBK:
4716 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
4717 case WNI_CFG_EDCA_WME_ACBE:
4718 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
4719 case WNI_CFG_EDCA_WME_ACVI:
4720 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
4721 case WNI_CFG_EDCA_WME_ACVO:
4722 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
4723#if 0
4724 case WNI_CFG_TELE_BCN_WAKEUP_EN:
4725 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
4726 case WNI_CFG_TELE_BCN_TRANS_LI:
4727 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
4728 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
4729 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
4730 case WNI_CFG_TELE_BCN_MAX_LI:
4731 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
4732 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
4733 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
4734#endif
4735 case WNI_CFG_ENABLE_CLOSE_LOOP:
4736 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08004737 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
4738 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
jagadeeshaf2d0ce2015-03-31 11:45:30 +05304739 case WNI_CFG_ENABLE_RTSCTS_HTVHT:
4740 return QWLAN_HAL_CFG_ENABLE_RTSCTS_HTVHT;
Jeff Johnson295189b2012-06-20 16:38:30 -07004741 default:
4742 {
4743 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004744 "There is no HAL CFG Id corresponding to WNI CFG Id: %d",
Jeff Johnson295189b2012-06-20 16:38:30 -07004745 wniCfgId);
4746 return VOS_STATUS_E_INVAL;
4747 }
4748 }
4749}
Jeff Johnson295189b2012-06-20 16:38:30 -07004750/*
4751 * FUNCTION: WDA_UpdateCfgCallback
4752 *
4753 */
4754void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
4755{
4756 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4757 WDI_UpdateCfgReqParamsType *wdiCfgParam =
4758 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004760 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004761 /*
4762 * currently there is no response message is expected between PE and
4763 * WDA, Failure return from WDI is a ASSERT condition
4764 */
4765 if(WDI_STATUS_SUCCESS != wdiStatus)
4766 {
4767 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004768 "%s: CFG (%d) config failure", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07004769 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
4770 }
4771
4772 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
4773 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4774 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004775 return ;
4776}
Jeff Johnson295189b2012-06-20 16:38:30 -07004777/*
4778 * FUNCTION: WDA_UpdateCfg
4779 *
4780 */
4781VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
4782{
4783
4784 WDI_Status status = WDI_STATUS_SUCCESS ;
4785 tANI_U32 val =0;
4786 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
4787 tHalCfg *configData;
4788 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
4789 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07004790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004791 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004792 if (NULL == pMac )
4793 {
4794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004795 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004796 return VOS_STATUS_E_FAILURE;
4797 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004798 if(WDA_START_STATE != pWDA->wdaState)
4799 {
4800 return VOS_STATUS_E_FAILURE;
4801 }
4802
4803 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
4804 {
4805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004806 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004807 VOS_ASSERT(0);
4808 return VOS_STATUS_E_FAILURE;
4809 }
4810
4811 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
4812 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004813 if(NULL == wdiCfgReqParam)
4814 {
4815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004816 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004817 VOS_ASSERT(0);
4818 return VOS_STATUS_E_NOMEM;
4819 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004820 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
4821 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004822 if(NULL == wdiCfgReqParam->pConfigBuffer)
4823 {
4824 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004825 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004826 vos_mem_free(wdiCfgReqParam);
4827 VOS_ASSERT(0);
4828 return VOS_STATUS_E_NOMEM;
4829 }
4830
4831 /*convert the WNI CFG Id to HAL CFG Id*/
4832 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
4833 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
4834
4835 /*TODO: revisit this for handling string parameters */
4836 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
4837 &val) != eSIR_SUCCESS)
4838 {
4839 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004840 "Failed to cfg get id %d", cfgParam->bodyval);
Jeff Johnson295189b2012-06-20 16:38:30 -07004841 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
4842 vos_mem_free(wdiCfgReqParam);
4843 return eSIR_FAILURE;
4844 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004845 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
4846 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
4847 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
4848 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
4849 wdiCfgReqParam->wdiReqStatusCB = NULL ;
4850
4851 /* store Params pass it to WDI */
4852 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004853#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
4854 status = WDI_UpdateCfgReq(wdiCfgReqParam,
4855 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004856 if(IS_WDI_STATUS_FAILURE(status))
4857 {
4858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4859 "Failure in Update CFG WDI API, free all the memory " );
4860 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4861 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4862 pWDA->wdaWdiCfgApiMsgParam = NULL;
4863 /* Failure is not expected */
4864 VOS_ASSERT(0) ;
4865 }
4866#else
4867 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4868 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4869 pWDA->wdaWdiCfgApiMsgParam = NULL;
4870#endif
4871 return CONVERT_WDI2VOS_STATUS(status) ;
4872}
4873
Jeff Johnson295189b2012-06-20 16:38:30 -07004874VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
4875 v_U8_t *pDefaultKeyId,
4876 v_U8_t *pNumKeys,
4877 WDI_KeysType *pWdiKeys )
4878{
4879 v_U32_t i, j, defKeyId = 0;
4880 v_U32_t val = SIR_MAC_KEY_LENGTH;
4881 VOS_STATUS status = WDI_STATUS_SUCCESS;
4882 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004883 if (NULL == pMac )
4884 {
4885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004886 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004887 return VOS_STATUS_E_FAILURE;
4888 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004889 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
4890 &defKeyId ))
4891 {
4892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4893 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
4894 }
4895
4896 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07004897 /* Need to extract ALL of the configured WEP Keys */
4898 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
4899 {
4900 val = SIR_MAC_KEY_LENGTH;
4901 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
4902 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
4903 pWdiKeys[j].key,
4904 &val ))
4905 {
4906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004907 "WEP Key index [%d] may not configured in CFG",i);
Jeff Johnson295189b2012-06-20 16:38:30 -07004908 }
4909 else
4910 {
4911 pWdiKeys[j].keyId = (tANI_U8) i;
4912 /*
4913 * Actually, a DC (Don't Care) because
4914 * this is determined (and set) by PE/MLME
4915 */
4916 pWdiKeys[j].unicast = 0;
4917 /*
4918 * Another DC (Don't Care)
4919 */
4920 pWdiKeys[j].keyDirection = eSIR_TX_RX;
4921 /* Another DC (Don't Care). Unused for WEP */
4922 pWdiKeys[j].paeRole = 0;
4923 /* Determined from wlan_cfgGetStr() above.*/
4924 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07004925 j++;
4926 *pNumKeys = (tANI_U8) j;
4927 }
4928 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004929 return status;
4930}
Jeff Johnson295189b2012-06-20 16:38:30 -07004931/*
4932 * FUNCTION: WDA_SetBssKeyReqCallback
4933 * send SET BSS key RSP back to PE
4934 */
4935void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
4936{
4937 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4938 tWDA_CbContext *pWDA;
4939 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004941 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004942 if(NULL == pWdaParams)
4943 {
4944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004945 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004946 VOS_ASSERT(0) ;
4947 return ;
4948 }
4949 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4950 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05304951 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
4952 sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004953 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4954 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004955 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004956 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004957 return ;
4958}
Jeff Johnson295189b2012-06-20 16:38:30 -07004959/*
4960 * FUNCTION: WDA_ProcessSetBssKeyReq
4961 * Request to WDI for programming the BSS key( key for
4962 * broadcast/multicast frames Encryption)
4963 */
4964VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
4965 tSetBssKeyParams *setBssKeyParams )
4966{
4967 WDI_Status status = WDI_STATUS_SUCCESS ;
4968 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
4969 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
4970 sizeof(WDI_SetBSSKeyReqParamsType)) ;
4971 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004972 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004973 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004974 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004975 if(NULL == wdiSetBssKeyParam)
4976 {
4977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004978 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004979 VOS_ASSERT(0);
4980 return VOS_STATUS_E_NOMEM;
4981 }
4982 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4983 if(NULL == pWdaParams)
4984 {
4985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004986 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004987 VOS_ASSERT(0);
4988 vos_mem_free(wdiSetBssKeyParam);
4989 return VOS_STATUS_E_NOMEM;
4990 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004991 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004992 /* copy set BSS params to WDI structure */
4993 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
4994 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
4995 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07004996 if(setBssKeyParams->encType != eSIR_ED_NONE)
4997 {
4998 if( setBssKeyParams->numKeys == 0 &&
4999 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
5000 setBssKeyParams->encType == eSIR_ED_WEP104))
5001 {
5002 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005003 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
5004 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
5005 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
5006 }
5007 else
5008 {
5009 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
5010 {
5011 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
5012 setBssKeyParams->key[keyIndex].keyId;
5013 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
5014 setBssKeyParams->key[keyIndex].unicast;
5015 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
5016 setBssKeyParams->key[keyIndex].keyDirection;
5017 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
5018 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5019 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
5020 setBssKeyParams->key[keyIndex].paeRole;
5021 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
5022 setBssKeyParams->key[keyIndex].keyLength;
5023 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
5024 setBssKeyParams->key[keyIndex].key,
5025 SIR_MAC_MAX_KEY_LENGTH);
5026 }
5027 }
5028 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005029 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
5030 setBssKeyParams->singleTidRc;
5031 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005032 /* Store set key pointer, as this will be used for response */
5033 /* store Params pass it to WDI */
5034 pWdaParams->pWdaContext = pWDA;
5035 pWdaParams->wdaMsgParam = setBssKeyParams;
5036 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005037 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
5038 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
5039
5040 if(IS_WDI_STATUS_FAILURE(status))
5041 {
5042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5043 "Failure in Set BSS Key Req WDI API, free all the memory " );
5044 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5045 vos_mem_free(pWdaParams) ;
5046 setBssKeyParams->status = eSIR_FAILURE ;
5047 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
5048 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005049 return CONVERT_WDI2VOS_STATUS(status) ;
5050}
Jeff Johnson295189b2012-06-20 16:38:30 -07005051/*
5052 * FUNCTION: WDA_RemoveBssKeyReqCallback
5053 * send SET BSS key RSP back to PE
5054 */
5055void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
5056{
5057 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5058 tWDA_CbContext *pWDA;
5059 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005061 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005062 if(NULL == pWdaParams)
5063 {
5064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005065 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005066 VOS_ASSERT(0) ;
5067 return ;
5068 }
5069 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5070 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005071 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5072 vos_mem_free(pWdaParams) ;
5073
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005074 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005075 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005076 return ;
5077}
Siddharth Bhal171788a2014-09-29 21:02:40 +05305078
5079/*
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305080 * FUNCTION: WDA_MgmtLoggingInitRspCallback
5081 * recieves Mgmt Logging init response from FW
5082 */
5083void WDA_MgmtLoggingInitRspCallback(WDI_MgmtLoggingRspParamType* wdiRsp,
5084 void* pUserData)
5085{
5086 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5087 tSirMgmtLoggingInitParam *pMgmtLoggingInitParams;
5088
5089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5090 "<------ %s " ,__func__);
5091
5092 if(NULL == pWdaParams)
5093 {
5094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5095 "%s: pWdaParams received NULL", __func__);
5096 VOS_ASSERT(0);
5097 return ;
5098 }
5099
5100 if(NULL == pWdaParams->wdaMsgParam)
5101 {
5102 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5103 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
5104 VOS_ASSERT(0);
5105 vos_mem_free(pWdaParams);
5106 return ;
5107 }
5108
5109 pMgmtLoggingInitParams = (tSirMgmtLoggingInitParam *)pWdaParams->wdaMsgParam;
5110
5111 if(pMgmtLoggingInitParams->mgmtlogInitCallback)
5112 {
5113 pMgmtLoggingInitParams->mgmtlogInitCallback(
5114 pMgmtLoggingInitParams->mgmtlogInitCbContext,
5115 CONVERT_WDI2VOS_STATUS(wdiRsp->wdiStatus));
5116 }
5117 else
5118 {
5119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5120 "%s: pMgmtLoggingInitParams callback is NULL", __func__);
5121 }
5122
5123 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5124 vos_mem_free(pWdaParams->wdaMsgParam);
5125 vos_mem_free(pWdaParams);
5126
5127 return;
5128}
5129
5130/*
Siddharth Bhal171788a2014-09-29 21:02:40 +05305131 * FUNCTION: WDA_SpoofMacAddrRspCallback
5132 * recieves spoof mac addr response from FW
5133 */
5134void WDA_SpoofMacAddrRspCallback(WDI_SpoofMacAddrRspParamType* wdiRsp, void* pUserData)
5135{
5136 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5137 tWDA_CbContext *pWDA;
Siddharth Bhal029d6732014-10-09 21:31:23 +05305138
Siddharth Bhal171788a2014-09-29 21:02:40 +05305139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5140 "<------ %s " ,__func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305141
Siddharth Bhal171788a2014-09-29 21:02:40 +05305142 if(NULL == pWdaParams)
5143 {
5144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5145 "%s: pWdaParams received NULL", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305146 VOS_ASSERT(0);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305147 return ;
5148 }
Siddharth Bhal171788a2014-09-29 21:02:40 +05305149 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Siddharth Bhal171788a2014-09-29 21:02:40 +05305150
Siddharth Bhal029d6732014-10-09 21:31:23 +05305151 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
Siddharth Bhal171788a2014-09-29 21:02:40 +05305152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhal029d6732014-10-09 21:31:23 +05305153 "%s:Spoofing with rsp status %d", __func__, wdiRsp->wdiStatus);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305154 }
Siddharth Bhal029d6732014-10-09 21:31:23 +05305155 WDA_SendMsg(pWDA, WDA_SPOOF_MAC_ADDR_RSP, NULL,
5156 CONVERT_WDI2SIR_STATUS(wdiRsp->wdiStatus));
Siddharth Bhal171788a2014-09-29 21:02:40 +05305157
Siddharth Bhal171788a2014-09-29 21:02:40 +05305158 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305159 vos_mem_free(pWdaParams->wdaMsgParam);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305160 vos_mem_free(pWdaParams);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305161
5162 return;
Siddharth Bhal171788a2014-09-29 21:02:40 +05305163}
5164
Jeff Johnson295189b2012-06-20 16:38:30 -07005165/*
5166 * FUNCTION: WDA_ProcessRemoveBssKeyReq
5167 * Request to WDI to remove the BSS key( key for broadcast/multicast
5168 * frames Encryption)
5169 */
5170VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
5171 tRemoveBssKeyParams *removeBssKeyParams )
5172{
5173 WDI_Status status = WDI_STATUS_SUCCESS ;
5174 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
5175 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
5176 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
5177 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005179 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005180 if(NULL == wdiRemoveBssKeyParam)
5181 {
5182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005183 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005184 VOS_ASSERT(0);
5185 return VOS_STATUS_E_NOMEM;
5186 }
5187 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5188 if(NULL == pWdaParams)
5189 {
5190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005191 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005192 VOS_ASSERT(0);
5193 vos_mem_free(wdiRemoveBssKeyParam);
5194 return VOS_STATUS_E_NOMEM;
5195 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005196 /* copy Remove BSS key params to WDI structure*/
5197 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
5198 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
5199 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
5200 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
5201 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005202 /* Store remove key pointer, as this will be used for response */
5203 /* store Params pass it to WDI */
5204 pWdaParams->pWdaContext = pWDA;
5205 pWdaParams->wdaMsgParam = removeBssKeyParams;
5206 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005207 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
5208 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005209 if(IS_WDI_STATUS_FAILURE(status))
5210 {
5211 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5212 "Failure in Remove BSS Key Req WDI API, free all the memory " );
5213 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5214 vos_mem_free(pWdaParams) ;
5215 removeBssKeyParams->status = eSIR_FAILURE ;
5216 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
5217 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005218 return CONVERT_WDI2VOS_STATUS(status) ;
5219}
Jeff Johnson295189b2012-06-20 16:38:30 -07005220/*
5221 * FUNCTION: WDA_SetBssKeyReqCallback
5222 * send SET BSS key RSP back to PE
5223 */
5224void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
5225{
5226 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5227 tWDA_CbContext *pWDA;
5228 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005230 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005231 if(NULL == pWdaParams)
5232 {
5233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005234 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005235 VOS_ASSERT(0) ;
5236 return ;
5237 }
5238 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5239 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05305240 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
5241 sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005242 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5243 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005244 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005245 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005246 return ;
5247}
Jeff Johnson295189b2012-06-20 16:38:30 -07005248/*
5249 * FUNCTION: WDA_ProcessSetStaKeyReq
5250 * Request to WDI for programming the STA key( key for Unicast frames
5251 * Encryption)
5252 */
5253VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
5254 tSetStaKeyParams *setStaKeyParams )
5255{
5256 WDI_Status status = WDI_STATUS_SUCCESS ;
5257 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
5258 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
5259 sizeof(WDI_SetSTAKeyReqParamsType)) ;
5260 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005261 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005263 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005264 if(NULL == wdiSetStaKeyParam)
5265 {
5266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005267 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005268 VOS_ASSERT(0);
5269 return VOS_STATUS_E_NOMEM;
5270 }
5271 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5272 if(NULL == pWdaParams)
5273 {
5274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005275 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005276 VOS_ASSERT(0);
5277 vos_mem_free(wdiSetStaKeyParam);
5278 return VOS_STATUS_E_NOMEM;
5279 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005280 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005281 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005282 /* copy set STA key params to WDI structure */
5283 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
5284 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
5285 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
5286 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005287 if(setStaKeyParams->encType != eSIR_ED_NONE)
5288 {
Jeff Johnson43971f52012-07-17 12:26:56 -07005289 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005290 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
5291 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
5292 {
5293 WDA_GetWepKeysFromCfg( pWDA,
5294 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
5295 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
5296 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
5297 }
5298 else
5299 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005300 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5301 keyIndex++)
5302 {
5303 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
5304 setStaKeyParams->key[keyIndex].keyId;
5305 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
5306 setStaKeyParams->key[keyIndex].unicast;
5307 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
5308 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005309 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
5310 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5311 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
5312 setStaKeyParams->key[keyIndex].paeRole;
5313 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
5314 setStaKeyParams->key[keyIndex].keyLength;
5315 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
5316 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
5317 /* set default index to index which have key direction as WDI_TX_DEFAULT */
5318 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
5319 {
5320 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
5321 }
5322 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005323 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
5324 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005325 }
5326 }
5327 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
5328 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005329 /* Store set key pointer, as this will be used for response */
5330 /* store Params pass it to WDI */
5331 pWdaParams->pWdaContext = pWDA;
5332 pWdaParams->wdaMsgParam = setStaKeyParams;
5333 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005334 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
5335 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005336 if(IS_WDI_STATUS_FAILURE(status))
5337 {
5338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5339 "Failure in set STA Key Req WDI API, free all the memory " );
5340 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5341 vos_mem_free(pWdaParams) ;
5342 setStaKeyParams->status = eSIR_FAILURE ;
5343 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
5344 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005345 return CONVERT_WDI2VOS_STATUS(status) ;
5346}
Jeff Johnson295189b2012-06-20 16:38:30 -07005347/*
5348 * FUNCTION: WDA_SetBcastStaKeyReqCallback
5349 * send SET Bcast STA key RSP back to PE
5350 */
5351void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
5352{
5353 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5354 tWDA_CbContext *pWDA;
5355 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005357 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005358 if(NULL == pWdaParams)
5359 {
5360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005361 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005362 VOS_ASSERT(0) ;
5363 return ;
5364 }
5365 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5366 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005367 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5368 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005369 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005370 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005371 return ;
5372}
5373
Jeff Johnson295189b2012-06-20 16:38:30 -07005374/*
5375 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
5376 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
5377 * Encryption)
5378 */
5379VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
5380 tSetStaKeyParams *setStaKeyParams )
5381{
5382 WDI_Status status = WDI_STATUS_SUCCESS ;
5383 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
5384 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
5385 sizeof(WDI_SetSTAKeyReqParamsType)) ;
5386 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005387 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005389 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005390 if(NULL == wdiSetStaKeyParam)
5391 {
5392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005393 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005394 VOS_ASSERT(0);
5395 return VOS_STATUS_E_NOMEM;
5396 }
5397 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5398 if(NULL == pWdaParams)
5399 {
5400 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005401 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005402 VOS_ASSERT(0);
5403 vos_mem_free(wdiSetStaKeyParam);
5404 return VOS_STATUS_E_NOMEM;
5405 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005406 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005407 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005408 /* copy set STA key params to WDI structure */
5409 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
5410 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
5411 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
5412 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005413 if(setStaKeyParams->encType != eSIR_ED_NONE)
5414 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005415 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5416 keyIndex++)
5417 {
5418 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
5419 setStaKeyParams->key[keyIndex].keyId;
5420 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
5421 setStaKeyParams->key[keyIndex].unicast;
5422 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
5423 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005424 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
5425 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5426 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
5427 setStaKeyParams->key[keyIndex].paeRole;
5428 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
5429 setStaKeyParams->key[keyIndex].keyLength;
5430 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
5431 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
5432 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005433 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
5434 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005435 }
5436 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07005437 /* Store set key pointer, as this will be used for response */
5438 /* store Params pass it to WDI */
5439 pWdaParams->pWdaContext = pWDA;
5440 pWdaParams->wdaMsgParam = setStaKeyParams;
5441 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005442 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
5443 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005444 if(IS_WDI_STATUS_FAILURE(status))
5445 {
5446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5447 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
5448 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5449 vos_mem_free(pWdaParams) ;
5450 setStaKeyParams->status = eSIR_FAILURE ;
5451 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
5452 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005453 return CONVERT_WDI2VOS_STATUS(status) ;
5454}
Jeff Johnson295189b2012-06-20 16:38:30 -07005455/*
5456 * FUNCTION: WDA_RemoveStaKeyReqCallback
5457 * send SET BSS key RSP back to PE
5458 */
5459void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
5460{
5461 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5462 tWDA_CbContext *pWDA;
5463 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005465 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005466 if(NULL == pWdaParams)
5467 {
5468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005469 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005470 VOS_ASSERT(0) ;
5471 return ;
5472 }
5473 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5474 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005475 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5476 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005477 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005478 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005479 return ;
5480}
5481
Jeff Johnson295189b2012-06-20 16:38:30 -07005482/*
5483 * FUNCTION: WDA_ProcessRemoveStaKeyReq
5484 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
5485 */
5486VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
5487 tRemoveStaKeyParams *removeStaKeyParams )
5488{
5489 WDI_Status status = WDI_STATUS_SUCCESS ;
5490 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
5491 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
5492 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
5493 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005495 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005496 if(NULL == wdiRemoveStaKeyParam)
5497 {
5498 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005499 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005500 VOS_ASSERT(0);
5501 return VOS_STATUS_E_NOMEM;
5502 }
5503 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5504 if(NULL == pWdaParams)
5505 {
5506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005507 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005508 VOS_ASSERT(0);
5509 vos_mem_free(wdiRemoveStaKeyParam);
5510 return VOS_STATUS_E_NOMEM;
5511 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005512 /* copy remove STA key params to WDI structure*/
5513 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
5514 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
5515 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
5516 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
5517 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005518 /* Store remove key pointer, as this will be used for response */
5519 /* store Params pass it to WDI */
5520 pWdaParams->pWdaContext = pWDA;
5521 pWdaParams->wdaMsgParam = removeStaKeyParams;
5522 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005523 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
5524 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005525 if(IS_WDI_STATUS_FAILURE(status))
5526 {
5527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5528 "Failure in remove STA Key Req WDI API, free all the memory " );
5529 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5530 vos_mem_free(pWdaParams) ;
5531 removeStaKeyParams->status = eSIR_FAILURE ;
5532 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
5533 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005534 return CONVERT_WDI2VOS_STATUS(status) ;
5535}
Jeff Johnson295189b2012-06-20 16:38:30 -07005536/*
5537 * FUNCTION: WDA_IsHandleSetLinkStateReq
5538 * Update the WDA state and return the status to handle this message or not
5539 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005540WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
5541 tWDA_CbContext *pWDA,
5542 tLinkStateParams *linkStateParams)
5543{
5544 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005545 switch(linkStateParams->state)
5546 {
5547 case eSIR_LINK_PREASSOC_STATE:
5548 case eSIR_LINK_BTAMP_PREASSOC_STATE:
5549 /*
5550 * set the WDA state to PRE ASSOC
5551 * copy the BSSID into pWDA to use it in join request and return,
5552 * No need to handle these messages.
5553 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005554 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
5555 {
5556 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07005557 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005558 }
5559 else
5560 {
5561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005562 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005563 VOS_ASSERT(0);
5564 }
5565
5566 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
5567 {
5568 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07005569 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005570 }
5571 else
5572 {
5573 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005574 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005575 VOS_ASSERT(0);
5576 }
5577
Jeff Johnson295189b2012-06-20 16:38:30 -07005578 /* UMAC is issuing the setlink state with PREASSOC twice (before set
5579 *channel and after ) so reset the WDA state to ready when the second
5580 * time UMAC issue the link state with PREASSOC
5581 */
5582 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
5583 {
5584 /* RESET WDA state back to WDA_READY_STATE */
5585 pWDA->wdaState = WDA_READY_STATE;
5586 }
5587 else
5588 {
5589 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
5590 }
5591 //populate linkState info in WDACbCtxt
5592 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07005593 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07005594 default:
5595 if(pWDA->wdaState != WDA_READY_STATE)
5596 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005597 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
5598 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
5599 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
5600 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
5601 *the ASSERT in WDA_Stop during module unload.*/
5602 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
5603 {
5604 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005605 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005606 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005607 else
5608 {
5609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005610 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005611 status = WDA_IGNORE_SET_LINK_STATE;
5612 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005613 }
5614 break;
5615 }
5616
5617 return status;
5618}
Jeff Johnson295189b2012-06-20 16:38:30 -07005619/*
5620 * FUNCTION: WDA_SetLinkStateCallback
5621 * call back function for set link state from WDI
5622 */
5623void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
5624{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05305625 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07005626 tLinkStateParams *linkStateParams;
5627 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005629 "<------ %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05305630 if (NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07005631 {
5632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005633 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005634 VOS_ASSERT(0) ;
5635 return ;
5636 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005637 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05305638 if (NULL == pWDA)
5639 {
5640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5641 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05305642 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5643 vos_mem_free(pWdaParams->wdaMsgParam);
5644 vos_mem_free(pWdaParams);
5645
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05305646 VOS_ASSERT(0);
5647 return ;
5648 }
5649
Jeff Johnson295189b2012-06-20 16:38:30 -07005650 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005651 /*
5652 * In STA mode start the BA activity check timer after association
5653 * and in AP mode start BA activity check timer after BSS start */
5654 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
5655 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07005656 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
5657 ((status == WDI_STATUS_SUCCESS) &&
5658 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07005659 {
5660 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5661 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005662 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005663 /*
5664 * No respone required for WDA_SET_LINK_STATE so free the request
5665 * param here
5666 */
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05305667 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5668 vos_mem_free(pWdaParams);
5669
Jeff Johnson295189b2012-06-20 16:38:30 -07005670 return ;
5671}
Jeff Johnson295189b2012-06-20 16:38:30 -07005672/*
5673 * FUNCTION: WDA_ProcessSetLinkState
5674 * Request to WDI to set the link status.
5675 */
5676VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
5677 tLinkStateParams *linkStateParams)
5678{
5679 WDI_Status status = WDI_STATUS_SUCCESS ;
5680 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
5681 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
5682 sizeof(WDI_SetLinkReqParamsType)) ;
5683 tWDA_ReqParams *pWdaParams ;
5684 tpAniSirGlobal pMac;
5685 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
5686
5687 if(NULL == pMac)
5688 {
5689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005690 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005691 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005692 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005693 return VOS_STATUS_E_FAILURE;
5694 }
5695
5696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005697 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005698 if(NULL == wdiSetLinkStateParam)
5699 {
5700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005701 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005702 VOS_ASSERT(0);
5703 return VOS_STATUS_E_NOMEM;
5704 }
5705 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5706 if(NULL == pWdaParams)
5707 {
5708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005709 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005710 VOS_ASSERT(0);
5711 vos_mem_free(wdiSetLinkStateParam);
5712 return VOS_STATUS_E_NOMEM;
5713 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005714 if(WDA_IGNORE_SET_LINK_STATE ==
5715 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
5716 {
5717 status = WDI_STATUS_E_FAILURE;
5718 }
5719 else
5720 {
5721 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
5722 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005723 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
5724 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005725 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
5726 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005727 pWdaParams->pWdaContext = pWDA;
5728 /* Store remove key pointer, as this will be used for response */
5729 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005730 /* store Params pass it to WDI */
5731 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
5732 /* Stop Timer only other than GO role and concurrent session */
5733 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07005734 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005735 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
5736 {
5737 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5738 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005739 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
5740 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005741 if(IS_WDI_STATUS_FAILURE(status))
5742 {
5743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5744 "Failure in set link state Req WDI API, free all the memory " );
5745 }
5746 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005747 if(IS_WDI_STATUS_FAILURE(status))
5748 {
5749 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07005750 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005751 vos_mem_free(pWdaParams);
5752 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005753 return CONVERT_WDI2VOS_STATUS(status) ;
5754}
Jeff Johnson295189b2012-06-20 16:38:30 -07005755/*
5756 * FUNCTION: WDA_GetStatsReqParamsCallback
5757 * send the response to PE with Stats received from WDI
5758 */
5759void WDA_GetStatsReqParamsCallback(
5760 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
5761 void* pUserData)
5762{
5763 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
5764 tAniGetPEStatsRsp *pGetPEStatsRspParams;
5765
5766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005767 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005768 pGetPEStatsRspParams =
5769 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
5770 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
5771
5772 if(NULL == pGetPEStatsRspParams)
5773 {
5774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005775 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005776 VOS_ASSERT(0);
5777 return;
5778 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005779 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
5780 pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType;
5781 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
5782 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005783
5784 //Fill the Session Id Properly in PE
5785 pGetPEStatsRspParams->sessionId = 0;
5786 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005787 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005788 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
5789 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005790 vos_mem_copy( pGetPEStatsRspParams + 1,
5791 wdiGetStatsRsp + 1,
5792 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005793 /* send response to UMAC*/
5794 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP, pGetPEStatsRspParams , 0) ;
5795
5796 return;
5797}
5798
Jeff Johnson295189b2012-06-20 16:38:30 -07005799/*
5800 * FUNCTION: WDA_ProcessGetStatsReq
5801 * Request to WDI to get the statistics
5802 */
5803VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
5804 tAniGetPEStatsReq *pGetStatsParams)
5805{
5806 WDI_Status status = WDI_STATUS_SUCCESS ;
5807 WDI_GetStatsReqParamsType wdiGetStatsParam;
5808 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005810 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005811 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
5812 pGetStatsParams->staId;
5813 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
5814 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005815 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005816 status = WDI_GetStatsReq(&wdiGetStatsParam,
5817 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005818 if(IS_WDI_STATUS_FAILURE(status))
5819 {
5820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5821 "Failure in Get Stats Req WDI API, free all the memory " );
5822 pGetPEStatsRspParams =
5823 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
5824 if(NULL == pGetPEStatsRspParams)
5825 {
5826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005827 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005828 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005829 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005830 return VOS_STATUS_E_NOMEM;
5831 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005832 pGetPEStatsRspParams->msgType = WDA_GET_STATISTICS_RSP;
5833 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
5834 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
5835 pGetPEStatsRspParams->rc = eSIR_FAILURE;
5836 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP,
5837 (void *)pGetPEStatsRspParams, 0) ;
5838 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005839 /* Free the request message */
5840 vos_mem_free(pGetStatsParams);
5841 return CONVERT_WDI2VOS_STATUS(status);
5842}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005843
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08005844#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005845/*
5846 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
5847 * send the response to PE with roam Rssi received from WDI
5848 */
5849void WDA_GetRoamRssiReqParamsCallback(
5850 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
5851 void* pUserData)
5852{
5853 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5854 tWDA_CbContext *pWDA = NULL;
5855 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5856 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
5857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5858 "<------ %s " ,__func__);
5859 if(NULL == pWdaParams)
5860 {
5861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5862 "%s: pWdaParams received NULL", __func__);
5863 VOS_ASSERT(0) ;
5864 return ;
5865 }
5866 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5867 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
5868
5869 if(NULL == pGetRoamRssiReqParams)
5870 {
5871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5872 "%s: pGetRoamRssiReqParams received NULL", __func__);
5873 VOS_ASSERT(0);
5874 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5875 vos_mem_free(pWdaParams);
5876 return ;
5877 }
5878 pGetRoamRssiRspParams =
5879 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5880
5881 if(NULL == pGetRoamRssiRspParams)
5882 {
5883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5884 "%s: VOS MEM Alloc Failure", __func__);
5885 VOS_ASSERT(0);
5886 return;
5887 }
5888 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
5889 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005890 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005891 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
5892 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
5893
5894 /* Assign get roam rssi req (backup) in to the response */
5895 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
5896
5897 /* free WDI command buffer */
5898 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5899 vos_mem_free(pWdaParams) ;
5900
5901 /* send response to UMAC*/
5902 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
5903
5904 return;
5905}
5906
5907
5908
5909/*
5910 * FUNCTION: WDA_ProcessGetRoamRssiReq
5911 * Request to WDI to get the statistics
5912 */
5913VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
5914 tAniGetRssiReq *pGetRoamRssiParams)
5915{
5916 WDI_Status status = WDI_STATUS_SUCCESS ;
5917 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
5918 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5919 tWDA_ReqParams *pWdaParams = NULL;
5920
5921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5922 "------> %s " ,__func__);
5923 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
5924 pGetRoamRssiParams->staId;
5925 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
5926
5927 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5928 if(NULL == pWdaParams)
5929 {
5930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5931 "%s: VOS MEM Alloc Failure", __func__);
5932 VOS_ASSERT(0);
5933 return VOS_STATUS_E_NOMEM;
5934 }
5935
5936 /* Store Init Req pointer, as this will be used for response */
5937 pWdaParams->pWdaContext = pWDA;
5938
5939 /* Take Get roam Rssi req backup as it stores the callback to be called after
5940 receiving the response */
5941 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
5942 pWdaParams->wdaWdiApiMsgParam = NULL;
5943
5944 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
5945 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
5946 if(IS_WDI_STATUS_FAILURE(status))
5947 {
5948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5949 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
5950 pGetRoamRssiRspParams =
5951 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5952 if(NULL == pGetRoamRssiRspParams)
5953 {
5954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5955 "%s: VOS MEM Alloc Failure", __func__);
5956 VOS_ASSERT(0);
Abhishek Singh1e2bfa32014-01-02 15:44:15 +05305957 vos_mem_free(pGetRoamRssiParams);
5958 vos_mem_free(pWdaParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005959 return VOS_STATUS_E_NOMEM;
5960 }
5961 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
5962 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
5963 pGetRoamRssiRspParams->rssi = 0;
5964 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
5965 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
5966 (void *)pGetRoamRssiRspParams, 0) ;
5967 }
5968 return CONVERT_WDI2VOS_STATUS(status);
5969}
5970#endif
5971
5972
Jeff Johnson295189b2012-06-20 16:38:30 -07005973/*
5974 * FUNCTION: WDA_UpdateEDCAParamCallback
5975 * call back function for Update EDCA params from WDI
5976 */
5977void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
5978{
5979 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5980 tEdcaParams *pEdcaParams;
5981
5982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005983 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005984 if(NULL == pWdaParams)
5985 {
5986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005987 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005988 VOS_ASSERT(0) ;
5989 return ;
5990 }
5991 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005992 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5993 vos_mem_free(pWdaParams);
5994 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005995 return ;
5996}
Jeff Johnson295189b2012-06-20 16:38:30 -07005997/*
5998 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
5999 * Request to WDI to Update the EDCA params.
6000 */
6001VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
6002 tEdcaParams *pEdcaParams)
6003{
6004 WDI_Status status = WDI_STATUS_SUCCESS ;
6005 WDI_UpdateEDCAParamsType *wdiEdcaParam =
6006 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
6007 sizeof(WDI_UpdateEDCAParamsType)) ;
6008 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006010 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006011 if(NULL == wdiEdcaParam)
6012 {
6013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006014 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006015 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006016 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006017 return VOS_STATUS_E_NOMEM;
6018 }
6019 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6020 if(NULL == pWdaParams)
6021 {
6022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006023 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006024 VOS_ASSERT(0);
6025 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006026 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006027 return VOS_STATUS_E_NOMEM;
6028 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006029 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
Bansidhar Gopalachari5dcf9e02013-07-29 19:53:58 -07006030 /*
6031 Since firmware is not using highperformance flag, we have removed
6032 this flag from wdiEDCAInfo structure to match sizeof the structure
6033 between host and firmware.In future if we are planning to use
6034 highperformance flag then Please define this flag in wdiEDCAInfo
6035 structure, update it here and send it to firmware. i.e.
6036 Following is the original line which we removed as part of the fix
6037 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid =
6038 pEdcaParams->highPerformance;
6039 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006040 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
6041 &pEdcaParams->acbe);
6042 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
6043 &pEdcaParams->acbk);
6044 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
6045 &pEdcaParams->acvi);
6046 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
6047 &pEdcaParams->acvo);
6048 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006049 pWdaParams->pWdaContext = pWDA;
6050 /* Store remove key pointer, as this will be used for response */
6051 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006052 /* store Params pass it to WDI */
6053 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006054 status = WDI_UpdateEDCAParams(wdiEdcaParam,
6055 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006056 if(IS_WDI_STATUS_FAILURE(status))
6057 {
6058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6059 "Failure in Update EDCA Params WDI API, free all the memory " );
6060 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6061 vos_mem_free(pWdaParams);
6062 vos_mem_free(pEdcaParams);
6063 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006064 return CONVERT_WDI2VOS_STATUS(status) ;
6065}
Jeff Johnson295189b2012-06-20 16:38:30 -07006066/*
6067 * FUNCTION: WDA_AddBAReqCallback
6068 * send ADD BA RSP back to PE
6069 */
6070void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
6071 void* pUserData)
6072{
6073 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6074 tWDA_CbContext *pWDA;
6075 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006077 "<------ %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306078 if (NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006079 {
6080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006081 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006082 VOS_ASSERT(0) ;
6083 return ;
6084 }
6085 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306086 if (NULL == pWDA)
6087 {
6088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6089 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306090 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6091 vos_mem_free(pWdaParams->wdaMsgParam);
6092 vos_mem_free(pWdaParams);
6093
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306094 VOS_ASSERT(0);
6095 return ;
6096 }
6097
Jeff Johnson295189b2012-06-20 16:38:30 -07006098 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006099 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6100 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006101 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006102 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006103 return ;
6104}
6105
Jeff Johnson295189b2012-06-20 16:38:30 -07006106/*
6107 * FUNCTION: WDA_ProcessAddBAReq
6108 * Request to WDI to Update the ADDBA REQ params.
6109 */
6110VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
Abhishek Singh01c73d12015-03-12 15:13:44 +05306111 tANI_U16 baSessionID, tANI_U8 staIdx, tANI_U8 ucWinSize, tAddBAParams *pAddBAReqParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006112{
Jeff Johnson43971f52012-07-17 12:26:56 -07006113 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07006114 WDI_AddBAReqParamsType *wdiAddBAReqParam =
6115 (WDI_AddBAReqParamsType *)vos_mem_malloc(
6116 sizeof(WDI_AddBAReqParamsType)) ;
6117 tWDA_ReqParams *pWdaParams ;
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 == wdiAddBAReqParam)
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(wdiAddBAReqParam);
6134 return VOS_STATUS_E_NOMEM;
6135 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006136 do
6137 {
6138 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006139 wdiAddBaInfo->ucSTAIdx = staIdx ;
6140 wdiAddBaInfo->ucBaSessionID = baSessionID ;
Abhishek Singh01c73d12015-03-12 15:13:44 +05306141 wdiAddBaInfo->ucWinSize = ucWinSize ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006142 } while(0) ;
6143 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006144 pWdaParams->pWdaContext = pWDA;
6145 /* store Params pass it to WDI */
6146 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
6147 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07006148 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
6149 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006150
Jeff Johnson43971f52012-07-17 12:26:56 -07006151 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07006152 {
6153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07006154 "Failure in ADD BA REQ Params WDI API, free all the memory" );
6155 status = CONVERT_WDI2VOS_STATUS(wstatus);
6156 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006157 vos_mem_free(pWdaParams);
6158 pAddBAReqParams->status = eSIR_FAILURE;
6159 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6160 }
Jeff Johnson43971f52012-07-17 12:26:56 -07006161 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07006162}
Jeff Johnson295189b2012-06-20 16:38:30 -07006163/*
6164 * FUNCTION: WDA_AddBASessionReqCallback
6165 * send ADD BA SESSION RSP back to PE/(or TL)
6166 */
6167void WDA_AddBASessionReqCallback(
6168 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
6169{
6170 VOS_STATUS status = VOS_STATUS_SUCCESS ;
6171 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306172 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006173 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006175 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006176 if(NULL == pWdaParams)
6177 {
6178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006179 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006180 VOS_ASSERT(0) ;
6181 return ;
6182 }
6183 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306184 if (NULL == pWDA)
6185 {
6186 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6187 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306188 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6189 vos_mem_free(pWdaParams->wdaMsgParam);
6190 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306191 VOS_ASSERT(0);
6192 return ;
6193 }
6194
Jeff Johnson295189b2012-06-20 16:38:30 -07006195 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006196 if( NULL == pAddBAReqParams )
6197 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006199 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006200 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006201 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6202 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006203 return ;
6204 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006205 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6206 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006207 /*
6208 * if WDA in update TL state, update TL with BA session parama and send
6209 * another request to HAL(/WDI) (ADD_BA_REQ)
6210 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006211 if((VOS_STATUS_SUCCESS ==
6212 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
6213 (WDA_BA_UPDATE_TL_STATE == pWDA->wdaState))
6214 {
6215 /* Update TL with BA info received from HAL/WDI */
6216 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
6217 wdiAddBaSession->usBaSessionID,
6218 wdiAddBaSession->ucSTAIdx,
6219 wdiAddBaSession->ucBaTID,
6220 wdiAddBaSession->ucBaBufferSize,
6221 wdiAddBaSession->ucWinSize,
6222 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07006223 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
Abhishek Singh01c73d12015-03-12 15:13:44 +05306224 wdiAddBaSession->ucSTAIdx,
6225 wdiAddBaSession->ucWinSize, pAddBAReqParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006226 }
6227 else
6228 {
6229 pAddBAReqParams->status =
6230 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
6231
6232 /* Setting Flag to indicate that Set BA is success */
6233 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
6234 {
6235 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
6236 tANI_U8 tid = wdiAddBaSession->ucBaTID;
6237 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
6238 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006239 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6240 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006241 /*Reset the WDA state to READY */
6242 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006243 return ;
6244}
6245
Jeff Johnson295189b2012-06-20 16:38:30 -07006246/*
6247 * FUNCTION: WDA_ProcessAddBASessionReq
6248 * Request to WDI to Update the ADDBA REQ params.
6249 */
6250VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
6251 tAddBAParams *pAddBAReqParams)
6252{
6253 WDI_Status status = WDI_STATUS_SUCCESS ;
6254 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
6255 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
6256 sizeof(WDI_AddBASessionReqParamsType)) ;
6257 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07006258 WLANTL_STAStateType tlSTAState = 0;
6259
Jeff Johnson295189b2012-06-20 16:38:30 -07006260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006261 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006262 if(NULL == wdiAddBASessionReqParam)
6263 {
6264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006265 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006266 VOS_ASSERT(0);
6267 return VOS_STATUS_E_NOMEM;
6268 }
6269 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6270 if(NULL == pWdaParams)
6271 {
6272 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006273 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006274 VOS_ASSERT(0);
6275 vos_mem_free(wdiAddBASessionReqParam);
6276 return VOS_STATUS_E_NOMEM;
6277 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006278 /*
6279 * Populate ADD BA parameters and pass these paarmeters to WDI.
6280 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
6281 * the state to track if these is BA recipient case or BA initiator
6282 * case.
6283 */
6284 do
6285 {
6286 WDI_AddBASessionReqinfoType *wdiBAInfoType =
6287 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
6288 /* vos_mem_copy(wdiBAInfoType->macBSSID,
6289 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
6290 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
6291 vos_mem_copy(wdiBAInfoType->macPeerAddr,
6292 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006293 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07006294 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
6295 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
6296 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
6297 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
6298 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07006299 /* check the BA direction and update state accordingly */
6300 (eBA_RECIPIENT == wdiBAInfoType->ucBaDirection)
6301 ? (pWDA->wdaState = WDA_BA_UPDATE_TL_STATE)
6302 : (pWDA->wdaState = WDA_BA_UPDATE_LIM_STATE);
6303
6304 }while(0) ;
6305 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006306 pWdaParams->pWdaContext = pWDA;
6307 /* Store ADD BA pointer, as this will be used for response */
6308 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
6309 /* store Params pass it to WDI */
6310 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07006311
6312 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
6313 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
6314 */
6315 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
6316 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
6317 {
6318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08006319 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.", pAddBAReqParams->staIdx, tlSTAState );
Hoonki Leea0631ce2013-04-15 16:59:08 -07006320 status = WDI_STATUS_E_NOT_ALLOWED;
6321 pAddBAReqParams->status =
6322 CONVERT_WDI2SIR_STATUS(status) ;
6323 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6324 /*Reset the WDA state to READY */
6325 pWDA->wdaState = WDA_READY_STATE;
6326 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6327 vos_mem_free(pWdaParams);
6328
6329 return CONVERT_WDI2VOS_STATUS(status) ;
6330 }
6331
Jeff Johnson295189b2012-06-20 16:38:30 -07006332 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
6333 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006334 if(IS_WDI_STATUS_FAILURE(status))
6335 {
6336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08006337 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d", status);
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07006338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08006339 "Send ADD BA failure response to PE");
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07006340 pAddBAReqParams->status =
6341 CONVERT_WDI2SIR_STATUS(status) ;
6342 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07006343 /*Reset the WDA state to READY */
6344 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006345 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006346 vos_mem_free(pWdaParams);
6347 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006348 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006349}
Jeff Johnson295189b2012-06-20 16:38:30 -07006350/*
6351 * FUNCTION: WDA_DelBANotifyTL
6352 * send DEL BA IND to TL
6353 */
6354void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
6355 tDelBAParams *pDelBAReqParams)
6356{
6357 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
6358 //tSirMsgQ msg;
6359 vos_msg_t vosMsg;
6360 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07006361 if(NULL == pDelBAInd)
6362 {
6363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006364 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006365 VOS_ASSERT(0) ;
6366 return;
6367 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006368 pDelBAInd->mesgType = WDA_DELETEBA_IND;
6369 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
6370 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
6371 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07006372
Jeff Johnson295189b2012-06-20 16:38:30 -07006373
6374 vosMsg.type = WDA_DELETEBA_IND;
6375 vosMsg.bodyptr = pDelBAInd;
6376 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
6377 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
6378 {
6379 vosStatus = VOS_STATUS_E_BADMSG;
6380 }
6381}
Jeff Johnson295189b2012-06-20 16:38:30 -07006382/*
6383 * FUNCTION: WDA_DelBAReqCallback
6384 * send DEL BA RSP back to PE
6385 */
6386void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
6387{
6388 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6389 tWDA_CbContext *pWDA;
6390 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006392 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006393 if(NULL == pWdaParams)
6394 {
6395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006396 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006397 VOS_ASSERT(0) ;
6398 return ;
6399 }
6400 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306401
Jeff Johnson295189b2012-06-20 16:38:30 -07006402 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006403 /* Notify TL about DEL BA in case of recipinet */
6404 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
6405 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
6406 {
6407 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
6408 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006409 /*
6410 * No respone required for WDA_DELBA_IND so just free the request
6411 * param here
6412 */
6413 vos_mem_free(pDelBAReqParams);
6414 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6415 vos_mem_free(pWdaParams);
6416 return ;
6417}
6418
Jeff Johnson295189b2012-06-20 16:38:30 -07006419/*
6420 * FUNCTION: WDA_ProcessDelBAReq
6421 * Request to WDI to Update the DELBA REQ params.
6422 */
6423VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
6424 tDelBAParams *pDelBAReqParams)
6425{
6426 WDI_Status status = WDI_STATUS_SUCCESS ;
6427 WDI_DelBAReqParamsType *wdiDelBAReqParam =
6428 (WDI_DelBAReqParamsType *)vos_mem_malloc(
6429 sizeof(WDI_DelBAReqParamsType)) ;
6430 tWDA_ReqParams *pWdaParams ;
6431 tANI_U16 staIdx = 0;
6432 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07006433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006434 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006435 if(NULL == wdiDelBAReqParam)
6436 {
6437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006438 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006439 VOS_ASSERT(0);
6440 return VOS_STATUS_E_NOMEM;
6441 }
6442 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6443 if(NULL == pWdaParams)
6444 {
6445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006446 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006447 VOS_ASSERT(0);
6448 vos_mem_free(wdiDelBAReqParam);
6449 return VOS_STATUS_E_NOMEM;
6450 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006451 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
6452 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
6453 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
6454 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006455 pWdaParams->pWdaContext = pWDA;
6456 /* Store DEL BA pointer, as this will be used for response */
6457 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006458 /* store Params pass it to WDI */
6459 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006460 /* if BA exchange over the air is failed, clear this tid in BaBitmap
6461 * maintained in WDA, so that WDA can retry for another BA session
6462 */
6463 staIdx = pDelBAReqParams->staIdx;
6464 tid = pDelBAReqParams->baTID;
6465 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07006466 status = WDI_DelBAReq(wdiDelBAReqParam,
6467 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006468 if(IS_WDI_STATUS_FAILURE(status))
6469 {
6470 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6471 "Failure in DEL BA REQ Params WDI API, free all the memory " );
6472 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6473 vos_mem_free(pWdaParams->wdaMsgParam);
6474 vos_mem_free(pWdaParams);
6475 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006476 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006477}
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006478
6479/*
6480 * FUNCTION: WDA_UpdateChReqCallback
6481 *
6482 */
6483void WDA_UpdateChReqCallback(WDI_Status status, void* pUserData)
6484{
Siddharth Bhala006c122014-05-03 12:13:27 +05306485 tWDA_ReqParams *pWdaParams;
6486 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
6487 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
6488 WDI_UpdateChannelReqinfoType *pChanInfoType;
6489 tSirUpdateChanList *pChanList;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006490
6491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6492 "<------ %s " ,__func__);
Siddharth Bhala006c122014-05-03 12:13:27 +05306493 if(NULL == pUserData)
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006494 {
6495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhala006c122014-05-03 12:13:27 +05306496 "%s: pUserData received NULL", __func__);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006497 VOS_ASSERT(0);
6498 return;
6499 }
6500
Siddharth Bhala006c122014-05-03 12:13:27 +05306501 pWdaParams = (tWDA_ReqParams *)pUserData;
6502 pwdiUpdateChReqParam =
6503 (WDI_UpdateChReqParamsType *)pWdaParams->wdaWdiApiMsgParam;
6504 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
6505 pChanInfoType = pwdiUpdateChanReqType->pchanParam;
6506 pChanList = (tSirUpdateChanList *)pWdaParams->wdaMsgParam;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006507 /*
6508 * currently there is no response message is expected between PE and
6509 * WDA, Failure return from WDI is a ASSERT condition
6510 */
6511 vos_mem_free(pChanInfoType);
6512 vos_mem_free(pChanList);
6513 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6514 vos_mem_free(pWdaParams);
6515
6516 return;
6517}
6518
6519/*
6520 * FUNCTION: WDA_ProcessUpdateChannelList
6521 * Request to WDI to Update the ChannelList params.
6522 */
6523VOS_STATUS WDA_ProcessUpdateChannelList(tWDA_CbContext *pWDA,
6524 tSirUpdateChanList *pChanList)
6525{
6526 WDI_Status status = WDI_STATUS_SUCCESS;
6527 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
6528 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
6529 WDI_UpdateChannelReqinfoType *pChanInfoType;
6530 tWDA_ReqParams *pWdaParams;
6531 wpt_uint8 i;
6532
6533 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6534 "------> %s " ,__func__);
6535 if(NULL == pChanList)
6536 {
6537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6538 "%s: NULL pChanList", __func__);
6539 VOS_ASSERT(0);
6540 return VOS_STATUS_E_INVAL;
6541 }
6542
6543 if(!WDA_getFwWlanFeatCaps(UPDATE_CHANNEL_LIST))
6544 {
6545 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6546 "Update channel list capability Not Supported");
6547 vos_mem_free(pChanList);
6548 return VOS_STATUS_E_INVAL;
6549 }
6550
6551 pwdiUpdateChReqParam = (WDI_UpdateChReqParamsType *)vos_mem_malloc(
6552 sizeof(WDI_UpdateChReqParamsType));
6553 if(NULL == pwdiUpdateChReqParam)
6554 {
6555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6556 "%s: VOS MEM Alloc Failed for WDI_UpdateChReqParamsType",
6557 __func__);
6558 VOS_ASSERT(0);
6559 vos_mem_free(pChanList);
6560 return VOS_STATUS_E_NOMEM;
6561 }
6562 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
6563 pChanInfoType = (WDI_UpdateChannelReqinfoType *)
6564 vos_mem_malloc(sizeof(WDI_UpdateChannelReqinfoType) *
6565 pChanList->numChan);
6566 if(NULL == pChanInfoType)
6567 {
6568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6569 "%s: VOS MEM Alloc Failure", __func__);
6570 VOS_ASSERT(0);
6571 vos_mem_free(pChanList);
6572 vos_mem_free(pwdiUpdateChReqParam);
6573 return VOS_STATUS_E_NOMEM;
6574 }
6575 vos_mem_zero(pChanInfoType, sizeof(WDI_UpdateChannelReqinfoType)
6576 * pChanList->numChan);
6577 pwdiUpdateChanReqType->pchanParam = pChanInfoType;
6578
6579 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
6580 if(NULL == pWdaParams)
6581 {
6582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6583 "%s: VOS MEM Alloc Failure", __func__);
6584 VOS_ASSERT(0);
6585 vos_mem_free(pChanList);
6586 vos_mem_free(pChanInfoType);
6587 vos_mem_free(pwdiUpdateChReqParam);
6588 return VOS_STATUS_E_NOMEM;
6589 }
6590 pwdiUpdateChanReqType->numchan = pChanList->numChan;
6591
6592 for(i = 0; i < pwdiUpdateChanReqType->numchan; i++)
6593 {
6594 pChanInfoType->mhz =
6595 vos_chan_to_freq(pChanList->chanParam[i].chanId);
6596
6597 pChanInfoType->band_center_freq1 = pChanInfoType->mhz;
6598 pChanInfoType->band_center_freq2 = 0;
6599
6600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6601 "chan[%d] = %u", i, pChanInfoType->mhz);
6602 if (pChanList->chanParam[i].dfsSet)
6603 {
6604 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_PASSIVE);
6605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6606 "chan[%d] DFS[%d]", pChanList->chanParam[i].chanId,
6607 pChanList->chanParam[i].dfsSet);
6608 }
6609
6610 if (pChanInfoType->mhz < WDA_2_4_GHZ_MAX_FREQ)
6611 {
6612 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11G);
6613 }
6614 else
6615 {
6616 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11A);
6617 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_HT);
6618 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_VHT);
6619 }
6620
6621 WDA_SET_CHANNEL_MAX_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
6622 WDA_SET_CHANNEL_REG_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
Sachin Ahujacb64fc82015-01-12 17:01:05 +05306623 WDA_SET_CUURENT_REG_DOMAIN(pChanInfoType, pChanList->regId);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006624 pChanInfoType++;
6625 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006626 pwdiUpdateChReqParam->wdiReqStatusCB = NULL;
6627 pWdaParams->pWdaContext = pWDA;
6628 pWdaParams->wdaMsgParam = (void *)pChanList;
6629 /* store Params pass it to WDI */
6630 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiUpdateChReqParam;
6631 status = WDI_UpdateChannelReq(pwdiUpdateChReqParam,
6632 (WDI_UpdateChannelRspCb)WDA_UpdateChReqCallback, pWdaParams);
6633 if(IS_WDI_STATUS_FAILURE(status))
6634 {
6635 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6636 "Failure in Update Channel REQ Params WDI API, free all the memory");
6637 vos_mem_free(pwdiUpdateChanReqType->pchanParam);
6638 vos_mem_free(pwdiUpdateChReqParam);
6639 vos_mem_free(pWdaParams->wdaMsgParam);
6640 vos_mem_free(pWdaParams);
6641 }
6642 return CONVERT_WDI2VOS_STATUS(status);
6643}
6644
Jeff Johnson295189b2012-06-20 16:38:30 -07006645/*
6646 * FUNCTION: WDA_AddTSReqCallback
6647 * send ADD TS RSP back to PE
6648 */
6649void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
6650{
6651 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306652 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006653 tAddTsParams *pAddTsReqParams;
6654
6655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006656 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006657 if(NULL == pWdaParams)
6658 {
6659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006660 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006661 VOS_ASSERT(0) ;
6662 return ;
6663 }
6664 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306665 if (NULL == pWDA)
6666 {
6667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6668 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306669 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6670 vos_mem_free(pWdaParams->wdaMsgParam);
6671 vos_mem_free(pWdaParams);
6672
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306673 VOS_ASSERT(0);
6674 return ;
6675 }
6676
Jeff Johnson295189b2012-06-20 16:38:30 -07006677 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
6678 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6679 vos_mem_free(pWdaParams);
6680
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006681 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006682 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006683 return ;
6684}
6685
Jeff Johnson295189b2012-06-20 16:38:30 -07006686/*
6687 * FUNCTION: WDA_ProcessAddTSReq
6688 * Request to WDI to Update the ADD TS REQ params.
6689 */
6690VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
6691 tAddTsParams *pAddTsReqParams)
6692{
6693 WDI_Status status = WDI_STATUS_SUCCESS ;
6694 WDI_AddTSReqParamsType *wdiAddTSReqParam =
6695 (WDI_AddTSReqParamsType *)vos_mem_malloc(
6696 sizeof(WDI_AddTSReqParamsType)) ;
6697 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006699 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006700 if(NULL == wdiAddTSReqParam)
6701 {
6702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006703 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006704 VOS_ASSERT(0);
6705 return VOS_STATUS_E_NOMEM;
6706 }
6707 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6708 if(NULL == pWdaParams)
6709 {
6710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006711 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006712 VOS_ASSERT(0);
6713 vos_mem_free(wdiAddTSReqParam);
6714 return VOS_STATUS_E_NOMEM;
6715 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006716 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
6717 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006718 //TS IE
6719 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
6720 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
6721 pAddTsReqParams->tspec.length;
6722
6723 //TS IE : TS INFO : TRAFFIC
6724 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
6725 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
6726 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
6727 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
6728 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
6729 pAddTsReqParams->tspec.tsinfo.traffic.psb;
6730 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
6731 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
6732 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
6733 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
6734 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
6735 pAddTsReqParams->tspec.tsinfo.traffic.direction;
6736 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
6737 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
6738 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
6739 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
6740
6741 //TS IE : TS INFO : SCHEDULE
6742 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
6743 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
6744 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
6745 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07006746 //TS IE
6747 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
6748 pAddTsReqParams->tspec.nomMsduSz;
6749 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
6750 pAddTsReqParams->tspec.maxMsduSz;
6751 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
6752 pAddTsReqParams->tspec.minSvcInterval;
6753 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
6754 pAddTsReqParams->tspec.maxSvcInterval;
6755 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
6756 pAddTsReqParams->tspec.inactInterval;
6757 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
6758 pAddTsReqParams->tspec.suspendInterval;
6759 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
6760 pAddTsReqParams->tspec.svcStartTime;
6761 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
6762 pAddTsReqParams->tspec.minDataRate;
6763 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
6764 pAddTsReqParams->tspec.meanDataRate;
6765 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
6766 pAddTsReqParams->tspec.peakDataRate;
6767 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
6768 pAddTsReqParams->tspec.maxBurstSz;
6769 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
6770 pAddTsReqParams->tspec.delayBound;
6771 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
6772 pAddTsReqParams->tspec.minPhyRate;
6773 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
6774 pAddTsReqParams->tspec.surplusBw;
6775 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
6776 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07006777 /* TODO: tAddTsParams doesn't have the following fields */
6778#if 0
6779 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
6780 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
6781 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
6782 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
6783#endif
6784 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
6785
6786 pWdaParams->pWdaContext = pWDA;
6787 /* Store ADD TS pointer, as this will be used for response */
6788 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006789 /* store Params pass it to WDI */
6790 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006791 status = WDI_AddTSReq(wdiAddTSReqParam,
6792 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006793 if(IS_WDI_STATUS_FAILURE(status))
6794 {
6795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6796 "Failure in ADD TS REQ Params WDI API, free all the memory " );
6797 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6798 vos_mem_free(pWdaParams);
6799 pAddTsReqParams->status = eSIR_FAILURE ;
6800 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
6801 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006802 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006803}
6804
Jeff Johnson295189b2012-06-20 16:38:30 -07006805/*
6806 * FUNCTION: WDA_DelTSReqCallback
6807 * send DEL TS RSP back to PE
6808 */
6809void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
6810{
6811 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006813 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006814 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6815 vos_mem_free(pWdaParams->wdaMsgParam) ;
6816 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006817 /*
6818 * No respone required for WDA_DEL_TS_REQ so just free the request
6819 * param here
6820 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006821 return ;
6822}
6823
Jeff Johnson295189b2012-06-20 16:38:30 -07006824/*
6825 * FUNCTION: WDA_ProcessDelTSReq
6826 * Request to WDI to Update the DELTS REQ params.
6827 */
6828VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
6829 tDelTsParams *pDelTSReqParams)
6830{
6831 WDI_Status status = WDI_STATUS_SUCCESS ;
6832 WDI_DelTSReqParamsType *wdiDelTSReqParam =
6833 (WDI_DelTSReqParamsType *)vos_mem_malloc(
6834 sizeof(WDI_DelTSReqParamsType)) ;
6835 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006837 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006838 if(NULL == wdiDelTSReqParam)
6839 {
6840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006841 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006842 VOS_ASSERT(0);
6843 return VOS_STATUS_E_NOMEM;
6844 }
6845 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6846 if(NULL == pWdaParams)
6847 {
6848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006849 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006850 VOS_ASSERT(0);
6851 vos_mem_free(wdiDelTSReqParam);
6852 return VOS_STATUS_E_NOMEM;
6853 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006854 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
6855 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
6856 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
6857 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
6858 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006859 pWdaParams->pWdaContext = pWDA;
6860 /* Store DEL TS pointer, as this will be used for response */
6861 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006862 /* store Params pass it to WDI */
6863 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006864 status = WDI_DelTSReq(wdiDelTSReqParam,
6865 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006866 if(IS_WDI_STATUS_FAILURE(status))
6867 {
6868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6869 "Failure in DEL TS REQ Params WDI API, free all the memory " );
6870 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6871 vos_mem_free(pWdaParams->wdaMsgParam);
6872 vos_mem_free(pWdaParams);
6873 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006874 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006875}
Jeff Johnson295189b2012-06-20 16:38:30 -07006876/*
6877 * FUNCTION: WDA_UpdateBeaconParamsCallback
6878 * Free the memory. No need to send any response to PE in this case
6879 */
6880void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
6881{
6882 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006884 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006885 if(NULL == pWdaParams)
6886 {
6887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006888 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006889 VOS_ASSERT(0) ;
6890 return ;
6891 }
6892 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6893 vos_mem_free(pWdaParams->wdaMsgParam) ;
6894 vos_mem_free(pWdaParams);
6895 /*
6896 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
6897 * param here
6898 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006899 return ;
6900}
Jeff Johnson295189b2012-06-20 16:38:30 -07006901/*
6902 * FUNCTION: WDA_ProcessUpdateBeaconParams
6903 * Request to WDI to send the beacon parameters to HAL to update the Hardware
6904 */
6905VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
6906 tUpdateBeaconParams *pUpdateBeaconParams)
6907{
6908 WDI_Status status = WDI_STATUS_SUCCESS ;
6909 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
6910 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
6911 sizeof(WDI_UpdateBeaconParamsType)) ;
6912 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006914 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006915 if(NULL == wdiUpdateBeaconParams)
6916 {
6917 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006918 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006919 VOS_ASSERT(0);
6920 return VOS_STATUS_E_NOMEM;
6921 }
6922 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6923 if(NULL == pWdaParams)
6924 {
6925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006926 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006927 VOS_ASSERT(0);
6928 vos_mem_free(wdiUpdateBeaconParams);
6929 return VOS_STATUS_E_NOMEM;
6930 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006931 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
6932 pUpdateBeaconParams->bssIdx;
6933 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
6934 pUpdateBeaconParams->fShortPreamble;
6935 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
6936 pUpdateBeaconParams->fShortSlotTime;
6937 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
6938 pUpdateBeaconParams->beaconInterval;
6939 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
6940 pUpdateBeaconParams->llaCoexist;
6941 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
6942 pUpdateBeaconParams->llbCoexist;
6943 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
6944 pUpdateBeaconParams->llgCoexist;
6945 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
6946 pUpdateBeaconParams->ht20MhzCoexist;
6947 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
6948 pUpdateBeaconParams->llnNonGFCoexist;
6949 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
6950 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
6951 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
6952 pUpdateBeaconParams->fRIFSMode;
6953 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
6954 pUpdateBeaconParams->paramChangeBitmap;
6955 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
6956
6957 pWdaParams->pWdaContext = pWDA;
6958 /* Store UpdateBeacon Req pointer, as this will be used for response */
6959 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006960 /* store Params pass it to WDI */
6961 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006962 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
6963 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
6964 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006965 if(IS_WDI_STATUS_FAILURE(status))
6966 {
6967 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6968 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
6969 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6970 vos_mem_free(pWdaParams->wdaMsgParam);
6971 vos_mem_free(pWdaParams);
6972 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006973 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006974}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08006975#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -07006976/*
6977 * FUNCTION: WDA_TSMStatsReqCallback
6978 * send TSM Stats RSP back to PE
6979 */
6980void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
6981{
6982 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6983 tWDA_CbContext *pWDA = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006984 tpAniGetTsmStatsRsp pTsmRspParams = NULL;
6985 tpAniGetTsmStatsReq pGetTsmStatsReqParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006986
6987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006988 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006989 if(NULL == pWdaParams)
6990 {
6991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006992 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006993 VOS_ASSERT(0) ;
6994 return ;
6995 }
6996 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306997 if (NULL == pWDA)
6998 {
6999 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7000 "%s:pWDA is NULL", __func__);
7001 VOS_ASSERT(0);
7002 return ;
7003 }
7004
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007005 pGetTsmStatsReqParams = (tAniGetTsmStatsReq *)pWdaParams->wdaMsgParam;
7006
7007 if(NULL == pGetTsmStatsReqParams)
7008 {
7009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7010 "%s: pGetTsmStatsReqParams received NULL", __func__);
7011 VOS_ASSERT(0);
7012 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7013 vos_mem_free(pWdaParams);
7014 return;
7015 }
7016
7017 pTsmRspParams =
7018 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
Jeff Johnson295189b2012-06-20 16:38:30 -07007019 if( NULL == pTsmRspParams )
7020 {
7021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007022 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007023 VOS_ASSERT( 0 );
7024 return ;
7025 }
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007026 vos_mem_set(pTsmRspParams, sizeof(tAniGetTsmStatsRsp), 0);
7027 pTsmRspParams->rc = pwdiTSMStatsRspParams->wdiStatus;
7028 pTsmRspParams->staId = pGetTsmStatsReqParams->staId;
7029
Jeff Johnson295189b2012-06-20 16:38:30 -07007030 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
7031 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
7032 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
7033 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
7034 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
7035 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
7036 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
7037 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
7038 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
7039 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007040
7041 /* Assign get tsm stats req req (backup) in to the response */
7042 pTsmRspParams->tsmStatsReq = pGetTsmStatsReqParams;
7043
7044 /* free WDI command buffer */
7045 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7046 vos_mem_free(pWdaParams);
7047
Jeff Johnson295189b2012-06-20 16:38:30 -07007048 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007049 return ;
7050}
7051
7052
Jeff Johnson295189b2012-06-20 16:38:30 -07007053/*
7054 * FUNCTION: WDA_ProcessTsmStatsReq
7055 * Request to WDI to get the TSM Stats params.
7056 */
7057VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007058 tpAniGetTsmStatsReq pTsmStats)
Jeff Johnson295189b2012-06-20 16:38:30 -07007059{
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007060 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007061 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007062 tWDA_ReqParams *pWdaParams = NULL;
7063 tAniGetTsmStatsRsp *pGetTsmStatsRspParams = NULL;
7064
Jeff Johnson295189b2012-06-20 16:38:30 -07007065 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007066 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007067 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
7068 sizeof(WDI_TSMStatsReqParamsType));
7069 if(NULL == wdiTSMReqParam)
7070 {
7071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007072 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007073 VOS_ASSERT(0);
7074 return VOS_STATUS_E_NOMEM;
7075 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007076 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7077 if(NULL == pWdaParams)
7078 {
7079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007080 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007081 VOS_ASSERT(0);
7082 vos_mem_free(wdiTSMReqParam);
7083 return VOS_STATUS_E_NOMEM;
7084 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007085 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
7086 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
7087 pTsmStats->bssId,
7088 sizeof(wpt_macAddr));
7089 wdiTSMReqParam->wdiReqStatusCB = NULL ;
7090
7091 pWdaParams->pWdaContext = pWDA;
7092 /* Store TSM Stats pointer, as this will be used for response */
7093 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007094 pWdaParams->wdaWdiApiMsgParam = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007095 status = WDI_TSMStatsReq(wdiTSMReqParam,
7096 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007097 if(IS_WDI_STATUS_FAILURE(status))
7098 {
7099 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7100 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007101 vos_mem_free(pWdaParams);
7102
7103 pGetTsmStatsRspParams =
7104 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
7105 if(NULL == pGetTsmStatsRspParams)
7106 {
7107 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7108 "%s: VOS MEM Alloc Failure", __func__);
7109 VOS_ASSERT(0);
7110 vos_mem_free(pTsmStats);
7111 return VOS_STATUS_E_NOMEM;
7112 }
7113 pGetTsmStatsRspParams->staId = pTsmStats->staId;
7114 pGetTsmStatsRspParams->rc = eSIR_FAILURE;
7115 pGetTsmStatsRspParams->tsmStatsReq = pTsmStats;
7116
7117 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pGetTsmStatsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007118 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007119 return CONVERT_WDI2VOS_STATUS(status) ;
7120}
7121#endif
7122/*
7123 * FUNCTION: WDA_SendBeaconParamsCallback
7124 * No need to send any response to PE in this case
7125 */
7126void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
7127{
7128
Jeff Johnson295189b2012-06-20 16:38:30 -07007129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007130 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007131 return ;
7132}
Jeff Johnson295189b2012-06-20 16:38:30 -07007133/*
7134 * FUNCTION: WDA_ProcessSendBeacon
7135 * Request to WDI to send the beacon template to HAL to update the TPE memory and
7136 * start beacon trasmission
7137 */
7138VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
7139 tSendbeaconParams *pSendbeaconParams)
7140{
7141 WDI_Status status = WDI_STATUS_SUCCESS ;
7142 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007144 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007145 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
7146 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
7147 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
7148 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07007149 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
7150 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05307151 /* p2pIeOffset should be atleast greater than timIeOffset */
7152 if ((pSendbeaconParams->p2pIeOffset != 0) &&
7153 (pSendbeaconParams->p2pIeOffset <
7154 pSendbeaconParams->timIeOffset))
7155 {
7156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7157 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
7158 VOS_ASSERT( 0 );
7159 return WDI_STATUS_E_FAILURE;
7160 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007161 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
7162 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07007163 /* Copy the beacon template to local buffer */
7164 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
7165 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
7166 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
7167
Jeff Johnson295189b2012-06-20 16:38:30 -07007168 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
7169 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007170 if(IS_WDI_STATUS_FAILURE(status))
7171 {
7172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7173 "Failure in SEND BEACON REQ Params WDI API" );
7174 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007175 vos_mem_free(pSendbeaconParams);
7176 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07007177}
Jeff Johnson295189b2012-06-20 16:38:30 -07007178/*
7179 * FUNCTION: WDA_UpdateProbeRspParamsCallback
7180 * No need to send any response to PE in this case
7181 */
7182void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
7183{
Jeff Johnson295189b2012-06-20 16:38:30 -07007184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007185 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007186 return ;
7187}
7188
Jeff Johnson295189b2012-06-20 16:38:30 -07007189/*
7190 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
7191 * Request to WDI to send the probe response template to HAL to update the TPE memory and
7192 * send probe response
7193 */
7194VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
7195 tSendProbeRespParams *pSendProbeRspParams)
7196{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007197 WDI_Status status = WDI_STATUS_SUCCESS;
7198 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
7199 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07007200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007201 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007202
7203 if (!wdiSendProbeRspParam)
7204 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
7205
Jeff Johnson295189b2012-06-20 16:38:30 -07007206 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007207 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07007208 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007209 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07007210 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07007211 /* Copy the Probe Response template to local buffer */
7212 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007213 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07007214 pSendProbeRspParams->pProbeRespTemplate,
7215 pSendProbeRspParams->probeRespTemplateLen);
7216 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007217 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07007218 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
7219 WDI_PROBE_REQ_BITMAP_IE_LEN);
7220
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007221 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007222
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007223 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07007224 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007225 if(IS_WDI_STATUS_FAILURE(status))
7226 {
7227 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7228 "Failure in SEND Probe RSP Params WDI API" );
7229 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007230 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007231 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007232 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07007233}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08007234#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -07007235/*
7236 * FUNCTION: WDA_SetMaxTxPowerCallBack
7237 * send the response to PE with power value received from WDI
7238 */
7239void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
7240 void* pUserData)
7241{
7242 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7243 tWDA_CbContext *pWDA = NULL;
7244 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
7245
7246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007247 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007248 if(NULL == pWdaParams)
7249 {
7250 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007251 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007252 VOS_ASSERT(0) ;
7253 return ;
7254 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007255 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307256 if (NULL == pWDA)
7257 {
7258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7259 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307260 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7261 vos_mem_free(pWdaParams->wdaMsgParam);
7262 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307263 VOS_ASSERT(0);
7264 return ;
7265 }
7266
Jeff Johnson295189b2012-06-20 16:38:30 -07007267 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007268 if( NULL == pMaxTxPowerParams )
7269 {
7270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007271 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07007272 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007273 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7274 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007275 return ;
7276 }
Jeff Johnsone7245742012-09-05 17:12:55 -07007277
Jeff Johnson295189b2012-06-20 16:38:30 -07007278
7279 /*need to free memory for the pointers used in the
7280 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007281 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7282 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007283 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07007284
Jeff Johnson295189b2012-06-20 16:38:30 -07007285
7286 /* send response to UMAC*/
7287 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
7288
7289 return;
7290}
Jeff Johnson295189b2012-06-20 16:38:30 -07007291/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007292 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07007293 * Request to WDI to send set Max Tx Power Request
7294 */
7295 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
7296 tMaxTxPowerParams *MaxTxPowerParams)
7297{
7298 WDI_Status status = WDI_STATUS_SUCCESS;
7299 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
7300 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007301
Jeff Johnson295189b2012-06-20 16:38:30 -07007302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007303 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007304
Jeff Johnson295189b2012-06-20 16:38:30 -07007305 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
7306 sizeof(WDI_SetMaxTxPowerParamsType));
7307 if(NULL == wdiSetMaxTxPowerParams)
7308 {
7309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007310 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007311 VOS_ASSERT(0);
7312 return VOS_STATUS_E_NOMEM;
7313 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007314 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7315 if(NULL == pWdaParams)
7316 {
7317 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007318 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007319 vos_mem_free(wdiSetMaxTxPowerParams);
7320 VOS_ASSERT(0);
7321 return VOS_STATUS_E_NOMEM;
7322 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007323 /* Copy.Max.Tx.Power Params to WDI structure */
7324 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
7325 MaxTxPowerParams->bssId,
7326 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007327 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
7328 MaxTxPowerParams->selfStaMacAddr,
7329 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007330 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
7331 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07007332 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007333 pWdaParams->pWdaContext = pWDA;
7334 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007335 /* store Params pass it to WDI */
7336 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007337 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
7338 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007339 if(IS_WDI_STATUS_FAILURE(status))
7340 {
7341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7342 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
7343 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7344 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007345 /* send response to UMAC*/
7346 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007347 }
7348 return CONVERT_WDI2VOS_STATUS(status);
7349
7350}
Jeff Johnson295189b2012-06-20 16:38:30 -07007351#endif
schang86c22c42013-03-13 18:41:24 -07007352
7353/*
Arif Hussaina5ebce02013-08-09 15:09:58 -07007354 * FUNCTION: WDA_SetMaxTxPowerPerBandCallBack
7355 * send the response to PE with power value received from WDI
7356 */
7357void WDA_SetMaxTxPowerPerBandCallBack(WDI_SetMaxTxPowerPerBandRspMsg
7358 *pwdiSetMaxTxPowerPerBandRsp,
7359 void* pUserData)
7360{
7361 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7362 tWDA_CbContext *pWDA = NULL;
7363 tMaxTxPowerPerBandParams *pMxTxPwrPerBandParams = NULL;
7364
7365 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7366 "<------ %s ", __func__);
7367 if (NULL == pWdaParams)
7368 {
7369 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7370 "%s: pWdaParams received NULL", __func__);
7371 VOS_ASSERT(0);
7372 return ;
7373 }
7374 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307375 if (NULL == pWDA)
7376 {
7377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7378 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307379 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7380 vos_mem_free(pWdaParams->wdaMsgParam);
7381 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307382 VOS_ASSERT(0);
7383 return ;
7384 }
7385
Arif Hussaina5ebce02013-08-09 15:09:58 -07007386 pMxTxPwrPerBandParams = (tMaxTxPowerPerBandParams*)pWdaParams->wdaMsgParam;
7387 if ( NULL == pMxTxPwrPerBandParams )
7388 {
7389 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7390 "%s: pMxTxPwrPerBandParams received NULL ", __func__);
7391 VOS_ASSERT(0);
7392 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7393 vos_mem_free(pWdaParams);
7394 return;
7395 }
7396
7397 /*need to free memory for the pointers used in the
7398 WDA Process.Set Max Tx Power Req function*/
7399 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7400 vos_mem_free(pWdaParams);
7401 pMxTxPwrPerBandParams->power = pwdiSetMaxTxPowerPerBandRsp->ucPower;
7402
7403 /* send response to UMAC*/
7404 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
7405 pMxTxPwrPerBandParams, 0);
7406
7407 return;
7408}
7409
7410/*
7411 * FUNCTION: WDA_ProcessSetMaxTxPowerPerBandReq
7412 * Request to WDI to send set Max Tx Power Per band Request
7413 */
7414 VOS_STATUS WDA_ProcessSetMaxTxPowerPerBandReq(tWDA_CbContext *pWDA,
7415 tMaxTxPowerPerBandParams
7416 *MaxTxPowerPerBandParams)
7417{
7418 WDI_Status status = WDI_STATUS_SUCCESS;
7419 WDI_SetMaxTxPowerPerBandParamsType *wdiSetMxTxPwrPerBandParams = NULL;
7420 tWDA_ReqParams *pWdaParams = NULL;
7421
7422 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7423 "------> %s ", __func__);
7424
7425 wdiSetMxTxPwrPerBandParams = vos_mem_malloc(
7426 sizeof(WDI_SetMaxTxPowerPerBandParamsType));
7427
7428 if (NULL == wdiSetMxTxPwrPerBandParams)
7429 {
7430 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7431 "%s: VOS MEM Alloc Failure", __func__);
7432 VOS_ASSERT(0);
7433 return VOS_STATUS_E_NOMEM;
7434 }
7435 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7436 if (NULL == pWdaParams)
7437 {
7438 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7439 "%s: VOS MEM Alloc Failure", __func__);
7440 vos_mem_free(wdiSetMxTxPwrPerBandParams);
7441 VOS_ASSERT(0);
7442 return VOS_STATUS_E_NOMEM;
7443 }
7444 /* Copy.Max.Tx.Power.Per.Band Params to WDI structure */
7445 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.bandInfo = \
7446 MaxTxPowerPerBandParams->bandInfo;
7447 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.ucPower = \
7448 MaxTxPowerPerBandParams->power;
7449 wdiSetMxTxPwrPerBandParams->wdiReqStatusCB = NULL;
7450 pWdaParams->pWdaContext = pWDA;
7451 pWdaParams->wdaMsgParam = (void *)MaxTxPowerPerBandParams;
7452 /* store Params pass it to WDI */
7453 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMxTxPwrPerBandParams;
7454 status = WDI_SetMaxTxPowerPerBandReq(wdiSetMxTxPwrPerBandParams,
7455 WDA_SetMaxTxPowerPerBandCallBack,
7456 pWdaParams);
7457 if (IS_WDI_STATUS_FAILURE(status))
7458 {
7459 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7460 "Failure in SET MAX TX Power REQ Params WDI API,"
7461 " free all the memory");
7462 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7463 vos_mem_free(pWdaParams);
7464 /* send response to UMAC*/
7465 WDA_SendMsg(pWDA,
7466 WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
7467 MaxTxPowerPerBandParams, 0);
7468 }
7469 return CONVERT_WDI2VOS_STATUS(status);
7470}
7471
7472/*
schang86c22c42013-03-13 18:41:24 -07007473 * FUNCTION: WDA_SetTxPowerCallBack
7474 * send the response to PE with power value received from WDI
7475 */
7476void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
7477 void* pUserData)
7478{
7479 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7480 tWDA_CbContext *pWDA = NULL;
7481 tSirSetTxPowerReq *pTxPowerParams = NULL;
7482
7483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7484 "<------ %s ", __func__);
7485 if(NULL == pWdaParams)
7486 {
7487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7488 "%s: pWdaParams received NULL", __func__);
7489 VOS_ASSERT(0) ;
7490 return ;
7491 }
7492 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307493 if (NULL == pWDA)
7494 {
7495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7496 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307497 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7498 vos_mem_free(pWdaParams->wdaMsgParam);
7499 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307500 VOS_ASSERT(0);
7501 return ;
7502 }
7503
schang86c22c42013-03-13 18:41:24 -07007504 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
7505 if(NULL == pTxPowerParams)
7506 {
7507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7508 "%s: pTxPowerParams received NULL " ,__func__);
7509 VOS_ASSERT(0);
7510 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7511 vos_mem_free(pWdaParams);
7512 return ;
7513 }
7514
7515 /*need to free memory for the pointers used in the
7516 WDA Process.Set Max Tx Power Req function*/
7517 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7518 vos_mem_free(pWdaParams);
7519
7520 /* send response to UMAC*/
7521 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
7522 return;
7523}
7524
7525/*
7526 * FUNCTION: WDA_ProcessSetTxPowerReq
7527 * Request to WDI to send set Tx Power Request
7528 */
7529 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
7530 tSirSetTxPowerReq *txPowerParams)
7531{
7532 WDI_Status status = WDI_STATUS_SUCCESS;
7533 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
7534 tWDA_ReqParams *pWdaParams = NULL;
7535
7536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7537 "------> %s ", __func__);
7538
7539 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
7540 sizeof(WDI_SetTxPowerParamsType));
7541 if(NULL == wdiSetTxPowerParams)
7542 {
7543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7544 "%s: VOS MEM Alloc Failure", __func__);
7545 VOS_ASSERT(0);
7546 return VOS_STATUS_E_NOMEM;
7547 }
7548 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7549 if(NULL == pWdaParams)
7550 {
7551 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7552 "%s: VOS MEM Alloc Failure", __func__);
7553 vos_mem_free(wdiSetTxPowerParams);
7554 VOS_ASSERT(0);
7555 return VOS_STATUS_E_NOMEM;
7556 }
7557 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
7558 txPowerParams->bssIdx;
7559 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
7560 txPowerParams->mwPower;
7561 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
7562 pWdaParams->pWdaContext = pWDA;
7563 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
7564 /* store Params pass it to WDI */
7565 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
7566 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
7567 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
7568 if(IS_WDI_STATUS_FAILURE(status))
7569 {
7570 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7571 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
7572 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7573 vos_mem_free(pWdaParams);
7574 /* send response to UMAC*/
7575 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
7576 }
7577 return CONVERT_WDI2VOS_STATUS(status);
7578}
7579
Jeff Johnson295189b2012-06-20 16:38:30 -07007580/*
7581 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
7582 * Free the memory. No need to send any response to PE in this case
7583 */
7584void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
7585{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007586 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7587
Jeff Johnson295189b2012-06-20 16:38:30 -07007588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007589 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007590
7591 if(NULL == pWdaParams)
7592 {
7593 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007594 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007595 VOS_ASSERT(0) ;
7596 return ;
7597 }
7598
7599 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7600 vos_mem_free(pWdaParams->wdaMsgParam) ;
7601 vos_mem_free(pWdaParams);
7602
Jeff Johnson295189b2012-06-20 16:38:30 -07007603 /*
7604 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
7605 * so just free the request param here
7606 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007607 return ;
7608}
7609
Jeff Johnson295189b2012-06-20 16:38:30 -07007610/*
7611 * FUNCTION: WDA_ProcessSetP2PGONOAReq
7612 * Request to WDI to set the P2P Group Owner Notice of Absence Req
7613 */
7614VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
7615 tP2pPsParams *pP2pPsConfigParams)
7616{
7617 WDI_Status status = WDI_STATUS_SUCCESS ;
7618 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
7619 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
7620 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007621 tWDA_ReqParams *pWdaParams = NULL;
7622
Jeff Johnson295189b2012-06-20 16:38:30 -07007623 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007624 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007625 if(NULL == wdiSetP2PGONOAReqParam)
7626 {
7627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007628 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007629 VOS_ASSERT(0);
7630 return VOS_STATUS_E_NOMEM;
7631 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007632
7633 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7634 if(NULL == pWdaParams)
7635 {
7636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007637 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007638 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007639 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007640 VOS_ASSERT(0);
7641 return VOS_STATUS_E_NOMEM;
7642 }
7643
Jeff Johnson295189b2012-06-20 16:38:30 -07007644 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
7645 pP2pPsConfigParams->opp_ps;
7646 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
7647 pP2pPsConfigParams->ctWindow;
7648 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
7649 pP2pPsConfigParams->count;
7650 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
7651 pP2pPsConfigParams->duration;
7652 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
7653 pP2pPsConfigParams->interval;
7654 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
7655 pP2pPsConfigParams->single_noa_duration;
7656 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
7657 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007658
Jeff Johnson295189b2012-06-20 16:38:30 -07007659 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
7660 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007661 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
7662
Jeff Johnson295189b2012-06-20 16:38:30 -07007663 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007664 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
7665 pWdaParams->pWdaContext = pWDA;
7666
Jeff Johnson295189b2012-06-20 16:38:30 -07007667 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007668 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
7669
Jeff Johnson295189b2012-06-20 16:38:30 -07007670 if(IS_WDI_STATUS_FAILURE(status))
7671 {
7672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7673 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007674 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7675 vos_mem_free(pWdaParams->wdaMsgParam);
7676 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007677 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007678 return CONVERT_WDI2VOS_STATUS(status);
7679
Jeff Johnson295189b2012-06-20 16:38:30 -07007680}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307681
7682#ifdef FEATURE_WLAN_TDLS
7683/*
7684 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
7685 * Free the memory. No need to send any response to PE in this case
7686 */
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307687void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
7688 void* pUserData)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307689{
7690 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7691 tWDA_CbContext *pWDA = NULL;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307692 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307693
7694
7695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7696 "<------ %s " ,__func__);
7697 if(NULL == pWdaParams)
7698 {
7699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7700 "%s: pWdaParams received NULL", __func__);
7701 VOS_ASSERT(0) ;
7702 return ;
7703 }
7704 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
7705
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307706 if (NULL == pWDA)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307707 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7709 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307710 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7711 vos_mem_free(pWdaParams->wdaMsgParam);
7712 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307713 VOS_ASSERT(0);
7714 return ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307715 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307716
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307717 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
7718 if( NULL == pTdlsLinkEstablishParams )
7719 {
7720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7721 "%s: pTdlsLinkEstablishParams "
7722 "received NULL " ,__func__);
7723 VOS_ASSERT(0);
7724 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7725 vos_mem_free(pWdaParams);
7726 return ;
7727 }
7728 pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
7729 wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307730 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307731 vos_mem_free(pWdaParams);
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307732 /* send response to UMAC*/
7733 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
7734
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307735 return ;
7736}
7737
7738VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
7739 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
7740{
7741 WDI_Status status = WDI_STATUS_SUCCESS ;
7742 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
7743 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
7744 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
7745 tWDA_ReqParams *pWdaParams = NULL;
7746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7747 "------> %s " ,__func__);
7748 if(NULL == wdiSetTDLSLinkEstablishReqParam)
7749 {
7750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7751 "%s: VOS MEM Alloc Failure", __func__);
7752 VOS_ASSERT(0);
7753 return VOS_STATUS_E_NOMEM;
7754 }
7755 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7756 if(NULL == pWdaParams)
7757 {
7758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7759 "%s: VOS MEM Alloc Failure", __func__);
7760 vos_mem_free(pTdlsLinkEstablishParams);
7761 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
7762 VOS_ASSERT(0);
7763 return VOS_STATUS_E_NOMEM;
7764 }
7765 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307766 pTdlsLinkEstablishParams->staIdx;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307767 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307768 pTdlsLinkEstablishParams->isResponder;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307769 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307770 pTdlsLinkEstablishParams->uapsdQueues;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307771 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307772 pTdlsLinkEstablishParams->maxSp;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307773 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307774 pTdlsLinkEstablishParams->isBufsta;
Naresh Jayaramc7cbd782014-02-04 17:38:23 +05307775 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsOffChannelSupported =
7776 pTdlsLinkEstablishParams->isOffChannelSupported;
7777
7778 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannels,
7779 pTdlsLinkEstablishParams->validChannels,
7780 pTdlsLinkEstablishParams->validChannelsLen);
7781
7782 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannelsLen =
7783 pTdlsLinkEstablishParams->validChannelsLen;
7784
7785 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClasses,
7786 pTdlsLinkEstablishParams->validOperClasses,
7787 pTdlsLinkEstablishParams->validOperClassesLen);
7788 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClassesLen =
7789 pTdlsLinkEstablishParams->validOperClassesLen;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307790
7791 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
7792 /* Store msg pointer from PE, as this will be used for response */
7793 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
7794 /* store Params pass it to WDI */
7795 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
7796 pWdaParams->pWdaContext = pWDA;
7797
7798 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
7799 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
7800 WDA_SetTDLSLinkEstablishReqParamsCallback,
7801 pWdaParams);
7802 if(IS_WDI_STATUS_FAILURE(status))
7803 {
7804 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7805 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
7806 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7807 vos_mem_free(pWdaParams->wdaMsgParam);
7808 vos_mem_free(pWdaParams);
7809 }
7810 return CONVERT_WDI2VOS_STATUS(status);
7811}
Atul Mittalc0f739f2014-07-31 13:47:47 +05307812
7813// tdlsoffchan
7814void WDA_SetTDLSChanSwitchReqParamsCallback(WDI_SetTdlsChanSwitchReqResp *wdiSetTdlsChanSwitchReqRsp,
7815 void* pUserData)
7816{
7817 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7818 tWDA_CbContext *pWDA = NULL;
7819 tTdlsChanSwitchParams *pTdlsChanSwitchParams;
7820
7821
7822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7823 "<------ %s " ,__func__);
7824 if(NULL == pWdaParams)
7825 {
7826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7827 "%s: pWdaParams received NULL", __func__);
Atul Mittalc0f739f2014-07-31 13:47:47 +05307828 VOS_ASSERT(0) ;
7829 return ;
7830 }
7831 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
7832
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307833 if (NULL == pWDA)
Atul Mittal60bd4292014-08-14 12:19:27 +05307834 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7836 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307837 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7838 vos_mem_free(pWdaParams->wdaMsgParam);
7839 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307840 VOS_ASSERT(0);
7841 return ;
Atul Mittal60bd4292014-08-14 12:19:27 +05307842 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307843
Atul Mittalc0f739f2014-07-31 13:47:47 +05307844 pTdlsChanSwitchParams = (tTdlsChanSwitchParams *)pWdaParams->wdaMsgParam ;
Atul Mittal60bd4292014-08-14 12:19:27 +05307845 if( NULL == pTdlsChanSwitchParams )
Atul Mittalc0f739f2014-07-31 13:47:47 +05307846 {
7847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7848 "%s: pTdlsChanSwitchParams "
7849 "received NULL " ,__func__);
7850 VOS_ASSERT(0);
7851 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7852 vos_mem_free(pWdaParams);
7853 return ;
7854 }
7855 pTdlsChanSwitchParams->status = CONVERT_WDI2SIR_STATUS(
7856 wdiSetTdlsChanSwitchReqRsp->wdiStatus);
Atul Mittalc0f739f2014-07-31 13:47:47 +05307857 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7858 vos_mem_free(pWdaParams);
Atul Mittal60bd4292014-08-14 12:19:27 +05307859 /* send response to UMAC*/
7860 WDA_SendMsg(pWDA, WDA_SET_TDLS_CHAN_SWITCH_REQ_RSP, pTdlsChanSwitchParams, 0) ;
Atul Mittalc0f739f2014-07-31 13:47:47 +05307861
7862 return ;
7863}
7864VOS_STATUS WDA_ProcessSetTdlsChanSwitchReq(tWDA_CbContext *pWDA,
7865 tTdlsChanSwitchParams *pTdlsChanSwitchParams)
7866{
7867 WDI_Status status = WDI_STATUS_SUCCESS ;
7868 WDI_SetTDLSChanSwitchReqParamsType *wdiSetTDLSChanSwitchReqParam =
7869 (WDI_SetTDLSChanSwitchReqParamsType *)vos_mem_malloc(
7870 sizeof(WDI_SetTDLSChanSwitchReqParamsType));
7871 tWDA_ReqParams *pWdaParams = NULL;
7872
7873 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7874 "Enter: %s ",__func__);
7875 if(NULL == wdiSetTDLSChanSwitchReqParam)
7876 {
7877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7878 "%s: VOS MEM Alloc Failure", __func__);
7879 VOS_ASSERT(0);
7880 return VOS_STATUS_E_NOMEM;
7881 }
7882
7883 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7884 if(NULL == pWdaParams)
7885 {
7886 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7887 "%s: VOS MEM Alloc Failure", __func__);
7888 vos_mem_free(pTdlsChanSwitchParams);
7889 vos_mem_free(wdiSetTDLSChanSwitchReqParam);
7890 VOS_ASSERT(0);
7891 return VOS_STATUS_E_NOMEM;
7892 }
7893 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.staIdx =
7894 pTdlsChanSwitchParams->staIdx;
7895 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.isOffchannelInitiator =
7896 pTdlsChanSwitchParams->tdlsSwMode;
7897 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetOperClass =
7898 pTdlsChanSwitchParams->operClass;
7899 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetChannel =
7900 pTdlsChanSwitchParams->tdlsOffCh;
7901 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.secondaryChannelOffset =
7902 pTdlsChanSwitchParams->tdlsOffChBwOffset;
7903
7904
7905 /* Store msg pointer from PE, as this will be used for response */
7906 pWdaParams->wdaMsgParam = (void *)pTdlsChanSwitchParams ;
7907 /* store Params pass it to WDI */
7908 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSChanSwitchReqParam ;
7909 pWdaParams->pWdaContext = pWDA;
7910 status = WDI_SetTDLSChanSwitchReq(wdiSetTDLSChanSwitchReqParam,
7911 (WDI_SetTDLSChanSwitchReqParamsRspCb)
7912 WDA_SetTDLSChanSwitchReqParamsCallback,
7913 pWdaParams);
7914 if(IS_WDI_STATUS_FAILURE(status))
7915 {
7916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7917 "Failure in TDLS Channel Switch Req WDI API, free all the memory" );
7918 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7919 vos_mem_free(pWdaParams->wdaMsgParam);
7920 vos_mem_free(pWdaParams);
7921 }
7922 return CONVERT_WDI2VOS_STATUS(status);
7923}
7924#endif /*FEATURE_WLAN_TDLS*/
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307925
7926
Jeff Johnson295189b2012-06-20 16:38:30 -07007927#ifdef WLAN_FEATURE_VOWIFI_11R
7928/*
7929 * FUNCTION: WDA_AggrAddTSReqCallback
7930 * send ADD AGGREGATED TS RSP back to PE
7931 */
7932void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
7933{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007934 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307935 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007936 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007937 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07007938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007939 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007940 if(NULL == pWdaParams)
7941 {
7942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007943 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007944 VOS_ASSERT(0) ;
7945 return ;
7946 }
7947
7948 pWDA = pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307949 if (NULL == pWDA)
7950 {
7951 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7952 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307953 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7954 vos_mem_free(pWdaParams->wdaMsgParam);
7955 vos_mem_free(pWdaParams);
7956
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307957 VOS_ASSERT(0);
7958 return ;
7959 }
7960
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007961 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007962
7963 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
7964 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007965 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007966 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007967 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007968
7969 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7970 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007971 return ;
7972}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07007973/*
7974 * FUNCTION: WDA_ProcessAddTSReq
7975 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
7976 */
7977VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
7978 tAggrAddTsParams *pAggrAddTsReqParams)
7979{
7980 WDI_Status status = WDI_STATUS_SUCCESS ;
7981 int i;
7982 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007983 tWDA_ReqParams *pWdaParams = NULL;
7984
7985
Jeff Johnson295189b2012-06-20 16:38:30 -07007986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007987 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007988 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
7989 sizeof(WDI_AggrAddTSReqParamsType)) ;
7990 if(NULL == wdiAggrAddTSReqParam)
7991 {
7992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007993 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007994 VOS_ASSERT(0);
7995 return VOS_STATUS_E_NOMEM;
7996 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007997
7998
7999 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8000 if(NULL == pWdaParams)
8001 {
8002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008003 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008004 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008005 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008006 VOS_ASSERT(0);
8007 return VOS_STATUS_E_NOMEM;
8008 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008009 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
8010 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
8011 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008012 for( i = 0; i < WDI_MAX_NO_AC; i++ )
8013 {
8014 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
8015 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
8016 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07008017 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
8018 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
8019 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
8020 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
8021 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
8022 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
8023 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
8024 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
8025 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
8026 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
8027 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
8028 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
8029 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
8030 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
8031 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
8032 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07008033 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
8034 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07008035 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
8036 pAggrAddTsReqParams->tspec[i].nomMsduSz;
8037 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
8038 pAggrAddTsReqParams->tspec[i].maxMsduSz;
8039 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
8040 pAggrAddTsReqParams->tspec[i].minSvcInterval;
8041 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
8042 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
8043 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
8044 pAggrAddTsReqParams->tspec[i].inactInterval;
8045 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
8046 pAggrAddTsReqParams->tspec[i].suspendInterval;
8047 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
8048 pAggrAddTsReqParams->tspec[i].svcStartTime;
8049 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
8050 pAggrAddTsReqParams->tspec[i].minDataRate;
8051 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
8052 pAggrAddTsReqParams->tspec[i].meanDataRate;
8053 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
8054 pAggrAddTsReqParams->tspec[i].peakDataRate;
8055 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
8056 pAggrAddTsReqParams->tspec[i].maxBurstSz;
8057 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
8058 pAggrAddTsReqParams->tspec[i].delayBound;
8059 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
8060 pAggrAddTsReqParams->tspec[i].minPhyRate;
8061 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
8062 pAggrAddTsReqParams->tspec[i].surplusBw;
8063 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
8064 pAggrAddTsReqParams->tspec[i].mediumTime;
8065 }
8066
8067 /* TODO: tAggrAddTsParams doesn't have the following fields */
8068#if 0
8069 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
8070 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
8071 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
8072 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
8073#endif
8074 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
8075
8076 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008077 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008078 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008079 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
8080
8081 pWdaParams->pWdaContext = pWDA;
8082
Jeff Johnson295189b2012-06-20 16:38:30 -07008083 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008084 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
8085
Jeff Johnson295189b2012-06-20 16:38:30 -07008086 if(IS_WDI_STATUS_FAILURE(status))
8087 {
8088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8089 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008090 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8091 vos_mem_free(pWdaParams);
8092
8093 /* send the failure response back to PE*/
8094 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
8095 {
8096 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
8097 }
8098
8099 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
8100 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008101 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008102 return CONVERT_WDI2VOS_STATUS(status) ;
8103}
8104#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07008105/*
Mihir Shetea4306052014-03-25 00:02:54 +05308106 * FUNCTION: WDA_EnterImpsRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008107 * send Enter IMPS RSP back to PE
8108 */
Mihir Shetea4306052014-03-25 00:02:54 +05308109void WDA_EnterImpsRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008110{
Mihir Shetea4306052014-03-25 00:02:54 +05308111 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308112 tWDA_CbContext *pWDA = NULL;
Mihir Shetea4306052014-03-25 00:02:54 +05308113
Jeff Johnson295189b2012-06-20 16:38:30 -07008114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Mihir Shetea4306052014-03-25 00:02:54 +05308115 "<------ %s status=%d" ,__func__,status);
8116 if(NULL == pWdaParams)
8117 {
8118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8119 "%s: pWdaParams received NULL", __func__);
8120 VOS_ASSERT(0);
8121 return;
8122 }
8123
8124 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308125 if (NULL == pWDA)
8126 {
8127 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8128 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308129 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8130 vos_mem_free(pWdaParams->wdaMsgParam);
8131 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308132 VOS_ASSERT(0);
8133 return ;
8134 }
Mihir Shetea4306052014-03-25 00:02:54 +05308135
8136 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8137 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008138 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008139 return ;
8140}
Mihir Shetea4306052014-03-25 00:02:54 +05308141
8142
8143/*
8144 * FUNCTION: WDA_EnterImpsReqCallback
8145 * Free memory and send Enter IMPS RSP back to PE.
8146 * Invoked when Enter IMPS REQ failed in WDI and no RSP callback is generated.
8147 */
8148void WDA_EnterImpsReqCallback(WDI_Status wdiStatus, void* pUserData)
8149{
8150 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308151 tWDA_CbContext *pWDA = NULL;
Mihir Shetea4306052014-03-25 00:02:54 +05308152
8153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8154 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8155
8156 if(NULL == pWdaParams)
8157 {
8158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8159 "%s: pWdaParams received NULL", __func__);
8160 VOS_ASSERT(0);
8161 return;
8162 }
8163
8164 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308165 if (NULL == pWDA)
8166 {
8167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8168 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308169 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8170 vos_mem_free(pWdaParams->wdaMsgParam);
8171 vos_mem_free(pWdaParams);
8172
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308173 VOS_ASSERT(0);
8174 return ;
8175 }
8176
Mihir Shetea4306052014-03-25 00:02:54 +05308177
8178 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8179 {
8180 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8181 vos_mem_free(pWdaParams);
8182 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
8183 CONVERT_WDI2SIR_STATUS(wdiStatus));
8184 }
8185
8186 return;
8187}
Jeff Johnson295189b2012-06-20 16:38:30 -07008188/*
8189 * FUNCTION: WDA_ProcessEnterImpsReq
8190 * Request to WDI to Enter IMPS power state.
8191 */
8192VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
8193{
8194 WDI_Status status = WDI_STATUS_SUCCESS ;
Mihir Shetea4306052014-03-25 00:02:54 +05308195 WDI_EnterImpsReqParamsType *wdiEnterImpsReqParams;
8196 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008197 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008198 "------> %s " ,__func__);
Mihir Shetea4306052014-03-25 00:02:54 +05308199
8200
8201 wdiEnterImpsReqParams = vos_mem_malloc(sizeof(WDI_EnterImpsReqParamsType));
8202 if (NULL == wdiEnterImpsReqParams)
8203 {
8204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8205 "%s: VOS MEM Alloc Failure", __func__);
8206 VOS_ASSERT(0);
8207 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
8208 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
8209 return VOS_STATUS_E_NOMEM;
8210 }
8211
8212 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8213 if (NULL == pWdaParams)
8214 {
8215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8216 "%s: VOS MEM Alloc Failure", __func__);
8217 VOS_ASSERT(0);
8218 vos_mem_free(wdiEnterImpsReqParams);
8219 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL ,
8220 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
8221 return VOS_STATUS_E_NOMEM;
8222 }
8223
8224 wdiEnterImpsReqParams->wdiReqStatusCB = WDA_EnterImpsReqCallback;
8225 wdiEnterImpsReqParams->pUserData = pWdaParams;
8226
8227 pWdaParams->wdaWdiApiMsgParam = wdiEnterImpsReqParams;
8228 pWdaParams->wdaMsgParam = NULL;
8229 pWdaParams->pWdaContext = pWDA;
8230
8231 status = WDI_EnterImpsReq(wdiEnterImpsReqParams,
8232 (WDI_EnterImpsRspCb)WDA_EnterImpsRspCallback,
8233 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008234 if(IS_WDI_STATUS_FAILURE(status))
8235 {
8236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8237 "Failure in Enter IMPS REQ WDI API, free all the memory " );
Mihir Shetea4306052014-03-25 00:02:54 +05308238 vos_mem_free(wdiEnterImpsReqParams);
8239 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008240 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008241 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008242 return CONVERT_WDI2VOS_STATUS(status) ;
8243}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308244
8245/*
8246 * FUNCTION: WDA_ExitImpsRespCallback
8247 * send Exit IMPS RSP back to PE
8248 */
8249void WDA_ExitImpsRespCallback(WDI_Status status, void* pUserData)
8250{
8251 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8252 tWDA_CbContext *pWDA;
8253
8254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8255 "<------ %s " ,__func__);
8256
8257 if (NULL == pWdaParams)
8258 {
8259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8260 "%s: pWdaParams received NULL", __func__);
8261 VOS_ASSERT(0);
8262 return;
8263 }
8264 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8265
8266 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8267 vos_mem_free(pWdaParams);
8268
8269 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status));
8270 return;
8271}
8272
Jeff Johnson295189b2012-06-20 16:38:30 -07008273/*
8274 * FUNCTION: WDA_ExitImpsReqCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008275 */
8276void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
8277{
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308278 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008280 "<------ %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308281 if(NULL == pWdaParams)
8282 {
8283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8284 "%s: pWdaParams received NULL", __func__);
8285 VOS_ASSERT(0);
8286 return;
8287 }
8288
8289 if (IS_WDI_STATUS_FAILURE(status))
8290 {
8291 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8292 vos_mem_free(pWdaParams);
8293 if (WDI_STATUS_DEV_INTERNAL_FAILURE == status)
8294 {
8295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8296 FL("reload wlan driver"));
8297 wpalWlanReload();
8298 }
8299 }
8300 return;
Jeff Johnson295189b2012-06-20 16:38:30 -07008301}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308302
Jeff Johnson295189b2012-06-20 16:38:30 -07008303/*
8304 * FUNCTION: WDA_ProcessExitImpsReq
8305 * Request to WDI to Exit IMPS power state.
8306 */
8307VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
8308{
8309 WDI_Status status = WDI_STATUS_SUCCESS ;
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308310 tWDA_ReqParams *pWdaParams;
8311 WDI_ExitImpsReqParamsType *wdiExitImpsReqParams;
8312
Jeff Johnson295189b2012-06-20 16:38:30 -07008313 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008314 "------> %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308315 wdiExitImpsReqParams = (WDI_ExitImpsReqParamsType *)vos_mem_malloc(
8316 sizeof(WDI_ExitImpsReqParamsType));
8317 if (NULL == wdiExitImpsReqParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008318 {
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8320 "%s: VOS MEM Alloc Failure", __func__);
8321 VOS_ASSERT(0);
8322 return VOS_STATUS_E_NOMEM;
8323 }
8324 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8325 if(NULL == pWdaParams)
8326 {
8327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8328 "%s: VOS MEM Alloc Failure", __func__);
8329 VOS_ASSERT(0);
8330 vos_mem_free(wdiExitImpsReqParams);
8331 return VOS_STATUS_E_NOMEM;
8332 }
8333 wdiExitImpsReqParams->wdiReqStatusCB = WDA_ExitImpsReqCallback;
8334 wdiExitImpsReqParams->pUserData = pWdaParams;
8335
8336 /* Store param pointer as passed in by caller */
8337 /* store Params pass it to WDI */
8338 pWdaParams->wdaWdiApiMsgParam = wdiExitImpsReqParams;
8339 pWdaParams->pWdaContext = pWDA;
8340 pWdaParams->wdaMsgParam = wdiExitImpsReqParams;
8341 status = WDI_ExitImpsReq(wdiExitImpsReqParams,
8342 (WDI_ExitImpsRspCb)WDA_ExitImpsRespCallback,
8343 pWdaParams);
8344 if (IS_WDI_STATUS_FAILURE(status))
8345 {
8346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8347 "Failure in Exit IMPS REQ WDI API, free all the memory " );
8348 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8349 vos_mem_free(pWdaParams);
8350 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008351 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008352 return CONVERT_WDI2VOS_STATUS(status) ;
8353}
Jeff Johnson295189b2012-06-20 16:38:30 -07008354/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008355 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008356 * send Enter BMPS RSP back to PE
8357 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008358void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008359{
8360 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308361 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008362 tEnterBmpsParams *pEnterBmpsRspParams;
8363
Jeff Johnson295189b2012-06-20 16:38:30 -07008364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008365 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008366 if(NULL == pWdaParams)
8367 {
8368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008369 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008370 VOS_ASSERT(0) ;
8371 return ;
8372 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008373
8374 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308375 if (NULL == pWDA)
8376 {
8377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8378 "%s:pWDA is NULL", __func__);
8379 VOS_ASSERT(0);
8380 return ;
8381 }
8382
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008383 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
8384
8385 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008386 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008387
8388 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008389 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008390 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
8391
Jeff Johnson295189b2012-06-20 16:38:30 -07008392 return ;
8393}
Jeff Johnson295189b2012-06-20 16:38:30 -07008394/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008395 * FUNCTION: WDA_EnterBmpsReqCallback
8396 * Free memory and send Enter BMPS RSP back to PE.
8397 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
8398 */
8399void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
8400{
8401 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308402 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008403 tEnterBmpsParams *pEnterBmpsRspParams;
8404
8405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8406 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8407
8408 if(NULL == pWdaParams)
8409 {
8410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8411 "%s: pWdaParams received NULL", __func__);
8412 VOS_ASSERT(0);
8413 return;
8414 }
8415
8416 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308417 if (NULL == pWDA)
8418 {
8419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8420 "%s:pWDA is NULL", __func__);
8421 VOS_ASSERT(0);
8422 return ;
8423 }
8424
Yue Ma7f44bbe2013-04-12 11:47:39 -07008425 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
8426 pEnterBmpsRspParams->status = wdiStatus;
8427
8428 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8429 {
8430 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8431 vos_mem_free(pWdaParams);
8432 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
8433 }
8434
8435 return;
8436}
8437/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008438 * FUNCTION: WDA_ProcessEnterBmpsReq
8439 * Request to WDI to Enter BMPS power state.
8440 */
8441VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
8442 tEnterBmpsParams *pEnterBmpsReqParams)
8443{
8444 WDI_Status status = WDI_STATUS_SUCCESS;
8445 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
8446 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008448 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008449 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
8450 {
8451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008452 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008453 VOS_ASSERT(0);
8454 return VOS_STATUS_E_FAILURE;
8455 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008456 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
8457 if (NULL == wdiEnterBmpsReqParams)
8458 {
8459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008460 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008461 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008462 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
8463 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008464 return VOS_STATUS_E_NOMEM;
8465 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008466 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8467 if (NULL == pWdaParams)
8468 {
8469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008470 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008471 VOS_ASSERT(0);
8472 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008473 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
8474 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008475 return VOS_STATUS_E_NOMEM;
8476 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008477 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
8478 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
8479 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
8480 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08008481 // For ESE and 11R Roaming
Jeff Johnson295189b2012-06-20 16:38:30 -07008482 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
8483 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
8484 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008485 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
8486 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008487
Jeff Johnson295189b2012-06-20 16:38:30 -07008488 /* Store param pointer as passed in by caller */
8489 /* store Params pass it to WDI */
8490 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008491 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008492 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07008493 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008494 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008495 if (IS_WDI_STATUS_FAILURE(status))
8496 {
8497 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8498 "Failure in Enter BMPS REQ WDI API, free all the memory" );
8499 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008500 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07008501 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008502 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008503 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008504 return CONVERT_WDI2VOS_STATUS(status);
8505}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008506
8507
8508static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
8509 WDI_Status wdiStatus,
8510 tExitBmpsParams *pExitBmpsReqParams)
8511{
8512 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
8513
8514 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
8515}
8516
8517
Jeff Johnson295189b2012-06-20 16:38:30 -07008518/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008519 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008520 * send Exit BMPS RSP back to PE
8521 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008522void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008523{
8524 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308525 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008526 tExitBmpsParams *pExitBmpsRspParams;
8527
Jeff Johnson295189b2012-06-20 16:38:30 -07008528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008529 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008530 if(NULL == pWdaParams)
8531 {
8532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008533 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008534 VOS_ASSERT(0) ;
8535 return ;
8536 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008537
8538 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308539 if (NULL == pWDA)
8540 {
8541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8542 "%s:pWDA is NULL", __func__);
8543 VOS_ASSERT(0);
8544 return ;
8545 }
8546
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008547 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
8548
8549 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008550 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008551
Jeff Johnson295189b2012-06-20 16:38:30 -07008552 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8553 vos_mem_free(pWdaParams) ;
8554
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008555 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008556 return ;
8557}
Jeff Johnson295189b2012-06-20 16:38:30 -07008558/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008559 * FUNCTION: WDA_ExitBmpsReqCallback
8560 * Free memory and send Exit BMPS RSP back to PE.
8561 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
8562 */
8563void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
8564{
8565 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308566 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008567 tExitBmpsParams *pExitBmpsRspParams;
8568
8569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8570 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8571
8572 if(NULL == pWdaParams)
8573 {
8574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8575 "%s: pWdaParams received NULL", __func__);
8576 VOS_ASSERT(0);
8577 return;
8578 }
8579
8580 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308581 if (NULL == pWDA)
8582 {
8583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8584 "%s:pWDA is NULL", __func__);
8585 VOS_ASSERT(0);
8586 return ;
8587 }
8588
Yue Ma7f44bbe2013-04-12 11:47:39 -07008589 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
8590 pExitBmpsRspParams->status = wdiStatus;
8591
8592 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8593 {
8594 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8595 vos_mem_free(pWdaParams);
8596 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
8597 }
8598
8599 return;
8600}
8601/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008602 * FUNCTION: WDA_ProcessExitBmpsReq
8603 * Request to WDI to Exit BMPS power state.
8604 */
8605VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
8606 tExitBmpsParams *pExitBmpsReqParams)
8607{
8608 WDI_Status status = WDI_STATUS_SUCCESS ;
8609 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
8610 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
8611 sizeof(WDI_ExitBmpsReqParamsType)) ;
8612 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008614 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008615 if(NULL == wdiExitBmpsReqParams)
8616 {
8617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008618 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008619 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008620 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008621 return VOS_STATUS_E_NOMEM;
8622 }
8623 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8624 if(NULL == pWdaParams)
8625 {
8626 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008627 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008628 VOS_ASSERT(0);
8629 vos_mem_free(wdiExitBmpsReqParams);
8630 return VOS_STATUS_E_NOMEM;
8631 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008632 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07008633
8634 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
8635
Yue Ma7f44bbe2013-04-12 11:47:39 -07008636 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
8637 wdiExitBmpsReqParams->pUserData = pWdaParams;
8638
Jeff Johnson295189b2012-06-20 16:38:30 -07008639 /* Store param pointer as passed in by caller */
8640 /* store Params pass it to WDI */
8641 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
8642 pWdaParams->pWdaContext = pWDA;
8643 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008644 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008645 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008646 if(IS_WDI_STATUS_FAILURE(status))
8647 {
8648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8649 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008650 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8651 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008652 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008653 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008654 return CONVERT_WDI2VOS_STATUS(status) ;
8655}
Jeff Johnson295189b2012-06-20 16:38:30 -07008656/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008657 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008658 * send Enter UAPSD RSP back to PE
8659 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008660void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008661{
8662 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308663 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008664 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008666 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008667 if(NULL == pWdaParams)
8668 {
8669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008670 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008671 VOS_ASSERT(0) ;
8672 return ;
8673 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008674
8675 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308676 if (NULL == pWDA)
8677 {
8678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8679 "%s:pWDA is NULL", __func__);
8680 VOS_ASSERT(0);
8681 return ;
8682 }
8683
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008684 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
8685
8686 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008687 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008688
Jeff Johnson295189b2012-06-20 16:38:30 -07008689 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8690 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008691 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008692 return ;
8693}
Jeff Johnson295189b2012-06-20 16:38:30 -07008694/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008695 * FUNCTION: WDA_EnterUapsdReqCallback
8696 * Free memory and send Enter UAPSD RSP back to PE.
8697 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
8698 */
8699void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
8700{
8701 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8702 tWDA_CbContext *pWDA;
8703 tUapsdParams *pEnterUapsdRsqParams;
8704
8705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8706 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8707
8708 if(NULL == pWdaParams)
8709 {
8710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8711 "%s: pWdaParams received NULL", __func__);
8712 VOS_ASSERT(0);
8713 return;
8714 }
8715
8716 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308717 if (NULL == pWDA)
8718 {
8719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8720 "%s:pWDA is NULL", __func__);
8721 VOS_ASSERT(0);
8722 return ;
8723 }
8724
Yue Ma7f44bbe2013-04-12 11:47:39 -07008725 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
8726 pEnterUapsdRsqParams->status = wdiStatus;
8727
8728 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8729 {
8730 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8731 vos_mem_free(pWdaParams);
8732 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
8733 }
8734
8735 return;
8736}
8737/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008738 * FUNCTION: WDA_ProcessEnterUapsdReq
8739 * Request to WDI to Enter UAPSD power state.
8740 */
8741VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
8742 tUapsdParams *pEnterUapsdReqParams)
8743{
8744 WDI_Status status = WDI_STATUS_SUCCESS ;
8745 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
8746 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
8747 sizeof(WDI_EnterUapsdReqParamsType)) ;
8748 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008750 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008751 if(NULL == wdiEnterUapsdReqParams)
8752 {
8753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008754 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008755 VOS_ASSERT(0);
8756 return VOS_STATUS_E_NOMEM;
8757 }
8758 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8759 if(NULL == pWdaParams)
8760 {
8761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008762 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008763 VOS_ASSERT(0);
8764 vos_mem_free(wdiEnterUapsdReqParams);
8765 return VOS_STATUS_E_NOMEM;
8766 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008767 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
8768 pEnterUapsdReqParams->beDeliveryEnabled;
8769 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
8770 pEnterUapsdReqParams->beTriggerEnabled;
8771 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
8772 pEnterUapsdReqParams->bkDeliveryEnabled;
8773 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
8774 pEnterUapsdReqParams->bkTriggerEnabled;
8775 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
8776 pEnterUapsdReqParams->viDeliveryEnabled;
8777 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
8778 pEnterUapsdReqParams->viTriggerEnabled;
8779 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
8780 pEnterUapsdReqParams->voDeliveryEnabled;
8781 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
8782 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07008783 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008784
Yue Ma7f44bbe2013-04-12 11:47:39 -07008785 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
8786 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008787
Jeff Johnson295189b2012-06-20 16:38:30 -07008788 /* Store param pointer as passed in by caller */
8789 /* store Params pass it to WDI */
8790 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
8791 pWdaParams->pWdaContext = pWDA;
8792 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008793 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008794 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008795 if(IS_WDI_STATUS_FAILURE(status))
8796 {
8797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8798 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
8799 vos_mem_free(pWdaParams->wdaMsgParam) ;
8800 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8801 vos_mem_free(pWdaParams) ;
8802 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008803 return CONVERT_WDI2VOS_STATUS(status) ;
8804}
Jeff Johnson295189b2012-06-20 16:38:30 -07008805/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008806 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008807 * send Exit UAPSD RSP back to PE
8808 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008809void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008810{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008811
8812 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8813 tWDA_CbContext *pWDA;
8814 tExitUapsdParams *pExitUapsdRspParams;
8815
Jeff Johnson295189b2012-06-20 16:38:30 -07008816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008817 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008818 if(NULL == pWdaParams)
8819 {
8820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008821 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008822 VOS_ASSERT(0);
8823 return;
8824 }
8825
8826 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8827 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
8828
8829 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008830 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008831
8832 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8833 vos_mem_free(pWdaParams) ;
8834
8835 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008836 return ;
8837}
Jeff Johnson295189b2012-06-20 16:38:30 -07008838/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008839 * FUNCTION: WDA_ExitUapsdReqCallback
8840 * Free memory and send Exit UAPSD RSP back to PE.
8841 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
8842 */
8843void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
8844{
8845 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308846 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008847 tExitUapsdParams *pExitUapsdRspParams;
8848
8849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8850 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8851
8852 if(NULL == pWdaParams)
8853 {
8854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8855 "%s: pWdaParams received NULL", __func__);
8856 VOS_ASSERT(0);
8857 return;
8858 }
8859
8860 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308861 if (NULL == pWDA)
8862 {
8863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8864 "%s:pWDA is NULL", __func__);
8865 VOS_ASSERT(0);
8866 return ;
8867 }
8868
Yue Ma7f44bbe2013-04-12 11:47:39 -07008869 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
8870 pExitUapsdRspParams->status = wdiStatus;
8871
8872 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8873 {
8874 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8875 vos_mem_free(pWdaParams);
8876 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
8877 }
8878
8879 return;
8880}
8881/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008882 * FUNCTION: WDA_ProcessExitUapsdReq
8883 * Request to WDI to Exit UAPSD power state.
8884 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008885VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
8886 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008887{
8888 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008889 tWDA_ReqParams *pWdaParams ;
8890 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
8891 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
8892 sizeof(WDI_ExitUapsdReqParamsType)) ;
8893
Jeff Johnson295189b2012-06-20 16:38:30 -07008894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008895 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008896
8897 if(NULL == wdiExitUapsdReqParams)
8898 {
8899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008900 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008901 VOS_ASSERT(0);
8902 return VOS_STATUS_E_NOMEM;
8903 }
8904 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8905 if(NULL == pWdaParams)
8906 {
8907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008908 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008909 VOS_ASSERT(0);
8910 vos_mem_free(wdiExitUapsdReqParams);
8911 return VOS_STATUS_E_NOMEM;
8912 }
8913
8914 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008915 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
8916 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008917
8918 /* Store param pointer as passed in by caller */
8919 /* store Params pass it to WDI */
8920 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
8921 pWdaParams->pWdaContext = pWDA;
8922 pWdaParams->wdaMsgParam = pExitUapsdParams;
8923
Yue Ma7f44bbe2013-04-12 11:47:39 -07008924 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008925 if(IS_WDI_STATUS_FAILURE(status))
8926 {
8927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8928 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008929 vos_mem_free(pWdaParams->wdaMsgParam) ;
8930 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8931 vos_mem_free(pWdaParams) ;
8932
Jeff Johnson295189b2012-06-20 16:38:30 -07008933 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008934 return CONVERT_WDI2VOS_STATUS(status) ;
8935}
8936
Jeff Johnson295189b2012-06-20 16:38:30 -07008937/*
8938 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
8939 *
8940 */
8941void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
8942{
8943 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008945 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008946 if(NULL == pWdaParams)
8947 {
8948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008949 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008950 VOS_ASSERT(0) ;
8951 return ;
8952 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008953 if( pWdaParams != NULL )
8954 {
8955 if( pWdaParams->wdaWdiApiMsgParam != NULL )
8956 {
8957 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8958 }
8959 if( pWdaParams->wdaMsgParam != NULL )
8960 {
8961 vos_mem_free(pWdaParams->wdaMsgParam) ;
8962 }
8963 vos_mem_free(pWdaParams) ;
8964 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008965 return ;
8966}
Jeff Johnson295189b2012-06-20 16:38:30 -07008967/*
8968 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
8969 * Request to WDI to set the power save params at start.
8970 */
8971VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
8972 tSirPowerSaveCfg *pPowerSaveCfg)
8973{
8974 WDI_Status status = WDI_STATUS_SUCCESS ;
8975 tHalCfg *tlvStruct = NULL ;
8976 tANI_U8 *tlvStructStart = NULL ;
8977 v_PVOID_t *configParam;
8978 tANI_U32 configParamSize;
8979 tANI_U32 *configDataValue;
8980 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
8981 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008983 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008984 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
8985 {
8986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008987 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008988 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008989 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008990 return VOS_STATUS_E_FAILURE;
8991 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008992 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
8993 if (NULL == wdiPowerSaveCfg)
8994 {
8995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008996 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008997 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008998 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008999 return VOS_STATUS_E_NOMEM;
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,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009005 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009006 VOS_ASSERT(0);
9007 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009008 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009009 return VOS_STATUS_E_NOMEM;
9010 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009011 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
9012 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07009013 if(NULL == configParam)
9014 {
9015 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08009016 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009017 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07009018 vos_mem_free(pWdaParams);
9019 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009020 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009021 return VOS_STATUS_E_NOMEM;
9022 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009023 vos_mem_set(configParam, configParamSize, 0);
9024 wdiPowerSaveCfg->pConfigBuffer = configParam;
9025 tlvStruct = (tHalCfg *)configParam;
9026 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009027 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
9028 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
9029 tlvStruct->length = sizeof(tANI_U32);
9030 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9031 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07009032 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9033 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009034 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
9035 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
9036 tlvStruct->length = sizeof(tANI_U32);
9037 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9038 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07009039 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9040 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009041 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
9042 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
9043 tlvStruct->length = sizeof(tANI_U32);
9044 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9045 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07009046 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9047 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009048 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
9049 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
9050 tlvStruct->length = sizeof(tANI_U32);
9051 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9052 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07009053 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9054 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009055 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
9056 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
9057 tlvStruct->length = sizeof(tANI_U32);
9058 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9059 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07009060 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9061 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009062 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
9063 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
9064 tlvStruct->length = sizeof(tANI_U32);
9065 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9066 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07009067 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9068 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009069 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
9070 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
9071 tlvStruct->length = sizeof(tANI_U32);
9072 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9073 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07009074 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9075 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009076 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
9077 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
9078 tlvStruct->length = sizeof(tANI_U32);
9079 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9080 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
9081 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9082 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009083 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
9084 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
9085 tlvStruct->length = sizeof(tANI_U32);
9086 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9087 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
9088 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9089 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009090 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
9091 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
9092 tlvStruct->length = sizeof(tANI_U32);
9093 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9094 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07009095 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9096 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009097 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
9098 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
9099 tlvStruct->length = sizeof(tANI_U32);
9100 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9101 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07009102 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9103 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009104 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009105 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009106 /* store Params pass it to WDI */
9107 pWdaParams->wdaMsgParam = configParam;
9108 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
9109 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009110 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
9111 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009112 if(IS_WDI_STATUS_FAILURE(status))
9113 {
9114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9115 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
9116 vos_mem_free(pWdaParams->wdaMsgParam);
9117 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9118 vos_mem_free(pWdaParams);
9119 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009120 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009121 return CONVERT_WDI2VOS_STATUS(status);
9122}
Jeff Johnson295189b2012-06-20 16:38:30 -07009123/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009124 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009125 *
9126 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009127void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009128{
Yue Ma7f44bbe2013-04-12 11:47:39 -07009129 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9130
Jeff Johnson295189b2012-06-20 16:38:30 -07009131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009132 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -07009133
9134 if(NULL == pWdaParams)
9135 {
9136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9137 "%s: pWdaParams received NULL", __func__);
9138 VOS_ASSERT(0);
9139 return ;
9140 }
9141
9142 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07009143 vos_mem_free(pWdaParams);
9144
Jeff Johnson295189b2012-06-20 16:38:30 -07009145 return ;
9146}
Jeff Johnson295189b2012-06-20 16:38:30 -07009147/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009148 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
9149 * Free memory.
9150 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
9151 */
9152void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
9153{
9154 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9155
9156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9157 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9158
9159 if(NULL == pWdaParams)
9160 {
9161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9162 "%s: pWdaParams received NULL", __func__);
9163 VOS_ASSERT(0);
9164 return;
9165 }
9166
9167 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9168 {
9169 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9170 vos_mem_free(pWdaParams);
9171 }
9172
9173 return;
9174}
9175/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009176 * FUNCTION: WDA_SetUapsdAcParamsReq
9177 * Request to WDI to set the UAPSD params for an ac (sta mode).
9178 */
9179VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
9180 tUapsdInfo *pUapsdInfo)
9181{
9182 WDI_Status status = WDI_STATUS_SUCCESS;
9183 tWDA_CbContext *pWDA = NULL ;
9184 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
9185 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
9186 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
9187 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009189 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009190 if(NULL == wdiUapsdParams)
9191 {
9192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009193 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009194 VOS_ASSERT(0);
9195 return VOS_STATUS_E_NOMEM;
9196 }
9197 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9198 if(NULL == pWdaParams)
9199 {
9200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009201 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009202 VOS_ASSERT(0);
9203 vos_mem_free(wdiUapsdParams);
9204 return VOS_STATUS_E_NOMEM;
9205 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009206 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
9207 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
9208 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
9209 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
9210 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
9211 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009212 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
9213 wdiUapsdParams->pUserData = pWdaParams;
9214
Jeff Johnson295189b2012-06-20 16:38:30 -07009215 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -07009216 pWdaParams->pWdaContext = pWDA;
9217 /* Store param pointer as passed in by caller */
9218 pWdaParams->wdaMsgParam = pUapsdInfo;
9219 /* store Params pass it to WDI */
9220 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009221 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009222 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07009223 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009224 if(IS_WDI_STATUS_FAILURE(status))
9225 {
9226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9227 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
9228 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9229 vos_mem_free(pWdaParams);
9230 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009231 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
9232 return VOS_STATUS_SUCCESS;
9233 else
9234 return VOS_STATUS_E_FAILURE;
9235
Jeff Johnson295189b2012-06-20 16:38:30 -07009236}
9237/*
9238 * FUNCTION: WDA_ClearUapsdAcParamsReq
9239 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
9240 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
9241 * and again enter the UPASD with the modified params. Hence the disable
9242 * function was kept empty.
9243 *
9244 */
9245VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
9246{
9247 /* do nothing */
9248 return VOS_STATUS_SUCCESS;
9249}
Jeff Johnson295189b2012-06-20 16:38:30 -07009250/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009251 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009252 *
9253 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009254void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009255{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009256 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9257
Jeff Johnson295189b2012-06-20 16:38:30 -07009258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009259 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009260
9261 if(NULL == pWdaParams)
9262 {
9263 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009264 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009265 VOS_ASSERT(0) ;
9266 return ;
9267 }
9268
9269 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9270 vos_mem_free(pWdaParams->wdaMsgParam);
9271 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009272
Jeff Johnson295189b2012-06-20 16:38:30 -07009273 //print a msg, nothing else to do
9274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009275 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009276 return ;
9277}
Jeff Johnson295189b2012-06-20 16:38:30 -07009278/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009279 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
9280 * Free memory.
9281 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
9282 */
9283void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
9284{
9285 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9286
9287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9288 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9289
9290 if(NULL == pWdaParams)
9291 {
9292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9293 "%s: pWdaParams received NULL", __func__);
9294 VOS_ASSERT(0);
9295 return;
9296 }
9297
9298 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9299 {
9300 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9301 vos_mem_free(pWdaParams->wdaMsgParam);
9302 vos_mem_free(pWdaParams);
9303 }
9304
9305 return;
9306}
9307/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009308 * FUNCTION: WDA_UpdateUapsdParamsReq
9309 * Request to WDI to update UAPSD params (in softAP mode) for a station.
9310 */
9311VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
9312 tUpdateUapsdParams* pUpdateUapsdInfo)
9313{
9314 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009315 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009316 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
9317 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
9318 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009319 tWDA_ReqParams *pWdaParams = NULL;
9320
Jeff Johnson295189b2012-06-20 16:38:30 -07009321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009322 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009323 if(NULL == wdiUpdateUapsdParams)
9324 {
9325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009326 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009327 VOS_ASSERT(0);
9328 return VOS_STATUS_E_NOMEM;
9329 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009330 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
9331 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
9332 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009333 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
9334 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009335
9336 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9337 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009338 {
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);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009342 vos_mem_free(pUpdateUapsdInfo);
9343 vos_mem_free(wdiUpdateUapsdParams);
9344 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07009345 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009346 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009347 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07009348 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009349 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
9350 pWdaParams->pWdaContext = pWDA;
9351
Jeff Johnson43971f52012-07-17 12:26:56 -07009352 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009353 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009354 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009355
Jeff Johnson43971f52012-07-17 12:26:56 -07009356 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009357 {
9358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9359 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009360 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
9361 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9362 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009363 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009364 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009365 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009366}
Jeff Johnson295189b2012-06-20 16:38:30 -07009367/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009368 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009369 *
9370 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009371void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009372{
9373 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009375 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009376 if(WDI_STATUS_SUCCESS != wdiStatus)
9377 {
9378 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08009379 "%s: RXP config filter failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009380 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009381 if(NULL == pWdaParams)
9382 {
9383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009384 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009385 VOS_ASSERT(0) ;
9386 return ;
9387 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009388 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9389 vos_mem_free(pWdaParams->wdaMsgParam);
9390 vos_mem_free(pWdaParams);
9391 return ;
9392}
Jeff Johnson295189b2012-06-20 16:38:30 -07009393/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009394 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
9395 * Free memory.
9396 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
9397 */
9398void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
9399{
9400 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9401
9402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9403 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9404
9405 if(NULL == pWdaParams)
9406 {
9407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9408 "%s: pWdaParams received NULL", __func__);
9409 VOS_ASSERT(0);
9410 return;
9411 }
9412
9413 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9414 {
9415 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9416 vos_mem_free(pWdaParams->wdaMsgParam);
9417 vos_mem_free(pWdaParams);
9418 }
9419
9420 return;
9421}
9422/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009423 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
9424 *
9425 */
9426VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
9427 tSirWlanSetRxpFilters *pWlanSuspendParam)
9428{
Jeff Johnson295189b2012-06-20 16:38:30 -07009429 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009430 WDI_Status wstatus;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +05309431 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009432 tWDA_ReqParams *pWdaParams ;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +05309433 /* Sanity Check
9434 * This is very unlikely and add assert to collect more info next time */
9435 if(NULL == pWlanSuspendParam)
9436 {
9437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9438 "%s: pWlanSuspendParam received NULL", __func__);
9439 VOS_ASSERT(0) ;
9440 return VOS_STATUS_E_FAULT;
9441 }
9442 wdiRxpFilterParams = (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
9443 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009445 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009446 if(NULL == wdiRxpFilterParams)
9447 {
9448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009449 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009450 VOS_ASSERT(0);
9451 vos_mem_free(pWlanSuspendParam);
9452 return VOS_STATUS_E_NOMEM;
9453 }
9454 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9455 if(NULL == pWdaParams)
9456 {
9457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009458 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009459 VOS_ASSERT(0);
9460 vos_mem_free(wdiRxpFilterParams);
9461 vos_mem_free(pWlanSuspendParam);
9462 return VOS_STATUS_E_NOMEM;
9463 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009464 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
9465 pWlanSuspendParam->setMcstBcstFilter;
9466 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
9467 pWlanSuspendParam->configuredMcstBcstFilterSetting;
9468
Yue Ma7f44bbe2013-04-12 11:47:39 -07009469 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
9470 wdiRxpFilterParams->pUserData = pWdaParams;
9471
Jeff Johnson295189b2012-06-20 16:38:30 -07009472 pWdaParams->pWdaContext = pWDA;
9473 pWdaParams->wdaMsgParam = pWlanSuspendParam;
9474 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009475 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009476 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07009477 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009478 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009479 {
9480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9481 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009482 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009483 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9484 vos_mem_free(pWdaParams->wdaMsgParam);
9485 vos_mem_free(pWdaParams);
9486 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009487 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009488}
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05309489
9490/*
9491 * FUNCTION: WDA_ProcessMgmtLoggingInitReq
9492 *
9493 */
9494VOS_STATUS WDA_ProcessMgmtLoggingInitReq(tWDA_CbContext *pWDA,
9495 tSirMgmtLoggingInitParam *pMgmtLoggingInitParam)
9496{
9497 VOS_STATUS status = VOS_STATUS_SUCCESS;
9498 WDI_Status wstatus;
9499 WDI_MgmtLoggingInitReqInfoType *wdiMgmtLoggingInitInfo;
9500 tWDA_ReqParams *pWdaParams ;
9501
9502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9503 "------> %s " ,__func__);
9504
9505 /* Sanity Check*/
9506 if(NULL == pMgmtLoggingInitParam)
9507 {
9508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9509 "%s: pMgmtLoggingInitParam received NULL", __func__);
9510 VOS_ASSERT(0) ;
9511 return VOS_STATUS_E_FAULT;
9512 }
9513
9514 wdiMgmtLoggingInitInfo = (WDI_MgmtLoggingInitReqInfoType *)vos_mem_malloc(
9515 sizeof(WDI_MgmtLoggingInitReqInfoType));
9516 if(NULL == wdiMgmtLoggingInitInfo)
9517 {
9518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9519 "%s: VOS MEM Alloc Failure", __func__);
9520 VOS_ASSERT(0);
9521 vos_mem_free(pMgmtLoggingInitParam);
9522 return VOS_STATUS_E_NOMEM;
9523 }
9524
9525 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9526 if(NULL == pWdaParams)
9527 {
9528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9529 "%s: VOS MEM Alloc Failure", __func__);
9530 VOS_ASSERT(0);
9531 vos_mem_free(wdiMgmtLoggingInitInfo);
9532 vos_mem_free(pMgmtLoggingInitParam);
9533 return VOS_STATUS_E_NOMEM;
9534 }
9535
9536 wdiMgmtLoggingInitInfo->enableFlag=
9537 pMgmtLoggingInitParam->enableFlag;
9538 wdiMgmtLoggingInitInfo->frameType=
9539 pMgmtLoggingInitParam->frameType;
9540 wdiMgmtLoggingInitInfo->frameSize=
9541 pMgmtLoggingInitParam->frameSize;
9542 wdiMgmtLoggingInitInfo->bufferMode=
9543 pMgmtLoggingInitParam->bufferMode;
9544
9545 pWdaParams->pWdaContext = pWDA;
9546 pWdaParams->wdaMsgParam = pMgmtLoggingInitParam;
9547 pWdaParams->wdaWdiApiMsgParam = (void *)wdiMgmtLoggingInitInfo;
9548
9549 wstatus = WDI_MgmtLoggingInitReq(wdiMgmtLoggingInitInfo,
9550 (WDI_MgmtLoggingInitRspCb)WDA_MgmtLoggingInitRspCallback,
9551 pWdaParams);
9552 if(IS_WDI_STATUS_FAILURE(wstatus))
9553 {
9554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9555 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
9556 status = CONVERT_WDI2VOS_STATUS(wstatus);
9557 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9558 vos_mem_free(pWdaParams->wdaMsgParam);
9559 vos_mem_free(pWdaParams);
9560 }
9561
9562 return status;
9563}
9564
Jeff Johnson295189b2012-06-20 16:38:30 -07009565/*
9566 * FUNCTION: WDA_WdiIndicationCallback
9567 *
9568 */
9569void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
9570 void* pUserData)
9571{
9572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009573 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009574}
Jeff Johnson295189b2012-06-20 16:38:30 -07009575/*
9576 * FUNCTION: WDA_ProcessWlanSuspendInd
9577 *
9578 */
9579VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
9580 tSirWlanSuspendParam *pWlanSuspendParam)
9581{
9582 WDI_Status wdiStatus;
9583 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009585 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009586 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
9587 pWlanSuspendParam->configuredMcstBcstFilterSetting;
9588 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
9589 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07009591 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
9592 if(WDI_STATUS_PENDING == wdiStatus)
9593 {
9594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009595 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009596 }
9597 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
9598 {
9599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009600 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009601 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009602 vos_mem_free(pWlanSuspendParam);
9603 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
9604}
9605
Chet Lanctot186b5732013-03-18 10:26:30 -07009606#ifdef WLAN_FEATURE_11W
9607/*
9608 * FUNCTION: WDA_ProcessExcludeUnecryptInd
9609 *
9610 */
9611VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
9612 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
9613{
9614 WDI_Status wdiStatus;
9615 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
9616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9617 "------> %s ", __func__);
9618
9619 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
9620 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
9621 sizeof(tSirMacAddr));
9622
9623 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
9624 wdiExclUnencryptParams.pUserData = pWDA;
9625
9626 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
9627 if(WDI_STATUS_PENDING == wdiStatus)
9628 {
9629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9630 "Pending received for %s:%d ", __func__, __LINE__ );
9631 }
9632 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
9633 {
9634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9635 "Failure in %s:%d ", __func__, __LINE__ );
9636 }
9637 vos_mem_free(pExclUnencryptParam);
9638 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
9639}
9640#endif
9641
Jeff Johnson295189b2012-06-20 16:38:30 -07009642/*
9643 * FUNCTION: WDA_ProcessWlanResumeCallback
9644 *
9645 */
9646void WDA_ProcessWlanResumeCallback(
9647 WDI_SuspendResumeRspParamsType *resumeRspParams,
9648 void* pUserData)
9649{
9650 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009652 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009653 if(NULL == pWdaParams)
9654 {
9655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009656 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009657 VOS_ASSERT(0) ;
9658 return ;
9659 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009660 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
9661 {
9662 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08009663 "%s: Process Wlan Resume failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009664 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009665 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9666 vos_mem_free(pWdaParams->wdaMsgParam);
9667 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009668 return ;
9669}
Jeff Johnson295189b2012-06-20 16:38:30 -07009670/*
9671 * FUNCTION: WDA_ProcessWlanResumeReq
9672 *
9673 */
9674VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
9675 tSirWlanResumeParam *pWlanResumeParam)
9676{
9677 WDI_Status wdiStatus;
9678 WDI_ResumeParamsType *wdiResumeParams =
9679 (WDI_ResumeParamsType *)vos_mem_malloc(
9680 sizeof(WDI_ResumeParamsType) ) ;
9681 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009683 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009684 if(NULL == wdiResumeParams)
9685 {
9686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009687 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009688 VOS_ASSERT(0);
9689 return VOS_STATUS_E_NOMEM;
9690 }
9691 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9692 if(NULL == pWdaParams)
9693 {
9694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009695 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009696 VOS_ASSERT(0);
9697 vos_mem_free(wdiResumeParams);
9698 return VOS_STATUS_E_NOMEM;
9699 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009700 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
9701 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07009703 wdiResumeParams->wdiReqStatusCB = NULL;
9704 pWdaParams->wdaMsgParam = pWlanResumeParam;
9705 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
9706 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009707 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
9708 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
9709 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009710 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9711 {
9712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9713 "Failure in Host Resume REQ WDI API, free all the memory " );
9714 VOS_ASSERT(0);
9715 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9716 vos_mem_free(pWdaParams->wdaMsgParam);
9717 vos_mem_free(pWdaParams);
9718 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009719 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
9720}
9721
Jeff Johnson295189b2012-06-20 16:38:30 -07009722/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009723 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009724 *
9725 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009726void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009727{
9728 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009730 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009731 if(NULL == pWdaParams)
9732 {
9733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009734 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009735 VOS_ASSERT(0) ;
9736 return ;
9737 }
9738
9739 vos_mem_free(pWdaParams->wdaMsgParam) ;
9740 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9741 vos_mem_free(pWdaParams) ;
9742 /*
9743 * No respone required for SetBeaconFilter req so just free the request
9744 * param here
9745 */
9746
Jeff Johnson295189b2012-06-20 16:38:30 -07009747 return ;
9748}
Jeff Johnson295189b2012-06-20 16:38:30 -07009749/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009750 * FUNCTION: WDA_SetBeaconFilterReqCallback
9751 * Free memory.
9752 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
9753 */
9754void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
9755{
9756 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9757
9758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9759 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9760
9761 if(NULL == pWdaParams)
9762 {
9763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9764 "%s: pWdaParams received NULL", __func__);
9765 VOS_ASSERT(0);
9766 return;
9767 }
9768
9769 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9770 {
9771 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9772 vos_mem_free(pWdaParams->wdaMsgParam);
9773 vos_mem_free(pWdaParams);
9774 }
9775
9776 return;
9777}
9778/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009779 * FUNCTION: WDA_SetBeaconFilterReq
9780 * Request to WDI to send the beacon filtering related information.
9781 */
9782VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
9783 tBeaconFilterMsg* pBeaconFilterInfo)
9784{
9785 WDI_Status status = WDI_STATUS_SUCCESS;
9786 tANI_U8 *dstPtr, *srcPtr;
9787 tANI_U8 filterLength;
9788 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
9789 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
9790 sizeof(WDI_BeaconFilterReqParamsType) ) ;
9791 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009792 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009793 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009794 if(NULL == wdiBeaconFilterInfo)
9795 {
9796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009797 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009798 VOS_ASSERT(0);
9799 return VOS_STATUS_E_NOMEM;
9800 }
9801 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9802 if(NULL == pWdaParams)
9803 {
9804 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009805 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009806 VOS_ASSERT(0);
9807 vos_mem_free(wdiBeaconFilterInfo);
9808 return VOS_STATUS_E_NOMEM;
9809 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009810 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
9811 pBeaconFilterInfo->beaconInterval;
9812 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
9813 pBeaconFilterInfo->capabilityInfo;
9814 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
9815 pBeaconFilterInfo->capabilityMask;
9816 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -07009817
9818 //Fill the BssIdx
9819 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
9820
Jeff Johnson295189b2012-06-20 16:38:30 -07009821 //Fill structure with info contained in the beaconFilterTable
9822 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
9823 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
9824 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
9825 if(WDI_BEACON_FILTER_LEN < filterLength)
9826 {
9827 filterLength = WDI_BEACON_FILTER_LEN;
9828 }
9829 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -07009830 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
9831 wdiBeaconFilterInfo->pUserData = pWdaParams;
9832
Jeff Johnson295189b2012-06-20 16:38:30 -07009833 /* Store param pointer as passed in by caller */
9834 /* store Params pass it to WDI */
9835 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
9836 pWdaParams->pWdaContext = pWDA;
9837 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
9838
Jeff Johnson295189b2012-06-20 16:38:30 -07009839 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009840 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009841 if(IS_WDI_STATUS_FAILURE(status))
9842 {
9843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9844 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
9845 vos_mem_free(pWdaParams->wdaMsgParam) ;
9846 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9847 vos_mem_free(pWdaParams) ;
9848 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009849 return CONVERT_WDI2VOS_STATUS(status) ;
9850}
Jeff Johnson295189b2012-06-20 16:38:30 -07009851/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009852 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009853 *
9854 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009855void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009856{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009857 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9858
Jeff Johnson295189b2012-06-20 16:38:30 -07009859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009860 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009861
9862 if(NULL == pWdaParams)
9863 {
9864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009865 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009866 VOS_ASSERT(0) ;
9867 return ;
9868 }
9869
9870 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9871 vos_mem_free(pWdaParams->wdaMsgParam);
9872 vos_mem_free(pWdaParams);
9873
Jeff Johnson295189b2012-06-20 16:38:30 -07009874 //print a msg, nothing else to do
9875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009876 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009877 return ;
9878}
Yue Ma7f44bbe2013-04-12 11:47:39 -07009879/*
9880 * FUNCTION: WDA_RemBeaconFilterReqCallback
9881 * Free memory.
9882 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
9883 */
9884void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
9885{
9886 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9887
9888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9889 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9890
9891 if(NULL == pWdaParams)
9892 {
9893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9894 "%s: pWdaParams received NULL", __func__);
9895 VOS_ASSERT(0);
9896 return;
9897 }
9898
9899 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9900 {
9901 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9902 vos_mem_free(pWdaParams->wdaMsgParam);
9903 vos_mem_free(pWdaParams);
9904 }
9905
9906 return;
9907}
Jeff Johnson295189b2012-06-20 16:38:30 -07009908 // TODO: PE does not have this feature for now implemented,
9909 // but the support for removing beacon filter exists between
9910 // HAL and FW. This function can be called whenever PE defines
9911 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -07009912/*
9913 * FUNCTION: WDA_RemBeaconFilterReq
9914 * Request to WDI to send the removal of beacon filtering related information.
9915 */
9916VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
9917 tRemBeaconFilterMsg* pBeaconFilterInfo)
9918{
9919 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009920 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009921 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
9922 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
9923 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009924 tWDA_ReqParams *pWdaParams ;
9925
Jeff Johnson295189b2012-06-20 16:38:30 -07009926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009927 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009928 if(NULL == wdiBeaconFilterInfo)
9929 {
9930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009931 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009932 VOS_ASSERT(0);
9933 return VOS_STATUS_E_NOMEM;
9934 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009935 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9936 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009937 {
9938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009939 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009940 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009941 vos_mem_free(wdiBeaconFilterInfo);
9942 vos_mem_free(pBeaconFilterInfo);
9943 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07009944 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009945
9946 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
9947 pBeaconFilterInfo->ucIeCount;
9948 //Fill structure with info contained in the ucRemIeId
9949 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
9950 pBeaconFilterInfo->ucRemIeId,
9951 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
9952 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
9953 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009954
9955 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009956 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07009957 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009958 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
9959
9960 pWdaParams->pWdaContext = pWDA;
9961
Jeff Johnson43971f52012-07-17 12:26:56 -07009962 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009963 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009964 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009965 {
9966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9967 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009968 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009969 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9970 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009971 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009972 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009973 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009974}
Jeff Johnson295189b2012-06-20 16:38:30 -07009975/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009976 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009977 *
9978 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009979void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009980{
9981 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009983 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009984 if(NULL == pWdaParams)
9985 {
9986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009987 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009988 VOS_ASSERT(0) ;
9989 return ;
9990 }
9991
9992 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9993 vos_mem_free(pWdaParams) ;
9994
Jeff Johnson295189b2012-06-20 16:38:30 -07009995 return ;
9996}
Jeff Johnson295189b2012-06-20 16:38:30 -07009997/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009998 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
9999 * Free memory.
10000 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
10001 */
10002void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
10003{
10004 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10005
10006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10007 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10008
10009 if(NULL == pWdaParams)
10010 {
10011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10012 "%s: pWdaParams received NULL", __func__);
10013 VOS_ASSERT(0);
10014 return;
10015 }
10016
10017 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10018 {
10019 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10020 vos_mem_free(pWdaParams);
10021 }
10022
10023 return;
10024}
10025/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010026 * FUNCTION: WDA_SetRSSIThresholdsReq
10027 * Request to WDI to set the RSSI thresholds (sta mode).
10028 */
10029VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
10030{
10031 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010032 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010033 tWDA_CbContext *pWDA = NULL ;
10034 v_PVOID_t pVosContext = NULL;
10035 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
10036 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
10037 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
10038 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010040 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010041 if(NULL == wdiRSSIThresholdsInfo)
10042 {
10043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010044 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010045 VOS_ASSERT(0);
10046 return VOS_STATUS_E_NOMEM;
10047 }
10048 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10049 if(NULL == pWdaParams)
10050 {
10051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010052 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010053 VOS_ASSERT(0);
10054 vos_mem_free(wdiRSSIThresholdsInfo);
10055 return VOS_STATUS_E_NOMEM;
10056 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010057 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -070010058 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
10059 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
10060 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -070010061 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
10062 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
10063 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -070010064 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
10065 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
10066 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010067 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
10068 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010069 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
10070 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
10071
Jeff Johnson295189b2012-06-20 16:38:30 -070010072 /* Store param pointer as passed in by caller */
10073 /* store Params pass it to WDI */
10074 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
10075 pWdaParams->pWdaContext = pWDA;
10076 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -070010077 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010078 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010079 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010080 {
10081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10082 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010083 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010084 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10085 vos_mem_free(pWdaParams) ;
10086 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010087 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010088
10089}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010090/*
Yue Madb90ac12013-04-04 13:39:13 -070010091 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010092 *
10093 */
Yue Madb90ac12013-04-04 13:39:13 -070010094void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010095{
10096 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10097
10098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010099 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010100 if(NULL == pWdaParams)
10101 {
10102 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010103 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010104 VOS_ASSERT(0) ;
10105 return ;
10106 }
10107
10108 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10109 vos_mem_free(pWdaParams->wdaMsgParam);
10110 vos_mem_free(pWdaParams) ;
10111
10112 //print a msg, nothing else to do
10113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -070010114 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010115 return ;
10116}
Jeff Johnson295189b2012-06-20 16:38:30 -070010117/*
Yue Madb90ac12013-04-04 13:39:13 -070010118 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -070010119 * Free memory.
10120 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -070010121 */
10122void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
10123{
10124 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10125
10126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10127 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10128
10129 if(NULL == pWdaParams)
10130 {
10131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10132 "%s: Invalid pWdaParams pointer", __func__);
10133 VOS_ASSERT(0);
10134 return;
10135 }
10136
10137 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10138 {
10139 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10140 vos_mem_free(pWdaParams->wdaMsgParam);
10141 vos_mem_free(pWdaParams);
10142 }
10143
10144 return;
10145}
10146/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010147 * FUNCTION: WDA_ProcessHostOffloadReq
10148 * Request to WDI to set the filter to minimize unnecessary host wakeup due
10149 * to broadcast traffic (sta mode).
10150 */
10151VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
10152 tSirHostOffloadReq *pHostOffloadParams)
10153{
10154 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010155 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010156 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
10157 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
10158 sizeof(WDI_HostOffloadReqParamsType)) ;
10159 tWDA_ReqParams *pWdaParams ;
10160
10161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010162 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -070010163
10164 if(NULL == wdiHostOffloadInfo)
10165 {
10166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010167 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010168 VOS_ASSERT(0);
10169 return VOS_STATUS_E_NOMEM;
10170 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010171 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10172 if(NULL == pWdaParams)
10173 {
10174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010175 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010176 VOS_ASSERT(0);
10177 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010178 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010179 return VOS_STATUS_E_NOMEM;
10180 }
10181
10182 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
10183 pHostOffloadParams->offloadType;
10184 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
10185 pHostOffloadParams->enableOrDisable;
10186
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010187 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
10188 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
10189
Jeff Johnson295189b2012-06-20 16:38:30 -070010190 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
10191 {
10192 case SIR_IPV4_ARP_REPLY_OFFLOAD:
10193 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
10194 pHostOffloadParams->params.hostIpv4Addr,
10195 4);
10196 break;
10197 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
10198 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
10199 pHostOffloadParams->params.hostIpv6Addr,
10200 16);
10201 break;
10202 case SIR_IPV6_NS_OFFLOAD:
10203 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
10204 pHostOffloadParams->params.hostIpv6Addr,
10205 16);
10206
10207#ifdef WLAN_NS_OFFLOAD
10208 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
10209 {
10210 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
10211 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
10212 16);
10213 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
10214 }
10215 else
10216 {
10217 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
10218 }
10219
10220 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
10221 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
10222 16);
10223 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
10224 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
10225 6);
10226
10227 //Only two are supported so let's go through them without a loop
10228 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
10229 {
10230 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
10231 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
10232 16);
10233 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
10234 }
10235 else
10236 {
10237 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
10238 }
10239
10240 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
10241 {
10242 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
10243 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
10244 16);
10245 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
10246 }
10247 else
10248 {
10249 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
10250 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +053010251 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
10252 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070010253 break;
10254#endif //WLAN_NS_OFFLOAD
10255 default:
10256 {
10257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10258 "No Handling for Offload Type %x in WDA "
10259 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
10260 //WDA_VOS_ASSERT(0) ;
10261 }
10262 }
Yue Madb90ac12013-04-04 13:39:13 -070010263 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
10264 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -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 = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010268 /* store Params pass it to WDI */
10269 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
10270 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010271
Jeff Johnson295189b2012-06-20 16:38:30 -070010272
Jeff Johnson43971f52012-07-17 12:26:56 -070010273 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -070010274 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, 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,
c_hpothu86feba52014-10-28 15:51:18 +053010279 "Failure in host offload REQ WDI API, free all the memory %d",
10280 wstatus);
Jeff Johnson43971f52012-07-17 12:26:56 -070010281 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010282 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10283 vos_mem_free(pWdaParams->wdaMsgParam);
10284 vos_mem_free(pWdaParams) ;
10285 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010286 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010287
10288}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010289/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010290 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010291 *
10292 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010293void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010294{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010295 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10296
Jeff Johnson295189b2012-06-20 16:38:30 -070010297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010298 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010299
10300 if(NULL == pWdaParams)
10301 {
10302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010303 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010304 VOS_ASSERT(0) ;
10305 return ;
10306 }
10307
10308 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10309 vos_mem_free(pWdaParams->wdaMsgParam);
10310 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -070010311
Jeff Johnson295189b2012-06-20 16:38:30 -070010312 //print a msg, nothing else to do
10313 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010314 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010315 return ;
10316}
Jeff Johnson295189b2012-06-20 16:38:30 -070010317/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010318 * FUNCTION: WDA_KeepAliveReqCallback
10319 * Free memory.
10320 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
10321 */
10322void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
10323{
10324 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10325
10326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10327 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10328
10329 if(NULL == pWdaParams)
10330 {
10331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10332 "%s: pWdaParams received NULL", __func__);
10333 VOS_ASSERT(0);
10334 return;
10335 }
10336
10337 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10338 {
10339 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10340 vos_mem_free(pWdaParams->wdaMsgParam);
10341 vos_mem_free(pWdaParams);
10342 }
10343
10344 return;
10345}
10346/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010347 * FUNCTION: WDA_ProcessKeepAliveReq
10348 * Request to WDI to send Keep Alive packets to minimize unnecessary host
10349 * wakeup due to broadcast traffic (sta mode).
10350 */
10351VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
10352 tSirKeepAliveReq *pKeepAliveParams)
10353{
10354 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010355 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010356 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
10357 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
10358 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010359 tWDA_ReqParams *pWdaParams;
10360
Jeff Johnson295189b2012-06-20 16:38:30 -070010361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010362 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010363 if(NULL == wdiKeepAliveInfo)
10364 {
10365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010366 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010367 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010368 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010369 return VOS_STATUS_E_NOMEM;
10370 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010371
10372 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10373 if(NULL == pWdaParams)
10374 {
10375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010376 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010377 VOS_ASSERT(0);
10378 vos_mem_free(wdiKeepAliveInfo);
10379 vos_mem_free(pKeepAliveParams);
10380 return VOS_STATUS_E_NOMEM;
10381 }
10382
Jeff Johnson295189b2012-06-20 16:38:30 -070010383 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
10384 pKeepAliveParams->packetType;
10385 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
10386 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010387
10388 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
10389 pKeepAliveParams->bssId,
10390 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010391
10392 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
10393 {
10394 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
10395 pKeepAliveParams->hostIpv4Addr,
10396 SIR_IPV4_ADDR_LEN);
10397 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
10398 pKeepAliveParams->destIpv4Addr,
10399 SIR_IPV4_ADDR_LEN);
10400 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
10401 pKeepAliveParams->destMacAddr,
10402 SIR_MAC_ADDR_LEN);
10403 }
10404 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
10405 {
10406 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
10407 SIR_IPV4_ADDR_LEN,
10408 0);
10409 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
10410 SIR_IPV4_ADDR_LEN,
10411 0);
10412 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
10413 SIR_MAC_ADDR_LEN,
10414 0);
10415 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010416 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
10417 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010418
Jeff Johnson295189b2012-06-20 16:38:30 -070010419 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010420 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010421 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010422 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
10423 pWdaParams->pWdaContext = pWDA;
10424
Jeff Johnson295189b2012-06-20 16:38:30 -070010425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
10426 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
10427 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
10428 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
10429 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
10430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
10431 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
10432 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
10433 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
10434 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
10435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10436 "WDA DMAC : %d:%d:%d:%d:%d:%d",
10437 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
10438 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
10439 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
10440 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
10441 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
10442 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
10443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10444 "TimePeriod %d PacketType %d",
10445 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
10446 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -070010447 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010448 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010449
Jeff Johnson43971f52012-07-17 12:26:56 -070010450 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010451 {
10452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10453 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010454 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010455 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10456 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070010457 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010458 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010459 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010460
10461}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010462/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010463 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010464 *
10465 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010466void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010467 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
10468 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010469{
10470 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010472 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010473 if(NULL == pWdaParams)
10474 {
10475 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010476 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010477 VOS_ASSERT(0) ;
10478 return ;
10479 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010480 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10481 vos_mem_free(pWdaParams->wdaMsgParam);
10482 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010483 return ;
10484}
Jeff Johnson295189b2012-06-20 16:38:30 -070010485/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010486 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
10487 * Free memory.
10488 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
10489 */
10490void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
10491{
10492 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10493
10494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10495 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10496
10497 if(NULL == pWdaParams)
10498 {
10499 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10500 "%s: pWdaParams received NULL", __func__);
10501 VOS_ASSERT(0);
10502 return;
10503 }
10504
10505 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10506 {
10507 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10508 vos_mem_free(pWdaParams->wdaMsgParam);
10509 vos_mem_free(pWdaParams);
10510 }
10511
10512 return;
10513}
10514
10515/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010516 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
10517 * Request to WDI to add WOWL Bcast pattern
10518 */
10519VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
10520 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
10521{
10522 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010523 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010524 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
10525 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
10526 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
10527 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010529 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010530 if(NULL == wdiWowlAddBcPtrnInfo)
10531 {
10532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010533 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010534 VOS_ASSERT(0);
10535 return VOS_STATUS_E_NOMEM;
10536 }
10537 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10538 if(NULL == pWdaParams)
10539 {
10540 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010541 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010542 VOS_ASSERT(0);
10543 vos_mem_free(wdiWowlAddBcPtrnInfo);
10544 return VOS_STATUS_E_NOMEM;
10545 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010546 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
10547 pWowlAddBcPtrnParams->ucPatternId;
10548 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
10549 pWowlAddBcPtrnParams->ucPatternByteOffset;
10550 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
10551 pWowlAddBcPtrnParams->ucPatternMaskSize;
10552 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
10553 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -070010554 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
10555 {
10556 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
10557 pWowlAddBcPtrnParams->ucPattern,
10558 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
10559 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
10560 pWowlAddBcPtrnParams->ucPatternMask,
10561 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
10562 }
10563 else
10564 {
10565 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
10566 pWowlAddBcPtrnParams->ucPattern,
10567 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10568 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
10569 pWowlAddBcPtrnParams->ucPatternMask,
10570 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10571
10572 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
10573 pWowlAddBcPtrnParams->ucPatternExt,
10574 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10575 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
10576 pWowlAddBcPtrnParams->ucPatternMaskExt,
10577 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10578 }
10579
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010580 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
10581 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
10582
Yue Ma7f44bbe2013-04-12 11:47:39 -070010583 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
10584 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010585 /* Store param pointer as passed in by caller */
10586 /* store Params pass it to WDI */
10587 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
10588 pWdaParams->pWdaContext = pWDA;
10589 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010590 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010591 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010592 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010593 {
10594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10595 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010596 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010597 vos_mem_free(pWdaParams->wdaMsgParam) ;
10598 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10599 vos_mem_free(pWdaParams) ;
10600 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010601 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010602
10603}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010604/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010605 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010606 *
10607 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010608void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010609 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
10610 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010611{
10612 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010614 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010615 if(NULL == pWdaParams)
10616 {
10617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010618 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010619 VOS_ASSERT(0) ;
10620 return ;
10621 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010622 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10623 vos_mem_free(pWdaParams->wdaMsgParam);
10624 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010625 return ;
10626}
Jeff Johnson295189b2012-06-20 16:38:30 -070010627/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010628 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
10629 * Free memory.
10630 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
10631 */
10632void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
10633{
10634 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10635
10636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10637 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10638
10639 if(NULL == pWdaParams)
10640 {
10641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10642 "%s: pWdaParams received NULL", __func__);
10643 VOS_ASSERT(0);
10644 return;
10645 }
10646
10647 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10648 {
10649 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10650 vos_mem_free(pWdaParams->wdaMsgParam);
10651 vos_mem_free(pWdaParams);
10652 }
10653
10654 return;
10655}
10656/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010657 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
10658 * Request to WDI to delete WOWL Bcast pattern
10659 */
10660VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
10661 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
10662{
10663 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010664 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010665 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
10666 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
10667 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
10668 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010670 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010671 if(NULL == wdiWowlDelBcPtrnInfo)
10672 {
10673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010674 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010675 VOS_ASSERT(0);
10676 return VOS_STATUS_E_NOMEM;
10677 }
10678 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10679 if(NULL == pWdaParams)
10680 {
10681 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010682 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010683 VOS_ASSERT(0);
10684 vos_mem_free(wdiWowlDelBcPtrnInfo);
10685 return VOS_STATUS_E_NOMEM;
10686 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010687 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
10688 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010689
10690 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
10691 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
10692
Yue Ma7f44bbe2013-04-12 11:47:39 -070010693 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
10694 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010695 /* Store param pointer as passed in by caller */
10696 /* store Params pass it to WDI */
10697 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
10698 pWdaParams->pWdaContext = pWDA;
10699 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010700 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010701 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010702 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010703 {
10704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10705 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010706 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010707 vos_mem_free(pWdaParams->wdaMsgParam) ;
10708 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10709 vos_mem_free(pWdaParams) ;
10710 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010711 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010712
10713}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010714/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010715 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010716 *
10717 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010718void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010719{
10720 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010721 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010722 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010724 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010725 if(NULL == pWdaParams)
10726 {
10727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010728 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010729 VOS_ASSERT(0) ;
10730 return ;
10731 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010732 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010733 if (NULL == pWDA)
10734 {
10735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10736 "%s:pWDA is NULL", __func__);
10737 VOS_ASSERT(0);
10738 return ;
10739 }
10740
Jeff Johnson295189b2012-06-20 16:38:30 -070010741 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
10742
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010743 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
10744
Jeff Johnson295189b2012-06-20 16:38:30 -070010745 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10746 vos_mem_free(pWdaParams) ;
10747
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010748 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010749 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -070010750 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010751 return ;
10752}
Jeff Johnson295189b2012-06-20 16:38:30 -070010753/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010754 * FUNCTION: WDA_WowlEnterReqCallback
10755 * Free memory and send WOWL Enter RSP back to PE.
10756 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
10757 */
10758void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
10759{
10760 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010761 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010762 tSirHalWowlEnterParams *pWowlEnterParams;
10763
10764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10765 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10766
10767 if(NULL == pWdaParams)
10768 {
10769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10770 "%s: pWdaParams received NULL", __func__);
10771 VOS_ASSERT(0);
10772 return;
10773 }
10774
10775 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010776 if (NULL == pWDA)
10777 {
10778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10779 "%s:pWDA is NULL", __func__);
10780 VOS_ASSERT(0);
10781 return ;
10782 }
10783
Yue Ma7f44bbe2013-04-12 11:47:39 -070010784 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
10785 pWowlEnterParams->status = wdiStatus;
10786
10787 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10788 {
10789 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10790 vos_mem_free(pWdaParams);
10791 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
10792 }
10793
10794 return;
10795}
10796/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010797 * FUNCTION: WDA_ProcessWowlEnterReq
10798 * Request to WDI to enter WOWL
10799 */
10800VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
10801 tSirHalWowlEnterParams *pWowlEnterParams)
10802{
10803 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010804 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010805 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
10806 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
10807 sizeof(WDI_WowlEnterReqParamsType)) ;
10808 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010810 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010811 if(NULL == wdiWowlEnterInfo)
10812 {
10813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010814 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010815 VOS_ASSERT(0);
10816 return VOS_STATUS_E_NOMEM;
10817 }
10818 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10819 if(NULL == pWdaParams)
10820 {
10821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010822 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010823 VOS_ASSERT(0);
10824 vos_mem_free(wdiWowlEnterInfo);
10825 return VOS_STATUS_E_NOMEM;
10826 }
Kumar Anandaca924e2013-07-22 14:35:34 -070010827
10828 vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
10829
Jeff Johnson295189b2012-06-20 16:38:30 -070010830 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
10831 pWowlEnterParams->magicPtrn,
10832 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010833 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
10834 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070010835 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
10836 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070010837 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
10838 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070010839 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
10840 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070010841 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
10842 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070010843 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
10844 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070010845 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
10846 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -070010847 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
10848 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -070010849#ifdef WLAN_WAKEUP_EVENTS
10850 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
10851 pWowlEnterParams->ucWoWEAPIDRequestEnable;
10852
10853 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
10854 pWowlEnterParams->ucWoWEAPOL4WayEnable;
10855
10856 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
10857 pWowlEnterParams->ucWowNetScanOffloadMatch;
10858
10859 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
10860 pWowlEnterParams->ucWowGTKRekeyError;
10861
10862 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
10863 pWowlEnterParams->ucWoWBSSConnLoss;
10864#endif // WLAN_WAKEUP_EVENTS
10865
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010866 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
10867 pWowlEnterParams->bssIdx;
10868
Yue Ma7f44bbe2013-04-12 11:47:39 -070010869 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
10870 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010871 /* Store param pointer as passed in by caller */
10872 /* store Params pass it to WDI */
10873 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
10874 pWdaParams->pWdaContext = pWDA;
10875 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010876 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010877 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010878 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010879 {
10880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10881 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010882 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010883 vos_mem_free(pWdaParams->wdaMsgParam) ;
10884 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10885 vos_mem_free(pWdaParams) ;
10886 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010887 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010888
10889}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010890/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010891 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010892 *
10893 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010894void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010895{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010896 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010897 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010898 tSirHalWowlExitParams *pWowlExitParams;
10899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010900 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -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__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010905 VOS_ASSERT(0) ;
10906 return ;
10907 }
10908 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010909 if (NULL == pWDA)
10910 {
10911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10912 "%s:pWDA is NULL", __func__);
10913 VOS_ASSERT(0);
10914 return ;
10915 }
10916
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010917 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
10918
10919 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010920 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010921
10922 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10923 vos_mem_free(pWdaParams) ;
10924
Jeff Johnson295189b2012-06-20 16:38:30 -070010925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010926 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010927 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010928 return ;
10929}
Jeff Johnson295189b2012-06-20 16:38:30 -070010930/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010931 * FUNCTION: WDA_WowlExitReqCallback
10932 * Free memory and send WOWL Exit RSP back to PE.
10933 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
10934 */
10935void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
10936{
10937 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010938 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010939 tSirHalWowlExitParams *pWowlExitParams;
10940
10941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10942 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10943
10944 if(NULL == pWdaParams)
10945 {
10946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10947 "%s: pWdaParams received NULL", __func__);
10948 VOS_ASSERT(0);
10949 return;
10950 }
10951
10952 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010953 if (NULL == pWDA)
10954 {
10955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10956 "%s:pWDA is NULL", __func__);
10957 VOS_ASSERT(0);
10958 return ;
10959 }
10960
Yue Ma7f44bbe2013-04-12 11:47:39 -070010961 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
10962 pWowlExitParams->status = wdiStatus;
10963
10964 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10965 {
10966 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10967 vos_mem_free(pWdaParams);
10968 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
10969 }
10970
10971 return;
10972}
10973/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010974 * FUNCTION: WDA_ProcessWowlExitReq
10975 * Request to WDI to add WOWL Bcast pattern
10976 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010977VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
10978 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010979{
10980 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010981 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010982 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
10983 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
10984 sizeof(WDI_WowlExitReqParamsType)) ;
10985 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010987 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010988 if(NULL == wdiWowlExitInfo)
10989 {
10990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010991 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010992 VOS_ASSERT(0);
10993 return VOS_STATUS_E_NOMEM;
10994 }
10995 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10996 if(NULL == pWdaParams)
10997 {
10998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010999 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011000 VOS_ASSERT(0);
11001 vos_mem_free(wdiWowlExitInfo);
11002 return VOS_STATUS_E_NOMEM;
11003 }
11004
11005 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
11006 pWowlExitParams->bssIdx;
11007
Yue Ma7f44bbe2013-04-12 11:47:39 -070011008 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
11009 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011010
11011 /* Store param pointer as passed in by caller */
11012 /* store Params pass it to WDI */
11013 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
11014 pWdaParams->pWdaContext = pWDA;
11015 pWdaParams->wdaMsgParam = pWowlExitParams;
11016
11017 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011018 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011019
Jeff Johnson43971f52012-07-17 12:26:56 -070011020 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011021 {
11022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11023 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011024 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011025 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11026 vos_mem_free(pWdaParams->wdaMsgParam);
11027 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011028 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011029 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011030}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011031/*
11032 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
11033 * Request to WDI to determine whether a given station is capable of
11034 * using HW-based frame translation
11035 */
11036v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
11037 tANI_U8 staIdx)
11038{
11039 return WDI_IsHwFrameTxTranslationCapable(staIdx);
11040}
Katya Nigam6201c3e2014-05-27 17:51:42 +053011041
11042/*
11043 * FUNCTION: WDA_IsSelfSTA
11044 * Request to WDI to determine whether a given STAID is self station
11045 * index.
11046 */
11047v_BOOL_t WDA_IsSelfSTA(v_PVOID_t pVosContext, tANI_U8 ucSTAIdx)
11048{
11049
11050 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
11051
Girish Gowli05cf44e2014-06-12 21:53:37 +053011052 if (NULL != pWDA)
11053 return WDI_IsSelfSTA(pWDA->pWdiContext,ucSTAIdx);
11054 else
11055 return VOS_TRUE;
Katya Nigam6201c3e2014-05-27 17:51:42 +053011056}
Jeff Johnson295189b2012-06-20 16:38:30 -070011057/*
11058 * FUNCTION: WDA_NvDownloadReqCallback
11059 * send NV Download RSP back to PE
11060 */
11061void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
11062 void* pUserData)
11063{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011064
11065 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011066 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011067
Jeff Johnson295189b2012-06-20 16:38:30 -070011068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011069 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011070
11071 if(NULL == pWdaParams)
11072 {
11073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011074 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011075 VOS_ASSERT(0) ;
11076 return ;
11077 }
11078
11079 pWDA = pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011080 if (NULL == pWDA)
11081 {
11082 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11083 "%s:pWDA is NULL", __func__);
11084 VOS_ASSERT(0);
11085 return ;
11086 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011087
Jeff Johnson295189b2012-06-20 16:38:30 -070011088 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011089 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11090 vos_mem_free(pWdaParams);
11091
Jeff Johnson295189b2012-06-20 16:38:30 -070011092 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070011093 return ;
11094}
Jeff Johnson295189b2012-06-20 16:38:30 -070011095/*
11096 * FUNCTION: WDA_ProcessNvDownloadReq
11097 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
11098 */
11099VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
11100{
11101 /* Initialize the local Variables*/
11102 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
11103 v_VOID_t *pNvBuffer=NULL;
11104 v_SIZE_t bufferSize = 0;
11105 WDI_Status status = WDI_STATUS_E_FAILURE;
11106 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011107 tWDA_ReqParams *pWdaParams ;
11108
Jeff Johnson295189b2012-06-20 16:38:30 -070011109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011110 "------> %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011111 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070011112 {
11113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011114 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011115 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070011116 return VOS_STATUS_E_FAILURE;
11117 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011118
Jeff Johnson295189b2012-06-20 16:38:30 -070011119 /* Get the NV structure base address and size from VOS */
Prasanna Kumarf6c94ae2013-04-11 20:05:21 -070011120 vos_nv_getNVEncodedBuffer(&pNvBuffer,&bufferSize);
11121
Jeff Johnson295189b2012-06-20 16:38:30 -070011122 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
11123 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011124 if(NULL == wdiNvDownloadReqParam)
11125 {
11126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011127 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011128 VOS_ASSERT(0);
11129 return VOS_STATUS_E_NOMEM;
11130 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011131 /* Copy Params to wdiNvDownloadReqParam*/
11132 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
11133 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011134
11135 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11136 if(NULL == pWdaParams)
11137 {
11138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011139 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011140 VOS_ASSERT(0);
11141 vos_mem_free(wdiNvDownloadReqParam);
11142 return VOS_STATUS_E_NOMEM;
11143 }
11144
Jeff Johnson295189b2012-06-20 16:38:30 -070011145 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011146 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
11147 pWdaParams->wdaMsgParam = NULL;
11148 pWdaParams->pWdaContext = pWDA;
11149
11150
Jeff Johnson295189b2012-06-20 16:38:30 -070011151 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011152
Jeff Johnson295189b2012-06-20 16:38:30 -070011153 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011154 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
11155
Jeff Johnson295189b2012-06-20 16:38:30 -070011156 if(IS_WDI_STATUS_FAILURE(status))
11157 {
11158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11159 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011160 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11161 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011162 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011163 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011164}
11165/*
11166 * FUNCTION: WDA_FlushAcReqCallback
11167 * send Flush AC RSP back to TL
11168 */
11169void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
11170{
11171 vos_msg_t wdaMsg = {0} ;
11172 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11173 tFlushACReq *pFlushACReqParams;
11174 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011176 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011177 if(NULL == pWdaParams)
11178 {
11179 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011180 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011181 VOS_ASSERT(0) ;
11182 return ;
11183 }
11184
11185 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
11186 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
11187 if(NULL == pFlushACRspParams)
11188 {
11189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011190 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011191 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070011192 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011193 return ;
11194 }
11195 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
11196 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
11197 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
11198 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
11199 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070011200 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011201 vos_mem_free(pWdaParams->wdaMsgParam) ;
11202 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11203 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011204 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
11205 wdaMsg.bodyptr = (void *)pFlushACRspParams;
11206 // POST message to TL
11207 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
11208
Jeff Johnson295189b2012-06-20 16:38:30 -070011209 return ;
11210}
Jeff Johnson295189b2012-06-20 16:38:30 -070011211/*
11212 * FUNCTION: WDA_ProcessFlushAcReq
11213 * Request to WDI to Update the DELBA REQ params.
11214 */
11215VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
11216 tFlushACReq *pFlushAcReqParams)
11217{
11218 WDI_Status status = WDI_STATUS_SUCCESS ;
11219 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
11220 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
11221 sizeof(WDI_FlushAcReqParamsType)) ;
11222 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011223 if(NULL == wdiFlushAcReqParam)
11224 {
11225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011226 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011227 VOS_ASSERT(0);
11228 return VOS_STATUS_E_NOMEM;
11229 }
11230 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11231 if(NULL == pWdaParams)
11232 {
11233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011234 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011235 VOS_ASSERT(0);
11236 vos_mem_free(wdiFlushAcReqParam);
11237 return VOS_STATUS_E_NOMEM;
11238 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011240 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011241 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
11242 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
11243 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
11244 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -070011245 /* Store Flush AC pointer, as this will be used for response */
11246 /* store Params pass it to WDI */
11247 pWdaParams->pWdaContext = pWDA;
11248 pWdaParams->wdaMsgParam = pFlushAcReqParams;
11249 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011250 status = WDI_FlushAcReq(wdiFlushAcReqParam,
11251 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011252 if(IS_WDI_STATUS_FAILURE(status))
11253 {
11254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11255 "Failure in Flush AC REQ Params WDI API, free all the memory " );
11256 vos_mem_free(pWdaParams->wdaMsgParam) ;
11257 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11258 vos_mem_free(pWdaParams) ;
11259 //TODO: respond to TL with failure
11260 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011261 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011262}
Jeff Johnson295189b2012-06-20 16:38:30 -070011263/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011264 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011265 *
11266 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011267void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011268{
11269 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011270 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070011271 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011272
11273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011274 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011275 if(NULL == pWdaParams)
11276 {
11277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011278 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011279 VOS_ASSERT(0) ;
11280 return ;
11281 }
11282 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011283 if (NULL == pWDA)
11284 {
11285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11286 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +053011287 vos_mem_free(pWdaParams->wdaMsgParam) ;
11288 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11289 vos_mem_free(pWdaParams) ;
11290
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011291 VOS_ASSERT(0);
11292 return ;
11293 }
11294
Jeff Johnson295189b2012-06-20 16:38:30 -070011295 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
11296 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
11297 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
11298 {
11299 pWDA->wdaAmpSessionOn = VOS_FALSE;
11300 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011301 vos_mem_free(pWdaParams->wdaMsgParam) ;
11302 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11303 vos_mem_free(pWdaParams) ;
11304 /*
11305 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
11306 * param here
11307 */
Jeff Johnson295189b2012-06-20 16:38:30 -070011308 return ;
11309}
Yue Ma7f44bbe2013-04-12 11:47:39 -070011310/*
11311 * FUNCTION: WDA_BtAmpEventReqCallback
11312 * Free memory.
11313 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
11314 */
11315void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
11316{
11317 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011318 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011319 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011320
Yue Ma7f44bbe2013-04-12 11:47:39 -070011321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11322 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11323
11324 if(NULL == pWdaParams)
11325 {
11326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11327 "%s: pWdaParams received NULL", __func__);
11328 VOS_ASSERT(0);
11329 return;
11330 }
11331
11332 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011333 if (NULL == pWDA)
11334 {
11335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11336 "%s:pWDA is NULL", __func__);
11337 VOS_ASSERT(0);
11338 return ;
11339 }
11340
Yue Ma7f44bbe2013-04-12 11:47:39 -070011341 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
11342
11343 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
11344 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
11345 {
11346 pWDA->wdaAmpSessionOn = VOS_FALSE;
11347 }
11348
11349 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11350 {
11351 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11352 vos_mem_free(pWdaParams->wdaMsgParam);
11353 vos_mem_free(pWdaParams);
11354 }
11355
11356 return;
11357}
Jeff Johnson295189b2012-06-20 16:38:30 -070011358/*
11359 * FUNCTION: WDA_ProcessBtAmpEventReq
11360 * Request to WDI to Update with BT AMP events.
11361 */
11362VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
11363 tSmeBtAmpEvent *pBtAmpEventParams)
11364{
11365 WDI_Status status = WDI_STATUS_SUCCESS ;
11366 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
11367 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
11368 sizeof(WDI_BtAmpEventParamsType)) ;
11369 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011371 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011372 if(NULL == wdiBtAmpEventParam)
11373 {
11374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011375 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011376 VOS_ASSERT(0);
11377 return VOS_STATUS_E_NOMEM;
11378 }
11379 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11380 if(NULL == pWdaParams)
11381 {
11382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011383 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011384 VOS_ASSERT(0);
11385 vos_mem_free(wdiBtAmpEventParam);
11386 return VOS_STATUS_E_NOMEM;
11387 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011388 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
11389 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011390 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
11391 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011392 /* Store BT AMP event pointer, as this will be used for response */
11393 /* store Params pass it to WDI */
11394 pWdaParams->pWdaContext = pWDA;
11395 pWdaParams->wdaMsgParam = pBtAmpEventParams;
11396 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011397 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011398 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011399 if(IS_WDI_STATUS_FAILURE(status))
11400 {
11401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11402 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
11403 vos_mem_free(pWdaParams->wdaMsgParam) ;
11404 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11405 vos_mem_free(pWdaParams) ;
11406 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011407 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
11408 {
11409 pWDA->wdaAmpSessionOn = VOS_TRUE;
11410 }
11411 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011412}
11413
Jeff Johnson295189b2012-06-20 16:38:30 -070011414/*
11415 * FUNCTION: WDA_FTMCommandReqCallback
11416 * Handle FTM CMD response came from HAL
11417 * Route responce to HDD FTM
11418 */
11419void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
11420 void *usrData)
11421{
11422 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011423 if((NULL == pWDA) || (NULL == ftmCmdRspData))
11424 {
11425 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053011426 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070011427 return;
11428 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011429 /* Release Current FTM Command Request */
11430 vos_mem_free(pWDA->wdaFTMCmdReq);
11431 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011432 /* Post FTM Responce to HDD FTM */
11433 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070011434 return;
11435}
Jeff Johnson295189b2012-06-20 16:38:30 -070011436/*
11437 * FUNCTION: WDA_ProcessFTMCommand
11438 * Send FTM command to WDI
11439 */
11440VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
11441 tPttMsgbuffer *pPTTFtmCmd)
11442{
11443 WDI_Status status = WDI_STATUS_SUCCESS;
11444 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011445 ftmCMDReq = (WDI_FTMCommandReqType *)
11446 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
11447 if(NULL == ftmCMDReq)
11448 {
11449 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11450 "WDA FTM Command buffer alloc fail");
11451 return VOS_STATUS_E_NOMEM;
11452 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011453 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
11454 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -070011455 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -070011456 /* Send command to WDI */
11457 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070011458 return status;
11459}
Jeff Johnsone7245742012-09-05 17:12:55 -070011460#ifdef FEATURE_OEM_DATA_SUPPORT
11461/*
11462 * FUNCTION: WDA_StartOemDataReqCallback
11463 *
11464 */
11465void WDA_StartOemDataReqCallback(
11466 WDI_oemDataRspParamsType *wdiOemDataRspParams,
11467 void* pUserData)
11468{
11469 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011470 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011471 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070011472 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011473
Jeff Johnsone7245742012-09-05 17:12:55 -070011474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011475 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011476
11477 if(NULL == pWdaParams)
11478 {
11479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011480 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011481 VOS_ASSERT(0) ;
11482 return ;
11483 }
11484 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
11485
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011486 if (NULL == pWDA)
Jeff Johnsone7245742012-09-05 17:12:55 -070011487 {
11488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011489 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011490 VOS_ASSERT(0);
11491 return ;
11492 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011493
Jeff Johnsone7245742012-09-05 17:12:55 -070011494 /*
11495 * Allocate memory for response params sent to PE
11496 */
11497 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
11498
11499 // Check if memory is allocated for OemdataMeasRsp Params.
11500 if(NULL == pOemDataRspParams)
11501 {
11502 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11503 "OEM DATA WDA callback alloc fail");
11504 VOS_ASSERT(0) ;
11505 return;
11506 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011507
Jeff Johnsone7245742012-09-05 17:12:55 -070011508 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011509 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11510 vos_mem_free(pWdaParams->wdaMsgParam);
11511 vos_mem_free(pWdaParams) ;
11512
Jeff Johnsone7245742012-09-05 17:12:55 -070011513 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080011514 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -070011515 * Also, here success always means that we have atleast one BSSID.
11516 */
11517 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
11518
11519 //enable Tx
11520 status = WDA_ResumeDataTx(pWDA);
11521 if(status != VOS_STATUS_SUCCESS)
11522 {
11523 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
11524 }
11525 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
11526 return ;
11527}
11528/*
11529 * FUNCTION: WDA_ProcessStartOemDataReq
11530 * Send Start Oem Data Req to WDI
11531 */
11532VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
11533 tStartOemDataReq *pOemDataReqParams)
11534{
11535 WDI_Status status = WDI_STATUS_SUCCESS;
11536 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011537 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -070011538
11539 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
11540
11541 if(NULL == wdiOemDataReqParams)
11542 {
11543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011544 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011545 VOS_ASSERT(0);
11546 return VOS_STATUS_E_NOMEM;
11547 }
11548
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011549 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
11550 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
11551 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
11552 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -070011553
11554 wdiOemDataReqParams->wdiReqStatusCB = NULL;
11555
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011556 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11557 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -070011558 {
11559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011560 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011561 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011562 vos_mem_free(pOemDataReqParams);
11563 VOS_ASSERT(0);
11564 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -070011565 }
Jeff Johnsone7245742012-09-05 17:12:55 -070011566
Bernald44a1ae2013-01-09 08:30:39 -080011567 pWdaParams->pWdaContext = (void*)pWDA;
11568 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
11569 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011570
11571 status = WDI_StartOemDataReq(wdiOemDataReqParams,
11572 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070011573
11574 if(IS_WDI_STATUS_FAILURE(status))
11575 {
11576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11577 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011578 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11579 vos_mem_free(pWdaParams->wdaMsgParam);
11580 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070011581 }
11582 return CONVERT_WDI2VOS_STATUS(status) ;
11583}
11584#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070011585/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011586 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011587 *
11588 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011589void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011590{
11591 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011593 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011594 if(NULL == pWdaParams)
11595 {
11596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011597 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011598 VOS_ASSERT(0) ;
11599 return ;
11600 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011601
11602 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11603 vos_mem_free(pWdaParams->wdaMsgParam);
11604 vos_mem_free(pWdaParams);
11605
11606 return ;
11607}
11608/*
11609 * FUNCTION: WDA_SetTxPerTrackingReqCallback
11610 * Free memory.
11611 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
11612 */
11613void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
11614{
11615 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11616
11617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11618 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11619
11620 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070011621 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070011622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11623 "%s: pWdaParams received NULL", __func__);
11624 VOS_ASSERT(0);
11625 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070011626 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011627
11628 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011629 {
11630 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -070011631 vos_mem_free(pWdaParams->wdaMsgParam);
11632 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011633 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011634
11635 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070011636}
Jeff Johnson295189b2012-06-20 16:38:30 -070011637#ifdef WLAN_FEATURE_GTK_OFFLOAD
11638/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011639 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011640 *
11641 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011642void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011643 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011644{
11645 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11646
11647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011648 "<------ %s " ,__func__);
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080011649 if(NULL == pWdaParams)
11650 {
11651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11652 "%s: pWdaParams received NULL", __func__);
11653 VOS_ASSERT(0);
11654 return;
11655 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011656
Jeff Johnson295189b2012-06-20 16:38:30 -070011657 vos_mem_free(pWdaParams->wdaMsgParam) ;
11658 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11659 vos_mem_free(pWdaParams) ;
11660
11661 //print a msg, nothing else to do
11662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011663 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011664
11665 return ;
11666}
Yue Ma7f44bbe2013-04-12 11:47:39 -070011667/*
11668 * FUNCTION: WDA_GTKOffloadReqCallback
11669 * Free memory.
11670 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
11671 */
11672void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
11673{
11674 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011675
Yue Ma7f44bbe2013-04-12 11:47:39 -070011676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11677 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11678
11679 if(NULL == pWdaParams)
11680 {
11681 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11682 "%s: pWdaParams received NULL", __func__);
11683 VOS_ASSERT(0);
11684 return;
11685 }
11686
11687 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11688 {
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053011689 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
11690 sizeof(WDI_GtkOffloadReqMsg));
11691 vos_mem_zero(pWdaParams->wdaMsgParam,
11692 sizeof(tSirGtkOffloadParams));
Yue Ma7f44bbe2013-04-12 11:47:39 -070011693 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11694 vos_mem_free(pWdaParams->wdaMsgParam);
11695 vos_mem_free(pWdaParams);
11696 }
11697
11698 return;
11699}
Jeff Johnson295189b2012-06-20 16:38:30 -070011700/*
11701 * FUNCTION: WDA_ProcessGTKOffloadReq
11702 * Request to WDI to set the filter to minimize unnecessary host wakeup due
11703 * to broadcast traffic (sta mode).
11704 */
11705VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
11706 tpSirGtkOffloadParams pGtkOffloadParams)
11707{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011708 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011709 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
11710 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
11711 sizeof(WDI_GtkOffloadReqMsg)) ;
11712 tWDA_ReqParams *pWdaParams ;
11713
11714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011715 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011716
11717 if(NULL == wdiGtkOffloadReqMsg)
11718 {
11719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011720 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011721 VOS_ASSERT(0);
11722 return VOS_STATUS_E_NOMEM;
11723 }
11724
11725 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11726 if(NULL == pWdaParams)
11727 {
11728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011729 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011730 VOS_ASSERT(0);
11731 vos_mem_free(wdiGtkOffloadReqMsg);
11732 return VOS_STATUS_E_NOMEM;
11733 }
11734
11735 //
11736 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
11737 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011738
11739 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011740 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011741
Jeff Johnson295189b2012-06-20 16:38:30 -070011742 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
11743 // Copy KCK
11744 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
11745 // Copy KEK
11746 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
11747 // Copy KeyReplayCounter
11748 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
11749 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
11750
Yue Ma7f44bbe2013-04-12 11:47:39 -070011751 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
11752 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011753
Jeff Johnson295189b2012-06-20 16:38:30 -070011754
11755 /* Store Params pass it to WDI */
11756 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
11757 pWdaParams->pWdaContext = pWDA;
11758 /* Store param pointer as passed in by caller */
11759 pWdaParams->wdaMsgParam = pGtkOffloadParams;
11760
Yue Ma7f44bbe2013-04-12 11:47:39 -070011761 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011762
11763 if(IS_WDI_STATUS_FAILURE(status))
11764 {
11765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11766 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053011767 vos_mem_zero(wdiGtkOffloadReqMsg, sizeof(WDI_GtkOffloadReqMsg));
11768 vos_mem_zero(pGtkOffloadParams, sizeof(tSirGtkOffloadParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070011769 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11770 vos_mem_free(pWdaParams->wdaMsgParam);
11771 vos_mem_free(pWdaParams);
11772 }
11773
11774 return CONVERT_WDI2VOS_STATUS(status) ;
11775}
11776
11777/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011778 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011779 *
11780 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011781void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011782 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011783{
11784 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11785 tWDA_CbContext *pWDA;
11786 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Nirav Shah374de6e2014-02-13 16:40:01 +053011787 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070011788 vos_msg_t vosMsg;
11789
11790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011791 "<------ %s " ,__func__);
Nirav Shah374de6e2014-02-13 16:40:01 +053011792
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080011793 if(NULL == pWdaParams)
11794 {
11795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11796 "%s: pWdaParams received NULL", __func__);
11797 VOS_ASSERT(0);
11798 return;
11799 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011800
Nirav Shah374de6e2014-02-13 16:40:01 +053011801 pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams));
11802 if(NULL == pGtkOffloadGetInfoRsp)
11803 {
11804 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11805 "%s: vos_mem_malloc failed ", __func__);
11806 VOS_ASSERT(0);
11807 return;
11808 }
11809
Jeff Johnson295189b2012-06-20 16:38:30 -070011810 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
11811 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
11812
11813 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
11814 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
11815
11816 /* Message Header */
11817 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
Kiran Kumar Lokerefdf42412013-07-17 17:40:58 -070011818 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011819
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011820 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
11821 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
11822 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
11823 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
11824 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070011825
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011826 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
11827 pwdiGtkOffloadGetInfoRsparams->bssId,
11828 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011829 /* VOS message wrapper */
11830 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
11831 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
11832 vosMsg.bodyval = 0;
11833
11834 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11835 {
11836 /* free the mem and return */
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053011837 vos_mem_zero(pGtkOffloadGetInfoRsp,
11838 sizeof(tSirGtkOffloadGetInfoRspParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070011839 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
11840 }
11841
11842 vos_mem_free(pWdaParams->wdaMsgParam) ;
11843 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11844 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011845
11846 return;
11847}
11848/*
11849 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
11850 * Free memory and send RSP back to SME.
11851 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
11852 */
11853void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
11854{
11855 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11856 vos_msg_t vosMsg;
11857
11858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11859 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11860
11861 if(NULL == pWdaParams)
11862 {
11863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11864 "%s: pWdaParams received NULL", __func__);
11865 VOS_ASSERT(0);
11866 return;
11867 }
11868
11869 /* VOS message wrapper */
11870 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
11871 vosMsg.bodyptr = NULL;
11872 vosMsg.bodyval = 0;
11873
11874 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11875 {
11876 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11877 vos_mem_free(pWdaParams->wdaMsgParam);
11878 vos_mem_free(pWdaParams);
11879 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
11880 }
11881
11882 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070011883}
11884#endif
11885
11886/*
11887 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
11888 * Request to WDI to set Tx Per Tracking configurations
11889 */
11890VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
11891{
11892 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011893 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011894 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
11895 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
11896 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
11897 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011899 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011900 if(NULL == pwdiSetTxPerTrackingReqParams)
11901 {
11902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011903 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011904 vos_mem_free(pTxPerTrackingParams);
11905 VOS_ASSERT(0);
11906 return VOS_STATUS_E_NOMEM;
11907 }
11908 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11909 if(NULL == pWdaParams)
11910 {
11911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011912 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011913 vos_mem_free(pwdiSetTxPerTrackingReqParams);
11914 vos_mem_free(pTxPerTrackingParams);
11915 VOS_ASSERT(0);
11916 return VOS_STATUS_E_NOMEM;
11917 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011918 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
11919 pTxPerTrackingParams->ucTxPerTrackingEnable;
11920 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
11921 pTxPerTrackingParams->ucTxPerTrackingPeriod;
11922 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
11923 pTxPerTrackingParams->ucTxPerTrackingRatio;
11924 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
11925 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011926 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
11927 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011928 /* Store param pointer as passed in by caller */
11929 /* store Params pass it to WDI
11930 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
11931 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
11932 pWdaParams->pWdaContext = pWDA;
11933 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070011934 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011935 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011936 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011937 {
11938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11939 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011940 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011941 vos_mem_free(pWdaParams->wdaMsgParam) ;
11942 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11943 vos_mem_free(pWdaParams) ;
11944 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011945 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011946
11947}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011948/*
11949 * FUNCTION: WDA_HALDumpCmdCallback
11950 * Send the VOS complete .
11951 */
11952void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
11953 void* pUserData)
11954{
11955 tANI_U8 *buffer = NULL;
11956 tWDA_CbContext *pWDA = NULL;
Siddharth Bhal68115602015-01-18 20:44:55 +053011957 tWDA_HalDumpReqParams *pWdaParams = (tWDA_HalDumpReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011958 if(NULL == pWdaParams)
11959 {
11960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011961 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011962 VOS_ASSERT(0) ;
11963 return ;
11964 }
11965
11966 pWDA = pWdaParams->pWdaContext;
11967 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011968 if(wdiRspParams->usBufferLen > 0)
11969 {
11970 /*Copy the Resp data to UMAC supplied buffer*/
11971 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
11972 }
Siddharth Bhal68115602015-01-18 20:44:55 +053011973
11974 if (!pWdaParams->wdaHALDumpAsync)
11975 {/* Indicate VOSS about the start complete */
11976 vos_WDAComplete_cback(pWDA->pVosContext);
11977 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011978 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11979 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011980 return ;
11981}
11982
Jeff Johnson295189b2012-06-20 16:38:30 -070011983/*
11984 * FUNCTION: WDA_ProcessHALDumpCmdReq
11985 * Send Dump command to WDI
11986 */
11987VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
11988 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
Siddharth Bhal68115602015-01-18 20:44:55 +053011989 tANI_U32 arg4, tANI_U8 *pBuffer, wpt_boolean async)
Jeff Johnson295189b2012-06-20 16:38:30 -070011990{
11991 WDI_Status status = WDI_STATUS_SUCCESS;
11992 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
11993 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
Siddharth Bhal68115602015-01-18 20:44:55 +053011994 tWDA_HalDumpReqParams *pWdaParams ;
11995
Jeff Johnson295189b2012-06-20 16:38:30 -070011996 pVosContextType pVosContext = NULL;
11997 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011998 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
11999 (void *)pMac);
Katya Nigame4bafe02014-02-28 15:37:57 +053012000 if(pVosContext)
12001 {
12002 if (pVosContext->isLogpInProgress)
12003 {
12004 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
12005 "%s:LOGP in Progress. Ignore!!!", __func__);
12006 return VOS_STATUS_E_BUSY;
12007 }
12008 }
12009 else
12010 {
12011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12012 "%s: VOS Context Null", __func__);
12013 return VOS_STATUS_E_RESOURCES;
12014 }
12015
Siddharth Bhal68115602015-01-18 20:44:55 +053012016 if (NULL == pVosContext->pWDAContext)
12017 {
12018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12019 "%s: WDA Context Null", __func__);
12020 return VOS_STATUS_E_RESOURCES;
12021 }
12022 pWdaParams = (tWDA_HalDumpReqParams *)vos_mem_malloc(sizeof(tWDA_HalDumpReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012023 if(NULL == pWdaParams)
12024 {
12025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012026 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012027 return VOS_STATUS_E_NOMEM;
12028 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012029 /* Allocate memory WDI request structure*/
12030 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
12031 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
12032 if(NULL == wdiHALDumpCmdReqParam)
12033 {
12034 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12035 "WDA HAL DUMP Command buffer alloc fail");
12036 vos_mem_free(pWdaParams);
12037 return WDI_STATUS_E_FAILURE;
12038 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012039 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070012040 /* Extract the arguments */
12041 wdiHalDumpCmdInfo->command = cmd;
12042 wdiHalDumpCmdInfo->argument1 = arg1;
12043 wdiHalDumpCmdInfo->argument2 = arg2;
12044 wdiHalDumpCmdInfo->argument3 = arg3;
12045 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070012046 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012047 pWdaParams->pWdaContext = pVosContext->pWDAContext;
Siddharth Bhal68115602015-01-18 20:44:55 +053012048 pWdaParams->wdaHALDumpAsync = async;
Jeff Johnson295189b2012-06-20 16:38:30 -070012049
12050 /* Response message will be passed through the buffer */
12051 pWdaParams->wdaMsgParam = (void *)pBuffer;
12052
12053 /* store Params pass it to WDI */
12054 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012055 /* Send command to WDI */
Siddharth Bhal68115602015-01-18 20:44:55 +053012056 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback,
12057 pWdaParams);
12058 /* For Sync event only wait for rsp until completion of wdaCompleteEvent*/
12059 if (!async)
Jeff Johnson295189b2012-06-20 16:38:30 -070012060 {
Siddharth Bhal68115602015-01-18 20:44:55 +053012061 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent),
12062 WDA_DUMPCMD_WAIT_TIMEOUT );
12063 if ( vStatus != VOS_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -070012064 {
Siddharth Bhal68115602015-01-18 20:44:55 +053012065 if ( vStatus == VOS_STATUS_E_TIMEOUT )
12066 {
12067 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
12068 "%s: Timeout occurred before WDA_HALDUMP complete",__func__);
12069 }
12070 else
12071 {
12072 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
12073 "%s: WDA_HALDUMP reporting other error",__func__);
12074 }
12075 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070012076 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012077 }
12078 return status;
12079}
Jeff Johnson295189b2012-06-20 16:38:30 -070012080#ifdef WLAN_FEATURE_GTK_OFFLOAD
12081/*
12082 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
12083 * Request to WDI to get GTK Offload Information
12084 */
12085VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
12086 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
12087{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053012088 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012089 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
12090 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
12091 tWDA_ReqParams *pWdaParams ;
12092
12093 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
12094 {
12095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012096 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012097 VOS_ASSERT(0);
12098 return VOS_STATUS_E_NOMEM;
12099 }
12100
12101 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12102 if(NULL == pWdaParams)
12103 {
12104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012105 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012106 VOS_ASSERT(0);
12107 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
12108 return VOS_STATUS_E_NOMEM;
12109 }
12110
Yue Ma7f44bbe2013-04-12 11:47:39 -070012111 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
12112 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012113
Jeff Johnson295189b2012-06-20 16:38:30 -070012114 /* Store Params pass it to WDI */
12115 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
12116 pWdaParams->pWdaContext = pWDA;
12117 /* Store param pointer as passed in by caller */
12118 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
12119
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012120 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053012121 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012122
Yue Ma7f44bbe2013-04-12 11:47:39 -070012123 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012124
12125 if(IS_WDI_STATUS_FAILURE(status))
12126 {
12127 /* failure returned by WDI API */
12128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12129 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
12130 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12131 vos_mem_free(pWdaParams) ;
12132 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
12133 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
12134 }
12135
12136 return CONVERT_WDI2VOS_STATUS(status) ;
12137}
12138#endif // WLAN_FEATURE_GTK_OFFLOAD
12139
12140/*
Yue Mab9c86f42013-08-14 15:59:08 -070012141 * FUNCTION: WDA_ProcessAddPeriodicTxPtrnInd
12142 *
12143 */
12144VOS_STATUS WDA_ProcessAddPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
12145 tSirAddPeriodicTxPtrn *pAddPeriodicTxPtrnParams)
12146{
12147 WDI_Status wdiStatus;
12148 WDI_AddPeriodicTxPtrnParamsType *addPeriodicTxPtrnParams;
12149
12150 addPeriodicTxPtrnParams =
12151 vos_mem_malloc(sizeof(WDI_AddPeriodicTxPtrnParamsType));
12152
12153 if (NULL == addPeriodicTxPtrnParams)
12154 {
12155 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12156 "%s: Not able to allocate memory for addPeriodicTxPtrnParams!",
12157 __func__);
12158
12159 return VOS_STATUS_E_NOMEM;
12160 }
12161
12162 vos_mem_copy(&(addPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams),
12163 pAddPeriodicTxPtrnParams, sizeof(tSirAddPeriodicTxPtrn));
12164
12165 addPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
12166 addPeriodicTxPtrnParams->pUserData = pWDA;
12167
12168 wdiStatus = WDI_AddPeriodicTxPtrnInd(addPeriodicTxPtrnParams);
12169
12170 if (WDI_STATUS_PENDING == wdiStatus)
12171 {
12172 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12173 "Pending received for %s:%d", __func__, __LINE__ );
12174 }
12175 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12176 {
12177 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12178 "Failure in %s:%d", __func__, __LINE__ );
12179 }
12180
12181 vos_mem_free(addPeriodicTxPtrnParams);
12182
12183 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12184}
12185
12186/*
12187 * FUNCTION: WDA_ProcessDelPeriodicTxPtrnInd
12188 *
12189 */
12190VOS_STATUS WDA_ProcessDelPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
12191 tSirDelPeriodicTxPtrn *pDelPeriodicTxPtrnParams)
12192{
12193 WDI_Status wdiStatus;
12194 WDI_DelPeriodicTxPtrnParamsType *delPeriodicTxPtrnParams;
12195
12196 delPeriodicTxPtrnParams =
12197 vos_mem_malloc(sizeof(WDI_DelPeriodicTxPtrnParamsType));
12198
12199 if (NULL == delPeriodicTxPtrnParams)
12200 {
12201 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12202 "%s: Not able to allocate memory for delPeriodicTxPtrnParams!",
12203 __func__);
12204
12205 return VOS_STATUS_E_NOMEM;
12206 }
12207
12208 vos_mem_copy(&(delPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams),
12209 pDelPeriodicTxPtrnParams, sizeof(tSirDelPeriodicTxPtrn));
12210
12211 delPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
12212 delPeriodicTxPtrnParams->pUserData = pWDA;
12213
12214 wdiStatus = WDI_DelPeriodicTxPtrnInd(delPeriodicTxPtrnParams);
12215
12216 if (WDI_STATUS_PENDING == wdiStatus)
12217 {
12218 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12219 "Pending received for %s:%d", __func__, __LINE__ );
12220 }
12221 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12222 {
12223 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12224 "Failure in %s:%d", __func__, __LINE__ );
12225 }
12226
12227 vos_mem_free(delPeriodicTxPtrnParams);
12228
12229 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12230}
12231
Rajeev79dbe4c2013-10-05 11:03:42 +053012232#ifdef FEATURE_WLAN_BATCH_SCAN
12233/*
12234 * FUNCTION: WDA_ProcessStopBatchScanInd
12235 *
12236 * DESCRIPTION: This function sends stop batch scan inidcation message to WDI
12237 *
12238 * PARAM:
12239 * pWDA: pointer to WDA context
12240 * pReq: pointer to stop batch scan request
12241 */
12242VOS_STATUS WDA_ProcessStopBatchScanInd(tWDA_CbContext *pWDA,
12243 tSirStopBatchScanInd *pReq)
12244{
12245 WDI_Status wdiStatus;
12246 WDI_StopBatchScanIndType wdiReq;
12247
12248 wdiReq.param = pReq->param;
12249
12250 wdiStatus = WDI_StopBatchScanInd(&wdiReq);
12251
12252 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12253 {
12254 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12255 "Stop batch scan ind failed %s:%d", __func__, wdiStatus);
12256 }
12257
12258 vos_mem_free(pReq);
12259
12260 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12261}
12262/*==========================================================================
12263 FUNCTION WDA_ProcessTriggerBatchScanResultInd
12264
12265 DESCRIPTION
12266 API to pull batch scan result from FW
12267
12268 PARAMETERS
12269 pWDA: Pointer to WDA context
12270 pGetBatchScanReq: Pointer to get batch scan result indication
12271
12272 RETURN VALUE
12273 NONE
12274
12275===========================================================================*/
12276VOS_STATUS WDA_ProcessTriggerBatchScanResultInd(tWDA_CbContext *pWDA,
12277 tSirTriggerBatchScanResultInd *pReq)
12278{
12279 WDI_Status wdiStatus;
12280 WDI_TriggerBatchScanResultIndType wdiReq;
12281
12282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12283 "------> %s " ,__func__);
12284
12285 wdiReq.param = pReq->param;
12286
12287 wdiStatus = WDI_TriggerBatchScanResultInd(&wdiReq);
12288
12289 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12290 {
12291 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12292 "Trigger batch scan result ind failed %s:%d",
12293 __func__, wdiStatus);
12294 }
12295
12296 vos_mem_free(pReq);
12297
12298 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12299}
12300
12301/*==========================================================================
12302 FUNCTION WDA_SetBatchScanRespCallback
12303
12304 DESCRIPTION
12305 API to process set batch scan response from FW
12306
12307 PARAMETERS
12308 pRsp: Pointer to set batch scan response
12309 pUserData: Pointer to user data
12310
12311 RETURN VALUE
12312 NONE
12313
12314===========================================================================*/
12315void WDA_SetBatchScanRespCallback
12316(
12317 WDI_SetBatchScanRspType *pRsp,
12318 void* pUserData
12319)
12320{
12321 tSirSetBatchScanRsp *pHddSetBatchScanRsp;
12322 tpAniSirGlobal pMac;
12323 void *pCallbackContext;
12324 tWDA_CbContext *pWDA = NULL ;
12325 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12326
12327
12328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12329 "<------ %s " ,__func__);
12330 if (NULL == pWdaParams)
12331 {
12332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12333 "%s: pWdaParams received NULL", __func__);
12334 VOS_ASSERT(0) ;
12335 return ;
12336 }
12337
12338 /*extract WDA context*/
12339 pWDA = pWdaParams->pWdaContext;
12340 if (NULL == pWDA)
12341 {
12342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12343 "%s:pWDA is NULL can't invole HDD callback",
12344 __func__);
12345 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12346 vos_mem_free(pWdaParams->wdaMsgParam);
12347 vos_mem_free(pWdaParams);
12348 VOS_ASSERT(0);
12349 return;
12350 }
12351
12352 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12353 vos_mem_free(pWdaParams->wdaMsgParam);
12354 vos_mem_free(pWdaParams);
12355
12356 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
12357 if (NULL == pMac)
12358 {
12359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12360 "%s:pMac is NULL", __func__);
12361 VOS_ASSERT(0);
12362 return;
12363 }
12364
12365 pHddSetBatchScanRsp =
12366 (tSirSetBatchScanRsp *)vos_mem_malloc(sizeof(tSirSetBatchScanRsp));
12367 if (NULL == pHddSetBatchScanRsp)
12368 {
12369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12370 "%s: VOS MEM Alloc Failure can't invoke HDD callback", __func__);
12371 VOS_ASSERT(0);
12372 return;
12373 }
12374
12375 pHddSetBatchScanRsp->nScansToBatch = pRsp->nScansToBatch;
12376
12377 pCallbackContext = pMac->pmc.setBatchScanReqCallbackContext;
12378 /*call hdd callback with set batch scan response data*/
12379 if(pMac->pmc.setBatchScanReqCallback)
12380 {
12381 pMac->pmc.setBatchScanReqCallback(pCallbackContext, pHddSetBatchScanRsp);
12382 }
12383 else
12384 {
12385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12386 "%s:HDD callback is null", __func__);
12387 VOS_ASSERT(0);
12388 }
12389
12390 vos_mem_free(pHddSetBatchScanRsp);
12391 return ;
12392}
12393
12394/*==========================================================================
12395 FUNCTION WDA_ProcessSetBatchScanReq
12396
12397 DESCRIPTION
12398 API to send set batch scan request to WDI
12399
12400 PARAMETERS
12401 pWDA: Pointer to WDA context
12402 pSetBatchScanReq: Pointer to set batch scan req
12403
12404 RETURN VALUE
12405 NONE
12406
12407===========================================================================*/
12408VOS_STATUS WDA_ProcessSetBatchScanReq(tWDA_CbContext *pWDA,
12409 tSirSetBatchScanReq *pSetBatchScanReq)
12410{
12411 WDI_Status status;
12412 tWDA_ReqParams *pWdaParams ;
12413 WDI_SetBatchScanReqType *pWdiSetBatchScanReq;
12414
12415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12416 "------> %s " ,__func__);
12417
12418 pWdiSetBatchScanReq =
12419 (WDI_SetBatchScanReqType *)vos_mem_malloc(sizeof(WDI_SetBatchScanReqType));
12420 if (NULL == pWdiSetBatchScanReq)
12421 {
12422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12423 "%s: VOS MEM Alloc Failure", __func__);
12424 vos_mem_free(pSetBatchScanReq);
12425 VOS_ASSERT(0);
12426 return VOS_STATUS_E_NOMEM;
12427 }
12428
12429 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
12430 if (NULL == pWdaParams)
12431 {
12432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12433 "%s: VOS MEM Alloc Failure", __func__);
12434 VOS_ASSERT(0);
12435 vos_mem_free(pSetBatchScanReq);
12436 vos_mem_free(pWdiSetBatchScanReq);
12437 return VOS_STATUS_E_NOMEM;
12438 }
12439
12440 pWdiSetBatchScanReq->scanFrequency = pSetBatchScanReq->scanFrequency;
12441 pWdiSetBatchScanReq->numberOfScansToBatch =
12442 pSetBatchScanReq->numberOfScansToBatch;
12443 pWdiSetBatchScanReq->bestNetwork = pSetBatchScanReq->bestNetwork;
12444 pWdiSetBatchScanReq->rfBand = pSetBatchScanReq->rfBand;
12445 pWdiSetBatchScanReq->rtt = pSetBatchScanReq->rtt;
12446
12447 pWdaParams->wdaWdiApiMsgParam = pWdiSetBatchScanReq;
12448 pWdaParams->pWdaContext = pWDA;
12449 pWdaParams->wdaMsgParam = pSetBatchScanReq;
12450
12451 status = WDI_SetBatchScanReq(pWdiSetBatchScanReq, pWdaParams,
12452 (WDI_SetBatchScanCb)WDA_SetBatchScanRespCallback);
12453 if (IS_WDI_STATUS_FAILURE(status))
12454 {
12455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12456 "Failure in Set Batch Scan REQ WDI API, free all the memory " );
12457 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12458 vos_mem_free(pWdaParams->wdaMsgParam);
12459 vos_mem_free(pWdaParams);
12460 }
12461 return CONVERT_WDI2VOS_STATUS(status);
12462}
12463
12464#endif
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053012465/*
12466 * FUNCTION: WDA_ProcessHT40OBSSScanInd
12467 *
12468 * DESCRIPTION: This function sends start/update OBSS scan
12469 * inidcation message to WDI
12470 *
12471 * PARAM:
12472 * pWDA: pointer to WDA context
12473 * pReq: pointer to start OBSS scan request
12474 */
12475VOS_STATUS WDA_ProcessHT40OBSSScanInd(tWDA_CbContext *pWDA,
12476 tSirHT40OBSSScanInd *pReq)
12477{
12478 WDI_Status status;
12479 WDI_HT40ObssScanParamsType wdiOBSSScanParams;
12480 WDI_HT40ObssScanIndType *pWdiOBSSScanInd;
Rajeev79dbe4c2013-10-05 11:03:42 +053012481
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053012482 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12483 "------> %s " ,__func__);
12484 wdiOBSSScanParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
12485 wdiOBSSScanParams.pUserData = pWDA;
12486
12487 pWdiOBSSScanInd = &(wdiOBSSScanParams.wdiHT40ObssScanParam);
12488 pWdiOBSSScanInd->cmdType = pReq->cmdType;
12489 pWdiOBSSScanInd->scanType = pReq->scanType;
12490 pWdiOBSSScanInd->OBSSScanActiveDwellTime =
12491 pReq->OBSSScanActiveDwellTime;
12492 pWdiOBSSScanInd->OBSSScanPassiveDwellTime =
12493 pReq->OBSSScanPassiveDwellTime;
12494 pWdiOBSSScanInd->BSSChannelWidthTriggerScanInterval =
12495 pReq->BSSChannelWidthTriggerScanInterval;
12496 pWdiOBSSScanInd->BSSWidthChannelTransitionDelayFactor =
12497 pReq->BSSWidthChannelTransitionDelayFactor;
12498 pWdiOBSSScanInd->OBSSScanActiveTotalPerChannel =
12499 pReq->OBSSScanActiveTotalPerChannel;
12500 pWdiOBSSScanInd->OBSSScanPassiveTotalPerChannel =
12501 pReq->OBSSScanPassiveTotalPerChannel;
12502 pWdiOBSSScanInd->OBSSScanActivityThreshold =
12503 pReq->OBSSScanActivityThreshold;
12504 pWdiOBSSScanInd->channelCount = pReq->channelCount;
12505 vos_mem_copy(pWdiOBSSScanInd->channels,
12506 pReq->channels,
12507 pReq->channelCount);
12508 pWdiOBSSScanInd->selfStaIdx = pReq->selfStaIdx;
12509 pWdiOBSSScanInd->fortyMHZIntolerent = pReq->fortyMHZIntolerent;
12510 pWdiOBSSScanInd->bssIdx = pReq->bssIdx;
12511 pWdiOBSSScanInd->currentOperatingClass = pReq->currentOperatingClass;
12512 pWdiOBSSScanInd->ieFieldLen = pReq->ieFieldLen;
12513
12514 vos_mem_copy(pWdiOBSSScanInd->ieField,
12515 pReq->ieField,
12516 pReq->ieFieldLen);
12517
12518 status = WDI_HT40OBSSScanInd(&wdiOBSSScanParams);
12519 if (WDI_STATUS_PENDING == status)
12520 {
12521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12522 "Pending received for %s:%d ",__func__,__LINE__ );
12523 }
12524 else if (WDI_STATUS_SUCCESS_SYNC != status)
12525 {
12526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12527 "Failure in %s:%d ",__func__,__LINE__ );
12528 }
12529 return CONVERT_WDI2VOS_STATUS(status) ;
12530}
12531/*
12532 * FUNCTION: WDA_ProcessHT40OBSSStopScanInd
12533 *
12534 * DESCRIPTION: This function sends stop OBSS scan inidcation message to WDI
12535 *
12536 * PARAM:
12537 * pWDA: pointer to WDA context
12538 * pReq: pointer to stop batch scan request
12539 */
12540VOS_STATUS WDA_ProcessHT40OBSSStopScanInd(tWDA_CbContext *pWDA,
12541 tANI_U8 *bssIdx)
12542{
12543 WDI_Status status;
12544
12545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12546 "------> %s " ,__func__);
12547
12548 status = WDI_HT40OBSSStopScanInd(*bssIdx);
12549 if (WDI_STATUS_PENDING == status)
12550 {
12551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12552 "Pending received for %s:%d ",__func__,__LINE__ );
12553 }
12554 else if (WDI_STATUS_SUCCESS_SYNC != status)
12555 {
12556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12557 "Failure in %s:%d ",__func__,__LINE__ );
12558 }
12559 return CONVERT_WDI2VOS_STATUS(status) ;
12560}
Yue Mab9c86f42013-08-14 15:59:08 -070012561/*
Chittajit Mitraf5413a42013-10-18 14:20:08 -070012562 * FUNCTION: WDA_ProcessRateUpdateInd
12563 *
12564 */
12565VOS_STATUS WDA_ProcessRateUpdateInd(tWDA_CbContext *pWDA,
12566 tSirRateUpdateInd *pRateUpdateParams)
12567{
12568 WDI_Status wdiStatus;
12569 WDI_RateUpdateIndParams rateUpdateParams;
12570
12571 vos_mem_copy(rateUpdateParams.bssid,
12572 pRateUpdateParams->bssid, sizeof(tSirMacAddr));
12573
12574 rateUpdateParams.ucastDataRateTxFlag =
12575 pRateUpdateParams->ucastDataRateTxFlag;
12576 rateUpdateParams.reliableMcastDataRateTxFlag =
12577 pRateUpdateParams->reliableMcastDataRateTxFlag;
12578 rateUpdateParams.mcastDataRate24GHzTxFlag =
12579 pRateUpdateParams->mcastDataRate24GHzTxFlag;
12580 rateUpdateParams.mcastDataRate5GHzTxFlag =
12581 pRateUpdateParams->mcastDataRate5GHzTxFlag;
12582
12583 rateUpdateParams.ucastDataRate = pRateUpdateParams->ucastDataRate;
12584 rateUpdateParams.reliableMcastDataRate =
12585 pRateUpdateParams->reliableMcastDataRate;
12586 rateUpdateParams.mcastDataRate24GHz = pRateUpdateParams->mcastDataRate24GHz;
12587 rateUpdateParams.mcastDataRate5GHz = pRateUpdateParams->mcastDataRate5GHz;
12588
12589 rateUpdateParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
12590 rateUpdateParams.pUserData = pWDA;
12591
12592 wdiStatus = WDI_RateUpdateInd(&rateUpdateParams);
12593
12594 if (WDI_STATUS_PENDING == wdiStatus)
12595 {
12596 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12597 "Pending received for %s:%d", __func__, __LINE__ );
12598 }
12599 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12600 {
12601 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12602 "Failure in %s:%d", __func__, __LINE__ );
12603 }
12604
12605 vos_mem_free(pRateUpdateParams);
12606
12607 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12608}
12609
12610/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012611 * -------------------------------------------------------------------------
12612 * DATA interface with WDI for Mgmt Frames
12613 * -------------------------------------------------------------------------
12614 */
Jeff Johnson295189b2012-06-20 16:38:30 -070012615/*
12616 * FUNCTION: WDA_TxComplete
12617 * Callback function for the WDA_TxPacket
12618 */
12619VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
12620 VOS_STATUS status )
12621{
12622
12623 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
12624 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012625 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012626
Mihir Shete63341222015-03-24 15:39:18 +053012627 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Enter:%s", __func__);
12628
Jeff Johnson295189b2012-06-20 16:38:30 -070012629 if(NULL == wdaContext)
12630 {
12631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12632 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012633 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012634 VOS_ASSERT(0);
Sushant Kaushik8355d202014-12-17 16:48:10 +053012635 vos_pkt_return_packet(pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070012636 return VOS_STATUS_E_FAILURE;
12637 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012638
12639 /*Check if frame was timed out or not*/
12640 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
12641 (v_PVOID_t)&uUserData);
12642
12643 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
12644 {
12645 /*Discard frame - no further processing is needed*/
Mihir Shete63341222015-03-24 15:39:18 +053012646 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
12647 "%s: MGMT Frame Tx timed out",
12648 __func__);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012649 vos_pkt_return_packet(pData);
12650 return VOS_STATUS_SUCCESS;
12651 }
12652
Jeff Johnson295189b2012-06-20 16:38:30 -070012653 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
12654 if( NULL!=wdaContext->pTxCbFunc)
12655 {
12656 /*check if packet is freed already*/
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053012657 if(vos_atomic_set((uintptr_t*)&wdaContext->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED) == (uintptr_t)pData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012658 {
12659 wdaContext->pTxCbFunc(pMac, pData);
12660 }
12661 else
12662 {
12663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053012664 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012665 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070012666 //Return from here since we reaching here because the packet already timeout
12667 return status;
12668 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012669 }
12670
12671 /*
12672 * Trigger the event to bring the HAL TL Tx complete function to come
12673 * out of wait
12674 * Let the coe above to complete the packet first. When this event is set,
12675 * the thread waiting for the event may run and set Vospacket_freed causing the original
12676 * packet not being freed.
12677 */
12678 status = vos_event_set(&wdaContext->txFrameEvent);
12679 if(!VOS_IS_STATUS_SUCCESS(status))
12680 {
12681 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012682 "NEW VOS Event Set failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012683 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012684 return status;
12685}
Jeff Johnson295189b2012-06-20 16:38:30 -070012686/*
12687 * FUNCTION: WDA_TxPacket
12688 * Forward TX management frame to WDI
12689 */
12690VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
12691 void *pFrmBuf,
12692 tANI_U16 frmLen,
12693 eFrameType frmType,
12694 eFrameTxDir txDir,
12695 tANI_U8 tid,
12696 pWDATxRxCompFunc pCompFunc,
12697 void *pData,
12698 pWDAAckFnTxComp pAckTxComp,
Kanchanapally, Vidyullathaf9426e52013-12-24 17:28:54 +053012699 tANI_U32 txFlag)
Jeff Johnson295189b2012-06-20 16:38:30 -070012700{
12701 VOS_STATUS status = VOS_STATUS_SUCCESS ;
12702 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
12703 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
12704 tANI_U8 eventIdx = 0;
12705 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
12706 tpAniSirGlobal pMac;
Jeff Johnson295189b2012-06-20 16:38:30 -070012707 if((NULL == pWDA)||(NULL == pFrmBuf))
12708 {
12709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053012710 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012711 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070012712 VOS_ASSERT(0);
12713 return VOS_STATUS_E_FAILURE;
12714 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012715
Jeff Johnson295189b2012-06-20 16:38:30 -070012716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012717 "Tx Mgmt Frame Subtype: %d alloc(%p)", pFc->subType, pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070012718 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
12719 if(NULL == pMac)
12720 {
12721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012722 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012723 VOS_ASSERT(0);
12724 return VOS_STATUS_E_FAILURE;
12725 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012726
Jeff Johnson295189b2012-06-20 16:38:30 -070012727 /* store the call back function in WDA context */
12728 pWDA->pTxCbFunc = pCompFunc;
12729 /* store the call back for the function of ackTxComplete */
12730 if( pAckTxComp )
12731 {
Jeff Johnsone7245742012-09-05 17:12:55 -070012732 if( NULL != pWDA->pAckTxCbFunc )
12733 {
12734 /* Already TxComp is active no need to active again */
12735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012736 "There is already one request pending for tx complete");
Jeff Johnsone7245742012-09-05 17:12:55 -070012737 pWDA->pAckTxCbFunc( pMac, 0);
12738 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012739
Jeff Johnsone7245742012-09-05 17:12:55 -070012740 if( VOS_STATUS_SUCCESS !=
12741 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12742 {
12743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12744 "Tx Complete timeout Timer Stop Failed ");
12745 }
12746 else
12747 {
12748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080012749 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070012750 }
12751 }
12752
12753 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
12754 pWDA->pAckTxCbFunc = pAckTxComp;
12755 if( VOS_STATUS_SUCCESS !=
12756 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
12757 {
12758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12759 "Tx Complete Timer Start Failed ");
12760 pWDA->pAckTxCbFunc = NULL;
12761 return eHAL_STATUS_FAILURE;
12762 }
12763 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012764 /* Reset the event to be not signalled */
12765 status = vos_event_reset(&pWDA->txFrameEvent);
12766 if(!VOS_IS_STATUS_SUCCESS(status))
12767 {
12768 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012769 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012770 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
12771 if( pAckTxComp )
12772 {
12773 pWDA->pAckTxCbFunc = NULL;
12774 if( VOS_STATUS_SUCCESS !=
12775 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12776 {
12777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12778 "Tx Complete timeout Timer Stop Failed ");
12779 }
12780 }
12781 return VOS_STATUS_E_FAILURE;
12782 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080012783
12784 /* If Peer Sta mask is set don't overwrite to self sta */
12785 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070012786 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080012787 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070012788 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080012789 else
12790 {
Ganesh K08bce952012-12-13 15:04:41 -080012791 /* Get system role, use the self station if in unknown role or STA role */
12792 systemRole = wdaGetGlobalSystemRole(pMac);
12793 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
12794 (( eSYSTEM_STA_ROLE == systemRole )
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080012795#if defined FEATURE_WLAN_ESE || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080012796 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080012797#endif
Ganesh K08bce952012-12-13 15:04:41 -080012798 ))
12799 {
12800 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
12801 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080012802 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012803
Jeff Johnsone7245742012-09-05 17:12:55 -070012804 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
12805 disassoc frame reaches the HW, HAL has already deleted the peer station */
12806 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070012807 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080012808 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070012809 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070012810 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012811 /*Send Probe request frames on self sta idx*/
12812 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070012813 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012814 /* Since we donot want probe responses to be retried, send probe responses
12815 through the NO_ACK queues */
12816 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
12817 {
12818 //probe response is sent out using self station and no retries options.
12819 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
12820 }
12821 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
12822 {
12823 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
12824 }
12825 }
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053012826 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012827
12828 /*Set frame tag to 0
12829 We will use the WDA user data in order to tag a frame as expired*/
12830 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
12831 (v_PVOID_t)0);
12832
12833
12834 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
12835 frmLen, ucTypeSubType, tid,
12836 WDA_TxComplete, NULL, txFlag)) != VOS_STATUS_SUCCESS)
12837 {
12838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012839 "Sending Mgmt Frame failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012840 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053012841 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 -070012842 if( pAckTxComp )
12843 {
12844 pWDA->pAckTxCbFunc = NULL;
12845 if( VOS_STATUS_SUCCESS !=
12846 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12847 {
12848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12849 "Tx Complete timeout Timer Stop Failed ");
12850 }
12851 }
12852 return VOS_STATUS_E_FAILURE;
12853 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012854 /*
12855 * Wait for the event to be set by the TL, to get the response of TX
12856 * complete, this event should be set by the Callback function called by TL
12857 */
12858 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
12859 &eventIdx);
12860 if(!VOS_IS_STATUS_SUCCESS(status))
12861 {
12862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12863 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012864 __func__, status);
Sushant Kaushik8355d202014-12-17 16:48:10 +053012865
12866 /*Tag Frame as timed out for later deletion*/
12867 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
12868 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
Jeff Johnson295189b2012-06-20 16:38:30 -070012869 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
12870 after the packet gets completed(packet freed once)*/
12871
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070012872 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
Katya Nigam53677462014-08-04 11:37:28 +053012873 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070012874
Jeff Johnson295189b2012-06-20 16:38:30 -070012875 /* check whether the packet was freed already,so need not free again when
12876 * TL calls the WDA_Txcomplete routine
12877 */
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053012878 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED);
12879 /*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 -070012880 {
12881 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012882 } */
12883
Jeff Johnson295189b2012-06-20 16:38:30 -070012884 if( pAckTxComp )
12885 {
12886 pWDA->pAckTxCbFunc = NULL;
12887 if( VOS_STATUS_SUCCESS !=
12888 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12889 {
12890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12891 "Tx Complete timeout Timer Stop Failed ");
12892 }
12893 }
12894 status = VOS_STATUS_E_FAILURE;
12895 }
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +053012896#ifdef WLAN_DUMP_MGMTFRAMES
12897 if (VOS_IS_STATUS_SUCCESS(status))
12898 {
12899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12900 "%s() TX packet : SubType %d", __func__,pFc->subType);
12901 VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12902 pData, frmLen);
12903 }
12904#endif
12905
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080012906 if (VOS_IS_STATUS_SUCCESS(status))
12907 {
12908 if (pMac->fEnableDebugLog & 0x1)
12909 {
12910 if ((pFc->type == SIR_MAC_MGMT_FRAME) &&
12911 (pFc->subType != SIR_MAC_MGMT_PROBE_REQ) &&
12912 (pFc->subType != SIR_MAC_MGMT_PROBE_RSP))
12913 {
12914 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "TX MGMT - Type %hu, SubType %hu",
12915 pFc->type, pFc->subType);
12916 }
12917 }
12918 }
12919
12920
Jeff Johnson295189b2012-06-20 16:38:30 -070012921 return status;
12922}
Jeff Johnson295189b2012-06-20 16:38:30 -070012923/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012924 * FUNCTION: WDA_ProcessDHCPStartInd
12925 * Forward DHCP Start to WDI
12926 */
12927static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
12928 tAniDHCPInd *dhcpStartInd)
12929{
12930 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053012931 WDI_DHCPInd wdiDHCPInd;
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012932
c_hpothu0b0cab72014-02-13 21:52:40 +053012933 wdiDHCPInd.device_mode = dhcpStartInd->device_mode;
12934 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStartInd->macAddr,
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012935 sizeof(tSirMacAddr));
12936
c_hpothu0b0cab72014-02-13 21:52:40 +053012937 status = WDI_dhcpStartInd(&wdiDHCPInd);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012938
c_hpothu0b0cab72014-02-13 21:52:40 +053012939 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012940 {
c_hpothu0b0cab72014-02-13 21:52:40 +053012941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12942 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012943 }
c_hpothu0b0cab72014-02-13 21:52:40 +053012944 else if (WDI_STATUS_SUCCESS_SYNC != status)
12945 {
12946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12947 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
12948 }
12949
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012950 vos_mem_free(dhcpStartInd);
12951 return CONVERT_WDI2VOS_STATUS(status) ;
12952}
12953
12954 /*
12955 * FUNCTION: WDA_ProcessDHCPStopInd
12956 * Forward DHCP Stop to WDI
12957 */
12958 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
12959 tAniDHCPInd *dhcpStopInd)
12960 {
12961 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053012962 WDI_DHCPInd wdiDHCPInd;
12963
12964 wdiDHCPInd.device_mode = dhcpStopInd->device_mode;
12965 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
12966
12967 status = WDI_dhcpStopInd(&wdiDHCPInd);
12968
12969 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012970 {
c_hpothu0b0cab72014-02-13 21:52:40 +053012971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12972 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012973 }
c_hpothu0b0cab72014-02-13 21:52:40 +053012974 else if (WDI_STATUS_SUCCESS_SYNC != status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012975 {
c_hpothu0b0cab72014-02-13 21:52:40 +053012976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12977 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012978 }
c_hpothu0b0cab72014-02-13 21:52:40 +053012979
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012980 vos_mem_free(dhcpStopInd);
c_hpothu0b0cab72014-02-13 21:52:40 +053012981
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012982 return CONVERT_WDI2VOS_STATUS(status) ;
12983 }
12984
12985/*
Siddharth Bhal171788a2014-09-29 21:02:40 +053012986 * FUNCTION: WDA_ProcessSetSpoofMacAddrReq
12987 *
12988 * DESCRIPTION: This function sends Spoof Mac Addr Req to WDI
12989 *
12990 * PARAM:
12991 * pWDA: pointer to WDA context
12992 * pReq: pointer to stop batch scan request
12993 */
12994VOS_STATUS WDA_ProcessSetSpoofMacAddrReq(tWDA_CbContext *pWDA,
12995 tpSpoofMacAddrReqParams pReq)
12996{
12997 WDI_Status wdiStatus;
12998 WDI_SpoofMacAddrInfoType *WDI_SpoofMacAddrInfoParams;
12999 tWDA_ReqParams *pWdaParams;
13000
13001 WDI_SpoofMacAddrInfoParams = (WDI_SpoofMacAddrInfoType *)vos_mem_malloc(
13002 sizeof(WDI_SpoofMacAddrInfoType));
13003 if(NULL == WDI_SpoofMacAddrInfoParams) {
13004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13005 "%s: VOS MEM Alloc Failure in Spoof Req", __func__);
13006 VOS_ASSERT(0);
13007 return VOS_STATUS_E_NOMEM;
13008 }
13009 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13010 if(NULL == pWdaParams) {
13011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13012 "%s: VOS MEM Alloc Failure", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +053013013 vos_mem_free(WDI_SpoofMacAddrInfoParams);
Siddharth Bhal171788a2014-09-29 21:02:40 +053013014 VOS_ASSERT(0);
13015 return VOS_STATUS_E_NOMEM;
13016 }
13017
13018 vos_mem_copy(WDI_SpoofMacAddrInfoParams->macAddr,
13019 pReq->macAddr, VOS_MAC_ADDRESS_LEN);
13020
13021 pWdaParams->pWdaContext = pWDA;
13022 /* Store Upper layer req pointer, as this will be used for response */
Siddharth Bhal029d6732014-10-09 21:31:23 +053013023 pWdaParams->wdaMsgParam = (void *)pReq;
13024
13025 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, WDA_MAC_ADDRESS_STR,
13026 WDA_MAC_ADDR_ARRAY(WDI_SpoofMacAddrInfoParams->macAddr));
13027
Siddharth Bhal171788a2014-09-29 21:02:40 +053013028 /* store Params pass it to WDI */
13029 pWdaParams->wdaWdiApiMsgParam = (void *)WDI_SpoofMacAddrInfoParams ;
13030
13031 wdiStatus = WDI_SetSpoofMacAddrReq(WDI_SpoofMacAddrInfoParams,
Siddharth Bhal029d6732014-10-09 21:31:23 +053013032 (WDI_SetSpoofMacAddrRspCb) WDA_SpoofMacAddrRspCallback,
13033 pWdaParams );
Siddharth Bhal171788a2014-09-29 21:02:40 +053013034
13035 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13036 {
13037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13038 "Failure in SetSpoofMacAddrReq Params WDI API, free all the memory " );
13039 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13040 vos_mem_free(pWdaParams->wdaMsgParam);
13041 vos_mem_free(pWdaParams);
13042 }
13043
13044 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
13045}
13046
13047/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013048 * FUNCTION: WDA_McProcessMsg
13049 * Trigger DAL-AL to start CFG download
13050 */
13051VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
13052{
13053 VOS_STATUS status = VOS_STATUS_SUCCESS;
13054 tWDA_CbContext *pWDA = NULL ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013055 if(NULL == pMsg)
Jeff Johnson295189b2012-06-20 16:38:30 -070013056 {
13057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013058 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013059 VOS_ASSERT(0);
13060 return VOS_STATUS_E_FAILURE;
13061 }
13062
13063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013064 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070013065
13066 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
13067 if(NULL == pWDA )
13068 {
13069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013070 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013071 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070013072 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070013073 return VOS_STATUS_E_FAILURE;
13074 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013075 /* Process all the WDA messages.. */
13076 switch( pMsg->type )
13077 {
13078 case WNI_CFG_DNLD_REQ:
13079 {
13080 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070013081 /* call WDA complete event if config download success */
13082 if( VOS_IS_STATUS_SUCCESS(status) )
13083 {
13084 vos_WDAComplete_cback(pVosContext);
13085 }
13086 else
13087 {
13088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13089 "WDA Config Download failure" );
13090 }
13091 break ;
13092 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013093 /*
13094 * Init SCAN request from PE, convert it into DAL format
13095 * and send it to DAL
13096 */
13097 case WDA_INIT_SCAN_REQ:
13098 {
13099 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
13100 break ;
13101 }
13102 /* start SCAN request from PE */
13103 case WDA_START_SCAN_REQ:
13104 {
13105 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
13106 break ;
13107 }
13108 /* end SCAN request from PE */
13109 case WDA_END_SCAN_REQ:
13110 {
13111 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
13112 break ;
13113 }
13114 /* end SCAN request from PE */
13115 case WDA_FINISH_SCAN_REQ:
13116 {
13117 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
13118 break ;
13119 }
13120 /* join request from PE */
13121 case WDA_CHNL_SWITCH_REQ:
13122 {
13123 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
13124 {
13125 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
13126 }
13127 else
13128 {
Kalikinkar dhara1e83b772014-02-06 12:59:22 -080013129 if (IS_FEATURE_SUPPORTED_BY_FW(CH_SWITCH_V1) &&
13130 eHAL_CHANNEL_SWITCH_SOURCE_CSA ==
13131 ((tSwitchChannelParams*)pMsg->bodyptr)->channelSwitchSrc )
13132 {
13133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13134 "call ProcessChannelSwitchReq_V1" );
13135 WDA_ProcessChannelSwitchReq_V1(pWDA,
13136 (tSwitchChannelParams*)pMsg->bodyptr) ;
13137 }
13138 else
13139 {
13140 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13141 "call ProcessChannelSwitchReq" );
13142 WDA_ProcessChannelSwitchReq(pWDA,
13143 (tSwitchChannelParams*)pMsg->bodyptr) ;
13144 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013145 }
13146 break ;
13147 }
13148 /* ADD BSS request from PE */
13149 case WDA_ADD_BSS_REQ:
13150 {
13151 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
13152 break ;
13153 }
13154 case WDA_ADD_STA_REQ:
13155 {
13156 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
13157 break ;
13158 }
13159 case WDA_DELETE_BSS_REQ:
13160 {
Jeff Johnson295189b2012-06-20 16:38:30 -070013161 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
13162 break ;
13163 }
13164 case WDA_DELETE_STA_REQ:
13165 {
Jeff Johnson295189b2012-06-20 16:38:30 -070013166 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
13167 break ;
13168 }
13169 case WDA_CONFIG_PARAM_UPDATE_REQ:
13170 {
13171 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
13172 break ;
13173 }
13174 case WDA_SET_BSSKEY_REQ:
13175 {
13176 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
13177 break ;
13178 }
13179 case WDA_SET_STAKEY_REQ:
13180 {
13181 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
13182 break ;
13183 }
13184 case WDA_SET_STA_BCASTKEY_REQ:
13185 {
13186 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
13187 break ;
13188 }
13189 case WDA_REMOVE_BSSKEY_REQ:
13190 {
13191 WDA_ProcessRemoveBssKeyReq(pWDA,
13192 (tRemoveBssKeyParams *)pMsg->bodyptr);
13193 break ;
13194 }
13195 case WDA_REMOVE_STAKEY_REQ:
13196 {
13197 WDA_ProcessRemoveStaKeyReq(pWDA,
13198 (tRemoveStaKeyParams *)pMsg->bodyptr);
13199 break ;
13200 }
13201 case WDA_REMOVE_STA_BCASTKEY_REQ:
13202 {
13203 /* TODO: currently UMAC is not sending this request, Add the code for
13204 handling this request when UMAC supports */
13205 break;
13206 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080013207#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -070013208 case WDA_TSM_STATS_REQ:
13209 {
Srinivas Girigowda5cecb202013-10-08 09:13:25 -070013210 WDA_ProcessTsmStatsReq(pWDA, (tpAniGetTsmStatsReq)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070013211 break;
13212 }
13213#endif
13214 case WDA_UPDATE_EDCA_PROFILE_IND:
13215 {
13216 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
13217 break;
13218 }
13219 case WDA_ADD_TS_REQ:
13220 {
13221 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
13222 break;
13223 }
13224 case WDA_DEL_TS_REQ:
13225 {
13226 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
13227 break;
13228 }
13229 case WDA_ADDBA_REQ:
13230 {
13231 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
13232 break;
13233 }
13234 case WDA_DELBA_IND:
13235 {
13236 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
13237 break;
13238 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080013239 case WDA_UPDATE_CHAN_LIST_REQ:
13240 {
13241 WDA_ProcessUpdateChannelList(pWDA,
13242 (tSirUpdateChanList *)pMsg->bodyptr);
13243 break;
13244 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013245 case WDA_SET_LINK_STATE:
13246 {
13247 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
13248 break;
13249 }
13250 case WDA_GET_STATISTICS_REQ:
13251 {
13252 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
13253 break;
13254 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080013255#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080013256 case WDA_GET_ROAM_RSSI_REQ:
13257 {
13258 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
13259 break;
13260 }
13261#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070013262 case WDA_PWR_SAVE_CFG:
13263 {
13264 if(pWDA->wdaState == WDA_READY_STATE)
13265 {
13266 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
13267 }
13268 else
13269 {
13270 if(NULL != pMsg->bodyptr)
13271 {
13272 vos_mem_free(pMsg->bodyptr);
13273 }
13274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13275 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
13276 }
13277 break;
13278 }
13279 case WDA_ENTER_IMPS_REQ:
13280 {
13281 if(pWDA->wdaState == WDA_READY_STATE)
13282 {
13283 WDA_ProcessEnterImpsReq(pWDA);
13284 }
13285 else
13286 {
13287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13288 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
13289 }
13290 break;
13291 }
13292 case WDA_EXIT_IMPS_REQ:
13293 {
13294 if(pWDA->wdaState == WDA_READY_STATE)
13295 {
13296 WDA_ProcessExitImpsReq(pWDA);
13297 }
13298 else
13299 {
13300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13301 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
13302 }
13303 break;
13304 }
13305 case WDA_ENTER_BMPS_REQ:
13306 {
13307 if(pWDA->wdaState == WDA_READY_STATE)
13308 {
13309 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
13310 }
13311 else
13312 {
13313 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13314 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
13315 }
13316 break;
13317 }
13318 case WDA_EXIT_BMPS_REQ:
13319 {
13320 if(pWDA->wdaState == WDA_READY_STATE)
13321 {
13322 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
13323 }
13324 else
13325 {
13326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13327 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
13328 }
13329 break;
13330 }
13331 case WDA_ENTER_UAPSD_REQ:
13332 {
13333 if(pWDA->wdaState == WDA_READY_STATE)
13334 {
13335 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
13336 }
13337 else
13338 {
13339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13340 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
13341 }
13342 break;
13343 }
13344 case WDA_EXIT_UAPSD_REQ:
13345 {
13346 if(pWDA->wdaState == WDA_READY_STATE)
13347 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013348 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070013349 }
13350 else
13351 {
13352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13353 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
13354 }
13355 break;
13356 }
13357 case WDA_UPDATE_UAPSD_IND:
13358 {
13359 if(pWDA->wdaState == WDA_READY_STATE)
13360 {
13361 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
13362 }
13363 else
13364 {
13365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13366 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
13367 }
13368 break;
13369 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013370 case WDA_REGISTER_PE_CALLBACK :
13371 {
13372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13373 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
13374 /*TODO: store the PE callback */
13375 /* Do Nothing? MSG Body should be freed at here */
13376 if(NULL != pMsg->bodyptr)
13377 {
13378 vos_mem_free(pMsg->bodyptr);
13379 }
13380 break;
13381 }
13382 case WDA_SYS_READY_IND :
13383 {
13384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13385 "Handling msg type WDA_SYS_READY_IND " );
13386 pWDA->wdaState = WDA_READY_STATE;
13387 if(NULL != pMsg->bodyptr)
13388 {
13389 vos_mem_free(pMsg->bodyptr);
13390 }
13391 break;
13392 }
13393 case WDA_BEACON_FILTER_IND :
13394 {
13395 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
13396 break;
13397 }
13398 case WDA_BTC_SET_CFG:
13399 {
13400 /*TODO: handle this while dealing with BTC */
13401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13402 "Handling msg type WDA_BTC_SET_CFG " );
13403 /* Do Nothing? MSG Body should be freed at here */
13404 if(NULL != pMsg->bodyptr)
13405 {
13406 vos_mem_free(pMsg->bodyptr);
13407 }
13408 break;
13409 }
13410 case WDA_SIGNAL_BT_EVENT:
13411 {
13412 /*TODO: handle this while dealing with BTC */
13413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13414 "Handling msg type WDA_SIGNAL_BT_EVENT " );
13415 /* Do Nothing? MSG Body should be freed at here */
13416 if(NULL != pMsg->bodyptr)
13417 {
13418 vos_mem_free(pMsg->bodyptr);
13419 }
13420 break;
13421 }
13422 case WDA_CFG_RXP_FILTER_REQ:
13423 {
13424 WDA_ProcessConfigureRxpFilterReq(pWDA,
13425 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
13426 break;
13427 }
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053013428 case WDA_MGMT_LOGGING_INIT_REQ:
13429 {
13430 WDA_ProcessMgmtLoggingInitReq(pWDA,
13431 (tSirMgmtLoggingInitParam *)pMsg->bodyptr);
13432 break;
13433 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013434 case WDA_SET_HOST_OFFLOAD:
13435 {
13436 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
13437 break;
13438 }
13439 case WDA_SET_KEEP_ALIVE:
13440 {
13441 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
13442 break;
13443 }
13444#ifdef WLAN_NS_OFFLOAD
13445 case WDA_SET_NS_OFFLOAD:
13446 {
13447 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
13448 break;
13449 }
13450#endif //WLAN_NS_OFFLOAD
13451 case WDA_ADD_STA_SELF_REQ:
13452 {
13453 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
13454 break;
13455 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013456 case WDA_DEL_STA_SELF_REQ:
13457 {
13458 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
13459 break;
13460 }
13461 case WDA_WOWL_ADD_BCAST_PTRN:
13462 {
13463 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
13464 break;
13465 }
13466 case WDA_WOWL_DEL_BCAST_PTRN:
13467 {
13468 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
13469 break;
13470 }
13471 case WDA_WOWL_ENTER_REQ:
13472 {
13473 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
13474 break;
13475 }
13476 case WDA_WOWL_EXIT_REQ:
13477 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013478 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070013479 break;
13480 }
13481 case WDA_TL_FLUSH_AC_REQ:
13482 {
13483 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
13484 break;
13485 }
13486 case WDA_SIGNAL_BTAMP_EVENT:
13487 {
13488 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
13489 break;
13490 }
Abhishek Singh85b74712014-10-08 11:38:19 +053013491 case WDA_FW_STATS_GET_REQ:
13492 {
13493 WDA_ProcessFWStatsGetReq(pWDA,
13494 (tSirFWStatsGetReq *)pMsg->bodyptr);
13495 break;
13496 }
Sunil Duttbd736ed2014-05-26 21:19:41 +053013497#ifdef WLAN_FEATURE_LINK_LAYER_STATS
13498 case WDA_LINK_LAYER_STATS_SET_REQ:
13499 {
13500 WDA_ProcessLLStatsSetReq(pWDA, (tSirLLStatsSetReq *)pMsg->bodyptr);
13501 break;
13502 }
13503 case WDA_LINK_LAYER_STATS_GET_REQ:
13504 {
13505 WDA_ProcessLLStatsGetReq(pWDA, (tSirLLStatsGetReq *)pMsg->bodyptr);
13506 break;
13507 }
13508 case WDA_LINK_LAYER_STATS_CLEAR_REQ:
13509 {
13510 WDA_ProcessLLStatsClearReq(pWDA, (tSirLLStatsClearReq *)pMsg->bodyptr);
13511 break;
13512 }
13513#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Dino Mycle41bdc942014-06-10 11:30:24 +053013514#ifdef WLAN_FEATURE_EXTSCAN
13515 case WDA_EXTSCAN_GET_CAPABILITIES_REQ:
13516 {
13517 WDA_ProcessEXTScanGetCapabilitiesReq(pWDA,
13518 (tSirGetEXTScanCapabilitiesReqParams *)pMsg->bodyptr);
13519 break;
13520 }
13521 case WDA_EXTSCAN_START_REQ:
13522 {
13523 WDA_ProcessEXTScanStartReq(pWDA,
13524 (tSirEXTScanStartReqParams *)pMsg->bodyptr);
13525 break;
13526 }
13527 case WDA_EXTSCAN_STOP_REQ:
13528 {
13529 WDA_ProcessEXTScanStopReq(pWDA,
13530 (tSirEXTScanStopReqParams *)pMsg->bodyptr);
13531 break;
13532 }
13533 case WDA_EXTSCAN_GET_CACHED_RESULTS_REQ:
13534 {
13535 WDA_ProcessEXTScanGetCachedResultsReq(pWDA,
13536 (tSirEXTScanGetCachedResultsReqParams *)pMsg->bodyptr);
13537 break;
13538 }
13539 case WDA_EXTSCAN_SET_BSSID_HOTLIST_REQ:
13540 {
13541 WDA_ProcessEXTScanSetBSSIDHotlistReq(pWDA,
13542 (tSirEXTScanSetBssidHotListReqParams *)pMsg->bodyptr);
13543 break;
13544 }
13545 case WDA_EXTSCAN_RESET_BSSID_HOTLIST_REQ:
13546 {
13547 WDA_ProcessEXTScanResetBSSIDHotlistReq(pWDA,
13548 (tSirEXTScanResetBssidHotlistReqParams *)pMsg->bodyptr);
13549 break;
13550 }
13551 case WDA_EXTSCAN_SET_SIGNF_RSSI_CHANGE_REQ:
13552 {
13553 WDA_ProcessEXTScanSetSignfRSSIChangeReq(pWDA,
13554 (tSirEXTScanSetSignificantChangeReqParams *)pMsg->bodyptr);
13555 break;
13556 }
13557 case WDA_EXTSCAN_RESET_SIGNF_RSSI_CHANGE_REQ:
13558 {
13559 WDA_ProcessEXTScanResetSignfRSSIChangeReq(pWDA,
13560 (tSirEXTScanResetSignificantChangeReqParams *)pMsg->bodyptr);
13561 break;
13562 }
13563#endif /* WLAN_FEATURE_EXTSCAN */
Jeff Johnson295189b2012-06-20 16:38:30 -070013564#ifdef WDA_UT
13565 case WDA_WDI_EVENT_MSG:
13566 {
13567 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
13568 break ;
13569 }
13570#endif
13571 case WDA_UPDATE_BEACON_IND:
13572 {
13573 WDA_ProcessUpdateBeaconParams(pWDA,
13574 (tUpdateBeaconParams *)pMsg->bodyptr);
13575 break;
13576 }
13577 case WDA_SEND_BEACON_REQ:
13578 {
13579 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
13580 break;
13581 }
13582 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
13583 {
13584 WDA_ProcessUpdateProbeRspTemplate(pWDA,
13585 (tSendProbeRespParams *)pMsg->bodyptr);
13586 break;
13587 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080013588#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -070013589 case WDA_SET_MAX_TX_POWER_REQ:
13590 {
13591 WDA_ProcessSetMaxTxPowerReq(pWDA,
13592 (tMaxTxPowerParams *)pMsg->bodyptr);
13593 break;
13594 }
13595#endif
Arif Hussaina5ebce02013-08-09 15:09:58 -070013596 case WDA_SET_MAX_TX_POWER_PER_BAND_REQ:
13597 {
13598 WDA_ProcessSetMaxTxPowerPerBandReq(pWDA, (tMaxTxPowerPerBandParams *)
13599 pMsg->bodyptr);
13600 break;
13601 }
schang86c22c42013-03-13 18:41:24 -070013602 case WDA_SET_TX_POWER_REQ:
13603 {
13604 WDA_ProcessSetTxPowerReq(pWDA,
13605 (tSirSetTxPowerReq *)pMsg->bodyptr);
13606 break;
13607 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013608 case WDA_SET_P2P_GO_NOA_REQ:
13609 {
13610 WDA_ProcessSetP2PGONOAReq(pWDA,
13611 (tP2pPsParams *)pMsg->bodyptr);
13612 break;
13613 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013614 /* timer related messages */
13615 case WDA_TIMER_BA_ACTIVITY_REQ:
13616 {
13617 WDA_BaCheckActivity(pWDA) ;
13618 break ;
13619 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013620
13621 /* timer related messages */
13622 case WDA_TIMER_TRAFFIC_STATS_IND:
13623 {
13624 WDA_TimerTrafficStatsInd(pWDA);
13625 break;
13626 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013627#ifdef WLAN_FEATURE_VOWIFI_11R
13628 case WDA_AGGR_QOS_REQ:
13629 {
13630 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
13631 break;
13632 }
13633#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070013634 case WDA_FTM_CMD_REQ:
13635 {
13636 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
13637 break ;
13638 }
Jeff Johnsone7245742012-09-05 17:12:55 -070013639#ifdef FEATURE_OEM_DATA_SUPPORT
13640 case WDA_START_OEM_DATA_REQ:
13641 {
13642 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
13643 break;
13644 }
13645#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070013646 /* Tx Complete Time out Indication */
13647 case WDA_TX_COMPLETE_TIMEOUT_IND:
13648 {
13649 WDA_ProcessTxCompleteTimeOutInd(pWDA);
13650 break;
13651 }
13652 case WDA_WLAN_SUSPEND_IND:
13653 {
13654 WDA_ProcessWlanSuspendInd(pWDA,
13655 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
13656 break;
13657 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013658 case WDA_WLAN_RESUME_REQ:
13659 {
13660 WDA_ProcessWlanResumeReq(pWDA,
13661 (tSirWlanResumeParam *)pMsg->bodyptr) ;
13662 break;
13663 }
13664
13665 case WDA_UPDATE_CF_IND:
13666 {
13667 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
13668 pMsg->bodyptr = NULL;
13669 break;
13670 }
13671#ifdef FEATURE_WLAN_SCAN_PNO
13672 case WDA_SET_PNO_REQ:
13673 {
13674 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
13675 break;
13676 }
13677 case WDA_UPDATE_SCAN_PARAMS_REQ:
13678 {
13679 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
13680 break;
13681 }
13682 case WDA_SET_RSSI_FILTER_REQ:
13683 {
13684 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
13685 break;
13686 }
13687#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013688#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013689 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013690 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013691 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013692 break;
13693 }
13694#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070013695 case WDA_SET_TX_PER_TRACKING_REQ:
13696 {
13697 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
13698 break;
13699 }
13700
13701#ifdef WLAN_FEATURE_PACKET_FILTERING
13702 case WDA_8023_MULTICAST_LIST_REQ:
13703 {
13704 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
13705 break;
13706 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013707 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
13708 {
13709 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
13710 break;
13711 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013712 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
13713 {
13714 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
13715 break;
13716 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013717 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
13718 {
13719 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
13720 break;
13721 }
13722#endif // WLAN_FEATURE_PACKET_FILTERING
13723
13724
13725 case WDA_TRANSMISSION_CONTROL_IND:
13726 {
13727 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
13728 break;
13729 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013730 case WDA_SET_POWER_PARAMS_REQ:
13731 {
13732 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
13733 break;
13734 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013735#ifdef WLAN_FEATURE_GTK_OFFLOAD
13736 case WDA_GTK_OFFLOAD_REQ:
13737 {
13738 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
13739 break;
13740 }
13741
13742 case WDA_GTK_OFFLOAD_GETINFO_REQ:
13743 {
13744 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
13745 break;
13746 }
13747#endif //WLAN_FEATURE_GTK_OFFLOAD
13748
13749 case WDA_SET_TM_LEVEL_REQ:
13750 {
13751 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
13752 break;
13753 }
Sandeep Puligilla60342762014-01-30 21:05:37 +053013754
Mohit Khanna4a70d262012-09-11 16:30:12 -070013755 case WDA_UPDATE_OP_MODE:
13756 {
Sandeep Puligilla60342762014-01-30 21:05:37 +053013757 if(WDA_getHostWlanFeatCaps(HT40_OBSS_SCAN) &&
13758 WDA_getFwWlanFeatCaps(HT40_OBSS_SCAN))
13759 {
13760 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
13761 }
13762 else if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
Mohit Khanna4a70d262012-09-11 16:30:12 -070013763 {
13764 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
13765 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
13766 else
13767 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013768 " VHT OpMode Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070013769 }
13770 else
13771 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013772 " 11AC Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070013773 break;
13774 }
Chet Lanctot186b5732013-03-18 10:26:30 -070013775#ifdef WLAN_FEATURE_11W
13776 case WDA_EXCLUDE_UNENCRYPTED_IND:
13777 {
13778 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
13779 break;
13780 }
13781#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053013782#ifdef FEATURE_WLAN_TDLS
13783 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
13784 {
13785 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
13786 break;
13787 }
13788#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013789 case WDA_DHCP_START_IND:
13790 {
13791 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
13792 break;
13793 }
13794 case WDA_DHCP_STOP_IND:
13795 {
13796 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
13797 break;
13798 }
Leo Chang9056f462013-08-01 19:21:11 -070013799#ifdef FEATURE_WLAN_LPHB
13800 case WDA_LPHB_CONF_REQ:
13801 {
13802 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
13803 break;
13804 }
13805#endif
Yue Mab9c86f42013-08-14 15:59:08 -070013806 case WDA_ADD_PERIODIC_TX_PTRN_IND:
13807 {
13808 WDA_ProcessAddPeriodicTxPtrnInd(pWDA,
13809 (tSirAddPeriodicTxPtrn *)pMsg->bodyptr);
13810 break;
13811 }
13812 case WDA_DEL_PERIODIC_TX_PTRN_IND:
13813 {
13814 WDA_ProcessDelPeriodicTxPtrnInd(pWDA,
13815 (tSirDelPeriodicTxPtrn *)pMsg->bodyptr);
13816 break;
13817 }
13818
Rajeev79dbe4c2013-10-05 11:03:42 +053013819#ifdef FEATURE_WLAN_BATCH_SCAN
13820 case WDA_SET_BATCH_SCAN_REQ:
13821 {
13822 WDA_ProcessSetBatchScanReq(pWDA,
13823 (tSirSetBatchScanReq *)pMsg->bodyptr);
13824 break;
13825 }
Chittajit Mitraf5413a42013-10-18 14:20:08 -070013826 case WDA_RATE_UPDATE_IND:
13827 {
13828 WDA_ProcessRateUpdateInd(pWDA, (tSirRateUpdateInd *)pMsg->bodyptr);
13829 break;
13830 }
Rajeev79dbe4c2013-10-05 11:03:42 +053013831 case WDA_TRIGGER_BATCH_SCAN_RESULT_IND:
13832 {
13833 WDA_ProcessTriggerBatchScanResultInd(pWDA,
13834 (tSirTriggerBatchScanResultInd *)pMsg->bodyptr);
13835 break;
13836 }
13837 case WDA_STOP_BATCH_SCAN_IND:
13838 {
13839 WDA_ProcessStopBatchScanInd(pWDA,
13840 (tSirStopBatchScanInd *)pMsg->bodyptr);
13841 break;
13842 }
c_hpothu92367912014-05-01 15:18:17 +053013843 case WDA_GET_BCN_MISS_RATE_REQ:
13844 WDA_ProcessGetBcnMissRateReq(pWDA,
13845 (tSirBcnMissRateReq *)pMsg->bodyptr);
13846 break;
Rajeev79dbe4c2013-10-05 11:03:42 +053013847#endif
13848
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053013849 case WDA_HT40_OBSS_SCAN_IND:
13850 {
13851 WDA_ProcessHT40OBSSScanInd(pWDA,
13852 (tSirHT40OBSSScanInd *)pMsg->bodyptr);
13853 break;
13854 }
13855 case WDA_HT40_OBSS_STOP_SCAN_IND:
13856 {
13857 WDA_ProcessHT40OBSSStopScanInd(pWDA,
13858 (tANI_U8*)pMsg->bodyptr);
13859 break;
13860 }
Atul Mittalc0f739f2014-07-31 13:47:47 +053013861// tdlsoffchan
13862#ifdef FEATURE_WLAN_TDLS
13863 case WDA_SET_TDLS_CHAN_SWITCH_REQ:
13864 {
13865 WDA_ProcessSetTdlsChanSwitchReq(pWDA, (tTdlsChanSwitchParams *)pMsg->bodyptr);
13866 break;
13867 }
13868#endif
Siddharth Bhal171788a2014-09-29 21:02:40 +053013869 case WDA_SPOOF_MAC_ADDR_REQ:
13870 {
13871 WDA_ProcessSetSpoofMacAddrReq(pWDA, (tpSpoofMacAddrReqParams)pMsg->bodyptr);
13872 break;
13873 }
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053013874 case WDA_ENCRYPT_MSG_REQ:
13875 {
13876 WDA_ProcessEncryptMsgReq(pWDA, (u8 *)pMsg->bodyptr);
13877 break;
13878 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013879 default:
13880 {
Agarwal Ashishbf98caf2014-03-25 13:29:11 +053013881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070013882 "No Handling for msg type %x in WDA "
13883 ,pMsg->type);
13884 /* Do Nothing? MSG Body should be freed at here */
13885 if(NULL != pMsg->bodyptr)
13886 {
13887 vos_mem_free(pMsg->bodyptr);
13888 }
13889 //WDA_VOS_ASSERT(0) ;
13890 }
13891 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013892 return status ;
13893}
13894
Jeff Johnson295189b2012-06-20 16:38:30 -070013895/*
13896 * FUNCTION: WDA_LowLevelIndCallback
13897 * IND API callback from WDI, send Ind to PE
13898 */
13899void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
13900 void* pUserData )
13901{
13902 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
13903#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
13904 tSirRSSINotification rssiNotification;
13905#endif
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013906 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070013907 {
13908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013909 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013910 VOS_ASSERT(0);
13911 return ;
13912 }
13913
13914 switch(wdiLowLevelInd->wdiIndicationType)
13915 {
13916 case WDI_RSSI_NOTIFICATION_IND:
13917 {
13918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13919 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070013920#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
13921 rssiNotification.bReserved =
13922 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
13923 rssiNotification.bRssiThres1NegCross =
13924 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
13925 rssiNotification.bRssiThres1PosCross =
13926 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
13927 rssiNotification.bRssiThres2NegCross =
13928 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
13929 rssiNotification.bRssiThres2PosCross =
13930 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
13931 rssiNotification.bRssiThres3NegCross =
13932 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
13933 rssiNotification.bRssiThres3PosCross =
13934 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080013935 rssiNotification.avgRssi = (v_S7_t)
13936 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070013937 WLANTL_BMPSRSSIRegionChangedNotification(
13938 pWDA->pVosContext,
13939 &rssiNotification);
13940#endif
13941 break ;
13942 }
13943 case WDI_MISSED_BEACON_IND:
13944 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080013945 tpSirSmeMissedBeaconInd pMissBeacInd =
13946 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070013947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13948 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070013949 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080013950 if(NULL == pMissBeacInd)
13951 {
13952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13953 "%s: VOS MEM Alloc Failure", __func__);
13954 break;
13955 }
13956 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
13957 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
13958 pMissBeacInd->bssIdx =
13959 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
13960 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013961 break ;
13962 }
13963 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
13964 {
13965 /* TODO: Decode Ind and send Ind to PE */
13966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13967 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
13968 break ;
13969 }
13970
13971 case WDI_MIC_FAILURE_IND:
13972 {
13973 tpSirSmeMicFailureInd pMicInd =
13974 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
13975
13976 if(NULL == pMicInd)
13977 {
13978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013979 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013980 break;
13981 }
13982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13983 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070013984 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
13985 pMicInd->length = sizeof(tSirSmeMicFailureInd);
13986 vos_mem_copy(pMicInd->bssId,
13987 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
13988 sizeof(tSirMacAddr));
13989 vos_mem_copy(pMicInd->info.srcMacAddr,
13990 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
13991 sizeof(tSirMacAddr));
13992 vos_mem_copy(pMicInd->info.taMacAddr,
13993 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
13994 sizeof(tSirMacAddr));
13995 vos_mem_copy(pMicInd->info.dstMacAddr,
13996 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
13997 sizeof(tSirMacAddr));
13998 vos_mem_copy(pMicInd->info.rxMacAddr,
13999 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
14000 sizeof(tSirMacAddr));
14001 pMicInd->info.multicast =
14002 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
14003 pMicInd->info.keyId=
14004 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
14005 pMicInd->info.IV1=
14006 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
14007 vos_mem_copy(pMicInd->info.TSC,
14008 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070014009 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
14010 (void *)pMicInd , 0) ;
14011 break ;
14012 }
14013 case WDI_FATAL_ERROR_IND:
14014 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070014015 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070014016 /* TODO: Decode Ind and send Ind to PE */
14017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14018 "Received WDI_FATAL_ERROR_IND from WDI ");
14019 break ;
14020 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014021 case WDI_DEL_STA_IND:
14022 {
Jeff Johnson295189b2012-06-20 16:38:30 -070014023 tpDeleteStaContext pDelSTACtx =
14024 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
14025
14026 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14027 "Received WDI_DEL_STA_IND from WDI ");
14028 if(NULL == pDelSTACtx)
14029 {
14030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014031 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014032 break;
14033 }
14034 vos_mem_copy(pDelSTACtx->addr2,
14035 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
14036 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070014037 vos_mem_copy(pDelSTACtx->bssId,
14038 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
14039 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070014040 pDelSTACtx->assocId =
14041 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
14042 pDelSTACtx->reasonCode =
14043 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
14044 pDelSTACtx->staId =
14045 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070014046 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
14047 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014048 break ;
14049 }
14050 case WDI_COEX_IND:
14051 {
14052 tANI_U32 index;
14053 vos_msg_t vosMsg;
c_hpothub3458992014-09-19 19:58:57 +053014054 tSirSmeCoexInd *pSmeCoexInd;
14055
14056 if (SIR_COEX_IND_TYPE_CXM_FEATURES_NOTIFICATION ==
14057 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType)
14058 {
14059 if(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData)
14060 {
14061 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14062 FL("Coex state: 0x%x coex feature: 0x%x"),
14063 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[0],
14064 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[1]);
14065
14066 if (wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2] << 16)
14067 {
14068 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, FL("power limit: 0x%x"),
14069 (tANI_U16)(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2]));
14070 }
14071 }
14072 break;
14073 }
14074
14075 pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070014076 if(NULL == pSmeCoexInd)
14077 {
14078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014079 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014080 break;
14081 }
14082 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14083 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070014084 /* Message Header */
14085 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
14086 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070014087 /* Info from WDI Indication */
14088 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
14089 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
14090 {
14091 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
14092 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014093 /* VOS message wrapper */
14094 vosMsg.type = eWNI_SME_COEX_IND;
14095 vosMsg.bodyptr = (void *)pSmeCoexInd;
14096 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070014097 /* Send message to SME */
14098 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14099 {
14100 /* free the mem and return */
14101 vos_mem_free((v_VOID_t *)pSmeCoexInd);
14102 }
14103 else
14104 {
14105 /* DEBUG */
14106 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14107 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
14108 pSmeCoexInd->coexIndType,
14109 pSmeCoexInd->coexIndData[0],
14110 pSmeCoexInd->coexIndData[1],
14111 pSmeCoexInd->coexIndData[2],
14112 pSmeCoexInd->coexIndData[3]);
14113 }
14114 break;
14115 }
14116 case WDI_TX_COMPLETE_IND:
14117 {
14118 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
14119 /* Calling TxCompleteAck Indication from wda context*/
14120 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14121 "Complete Indication received from HAL");
14122 if( pWDA->pAckTxCbFunc )
14123 {
14124 if( VOS_STATUS_SUCCESS !=
14125 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14126 {
14127 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14128 "Tx Complete timeout Timer Stop Failed ");
14129 }
Ganesh Kondabattini358fc9b2015-03-11 16:14:25 +053014130 pWDA->pAckTxCbFunc( pMac, &wdiLowLevelInd->wdiIndicationData.tx_complete_status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014131 pWDA->pAckTxCbFunc = NULL;
14132 }
14133 else
14134 {
14135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14136 "Tx Complete Indication is received after timeout ");
14137 }
14138 break;
14139 }
Viral Modid86bde22012-12-10 13:09:21 -080014140 case WDI_P2P_NOA_START_IND :
14141 {
14142 tSirP2PNoaStart *pP2pNoaStart =
14143 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
14144
14145 if (NULL == pP2pNoaStart)
14146 {
14147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14148 "Memory allocation failure, "
14149 "WDI_P2P_NOA_START_IND not forwarded");
14150 break;
14151 }
14152 pP2pNoaStart->status =
14153 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
14154 pP2pNoaStart->bssIdx =
14155 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
14156 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
14157 (void *)pP2pNoaStart , 0) ;
14158 break;
14159 }
14160
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053014161#ifdef FEATURE_WLAN_TDLS
14162 case WDI_TDLS_IND :
14163 {
14164 tSirTdlsInd *pTdlsInd =
14165 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
14166
14167 if (NULL == pTdlsInd)
14168 {
14169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14170 "Memory allocation failure, "
14171 "WDI_TDLS_IND not forwarded");
14172 break;
14173 }
14174 pTdlsInd->status =
14175 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
14176 pTdlsInd->assocId =
14177 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
14178 pTdlsInd->staIdx =
14179 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
14180 pTdlsInd->reasonCode =
14181 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
14182 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
14183 (void *)pTdlsInd , 0) ;
14184 break;
14185 }
14186#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070014187 case WDI_P2P_NOA_ATTR_IND :
14188 {
14189 tSirP2PNoaAttr *pP2pNoaAttr =
14190 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070014191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14192 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070014193 if (NULL == pP2pNoaAttr)
14194 {
14195 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14196 "Memory allocation failure, "
14197 "WDI_P2P_NOA_ATTR_IND not forwarded");
14198 break;
14199 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014200 pP2pNoaAttr->index =
14201 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
14202 pP2pNoaAttr->oppPsFlag =
14203 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
14204 pP2pNoaAttr->ctWin =
14205 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
14206
14207 pP2pNoaAttr->uNoa1IntervalCnt =
14208 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
14209 pP2pNoaAttr->uNoa1Duration =
14210 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
14211 pP2pNoaAttr->uNoa1Interval =
14212 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
14213 pP2pNoaAttr->uNoa1StartTime =
14214 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070014215 pP2pNoaAttr->uNoa2IntervalCnt =
14216 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
14217 pP2pNoaAttr->uNoa2Duration =
14218 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
14219 pP2pNoaAttr->uNoa2Interval =
14220 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
14221 pP2pNoaAttr->uNoa2StartTime =
14222 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070014223 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
14224 (void *)pP2pNoaAttr , 0) ;
14225 break;
14226 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014227#ifdef FEATURE_WLAN_SCAN_PNO
14228 case WDI_PREF_NETWORK_FOUND_IND:
14229 {
14230 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070014231 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
14232 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
14233 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
14234 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
14235
Jeff Johnson295189b2012-06-20 16:38:30 -070014236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14237 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070014238 if (NULL == pPrefNetworkFoundInd)
14239 {
14240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14241 "Memory allocation failure, "
14242 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
Kiet Lamb537cfb2013-11-07 12:56:49 +053014243 if (NULL !=
14244 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
14245 {
14246 wpalMemoryFree(
14247 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData
14248 );
14249 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
14250 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014251 break;
14252 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014253 /* Message Header */
14254 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070014255 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070014256
14257 /* Info from WDI Indication */
14258 pPrefNetworkFoundInd->ssId.length =
14259 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070014260 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070014261 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
14262 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
14263 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070014264 if (NULL !=
14265 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
14266 {
14267 pPrefNetworkFoundInd->frameLength =
14268 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
14269 vos_mem_copy( pPrefNetworkFoundInd->data,
14270 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
14271 pPrefNetworkFoundInd->frameLength);
14272 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
14273 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
14274 }
14275 else
14276 {
14277 pPrefNetworkFoundInd->frameLength = 0;
14278 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014279 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070014280 /* VOS message wrapper */
14281 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
14282 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
14283 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070014284 /* Send message to SME */
14285 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14286 {
14287 /* free the mem and return */
14288 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
14289 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014290 break;
14291 }
14292#endif // FEATURE_WLAN_SCAN_PNO
14293
14294#ifdef WLAN_WAKEUP_EVENTS
14295 case WDI_WAKE_REASON_IND:
14296 {
14297 vos_msg_t vosMsg;
14298 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
14299 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
14300 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
14301
14302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Sushant Kaushik1b645382014-10-13 16:39:36 +053014303 "[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 -070014304 wdiLowLevelInd->wdiIndicationType,
14305 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
14306 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
14307 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
14308
14309 if (NULL == pWakeReasonInd)
14310 {
14311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14312 "Memory allocation failure, "
14313 "WDI_WAKE_REASON_IND not forwarded");
14314 break;
14315 }
14316
14317 vos_mem_zero(pWakeReasonInd, allocSize);
14318
14319 /* Message Header */
14320 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
14321 pWakeReasonInd->mesgLen = allocSize;
14322
14323 /* Info from WDI Indication */
14324 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
14325 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
14326 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
14327 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
14328 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
14329 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
14330 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
14331 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
14332
14333 /* VOS message wrapper */
14334 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
14335 vosMsg.bodyptr = (void *) pWakeReasonInd;
14336 vosMsg.bodyval = 0;
14337
14338 /* Send message to SME */
14339 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14340 {
14341 /* free the mem and return */
14342 vos_mem_free((v_VOID_t *) pWakeReasonInd);
14343 }
14344
14345 break;
14346 }
14347#endif // WLAN_WAKEUP_EVENTS
14348
14349 case WDI_TX_PER_HIT_IND:
14350 {
14351 vos_msg_t vosMsg;
14352 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
14353 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
14354 /* VOS message wrapper */
14355 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
14356 vosMsg.bodyptr = NULL;
14357 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070014358 /* Send message to SME */
14359 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14360 {
14361 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
14362 }
14363 break;
14364 }
14365
Leo Chang9056f462013-08-01 19:21:11 -070014366#ifdef FEATURE_WLAN_LPHB
Leo Changd9df8aa2013-09-26 13:32:26 -070014367 case WDI_LPHB_IND:
Leo Chang9056f462013-08-01 19:21:11 -070014368 {
Leo Changd9df8aa2013-09-26 13:32:26 -070014369 vos_msg_t vosMsg;
14370 tSirLPHBInd *lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070014371
Leo Changd9df8aa2013-09-26 13:32:26 -070014372 lphbInd =
14373 (tSirLPHBInd *)vos_mem_malloc(sizeof(tSirLPHBInd));
14374 if (NULL == lphbInd)
Leo Chang9056f462013-08-01 19:21:11 -070014375 {
14376 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14377 "%s: LPHB IND buffer alloc Fail", __func__);
14378 return ;
14379 }
14380
Leo Changd9df8aa2013-09-26 13:32:26 -070014381 lphbInd->sessionIdx =
Leo Chang9056f462013-08-01 19:21:11 -070014382 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
Leo Changd9df8aa2013-09-26 13:32:26 -070014383 lphbInd->protocolType =
Leo Chang9056f462013-08-01 19:21:11 -070014384 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
Leo Changd9df8aa2013-09-26 13:32:26 -070014385 lphbInd->eventReason =
Leo Chang9056f462013-08-01 19:21:11 -070014386 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
14387
14388 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Leo Changd9df8aa2013-09-26 13:32:26 -070014389 "Get WDI_LPHB_IND bssIdx %d",
Leo Chang9056f462013-08-01 19:21:11 -070014390 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
14391
Leo Changd9df8aa2013-09-26 13:32:26 -070014392 vosMsg.type = eWNI_SME_LPHB_IND;
14393 vosMsg.bodyptr = lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070014394 vosMsg.bodyval = 0;
14395 /* Send message to SME */
14396 if (VOS_STATUS_SUCCESS !=
14397 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14398 {
14399 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
14400 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
Leo Changd9df8aa2013-09-26 13:32:26 -070014401 vos_mem_free(lphbInd);
Leo Chang9056f462013-08-01 19:21:11 -070014402 }
14403 break;
14404 }
14405#endif /* FEATURE_WLAN_LPHB */
Yue Mab9c86f42013-08-14 15:59:08 -070014406 case WDI_PERIODIC_TX_PTRN_FW_IND:
14407 {
14408 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14409 "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, "
14410 "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__,
14411 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx,
14412 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx,
14413 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status,
14414 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap);
14415
14416 break;
14417 }
Leo Chang9056f462013-08-01 19:21:11 -070014418
Ravi Joshid2ca7c42013-07-23 08:37:49 -070014419 case WDI_IBSS_PEER_INACTIVITY_IND:
14420 {
14421 tSirIbssPeerInactivityInd *pIbssInd =
14422 (tSirIbssPeerInactivityInd *)
14423 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
14424
14425 if (NULL == pIbssInd)
14426 {
14427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14428 "Memory allocation failure, "
14429 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
14430 break;
14431 }
14432
14433 pIbssInd->bssIdx =
14434 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
14435 pIbssInd->staIdx =
14436 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
14437 vos_mem_copy(pIbssInd->peerAddr,
14438 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
14439 sizeof(tSirMacAddr));
14440 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
14441 break;
14442 }
14443
Rajeev79dbe4c2013-10-05 11:03:42 +053014444#ifdef FEATURE_WLAN_BATCH_SCAN
14445 case WDI_BATCH_SCAN_RESULT_IND:
14446 {
14447 void *pBatchScanResult;
14448 void *pCallbackContext;
14449 tpAniSirGlobal pMac;
14450
14451 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
14452 "Received WDI_BATCHSCAN_RESULT_IND from FW");
14453
14454 /*sanity check*/
Sunil Duttbd736ed2014-05-26 21:19:41 +053014455 if (NULL == pWDA)
Rajeev79dbe4c2013-10-05 11:03:42 +053014456 {
14457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14458 "%s:pWDA is NULL", __func__);
14459 VOS_ASSERT(0);
14460 return;
14461 }
14462
14463 pBatchScanResult =
14464 (void *)wdiLowLevelInd->wdiIndicationData.pBatchScanResult;
14465 if (NULL == pBatchScanResult)
14466 {
14467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14468 "%s:Batch scan result from FW is null can't invoke HDD callback",
14469 __func__);
14470 VOS_ASSERT(0);
14471 return;
14472 }
14473
14474 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14475 if (NULL == pMac)
14476 {
14477 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14478 "%s:pMac is NULL", __func__);
14479 VOS_ASSERT(0);
14480 return;
14481 }
14482
14483 pCallbackContext = pMac->pmc.batchScanResultCallbackContext;
14484 /*call hdd callback with set batch scan response data*/
14485 if(pMac->pmc.batchScanResultCallback)
14486 {
14487 pMac->pmc.batchScanResultCallback(pCallbackContext,
14488 pBatchScanResult);
14489 }
14490 else
14491 {
14492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14493 "%s:HDD callback is null", __func__);
14494 VOS_ASSERT(0);
14495 }
14496 break;
14497 }
14498#endif
14499
Leo Chang0b0e45a2013-12-15 15:18:55 -080014500#ifdef FEATURE_WLAN_CH_AVOID
14501 case WDI_CH_AVOID_IND:
14502 {
14503 vos_msg_t vosMsg;
14504 tSirChAvoidIndType *chAvoidInd;
14505
14506 chAvoidInd =
14507 (tSirChAvoidIndType *)vos_mem_malloc(sizeof(tSirChAvoidIndType));
14508 if (NULL == chAvoidInd)
14509 {
14510 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14511 "%s: CH_AVOID IND buffer alloc Fail", __func__);
14512 return ;
14513 }
14514
14515 chAvoidInd->avoidRangeCount =
14516 wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidRangeCount;
14517 wpalMemoryCopy((void *)chAvoidInd->avoidFreqRange,
14518 (void *)wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidFreqRange,
14519 chAvoidInd->avoidRangeCount * sizeof(tSirChAvoidFreqType));
14520
14521 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14522 "%s : WDA CH avoid notification", __func__);
14523
14524 vosMsg.type = eWNI_SME_CH_AVOID_IND;
14525 vosMsg.bodyptr = chAvoidInd;
14526 vosMsg.bodyval = 0;
14527 /* Send message to SME */
14528 if (VOS_STATUS_SUCCESS !=
14529 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14530 {
14531 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14532 "post eWNI_SME_CH_AVOID_IND to SME Failed");
14533 vos_mem_free(chAvoidInd);
14534 }
14535 break;
14536 }
14537#endif /* FEATURE_WLAN_CH_AVOID */
14538
Sunil Duttbd736ed2014-05-26 21:19:41 +053014539#ifdef WLAN_FEATURE_LINK_LAYER_STATS
14540 case WDI_LL_STATS_RESULTS_IND:
14541 {
14542 void *pLinkLayerStatsInd;
Sunil Duttbd736ed2014-05-26 21:19:41 +053014543 tpAniSirGlobal pMac;
14544
14545 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14546 "Received WDI_LL_STATS_RESULTS_IND from FW");
14547
14548 /*sanity check*/
14549 if (NULL == pWDA)
14550 {
14551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14552 "%s:pWDA is NULL", __func__);
14553 VOS_ASSERT(0);
14554 return;
14555 }
14556
14557 pLinkLayerStatsInd =
Dino Mycled3d50022014-07-07 12:58:25 +053014558 (void *)wdiLowLevelInd->
14559 wdiIndicationData.wdiLinkLayerStatsResults.pLinkLayerStatsResults;
Sunil Duttbd736ed2014-05-26 21:19:41 +053014560 if (NULL == pLinkLayerStatsInd)
14561 {
14562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14563 "%s:Link Layer Statistics from FW is null can't invoke HDD callback",
14564 __func__);
14565 VOS_ASSERT(0);
14566 return;
14567 }
14568
14569 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14570 if (NULL == pMac)
14571 {
14572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14573 "%s:pMac is NULL", __func__);
14574 VOS_ASSERT(0);
14575 return;
14576 }
14577
Dino Mycled3d50022014-07-07 12:58:25 +053014578 /* call hdd callback with Link Layer Statistics.
14579 * vdev_id/ifacId in link_stats_results will be
14580 * used to retrieve the correct HDD context
14581 */
Sunil Duttbd736ed2014-05-26 21:19:41 +053014582 if (pMac->sme.pLinkLayerStatsIndCallback)
14583 {
Dino Mycled3d50022014-07-07 12:58:25 +053014584 pMac->sme.pLinkLayerStatsIndCallback(pMac->pAdapter,
Sunil Duttbd736ed2014-05-26 21:19:41 +053014585 WDA_LINK_LAYER_STATS_RESULTS_RSP,
Dino Mycled3d50022014-07-07 12:58:25 +053014586 pLinkLayerStatsInd,
14587 wdiLowLevelInd->
14588 wdiIndicationData.wdiLinkLayerStatsResults.macAddr);
Sunil Duttbd736ed2014-05-26 21:19:41 +053014589 }
14590 else
14591 {
14592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14593 "%s:HDD callback is null", __func__);
14594 }
14595 break;
14596 }
14597#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
14598
Dino Mycle41bdc942014-06-10 11:30:24 +053014599#ifdef WLAN_FEATURE_EXTSCAN
14600 case WDI_EXTSCAN_PROGRESS_IND:
14601 case WDI_EXTSCAN_SCAN_AVAILABLE_IND:
14602 case WDI_EXTSCAN_SCAN_RESULT_IND:
14603 case WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND:
14604 case WDI_EXTSCAN_SIGN_RSSI_RESULT_IND:
14605 {
14606 void *pEXTScanData;
14607 void *pCallbackContext;
14608 tpAniSirGlobal pMac;
14609 tANI_U16 indType;
14610
14611 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14612 "Received WDI_EXTSCAN Indications from FW");
14613 /*sanity check*/
14614 if (NULL == pWDA)
14615 {
14616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14617 "%s:pWDA is NULL", __func__);
14618 VOS_ASSERT(0);
14619 return;
14620 }
14621 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_PROGRESS_IND)
14622 {
14623 indType = WDA_EXTSCAN_PROGRESS_IND;
14624
14625 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14626 "WDI_EXTSCAN Indication is WDI_EXTSCAN_PROGRESS_IND");
14627 }
14628 if (wdiLowLevelInd->wdiIndicationType ==
14629 WDI_EXTSCAN_SCAN_AVAILABLE_IND)
14630 {
14631 indType = WDA_EXTSCAN_SCAN_AVAILABLE_IND;
14632
14633 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14634 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_AVAILABLE_IND");
14635 }
14636 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_SCAN_RESULT_IND)
14637 {
14638 indType = WDA_EXTSCAN_SCAN_RESULT_IND;
14639
14640 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14641 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_RESULT_IND");
14642 }
14643 if (wdiLowLevelInd->wdiIndicationType ==
14644 WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND)
14645 {
14646 indType = WDA_EXTSCAN_BSSID_HOTLIST_RESULT_IND;
14647
14648 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14649 "WDI_EXTSCAN Indication is WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND");
14650 }
14651 if (wdiLowLevelInd->wdiIndicationType ==
14652 WDI_EXTSCAN_SIGN_RSSI_RESULT_IND)
14653 {
14654 indType = WDA_EXTSCAN_SIGNF_RSSI_RESULT_IND;
14655
14656 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14657 "WDI_EXTSCAN Indication is WDA_EXTSCAN_SIGNF_RSSI_RESULT_IND");
14658 }
14659
14660 pEXTScanData =
14661 (void *)wdiLowLevelInd->wdiIndicationData.pEXTScanIndData;
14662 if (NULL == pEXTScanData)
14663 {
14664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14665 "%s: EXTSCAN Indication Data is null, can't invoke HDD callback",
14666 __func__);
14667 VOS_ASSERT(0);
14668 return;
14669 }
14670
14671 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14672 if (NULL == pMac)
14673 {
14674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14675 "%s:pMac is NULL", __func__);
14676 VOS_ASSERT(0);
14677 return;
14678 }
14679
14680 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
14681
14682 if(pMac->sme.pEXTScanIndCb)
14683 {
14684 pMac->sme.pEXTScanIndCb(pCallbackContext,
14685 indType,
14686 pEXTScanData);
14687 }
14688 else
14689 {
14690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14691 "%s:HDD callback is null", __func__);
14692 }
14693 break;
14694 }
14695#endif /* WLAN_FEATURE_EXTSCAN */
Abhishek Singh66c16762014-08-14 19:13:19 +053014696 case WDI_DEL_BA_IND:
14697 {
14698 tpBADeleteParams pDelBAInd =
14699 (tpBADeleteParams)vos_mem_malloc(sizeof(tpBADeleteParams));
14700
14701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14702 "Received WDI_DEL_BA_IND from WDI ");
14703 if(NULL == pDelBAInd)
14704 {
14705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14706 "%s: VOS MEM Alloc Failure", __func__);
14707 break;
14708 }
14709 vos_mem_copy(pDelBAInd->peerMacAddr,
14710 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.peerMacAddr,
14711 sizeof(tSirMacAddr));
14712 vos_mem_copy(pDelBAInd->bssId,
14713 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.bssId,
14714 sizeof(tSirMacAddr));
14715 pDelBAInd->staIdx =
14716 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.staIdx;
14717 pDelBAInd->baTID =
14718 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baTID;
14719 pDelBAInd->baDirection =
14720 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baDirection;
14721 pDelBAInd->reasonCode =
14722 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.reasonCode;
14723
14724 WDA_SendMsg(pWDA, SIR_LIM_DEL_BA_IND,
14725 (void *)pDelBAInd , 0) ;
14726 break;
14727 }
Dino Mycle41bdc942014-06-10 11:30:24 +053014728
Jeff Johnson295189b2012-06-20 16:38:30 -070014729 default:
14730 {
14731 /* TODO error */
14732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14733 "Received UNKNOWN Indication from WDI ");
14734 }
14735 }
14736 return ;
14737}
14738
Jeff Johnson295189b2012-06-20 16:38:30 -070014739/*
14740 * BA related processing in WDA.
14741 */
Jeff Johnson295189b2012-06-20 16:38:30 -070014742void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
14743 void* pUserData)
14744{
14745 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14746 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070014747 if(NULL == pWdaParams)
14748 {
14749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014750 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014751 VOS_ASSERT(0) ;
14752 return ;
14753 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014754 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070014755 vos_mem_free(pWdaParams->wdaMsgParam) ;
14756 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14757 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014759 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014760 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
14761 {
14762 tANI_U8 i = 0 ;
14763 tBaActivityInd *baActivityInd = NULL ;
14764 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
14765 tANI_U8 allocSize = sizeof(tBaActivityInd)
14766 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
14767 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
14768 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014769 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014770 if(NULL == baActivityInd)
14771 {
14772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014773 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014774 VOS_ASSERT(0) ;
14775 return;
14776 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014777 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
14778 sizeof(tSirMacAddr)) ;
14779 baActivityInd->baCandidateCnt = baCandidateCount ;
14780
14781 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
14782 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
14783
14784 for(i = 0 ; i < baCandidateCount ; i++)
14785 {
14786 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014787 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
14788 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014789 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
14790 {
14791 baCandidate->baInfo[tid].fBaEnable =
14792 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
14793 baCandidate->baInfo[tid].startingSeqNum =
14794 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
14795 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070014796 wdiBaCandidate++ ;
14797 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014798 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014799 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
14800 }
14801 else
14802 {
14803 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14804 "BA Trigger RSP with Failure received ");
14805 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014806 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014807}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014808
14809
14810/*
14811 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
14812 * during MCC
14813 */
14814void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
14815{
14816 wpt_uint32 enabled;
14817 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
14818 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
14819 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
14820
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053014821 if (NULL == pMac )
14822 {
14823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14824 "%s: Invoked with invalid MAC context ", __func__ );
14825 VOS_ASSERT(0);
14826 return;
14827 }
14828
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014829 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
14830 != eSIR_SUCCESS)
14831 {
14832 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14833 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
14834 return;
14835 }
14836
14837 if(!enabled)
14838 {
14839 return;
14840 }
14841
14842 if(NULL == pWDA)
14843 {
14844 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14845 "%s:WDA context is NULL", __func__);
14846 VOS_ASSERT(0);
14847 return;
14848 }
14849
14850 if(activate)
14851 {
14852 if( VOS_STATUS_SUCCESS !=
14853 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
14854 {
14855 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14856 "Traffic Stats Timer Start Failed ");
14857 return;
14858 }
14859 WDI_DS_ActivateTrafficStats();
14860 }
14861 else
14862 {
14863 WDI_DS_DeactivateTrafficStats();
14864 WDI_DS_ClearTrafficStats();
14865
14866 if( VOS_STATUS_SUCCESS !=
14867 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
14868 {
14869 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14870 "Traffic Stats Timer Stop Failed ");
14871 return;
14872 }
14873 }
14874}
14875
14876/*
14877 * Traffic Stats Timer handler
14878 */
14879void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
14880{
14881 WDI_Status wdiStatus;
14882 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
14883 WDI_TrafficStatsIndType trafficStatsIndParams;
14884 wpt_uint32 length, enabled;
14885 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14886
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053014887 if (NULL == pMac )
14888 {
14889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14890 "%s: Invoked with invalid MAC context ", __func__ );
14891 VOS_ASSERT(0);
14892 return;
14893 }
14894
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014895 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
14896 != eSIR_SUCCESS)
14897 {
14898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14899 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
14900 return;
14901 }
14902
14903 if(!enabled)
14904 {
14905 WDI_DS_DeactivateTrafficStats();
14906 return;
14907 }
14908
14909 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
14910
14911 if(pWdiTrafficStats != NULL)
14912 {
14913 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
14914 trafficStatsIndParams.length = length;
14915 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080014916 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014917 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
14918 trafficStatsIndParams.pUserData = pWDA;
14919
14920 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
14921
14922 if(WDI_STATUS_PENDING == wdiStatus)
14923 {
14924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14925 "Pending received for %s:%d ",__func__,__LINE__ );
14926 }
14927 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
14928 {
14929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14930 "Failure in %s:%d ",__func__,__LINE__ );
14931 }
14932
14933 WDI_DS_ClearTrafficStats();
14934 }
14935 else
14936 {
14937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
14938 "pWdiTrafficStats is Null");
14939 }
14940
14941 if( VOS_STATUS_SUCCESS !=
14942 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
14943 {
14944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
14945 "Traffic Stats Timer Start Failed ");
14946 return;
14947 }
14948}
14949
Jeff Johnson295189b2012-06-20 16:38:30 -070014950/*
14951 * BA Activity check timer handler
14952 */
14953void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
14954{
14955 tANI_U8 curSta = 0 ;
14956 tANI_U8 tid = 0 ;
14957 tANI_U8 size = 0 ;
14958 tANI_U8 baCandidateCount = 0 ;
14959 tANI_U8 newBaCandidate = 0 ;
Abhishek Singh0644e482014-10-06 18:38:23 +053014960 tANI_U32 val;
Jeff Johnson295189b2012-06-20 16:38:30 -070014961 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
Abhishek Singh0644e482014-10-06 18:38:23 +053014962 tpAniSirGlobal pMac;
14963
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014964 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070014965 {
14966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014967 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014968 VOS_ASSERT(0);
14969 return ;
14970 }
14971 if(WDA_MAX_STA < pWDA->wdaMaxSta)
14972 {
14973 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14974 "Inconsistent STA entries in WDA");
14975 VOS_ASSERT(0) ;
Abhishek Singh0644e482014-10-06 18:38:23 +053014976 }
14977 if(NULL == pWDA->pVosContext)
14978 {
14979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14980 "%s: pVosContext is NULL",__func__);
14981 VOS_ASSERT(0);
14982 return ;
14983 }
14984 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Abhishek Singh68883952014-10-14 11:59:05 +053014985 if(NULL == pMac)
14986 {
14987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14988 "%s: pMac is NULL",__func__);
14989 VOS_ASSERT(0);
14990 return ;
14991 }
14992
Abhishek Singh0644e482014-10-06 18:38:23 +053014993 if (wlan_cfgGetInt(pMac,
14994 WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC, &val) !=
14995 eSIR_SUCCESS)
14996 {
14997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14998 "Unable to get WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC");
14999 val = 0;
15000 }
15001
Jeff Johnson295189b2012-06-20 16:38:30 -070015002 /* walk through all STA entries and find out TX packet count */
15003 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
15004 {
Abhishek Singh0644e482014-10-06 18:38:23 +053015005 tANI_U32 currentOperChan = pWDA->wdaStaInfo[curSta].currentOperChan;
Gopichand Nakkala976e3252013-01-03 15:45:56 -080015006#ifdef WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053015007 // We can only do BA on "hard" STAs.
15008 if (!(IS_HWSTA_IDX(curSta)))
15009 {
15010 continue;
15011 }
Gopichand Nakkala976e3252013-01-03 15:45:56 -080015012#endif //WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053015013 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
15014 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070015015 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015016 tANI_U32 txPktCount = 0 ;
15017 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015018 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070015019 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
15020 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070015021 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
15022 curSta, tid, &txPktCount)))
15023 {
15024#if 0
15025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
15026 "************* %d:%d, %d ",curSta, txPktCount,
15027 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
15028#endif
Abhishek Singh0644e482014-10-06 18:38:23 +053015029 if(val && ( (currentOperChan >= SIR_11B_CHANNEL_BEGIN) &&
15030 (currentOperChan <= SIR_11B_CHANNEL_END)))
15031 {
15032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15033 "%s: BTC disabled aggregation - dont start "
15034 "TX ADDBA req",__func__);
15035 }
15036 else if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070015037 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Abhishek Singh424ae432014-12-05 11:54:54 +053015038 && (((eSYSTEM_STA_IN_IBSS_ROLE ==
15039 pWDA->wdaGlobalSystemRole) && txPktCount )
15040 || (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
15041 curSta, tid))))
Jeff Johnson295189b2012-06-20 16:38:30 -070015042 {
15043 /* get prepare for sending message to HAL */
15044 //baCandidate[baCandidateCount].staIdx = curSta ;
15045 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
15046 newBaCandidate = WDA_ENABLE_BA ;
15047 }
15048 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
15049 }
15050 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015051 /* fill the entry for all the sta with given TID's */
15052 if(WDA_ENABLE_BA == newBaCandidate)
15053 {
15054 /* move to next BA candidate */
15055 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
15056 size += sizeof(WDI_TriggerBAReqCandidateType) ;
15057 baCandidateCount++ ;
15058 newBaCandidate = WDA_DISABLE_BA ;
15059 }
15060 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015061 /* prepare and send message to hal */
15062 if( 0 < baCandidateCount)
15063 {
15064 WDI_Status status = WDI_STATUS_SUCCESS ;
15065 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
15066 tWDA_ReqParams *pWdaParams =
15067 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015068 if(NULL == pWdaParams)
15069 {
15070 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015071 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015072 VOS_ASSERT(0) ;
15073 return;
15074 }
15075 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
15076 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
15077 if(NULL == wdiTriggerBaReq)
15078 {
15079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015080 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015081 VOS_ASSERT(0) ;
15082 vos_mem_free(pWdaParams);
15083 return;
15084 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015085 do
15086 {
15087 WDI_TriggerBAReqinfoType *triggerBaInfo =
15088 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
15089 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
15090 /* TEMP_FIX: Need to see if WDI need check for assoc session for
15091 * for each request */
15092 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
15093 triggerBaInfo->ucBASessionID = 0;
15094 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
15095 } while(0) ;
15096 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
15097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015098 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015099 pWdaParams->pWdaContext = pWDA;
15100 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
15101 pWdaParams->wdaMsgParam = NULL;
15102 status = WDI_TriggerBAReq(wdiTriggerBaReq,
15103 WDA_TriggerBaReqCallback, pWdaParams) ;
15104 if(IS_WDI_STATUS_FAILURE(status))
15105 {
15106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15107 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
15108 vos_mem_free(pWdaParams->wdaMsgParam) ;
15109 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15110 vos_mem_free(pWdaParams) ;
15111 }
15112 }
15113 else
15114 {
15115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
15116 "There is no TID for initiating BA");
15117 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015118 if( VOS_STATUS_SUCCESS !=
15119 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
15120 {
15121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15122 "BA Activity Timer Stop Failed ");
15123 return ;
15124 }
15125 if( VOS_STATUS_SUCCESS !=
15126 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
15127 {
15128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15129 "BA Activity Timer Start Failed ");
15130 return;
15131 }
15132 return ;
15133}
Jeff Johnson295189b2012-06-20 16:38:30 -070015134/*
15135 * WDA common routine to create timer used by WDA.
15136 */
15137static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
15138{
Jeff Johnson295189b2012-06-20 16:38:30 -070015139 VOS_STATUS status = VOS_STATUS_SUCCESS ;
15140 tANI_U32 val = 0 ;
15141 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
15142
15143 if(NULL == pMac)
15144 {
15145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015146 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015147 VOS_ASSERT(0);
15148 return VOS_STATUS_E_FAILURE;
15149 }
15150 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
15151 != eSIR_SUCCESS)
15152 {
15153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15154 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
15155 return VOS_STATUS_E_FAILURE;
15156 }
15157 val = SYS_MS_TO_TICKS(val) ;
15158
15159 /* BA activity check timer */
15160 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
15161 "BA Activity Check timer", WDA_TimerHandler,
15162 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
15163 if(status != TX_SUCCESS)
15164 {
15165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15166 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015167 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015168 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015169 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015170 /* Tx Complete Timeout timer */
15171 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
15172 "Tx Complete Check timer", WDA_TimerHandler,
15173 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015174 if(status != TX_SUCCESS)
15175 {
15176 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15177 "Unable to create Tx Complete Timeout timer");
15178 /* Destroy timer of BA activity check timer */
15179 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
15180 if(status != TX_SUCCESS)
15181 {
15182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15183 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015184 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015185 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015186 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015187 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015188
15189 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
15190
15191 /* Traffic Stats timer */
15192 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
15193 "Traffic Stats timer", WDA_TimerHandler,
15194 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
15195 if(status != TX_SUCCESS)
15196 {
15197 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15198 "Unable to create traffic stats timer");
15199 /* Destroy timer of BA activity check timer */
15200 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
15201 if(status != TX_SUCCESS)
15202 {
15203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15204 "Unable to Destroy BA activity timer");
15205 }
15206 /* Destroy timer of tx complete timer */
15207 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
15208 if(status != TX_SUCCESS)
15209 {
15210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15211 "Unable to Tx complete timer");
15212 }
15213 return VOS_STATUS_E_FAILURE ;
15214 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015215 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015216}
Jeff Johnson295189b2012-06-20 16:38:30 -070015217/*
15218 * WDA common routine to destroy timer used by WDA.
15219 */
15220static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
15221{
15222 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015223 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
15224 if(status != TX_SUCCESS)
15225 {
15226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15227 "Unable to Destroy Tx Complete Timeout timer");
15228 return eSIR_FAILURE ;
15229 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015230 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
15231 if(status != TX_SUCCESS)
15232 {
15233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15234 "Unable to Destroy BA activity timer");
15235 return eSIR_FAILURE ;
15236 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015237 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
15238 if(status != TX_SUCCESS)
15239 {
15240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15241 "Unable to Destroy traffic stats timer");
15242 return eSIR_FAILURE ;
15243 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015244 return eSIR_SUCCESS ;
15245}
Jeff Johnson295189b2012-06-20 16:38:30 -070015246/*
15247 * WDA timer handler.
15248 */
15249void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
15250{
15251 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
15252 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015253 /*
15254 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
15255 */
15256 wdaMsg.type = timerInfo ;
15257 wdaMsg.bodyptr = NULL;
15258 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070015259 /* post the message.. */
15260 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
15261 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
15262 {
15263 vosStatus = VOS_STATUS_E_BADMSG;
15264 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015265}
Jeff Johnson295189b2012-06-20 16:38:30 -070015266/*
15267 * WDA Tx Complete timeout Indication.
15268 */
15269void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
15270{
15271 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015272 if( pWDA->pAckTxCbFunc )
15273 {
15274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015275 "TxComplete timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070015276 pWDA->pAckTxCbFunc( pMac, 0);
15277 pWDA->pAckTxCbFunc = NULL;
15278 }
15279 else
15280 {
15281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015282 "There is no request pending for TxComplete and wait timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070015283 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015284}
Jeff Johnson295189b2012-06-20 16:38:30 -070015285/*
15286 * WDA Set REG Domain to VOS NV
15287 */
Abhishek Singha306a442013-11-07 18:39:01 +053015288eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId,
15289 tAniBool sendRegHint)
Jeff Johnson295189b2012-06-20 16:38:30 -070015290{
Abhishek Singha306a442013-11-07 18:39:01 +053015291 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId, sendRegHint))
Jeff Johnson295189b2012-06-20 16:38:30 -070015292 {
15293 return eHAL_STATUS_INVALID_PARAMETER;
15294 }
15295 return eHAL_STATUS_SUCCESS;
15296}
Jeff Johnson295189b2012-06-20 16:38:30 -070015297
Jeff Johnson295189b2012-06-20 16:38:30 -070015298#ifdef FEATURE_WLAN_SCAN_PNO
15299/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015300 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015301 *
15302 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015303void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015304{
15305 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015306 tSirPNOScanReq *pPNOScanReqParams;
15307
Jeff Johnson295189b2012-06-20 16:38:30 -070015308 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015309 "<------ %s, wdiStatus: %d",__func__, status);
Yue Ma7f44bbe2013-04-12 11:47:39 -070015310 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070015311 {
15312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015313 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015314 VOS_ASSERT(0) ;
15315 return ;
15316 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015317
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015318 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
15319 if(pPNOScanReqParams->statusCallback)
15320 {
15321 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
15322 (status == WDI_STATUS_SUCCESS) ?
15323 VOS_STATUS_SUCCESS : VOS_STATUS_E_FAILURE);
15324 }
15325
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053015326 if (pPNOScanReqParams->enable == 1)
15327 {
15328 if (pPNOScanReqParams->aNetworks)
15329 vos_mem_free(pPNOScanReqParams->aNetworks);
15330 if (pPNOScanReqParams->p24GProbeTemplate)
15331 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
15332 if (pPNOScanReqParams->p5GProbeTemplate)
15333 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
15334 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015335 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15336 vos_mem_free(pWdaParams->wdaMsgParam);
15337 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015338
15339 return ;
15340}
Jeff Johnson295189b2012-06-20 16:38:30 -070015341/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015342 * FUNCTION: WDA_PNOScanReqCallback
15343 * Free memory.
15344 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
15345 */
15346void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015347{
Yue Ma7f44bbe2013-04-12 11:47:39 -070015348 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015349 tSirPNOScanReq *pPNOScanReqParams;
Yue Ma7f44bbe2013-04-12 11:47:39 -070015350
15351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15352 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15353
15354 if(NULL == pWdaParams)
15355 {
15356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15357 "%s: pWdaParams received NULL", __func__);
15358 VOS_ASSERT(0);
15359 return;
15360 }
15361
15362 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15363 {
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015364 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
15365 if(pPNOScanReqParams->statusCallback)
15366 {
15367 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
15368 VOS_STATUS_E_FAILURE);
15369 }
15370
Hanumantha Reddy Pothula06e87b22015-03-02 18:02:23 +053015371 if (pPNOScanReqParams->enable == 1)
15372 {
15373 if (pPNOScanReqParams->aNetworks)
15374 vos_mem_free(pPNOScanReqParams->aNetworks);
15375 if (pPNOScanReqParams->p24GProbeTemplate)
15376 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
15377 if (pPNOScanReqParams->p5GProbeTemplate)
15378 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
15379 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015380 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15381 vos_mem_free(pWdaParams->wdaMsgParam);
15382 vos_mem_free(pWdaParams);
15383 }
15384
15385 return;
15386}
15387/*
15388 * FUNCTION: WDA_UpdateScanParamsRespCallback
15389 *
15390 */
15391void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
15392{
15393 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070015394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015395 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070015396 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070015397 {
15398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015399 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015400 VOS_ASSERT(0) ;
15401 return ;
15402 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015403
15404 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15405 vos_mem_free(pWdaParams->wdaMsgParam);
15406 vos_mem_free(pWdaParams);
15407
Jeff Johnson295189b2012-06-20 16:38:30 -070015408 return ;
15409}
Jeff Johnson295189b2012-06-20 16:38:30 -070015410/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015411 * FUNCTION: WDA_UpdateScanParamsReqCallback
15412 * Free memory.
15413 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
15414 */
15415void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
15416{
15417 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15418
15419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15420 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15421
15422 if(NULL == pWdaParams)
15423 {
15424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15425 "%s: pWdaParams received NULL", __func__);
15426 VOS_ASSERT(0);
15427 return;
15428 }
15429
15430 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15431 {
15432 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15433 vos_mem_free(pWdaParams->wdaMsgParam);
15434 vos_mem_free(pWdaParams);
15435 }
15436
15437 return;
15438}
15439/*
Jeff Johnson295189b2012-06-20 16:38:30 -070015440 * FUNCTION: WDA_ProcessSetPreferredNetworkList
15441 * Request to WDI to set Preferred Network List.Offload
15442 */
15443VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
15444 tSirPNOScanReq *pPNOScanReqParams)
15445{
Jeff Johnson43971f52012-07-17 12:26:56 -070015446 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015447 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
15448 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
15449 tWDA_ReqParams *pWdaParams ;
15450 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070015451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015452 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015453 if(NULL == pwdiPNOScanReqInfo)
15454 {
15455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015456 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015457 VOS_ASSERT(0);
15458 return VOS_STATUS_E_NOMEM;
15459 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015460 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15461 if(NULL == pWdaParams)
15462 {
15463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015464 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015465 VOS_ASSERT(0);
15466 vos_mem_free(pwdiPNOScanReqInfo);
15467 return VOS_STATUS_E_NOMEM;
15468 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015469 //
15470 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
15471 //
15472 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
15473 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070015474 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
15475 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
15476 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015477 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
15478 {
15479 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
15480 &pPNOScanReqParams->aNetworks[i],
15481 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
15482 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015483 /*Scan timer intervals*/
15484 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
15485 &pPNOScanReqParams->scanTimers,
15486 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070015487 /*Probe template for 2.4GHz band*/
15488 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
15489 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
15490 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070015491 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
15492 pPNOScanReqParams->p24GProbeTemplate,
15493 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070015494 /*Probe template for 5GHz band*/
15495 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
15496 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
15497 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070015498 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
15499 pPNOScanReqParams->p5GProbeTemplate,
15500 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070015501 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
15502 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015503
Jeff Johnson295189b2012-06-20 16:38:30 -070015504 /* Store Params pass it to WDI */
15505 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
15506 pWdaParams->pWdaContext = pWDA;
15507 /* Store param pointer as passed in by caller */
15508 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015509 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015510 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015511 if(IS_WDI_STATUS_FAILURE(status))
15512 {
15513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15514 "Failure in Set PNO REQ WDI API, free all the memory " );
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015515 if(pPNOScanReqParams->statusCallback)
15516 {
15517 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
15518 VOS_STATUS_E_FAILURE);
15519 }
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053015520 if (pPNOScanReqParams->enable == 1)
15521 {
15522 if (pPNOScanReqParams->aNetworks)
15523 vos_mem_free(pPNOScanReqParams->aNetworks);
15524 if (pPNOScanReqParams->p24GProbeTemplate)
15525 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
15526 if (pPNOScanReqParams->p5GProbeTemplate)
15527 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
15528 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015529 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15530 vos_mem_free(pWdaParams->wdaMsgParam);
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053015531
Jeff Johnson295189b2012-06-20 16:38:30 -070015532 pWdaParams->wdaWdiApiMsgParam = NULL;
15533 pWdaParams->wdaMsgParam = NULL;
15534 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015535 return CONVERT_WDI2VOS_STATUS(status) ;
15536}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015537
15538#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
15539
15540void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
15541{
15542 /*Convert the CSR Auth types to WDI Auth types */
15543 switch (csrAuthType)
15544 {
15545 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
15546 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
15547 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015548#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015549 case eCSR_AUTH_TYPE_CCKM_WPA:
15550 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
15551 break;
15552#endif
15553 case eCSR_AUTH_TYPE_WPA:
15554 *AuthType = eWDA_AUTH_TYPE_WPA;
15555 break;
15556 case eCSR_AUTH_TYPE_WPA_PSK:
15557 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
15558 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015559#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015560 case eCSR_AUTH_TYPE_CCKM_RSN:
15561 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
15562 break;
15563#endif
15564 case eCSR_AUTH_TYPE_RSN:
15565 *AuthType = eWDA_AUTH_TYPE_RSN;
15566 break;
15567 case eCSR_AUTH_TYPE_RSN_PSK:
15568 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
15569 break;
15570#if defined WLAN_FEATURE_VOWIFI_11R
15571 case eCSR_AUTH_TYPE_FT_RSN:
15572 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
15573 break;
15574 case eCSR_AUTH_TYPE_FT_RSN_PSK:
15575 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
15576 break;
15577#endif
15578#ifdef FEATURE_WLAN_WAPI
15579 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
15580 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
15581 break;
15582 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
15583 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
15584 break;
15585#endif /* FEATURE_WLAN_WAPI */
15586 case eCSR_AUTH_TYPE_SHARED_KEY:
15587 case eCSR_AUTH_TYPE_AUTOSWITCH:
15588 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
15589 break;
15590#if 0
15591 case eCSR_AUTH_TYPE_SHARED_KEY:
15592 *AuthType = eWDA_AUTH_TYPE_SHARED_KEY;
15593 break;
15594 case eCSR_AUTH_TYPE_AUTOSWITCH:
15595 *AuthType = eWDA_AUTH_TYPE_AUTOSWITCH;
15596#endif
15597 default:
Deepthi Gowribfd17132014-11-14 17:59:04 +053015598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015599 "%s: Unknown Auth Type", __func__);
15600 break;
15601 }
15602}
15603void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
15604{
15605 switch (csrEncrType)
15606 {
15607 case eCSR_ENCRYPT_TYPE_NONE:
15608 *EncrType = WDI_ED_NONE;
15609 break;
15610 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
15611 case eCSR_ENCRYPT_TYPE_WEP40:
15612 *EncrType = WDI_ED_WEP40;
15613 break;
15614 case eCSR_ENCRYPT_TYPE_WEP104:
15615 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
15616 *EncrType = WDI_ED_WEP104;
15617 break;
15618 case eCSR_ENCRYPT_TYPE_TKIP:
15619 *EncrType = WDI_ED_TKIP;
15620 break;
15621 case eCSR_ENCRYPT_TYPE_AES:
15622 *EncrType = WDI_ED_CCMP;
15623 break;
15624#ifdef WLAN_FEATURE_11W
15625 case eCSR_ENCRYPT_TYPE_AES_CMAC:
15626 *EncrType = WDI_ED_AES_128_CMAC;
15627 break;
15628#endif
15629#ifdef FEATURE_WLAN_WAPI
15630 case eCSR_ENCRYPT_TYPE_WPI:
15631 *EncrType = WDI_ED_WPI;
15632 break;
15633#endif
15634 case eCSR_ENCRYPT_TYPE_ANY:
15635 *EncrType = WDI_ED_ANY;
15636 break;
15637
15638 default:
15639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15640 "%s: Unknown Encryption Type", __func__);
15641 break;
15642 }
15643}
15644
15645/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015646 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015647 * Request to WDI to set Roam Offload Scan
15648 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015649VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015650 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
15651{
15652 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015653 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
15654 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015655 tWDA_ReqParams *pWdaParams ;
15656 v_U8_t csrAuthType;
15657 WDI_RoamNetworkType *pwdiRoamNetworkType;
15658 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
15659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15660 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015661 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015662 {
15663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15664 "%s: VOS MEM Alloc Failure", __func__);
15665 VOS_ASSERT(0);
15666 return VOS_STATUS_E_NOMEM;
15667 }
15668 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15669 if (NULL == pWdaParams)
15670 {
15671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15672 "%s: VOS MEM Alloc Failure", __func__);
15673 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015674 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015675 return VOS_STATUS_E_NOMEM;
15676 }
15677
15678 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015679 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015680 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015681 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
15682 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015683 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
15684 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
15685 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
15686 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
15687 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
15688 sizeof(pwdiRoamNetworkType->currAPbssid));
15689 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
15690 csrAuthType);
15691 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
15692 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
15693 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
15694 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
15695 pwdiRoamOffloadScanInfo->LookupThreshold =
15696 pRoamOffloadScanReqParams->LookupThreshold ;
Varun Reddy Yeturu6c5e25c2014-01-09 21:55:37 -080015697 pwdiRoamOffloadScanInfo->RxSensitivityThreshold =
15698 pRoamOffloadScanReqParams->RxSensitivityThreshold;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015699 pwdiRoamOffloadScanInfo->RoamRssiDiff =
15700 pRoamOffloadScanReqParams->RoamRssiDiff ;
Sameer Thalappil4ae66ec2013-11-05 14:17:35 -080015701 pwdiRoamOffloadScanInfo->MAWCEnabled =
15702 pRoamOffloadScanReqParams->MAWCEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015703 pwdiRoamOffloadScanInfo->Command =
15704 pRoamOffloadScanReqParams->Command ;
15705 pwdiRoamOffloadScanInfo->StartScanReason =
15706 pRoamOffloadScanReqParams->StartScanReason ;
15707 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
15708 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
15709 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
15710 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
15711 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
15712 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
15713 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
15714 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
15715 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
15716 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015717 pwdiRoamOffloadScanInfo->IsESEEnabled =
15718 pRoamOffloadScanReqParams->IsESEEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015719 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
15720 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
15721 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
15722 pwdiRoamNetworkType->ssId.ucLength =
15723 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
15724 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
15725 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
15726 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
15727 pwdiRoamNetworkType->ChannelCount =
15728 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
15729 pwdiRoamOffloadScanInfo->ChannelCacheType =
15730 pRoamOffloadScanReqParams->ChannelCacheType;
15731 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
15732 pRoamOffloadScanReqParams->ValidChannelList,
15733 pRoamOffloadScanReqParams->ValidChannelCount);
15734 pwdiRoamOffloadScanInfo->ValidChannelCount =
15735 pRoamOffloadScanReqParams->ValidChannelCount;
15736 pwdiRoamOffloadScanInfo->us24GProbeSize =
15737 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
15738 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
15739 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
15740 pRoamOffloadScanReqParams->p24GProbeTemplate,
15741 pwdiRoamOffloadScanInfo->us24GProbeSize);
15742 pwdiRoamOffloadScanInfo->us5GProbeSize =
15743 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
15744 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
15745 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
15746 pRoamOffloadScanReqParams->p5GProbeTemplate,
15747 pwdiRoamOffloadScanInfo->us5GProbeSize);
15748 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
15749 pRoamOffloadScanReqParams->MDID.mdiePresent;
15750 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
15751 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015752 pwdiRoamOffloadScanInfo->nProbes =
15753 pRoamOffloadScanReqParams->nProbes;
15754 pwdiRoamOffloadScanInfo->HomeAwayTime =
15755 pRoamOffloadScanReqParams->HomeAwayTime;
15756 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015757 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015758 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015759 pWdaParams->pWdaContext = pWDA;
15760 /* Store param pointer as passed in by caller */
15761 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015762 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015763 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
15764 if(IS_WDI_STATUS_FAILURE(status))
15765 {
15766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15767 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
15768 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15769 vos_mem_free(pWdaParams->wdaMsgParam);
15770 pWdaParams->wdaWdiApiMsgParam = NULL;
15771 pWdaParams->wdaMsgParam = NULL;
15772 }
15773 return CONVERT_WDI2VOS_STATUS(status) ;
15774}
15775#endif
15776
Jeff Johnson295189b2012-06-20 16:38:30 -070015777/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015778 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015779 *
15780 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015781void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015782{
15783 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15784
15785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015786 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015787
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053015788 if(NULL == pWdaParams)
15789 {
15790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015791 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053015792 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070015793 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053015794 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015795
Jeff Johnson295189b2012-06-20 16:38:30 -070015796 vos_mem_free(pWdaParams->wdaMsgParam) ;
15797 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15798 vos_mem_free(pWdaParams) ;
15799
15800 return ;
15801}
15802/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015803 * FUNCTION: WDA_RssiFilterReqCallback
15804 * Free memory.
15805 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
15806 */
15807void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
15808{
15809 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15810
15811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15812 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15813
15814 if(NULL == pWdaParams)
15815 {
15816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15817 "%s: pWdaParams received NULL", __func__);
15818 VOS_ASSERT(0);
15819 return;
15820 }
15821
15822 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15823 {
15824 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15825 vos_mem_free(pWdaParams->wdaMsgParam);
15826 vos_mem_free(pWdaParams);
15827 }
15828
15829 return;
15830}
15831/*
Jeff Johnson295189b2012-06-20 16:38:30 -070015832 * FUNCTION: WDA_ProcessSetPreferredNetworkList
15833 * Request to WDI to set Preferred Network List.Offload
15834 */
15835VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
15836 tSirSetRSSIFilterReq* pRssiFilterParams)
15837{
Jeff Johnson43971f52012-07-17 12:26:56 -070015838 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015839 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
15840 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
15841 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015843 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015844 if(NULL == pwdiSetRssiFilterReqInfo)
15845 {
15846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015847 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015848 VOS_ASSERT(0);
15849 return VOS_STATUS_E_NOMEM;
15850 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015851 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15852 if(NULL == pWdaParams)
15853 {
15854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015855 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015856 VOS_ASSERT(0);
15857 vos_mem_free(pwdiSetRssiFilterReqInfo);
15858 return VOS_STATUS_E_NOMEM;
15859 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015860 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070015861 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
15862 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015863
Jeff Johnson295189b2012-06-20 16:38:30 -070015864 /* Store Params pass it to WDI */
15865 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
15866 pWdaParams->pWdaContext = pWDA;
15867 /* Store param pointer as passed in by caller */
15868 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015869 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015870 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015871 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015872 if(IS_WDI_STATUS_FAILURE(status))
15873 {
15874 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15875 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
15876 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15877 vos_mem_free(pWdaParams->wdaMsgParam);
15878 pWdaParams->wdaWdiApiMsgParam = NULL;
15879 pWdaParams->wdaMsgParam = NULL;
15880 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015881 return CONVERT_WDI2VOS_STATUS(status) ;
15882}
15883
Jeff Johnson295189b2012-06-20 16:38:30 -070015884/*
15885 * FUNCTION: WDA_ProcessUpdateScanParams
15886 * Request to WDI to update Scan Parameters
15887 */
15888VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
15889 tSirUpdateScanParams *pUpdateScanParams)
15890{
Jeff Johnson43971f52012-07-17 12:26:56 -070015891 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015892 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
15893 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
15894 sizeof(WDI_UpdateScanParamsInfoType)) ;
15895 tWDA_ReqParams *pWdaParams ;
15896 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070015897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015898 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015899 if(NULL == wdiUpdateScanParamsInfoType)
15900 {
15901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015902 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015903 VOS_ASSERT(0);
15904 return VOS_STATUS_E_NOMEM;
15905 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015906 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15907 if ( NULL == pWdaParams )
15908 {
15909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015910 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015911 VOS_ASSERT(0);
15912 vos_mem_free(wdiUpdateScanParamsInfoType);
15913 return VOS_STATUS_E_NOMEM;
15914 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015915 //
15916 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
15917 //
Jeff Johnson295189b2012-06-20 16:38:30 -070015918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15919 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
15920 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
15921 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
Jeff Johnson9a9ed0d2013-11-26 13:36:52 -080015922 "sir struct %zu wdi struct %zu",
Jeff Johnson295189b2012-06-20 16:38:30 -070015923 pUpdateScanParams->b11dEnabled,
15924 pUpdateScanParams->b11dResolved,
15925 pUpdateScanParams->ucChannelCount,
15926 pUpdateScanParams->usPassiveMinChTime,
15927 pUpdateScanParams->usPassiveMaxChTime,
15928 pUpdateScanParams->usActiveMinChTime,
15929 pUpdateScanParams->usActiveMaxChTime,
15930 sizeof(tSirUpdateScanParams),
15931 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
15932
Jeff Johnson295189b2012-06-20 16:38:30 -070015933 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
15934 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070015935 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
15936 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070015937 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
15938 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070015939 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
15940 pUpdateScanParams->usActiveMaxChTime;
15941 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
15942 pUpdateScanParams->usActiveMinChTime;
15943 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
15944 pUpdateScanParams->usPassiveMaxChTime;
15945 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
15946 pUpdateScanParams->usPassiveMinChTime;
15947
Jeff Johnson295189b2012-06-20 16:38:30 -070015948 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053015949 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
15950 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070015951
Jeff Johnson295189b2012-06-20 16:38:30 -070015952 for ( i = 0; i <
15953 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
15954 i++)
15955 {
15956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15957 "Update Scan Parameters channel: %d",
15958 pUpdateScanParams->aChannels[i]);
15959
15960 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
15961 pUpdateScanParams->aChannels[i];
15962 }
15963
Yue Ma7f44bbe2013-04-12 11:47:39 -070015964 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
15965 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015966
Jeff Johnson295189b2012-06-20 16:38:30 -070015967 /* Store Params pass it to WDI */
15968 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
15969 pWdaParams->pWdaContext = pWDA;
15970 /* Store param pointer as passed in by caller */
15971 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070015972
Jeff Johnson295189b2012-06-20 16:38:30 -070015973
15974
15975 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015976 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015977 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015978 if(IS_WDI_STATUS_FAILURE(status))
15979 {
15980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15981 "Failure in Update Scan Params EQ WDI API, free all the memory " );
15982 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15983 vos_mem_free(pWdaParams->wdaMsgParam);
15984 vos_mem_free(pWdaParams);
15985 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015986 return CONVERT_WDI2VOS_STATUS(status) ;
15987}
15988#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015989
15990#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
15991/*
15992 * FUNCTION: WDA_RoamOffloadScanReqCallback
15993 *
15994 */
15995void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
15996{
15997 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070015998 vos_msg_t vosMsg;
15999 wpt_uint8 reason = 0;
16000
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070016001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016002 "<------ %s " ,__func__);
16003 if (NULL == pWdaParams)
16004 {
16005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16006 "%s: pWdaParams received NULL", __func__);
16007 VOS_ASSERT(0) ;
16008 return ;
16009 }
16010 if ( pWdaParams != NULL )
16011 {
16012 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
16013 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070016014 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016015 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16016 }
16017 if ( pWdaParams->wdaMsgParam != NULL)
16018 {
16019 vos_mem_free(pWdaParams->wdaMsgParam);
16020 }
16021
16022 vos_mem_free(pWdaParams) ;
16023 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070016024 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
16025 vosMsg.bodyptr = NULL;
16026 if (WDI_STATUS_SUCCESS != status)
16027 {
16028 reason = 0;
16029 }
16030 vosMsg.bodyval = reason;
16031 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16032 {
16033 /* free the mem and return */
16034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsone384c822013-10-30 12:21:17 -070016035 "%s: Failed to post the rsp to UMAC", __func__);
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070016036 }
16037
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016038 return ;
16039}
16040#endif
16041
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080016042/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016043 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080016044 *
16045 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070016046void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080016047{
16048 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16049
16050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16051 "<------ %s " ,__func__);
16052
16053 if(NULL == pWdaParams)
16054 {
16055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16056 "%s: pWdaParams received NULL", __func__);
16057 VOS_ASSERT(0);
16058 return;
16059 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070016060
16061 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16062 vos_mem_free(pWdaParams->wdaMsgParam);
16063 vos_mem_free(pWdaParams);
16064
16065 return;
16066}
16067/*
16068 * FUNCTION: WDA_SetPowerParamsReqCallback
16069 * Free memory.
16070 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
16071 */
16072void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
16073{
16074 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16075
16076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16077 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16078
16079 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080016080 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070016081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16082 "%s: pWdaParams received NULL", __func__);
16083 VOS_ASSERT(0);
16084 return;
16085 }
16086
16087 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16088 {
16089 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16090 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080016091 vos_mem_free(pWdaParams);
16092 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070016093
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080016094 return;
16095}
16096
Jeff Johnson295189b2012-06-20 16:38:30 -070016097#ifdef WLAN_FEATURE_PACKET_FILTERING
16098/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016099 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070016100 *
16101 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070016102void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016103 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
16104 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016105{
16106 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070016107 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016108 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016109 if(NULL == pWdaParams)
16110 {
16111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016112 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016113 VOS_ASSERT(0) ;
16114 return ;
16115 }
16116
16117 vos_mem_free(pWdaParams->wdaMsgParam) ;
16118 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16119 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016120 //print a msg, nothing else to do
16121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016122 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070016123 return ;
16124}
Jeff Johnson295189b2012-06-20 16:38:30 -070016125/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016126 * FUNCTION: WDA_8023MulticastListReqCallback
16127 * Free memory.
16128 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
16129 */
16130void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
16131{
16132 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16133
16134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16135 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16136
16137 if(NULL == pWdaParams)
16138 {
16139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16140 "%s: pWdaParams received NULL", __func__);
16141 VOS_ASSERT(0);
16142 return;
16143 }
16144
16145 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16146 {
16147 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16148 vos_mem_free(pWdaParams->wdaMsgParam);
16149 vos_mem_free(pWdaParams);
16150 }
16151
16152 return;
16153}
16154/*
Jeff Johnson295189b2012-06-20 16:38:30 -070016155 * FUNCTION: WDA_Process8023MulticastListReq
16156 * Request to WDI to add 8023 Multicast List
16157 */
16158VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
16159 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
16160{
Jeff Johnson43971f52012-07-17 12:26:56 -070016161 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016162 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
16163 tWDA_ReqParams *pWdaParams ;
16164 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070016165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016166 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016167 pwdiFltPktSetMcListReqParamsType =
16168 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
16169 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
16170 ) ;
16171 if(NULL == pwdiFltPktSetMcListReqParamsType)
16172 {
16173 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016174 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016175 return VOS_STATUS_E_NOMEM;
16176 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016177 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16178 if(NULL == pWdaParams)
16179 {
16180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016181 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016182 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
16183 return VOS_STATUS_E_NOMEM;
16184 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016185
Jeff Johnson295189b2012-06-20 16:38:30 -070016186 //
16187 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
16188 //
16189 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070016190 pRcvFltMcAddrList->ulMulticastAddrCnt;
16191
16192 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
16193 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
16194 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
16195 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
16196
Jeff Johnson295189b2012-06-20 16:38:30 -070016197 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
16198 {
16199 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
16200 &(pRcvFltMcAddrList->multicastAddr[i]),
16201 sizeof(tSirMacAddr));
16202 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070016203 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
16204 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016205
Jeff Johnson295189b2012-06-20 16:38:30 -070016206 /* Store Params pass it to WDI */
16207 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
16208 pWdaParams->pWdaContext = pWDA;
16209 /* Store param pointer as passed in by caller */
16210 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070016211 status = WDI_8023MulticastListReq(
16212 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016213 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016214 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016215 if(IS_WDI_STATUS_FAILURE(status))
16216 {
16217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16218 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
16219 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16220 vos_mem_free(pWdaParams->wdaMsgParam);
16221 vos_mem_free(pWdaParams);
16222 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016223 return CONVERT_WDI2VOS_STATUS(status) ;
16224}
Jeff Johnson295189b2012-06-20 16:38:30 -070016225/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016226 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070016227 *
16228 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016229void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016230 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
16231 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016232{
16233 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070016234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016235 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016236 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070016237 if(NULL == pWdaParams)
16238 {
16239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016240 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016241 VOS_ASSERT(0) ;
16242 return ;
16243 }
16244
16245 vos_mem_free(pWdaParams->wdaMsgParam) ;
16246 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16247 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016248 //print a msg, nothing else to do
16249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016250 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070016251 return ;
16252}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016253
16254/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016255 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
16256 * Free memory.
16257 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016258 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070016259void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016260 void* pUserData)
16261{
16262 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16263
16264 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16265 "<------ %s, wdiStatus: %d",
16266 __func__, wdiStatus);
16267
16268 if (NULL == pWdaParams)
16269 {
16270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16271 "%s: Invalid pWdaParams pointer", __func__);
16272 VOS_ASSERT(0);
16273 return;
16274 }
16275
16276 if (IS_WDI_STATUS_FAILURE(wdiStatus))
16277 {
16278 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16279 vos_mem_free(pWdaParams->wdaMsgParam);
16280 vos_mem_free(pWdaParams);
16281 }
16282
16283 return;
16284}
16285
Jeff Johnson295189b2012-06-20 16:38:30 -070016286/*
16287 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
16288 * Request to WDI to set Receive Filters
16289 */
16290VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
16291 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
16292{
Jeff Johnson43971f52012-07-17 12:26:56 -070016293 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016294 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
16295 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
16296 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
16297 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
16298 tWDA_ReqParams *pWdaParams ;
16299 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070016300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016301 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016302 if(NULL == pwdiSetRcvPktFilterReqParamsType)
16303 {
16304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016305 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016306 VOS_ASSERT(0);
16307 return VOS_STATUS_E_NOMEM;
16308 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016309 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16310 if(NULL == pWdaParams)
16311 {
16312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016313 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016314 VOS_ASSERT(0);
16315 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
16316 return VOS_STATUS_E_NOMEM;
16317 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016318 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
16319 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
16320 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
16321 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070016322 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
16323 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
16324
16325 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
16326 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070016327
16328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16329 "FID %d FT %d NParams %d CT %d",
16330 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
16331 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
16332 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
16333 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070016334 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
16335 {
16336 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
16337 &pRcvPktFilterCfg->paramsData[i],
16338 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070016339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016340 "Proto %d Comp Flag %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070016341 pwdiSetRcvPktFilterReqParamsType->
16342 wdiPktFilterCfg.paramsData[i].protocolLayer,
16343 pwdiSetRcvPktFilterReqParamsType->
16344 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070016345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016346 "Data Offset %d Data Len %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070016347 pwdiSetRcvPktFilterReqParamsType->
16348 wdiPktFilterCfg.paramsData[i].dataOffset,
16349 pwdiSetRcvPktFilterReqParamsType->
16350 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070016351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016352 "CData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070016353 pwdiSetRcvPktFilterReqParamsType->
16354 wdiPktFilterCfg.paramsData[i].compareData[0],
16355 pwdiSetRcvPktFilterReqParamsType->
16356 wdiPktFilterCfg.paramsData[i].compareData[1],
16357 pwdiSetRcvPktFilterReqParamsType->
16358 wdiPktFilterCfg.paramsData[i].compareData[2],
16359 pwdiSetRcvPktFilterReqParamsType->
16360 wdiPktFilterCfg.paramsData[i].compareData[3],
16361 pwdiSetRcvPktFilterReqParamsType->
16362 wdiPktFilterCfg.paramsData[i].compareData[4],
16363 pwdiSetRcvPktFilterReqParamsType->
16364 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070016365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016366 "MData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070016367 pwdiSetRcvPktFilterReqParamsType->
16368 wdiPktFilterCfg.paramsData[i].dataMask[0],
16369 pwdiSetRcvPktFilterReqParamsType->
16370 wdiPktFilterCfg.paramsData[i].dataMask[1],
16371 pwdiSetRcvPktFilterReqParamsType->
16372 wdiPktFilterCfg.paramsData[i].dataMask[2],
16373 pwdiSetRcvPktFilterReqParamsType->
16374 wdiPktFilterCfg.paramsData[i].dataMask[3],
16375 pwdiSetRcvPktFilterReqParamsType->
16376 wdiPktFilterCfg.paramsData[i].dataMask[4],
16377 pwdiSetRcvPktFilterReqParamsType->
16378 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070016379 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070016380 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016381 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016382 /* Store Params pass it to WDI */
16383 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
16384 pWdaParams->pWdaContext = pWDA;
16385 /* Store param pointer as passed in by caller */
16386 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070016387 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016388 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016389 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016390 if(IS_WDI_STATUS_FAILURE(status))
16391 {
16392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16393 "Failure in SetFilter(),free all the memory,status %d ",status);
16394 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16395 vos_mem_free(pWdaParams->wdaMsgParam);
16396 vos_mem_free(pWdaParams);
16397 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016398 return CONVERT_WDI2VOS_STATUS(status) ;
16399}
Jeff Johnson295189b2012-06-20 16:38:30 -070016400/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016401 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070016402 *
16403 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070016404void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016405 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
16406 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016407{
16408 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16409 tWDA_CbContext *pWDA;
16410 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
16411 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
16412 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
16413 tANI_U8 i;
16414 vos_msg_t vosMsg;
16415
16416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016417 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016418 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
16419
Jeff Johnsone7245742012-09-05 17:12:55 -070016420 if(NULL == pRcvFltPktMatchCntRsp)
16421 {
16422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016423 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070016424 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016425 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070016426 return ;
16427 }
16428
Jeff Johnson295189b2012-06-20 16:38:30 -070016429 if(NULL == pWdaParams)
16430 {
16431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016432 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016433 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016434 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070016435 return ;
16436 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016437 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
16438 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070016439 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
16440 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
16441
16442 /* Message Header */
16443 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
16444 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
16445
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016446 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070016447
16448 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
16449 {
16450 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
16451 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
16452 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016453 /* VOS message wrapper */
16454 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
16455 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
16456 vosMsg.bodyval = 0;
16457 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16458 {
16459 /* free the mem and return */
16460 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
16461 }
16462
16463 vos_mem_free(pWdaParams->wdaMsgParam) ;
16464 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16465 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070016466
16467 return;
16468}
16469/*
16470 * FUNCTION: WDA_FilterMatchCountReqCallback
16471 * Free memory and send RSP back to SME.
16472 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
16473 */
16474void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
16475{
16476 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16477 vos_msg_t vosMsg;
16478
16479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16480 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16481
16482 if(NULL == pWdaParams)
16483 {
16484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16485 "%s: pWdaParams received NULL", __func__);
16486 VOS_ASSERT(0);
16487 return;
16488 }
16489
16490 /* VOS message wrapper */
16491 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
16492 vosMsg.bodyptr = NULL;
16493 vosMsg.bodyval = 0;
16494
16495 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16496 {
16497 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16498 vos_mem_free(pWdaParams->wdaMsgParam);
16499 vos_mem_free(pWdaParams);
16500 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
16501 }
16502
16503 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070016504}
Jeff Johnson295189b2012-06-20 16:38:30 -070016505/*
16506 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
16507 * Request to WDI to get PC Filter Match Count
16508 */
16509VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
16510{
Jeff Johnson43971f52012-07-17 12:26:56 -070016511 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016512 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
16513 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
16514 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016516 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016517 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
16518 {
16519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016520 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016521 VOS_ASSERT(0);
16522 return VOS_STATUS_E_NOMEM;
16523 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016524 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16525 if(NULL == pWdaParams)
16526 {
16527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016528 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016529 VOS_ASSERT(0);
16530 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
16531 return VOS_STATUS_E_NOMEM;
16532 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016533
Yue Ma7f44bbe2013-04-12 11:47:39 -070016534 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
16535 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016536
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016537 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
16538 pRcvFltPktMatchRsp->bssId,
16539 sizeof(wpt_macAddr));
16540
Jeff Johnson295189b2012-06-20 16:38:30 -070016541 /* Store Params pass it to WDI */
16542 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
16543 pWdaParams->pWdaContext = pWDA;
16544 /* Store param pointer as passed in by caller */
16545 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070016546 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016547 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016548 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016549 if(IS_WDI_STATUS_FAILURE(status))
16550 {
16551 /* failure returned by WDI API */
16552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16553 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
16554 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16555 vos_mem_free(pWdaParams) ;
16556 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
16557 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
16558 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016559 return CONVERT_WDI2VOS_STATUS(status) ;
16560}
Jeff Johnson295189b2012-06-20 16:38:30 -070016561/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016562 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070016563 *
16564 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016565void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016566 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
16567 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016568{
16569 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070016570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016571 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016572/* WDA_VOS_ASSERT(NULL != pWdaParams); */
16573 if(NULL == pWdaParams)
16574 {
16575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016576 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016577 VOS_ASSERT(0) ;
16578 return ;
16579 }
16580
16581 vos_mem_free(pWdaParams->wdaMsgParam) ;
16582 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16583 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016584 //print a msg, nothing else to do
16585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016586 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070016587 return ;
16588}
Jeff Johnson295189b2012-06-20 16:38:30 -070016589/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016590 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
16591 * Free memory.
16592 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
16593 */
16594void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
16595{
16596 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16597
16598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16599 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16600
16601 if(NULL == pWdaParams)
16602 {
16603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16604 "%s: Invalid pWdaParams pointer", __func__);
16605 VOS_ASSERT(0);
16606 return;
16607 }
16608
16609 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16610 {
16611 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16612 vos_mem_free(pWdaParams->wdaMsgParam);
16613 vos_mem_free(pWdaParams);
16614 }
16615
16616 return;
16617}
16618/*
Jeff Johnson295189b2012-06-20 16:38:30 -070016619 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
16620 * Request to WDI to clear Receive Filters
16621 */
16622VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
16623 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
16624{
Jeff Johnson43971f52012-07-17 12:26:56 -070016625 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016626 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
16627 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
16628 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016630 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016631 if(NULL == pwdiRcvFltPktClearReqParamsType)
16632 {
16633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016634 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016635 VOS_ASSERT(0);
16636 return VOS_STATUS_E_NOMEM;
16637 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016638 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16639 if(NULL == pWdaParams)
16640 {
16641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016642 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016643 VOS_ASSERT(0);
16644 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
16645 return VOS_STATUS_E_NOMEM;
16646 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016647 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
16648 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070016649 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
16650 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
16651 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
16652 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070016653
Yue Ma7f44bbe2013-04-12 11:47:39 -070016654 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016655 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016656 /* Store Params pass it to WDI */
16657 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
16658 pWdaParams->pWdaContext = pWDA;
16659 /* Store param pointer as passed in by caller */
16660 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070016661 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016662 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016663 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016664 if(IS_WDI_STATUS_FAILURE(status))
16665 {
16666 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16667 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
16668 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080016669 vos_mem_free(pWdaParams->wdaMsgParam);
16670 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016671 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016672 return CONVERT_WDI2VOS_STATUS(status) ;
16673}
16674#endif // WLAN_FEATURE_PACKET_FILTERING
16675
Jeff Johnson295189b2012-06-20 16:38:30 -070016676/*
16677 * FUNCTION: WDA_ProcessSetPowerParamsReq
16678 * Request to WDI to set power params
16679 */
16680VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
16681 tSirSetPowerParamsReq *pPowerParams)
16682{
Jeff Johnson43971f52012-07-17 12:26:56 -070016683 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016684 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
16685 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016686 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016688 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016689 if(NULL == pwdiSetPowerParamsReqInfo)
16690 {
16691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016692 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016693 VOS_ASSERT(0);
16694 return VOS_STATUS_E_NOMEM;
16695 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016696 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16697 if(NULL == pWdaParams)
16698 {
16699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016700 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016701 VOS_ASSERT(0);
16702 vos_mem_free(pwdiSetPowerParamsReqInfo);
16703 return VOS_STATUS_E_NOMEM;
16704 }
Jeff Johnsone7245742012-09-05 17:12:55 -070016705
Jeff Johnson295189b2012-06-20 16:38:30 -070016706
16707 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
16708 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070016709 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
16710 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070016711 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
16712 pPowerParams->uListenInterval;
16713 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
16714 pPowerParams->uBcastMcastFilter;
16715 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
16716 pPowerParams->uEnableBET;
16717 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
16718 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070016719 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
16720 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070016721 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
16722 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016723
Jeff Johnson295189b2012-06-20 16:38:30 -070016724 /* Store Params pass it to WDI */
16725 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
16726 pWdaParams->pWdaContext = pWDA;
16727 /* Store param pointer as passed in by caller */
16728 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016729 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016730 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016731 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016732 if(IS_WDI_STATUS_FAILURE(status))
16733 {
16734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16735 "Failure in Set power params REQ WDI API, free all the memory " );
16736 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16737 vos_mem_free(pWdaParams->wdaMsgParam);
16738 pWdaParams->wdaWdiApiMsgParam = NULL;
16739 pWdaParams->wdaMsgParam = NULL;
16740 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016741 return CONVERT_WDI2VOS_STATUS(status) ;
16742}
16743
16744/*
16745 * FUNCTION: WDA_SetTmLevelRspCallback
16746 * Set TM Level response
16747 */
16748void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
16749{
16750 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16751
16752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016753 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016754
16755 if(NULL == pWdaParams)
16756 {
16757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016758 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016759 VOS_ASSERT(0) ;
16760 return ;
16761 }
16762
16763 /* Dose not need to send notification to upper layer
16764 * Just free allocated resources */
16765 if( pWdaParams != NULL )
16766 {
16767 if( pWdaParams->wdaWdiApiMsgParam != NULL )
16768 {
16769 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16770 }
16771 vos_mem_free(pWdaParams->wdaMsgParam) ;
16772 vos_mem_free(pWdaParams) ;
16773 }
16774}
16775
16776/*
16777 * FUNCTION: WDA_ProcessSetTmLevelReq
16778 * Set TM Level request
16779 */
16780VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
16781 tAniSetTmLevelReq *setTmLevelReq)
16782{
16783 WDI_Status status = WDI_STATUS_SUCCESS ;
16784 tWDA_ReqParams *pWdaParams ;
16785 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
16786 (WDI_SetTmLevelReqType *)vos_mem_malloc(
16787 sizeof(WDI_SetTmLevelReqType)) ;
16788 if(NULL == wdiSetTmLevelReq)
16789 {
16790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016791 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016792 VOS_ASSERT(0);
16793 return VOS_STATUS_E_NOMEM;
16794 }
16795
16796 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16797 if(NULL == pWdaParams)
16798 {
16799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016800 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016801 VOS_ASSERT(0);
16802 vos_mem_free(wdiSetTmLevelReq);
16803 return VOS_STATUS_E_NOMEM;
16804 }
16805
16806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016807 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016808
16809 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
16810 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
16811
16812 pWdaParams->pWdaContext = pWDA;
16813 pWdaParams->wdaMsgParam = setTmLevelReq;
16814 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
16815
16816 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
16817 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
16818
16819 if(IS_WDI_STATUS_FAILURE(status))
16820 {
16821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080016822 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070016823 vos_mem_free(pWdaParams->wdaMsgParam) ;
16824 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16825 vos_mem_free(pWdaParams) ;
16826 }
16827
16828 return CONVERT_WDI2VOS_STATUS(status) ;
16829}
16830
16831VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
16832 tpTxControlParams pTxCtrlParam)
16833{
16834 VOS_STATUS wdaStatus;
16835
16836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016837 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016838 if( pTxCtrlParam == NULL )
16839 {
16840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016841 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016842 return VOS_STATUS_E_FAILURE;
16843 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016844 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
16845 {
16846 wdaStatus = WDA_SuspendDataTx(pWDA);
16847 }
16848 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
16849 {
16850 wdaStatus = WDA_ResumeDataTx(pWDA);
16851 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016852 return wdaStatus;
16853}
16854
16855 /* FUNCTION WDA_featureCapsExchange
16856 * WDA API to invoke capability exchange between host and FW.
16857 */
16858void WDA_featureCapsExchange(v_PVOID_t pVosContext)
16859{
16860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016861 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070016862 WDI_featureCapsExchangeReq( NULL, pVosContext);
16863}
16864
Yathish9f22e662012-12-10 14:21:35 -080016865/* FUNCTION WDA_disableCapablityFeature
16866 * WDA API to diable Active mode offload in host.
16867 */
16868void WDA_disableCapablityFeature(tANI_U8 feature_index)
16869{
16870 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16871 "%s:enter", __func__ );
16872 WDI_disableCapablityFeature(feature_index);
16873}
16874
Jeff Johnson295189b2012-06-20 16:38:30 -070016875 /* FUNCTION WDA_getHostWlanFeatCaps
16876 * Wrapper for WDI API, that will return if the feature (enum value).passed
16877 * to this API is supported or not in Host
16878 * return value
16879 * 0 - implies feature is NOT Supported
16880 * any non zero value - implies feature is SUPPORTED
16881 */
16882tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
16883{
16884 return WDI_getHostWlanFeatCaps(featEnumValue);
16885}
16886
16887 /* FUNCTION WDA_getFwWlanFeatCaps
16888 * Wrapper for WDI API, that will return if the feature (enum value).passed
16889 * to this API is supported or not in FW
16890 * return value
16891 * 0 - implies feature is NOT Supported
16892 * any non zero value - implies feature is SUPPORTED
16893 */
16894tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
16895{
16896 return WDI_getFwWlanFeatCaps(featEnumValue);
16897}
16898
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053016899
Jeff Johnson295189b2012-06-20 16:38:30 -070016900/*
16901 * FUNCTION: WDA_shutdown
16902 * Shutdown WDA/WDI without handshaking with Riva.
16903 * Synchronous function.
16904 */
16905VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
16906{
16907 WDI_Status wdiStatus;
16908 //tANI_U8 eventIdx = 0;
16909 VOS_STATUS status = VOS_STATUS_SUCCESS;
16910 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070016911 if (NULL == pWDA)
16912 {
16913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016914 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070016915 VOS_ASSERT(0);
16916 return VOS_STATUS_E_FAILURE;
16917 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016918 /* FTM mode stay START_STATE */
16919 if( (WDA_READY_STATE != pWDA->wdaState) &&
16920 (WDA_INIT_STATE != pWDA->wdaState) &&
16921 (WDA_START_STATE != pWDA->wdaState) )
16922 {
16923 VOS_ASSERT(0);
16924 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016925
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080016926 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
16927 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -070016928 {
16929 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080016930 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070016931 }
Leo Chang9d76f622013-08-23 16:34:52 -070016932 else
16933 {
16934 vos_event_destroy(&pWDA->ftmStopDoneEvent);
16935 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016936
Jeff Johnson295189b2012-06-20 16:38:30 -070016937 /* call WDI shutdown */
16938 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070016939 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
16940 {
16941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16942 "error in WDA Stop" );
16943 status = VOS_STATUS_E_FAILURE;
16944 }
16945 /* WDI stop is synchrnous, shutdown is complete when it returns */
16946 pWDA->wdaState = WDA_STOP_STATE;
16947
Jeff Johnson295189b2012-06-20 16:38:30 -070016948 /* shutdown should perform the stop & close actions. */
16949 /* Destroy the event */
16950 status = vos_event_destroy(&pWDA->txFrameEvent);
16951 if(!VOS_IS_STATUS_SUCCESS(status))
16952 {
16953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016954 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070016955 status = VOS_STATUS_E_FAILURE;
16956 }
16957 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
16958 if(!VOS_IS_STATUS_SUCCESS(status))
16959 {
16960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016961 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070016962 status = VOS_STATUS_E_FAILURE;
16963 }
16964 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
16965 if(!VOS_IS_STATUS_SUCCESS(status))
16966 {
16967 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016968 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070016969 status = VOS_STATUS_E_FAILURE;
16970 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016971 /* free WDA context */
16972 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
16973 if ( !VOS_IS_STATUS_SUCCESS(status) )
16974 {
16975 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16976 "error in WDA close " );
16977 status = VOS_STATUS_E_FAILURE;
16978 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016979 return status;
16980}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080016981
Jeff Johnsone7245742012-09-05 17:12:55 -070016982/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080016983 * FUNCTION: WDA_setNeedShutdown
16984 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070016985 */
16986
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080016987void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070016988{
16989 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070016990 if(pWDA == NULL)
16991 {
16992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16993 "Could not get the WDA Context pointer" );
16994 return;
16995 }
Jeff Johnsone7245742012-09-05 17:12:55 -070016996 pWDA->needShutdown = TRUE;
16997}
16998/*
16999 * FUNCTION: WDA_needShutdown
17000 * WDA needs a shutdown
17001 */
17002
17003v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
17004{
17005 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070017006 if(pWDA == NULL)
17007 {
17008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17009 "Could not get the WDA Context pointer" );
17010 return 0;
17011 }
17012 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070017013}
17014
Mohit Khanna4a70d262012-09-11 16:30:12 -070017015#ifdef WLAN_FEATURE_11AC
17016/*
17017 * FUNCTION: WDA_SetBeaconFilterReqCallback
17018 *
17019 */
17020void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
17021{
17022 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017024 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070017025 if(NULL == pWdaParams)
17026 {
17027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017028 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070017029 VOS_ASSERT(0) ;
17030 return ;
17031 }
Jeff Johnsone7245742012-09-05 17:12:55 -070017032
Mohit Khanna4a70d262012-09-11 16:30:12 -070017033 vos_mem_free(pWdaParams->wdaMsgParam) ;
17034 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17035 vos_mem_free(pWdaParams) ;
17036 /*
17037 * No respone required for SetBeaconFilter req so just free the request
17038 * param here
17039 */
17040
17041 return ;
17042}
17043
17044VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
17045 tUpdateVHTOpMode *pData)
17046{
17047 WDI_Status status = WDI_STATUS_SUCCESS ;
17048 tWDA_ReqParams *pWdaParams ;
17049 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
17050 sizeof(WDI_UpdateVHTOpMode)) ;
17051 if(NULL == wdiTemp)
17052 {
17053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017054 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070017055 VOS_ASSERT(0);
17056 return VOS_STATUS_E_NOMEM;
17057 }
17058 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17059 if(NULL == pWdaParams)
17060 {
17061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017062 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070017063 VOS_ASSERT(0);
17064 vos_mem_free(wdiTemp);
17065 return VOS_STATUS_E_NOMEM;
17066 }
Abhishek Singhdf8eb312014-11-15 00:49:28 +053017067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17068 "------> %s Opmode = %d and staid = %d" ,
17069 __func__, pData->opMode, pData->staId);
Mohit Khanna4a70d262012-09-11 16:30:12 -070017070 wdiTemp->opMode = pData->opMode;
17071 wdiTemp->staId = pData->staId;
17072
17073 pWdaParams->pWdaContext = pWDA;
17074 /* Store Req pointer, as this will be used for response */
17075 pWdaParams->wdaMsgParam = (void *)pData;
17076 /* store Params pass it to WDI */
17077 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
17078
17079 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
17080
17081 if(IS_WDI_STATUS_FAILURE(status))
17082 {
17083 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17084 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
17085 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
17086 vos_mem_free(pWdaParams->wdaMsgParam);
17087 vos_mem_free(pWdaParams);
17088 }
17089 return CONVERT_WDI2VOS_STATUS(status) ;
17090}
17091#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070017092
17093/*==========================================================================
17094 FUNCTION WDA_TransportChannelDebug
17095
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070017096 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070017097 Display Transport Channel debugging information
17098 User may request to display DXE channel snapshot
17099 Or if host driver detects any abnormal stcuk may display
17100
17101 PARAMETERS
schang6295e542013-03-12 15:31:23 -070017102 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080017103 displaySnapshot : Display DXE snapshot option
Mihir Shete40a55652014-03-02 14:14:47 +053017104 debugFlags : Enable stall detect features
17105 defined by WPAL_DeviceDebugFlags
17106 These features may effect
17107 data performance.
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070017108
17109 RETURN VALUE
17110 NONE
17111
17112===========================================================================*/
17113void WDA_TransportChannelDebug
17114(
schang6295e542013-03-12 15:31:23 -070017115 tpAniSirGlobal pMac,
17116 v_BOOL_t displaySnapshot,
Mihir Shete40a55652014-03-02 14:14:47 +053017117 v_U8_t debugFlags
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070017118)
17119{
Mihir Shete40a55652014-03-02 14:14:47 +053017120 WDI_TransportChannelDebug(displaySnapshot, debugFlags);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070017121 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070017122}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070017123
17124/*==========================================================================
17125 FUNCTION WDA_SetEnableSSR
17126
17127 DESCRIPTION
17128 API to enable/disable SSR on WDI timeout
17129
17130 PARAMETERS
17131 enableSSR : enable/disable SSR
17132
17133 RETURN VALUE
17134 NONE
17135
17136===========================================================================*/
17137void WDA_SetEnableSSR(v_BOOL_t enableSSR)
17138{
17139 WDI_SetEnableSSR(enableSSR);
17140}
Leo Chang9056f462013-08-01 19:21:11 -070017141
17142#ifdef FEATURE_WLAN_LPHB
17143/*
17144 * FUNCTION: WDA_LPHBconfRspCallback
17145 *
17146 */
17147void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
17148{
17149 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17150
17151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17152 "<------ %s " ,__func__);
17153 if (NULL == pWdaParams)
17154 {
17155 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17156 "%s: pWdaParams received NULL", __func__);
17157 VOS_ASSERT(0) ;
17158 return ;
17159 }
17160
17161 /* Do not need to send notification to upper layer
17162 * Just free allocated resources */
17163 if (pWdaParams != NULL)
17164 {
17165 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17166 {
17167 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17168 }
17169 vos_mem_free(pWdaParams->wdaMsgParam) ;
17170 vos_mem_free(pWdaParams) ;
17171 }
17172
17173 return;
17174}
17175
17176/*
17177 * FUNCTION: WDA_ProcessLPHBConfReq
17178 *
17179 */
17180VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
17181 tSirLPHBReq *pData)
17182{
17183 WDI_Status wdiStatus;
17184 tWDA_ReqParams *pWdaParams ;
17185
17186 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17187 "------> %s " , __func__);
17188
17189 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17190 if (NULL == pWdaParams)
17191 {
17192 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17193 "%s: VOS MEM Alloc Failure", __func__);
17194 VOS_ASSERT(0);
17195 vos_mem_free(pData);
17196 return VOS_STATUS_E_NOMEM;
17197 }
17198
17199 pWdaParams->pWdaContext = pWDA;
17200 pWdaParams->wdaMsgParam = (void *)pData;
17201 pWdaParams->wdaWdiApiMsgParam = NULL;
17202
17203 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
17204 if (WDI_STATUS_PENDING == wdiStatus)
17205 {
17206 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17207 "Pending received for %s:%d ", __func__, __LINE__);
17208 }
17209 else if (WDI_STATUS_SUCCESS != wdiStatus)
17210 {
17211 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17212 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
17213 vos_mem_free(pWdaParams->wdaMsgParam);
17214 vos_mem_free(pWdaParams);
17215 }
17216
17217 return CONVERT_WDI2VOS_STATUS(wdiStatus);
17218}
17219#endif /* FEATURE_WLAN_LPHB */
17220
c_hpothu92367912014-05-01 15:18:17 +053017221void WDA_GetBcnMissRateCallback(tANI_U8 status, tANI_U32 bcnMissRate,
17222 void* pUserData)
17223{
17224 tSirBcnMissRateInfo *pBcnMissRateInfo = (tSirBcnMissRateInfo *)pUserData;
17225
17226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17227 "<------ %s " ,__func__);
17228 if (NULL == pBcnMissRateInfo)
17229 {
17230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17231 "%s: pWdaParams received NULL", __func__);
17232 VOS_ASSERT(0) ;
17233 return ;
17234 }
17235 if (pBcnMissRateInfo->callback)
17236 {
17237 pBcnMissRateInfo->callback(status, bcnMissRate,
17238 pBcnMissRateInfo->data);
17239 }
17240 vos_mem_free(pUserData);
17241
17242 return;
17243}
17244
17245v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
17246 tSirBcnMissRateReq *pData)
17247{
17248 WDI_Status wdiStatus;
17249 tSirBcnMissRateInfo *pBcnMissRateInfo;
17250
17251 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17252 "------> %s " , __func__);
17253
17254 pBcnMissRateInfo =
17255 (tSirBcnMissRateInfo *)vos_mem_malloc(sizeof(tSirBcnMissRateInfo));
17256 if (NULL == pBcnMissRateInfo)
17257 {
17258 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17259 "%s: VOS MEM Alloc Failure", __func__);
17260 VOS_ASSERT(0);
17261 vos_mem_free(pData);
17262 return;
17263 }
17264
17265 pBcnMissRateInfo->callback = (pGetBcnMissRateCB)(pData->callback);
17266 pBcnMissRateInfo->data = pData->data;
17267
17268 wdiStatus = WDI_GetBcnMissRate(pBcnMissRateInfo,
17269 WDA_GetBcnMissRateCallback,
17270 pData->bssid);
17271 if (WDI_STATUS_PENDING == wdiStatus)
17272 {
17273 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17274 "Pending received for %s:%d ", __func__, __LINE__);
17275 }
17276 else if (WDI_STATUS_SUCCESS != wdiStatus)
17277 {
17278 if (pBcnMissRateInfo->callback)
17279 {
17280 pBcnMissRateInfo->callback(VOS_STATUS_E_FAILURE,
17281 -1, pBcnMissRateInfo->data);
17282 }
17283 }
17284 vos_mem_free(pData);
17285}
Dino Mycle41bdc942014-06-10 11:30:24 +053017286
17287#ifdef WLAN_FEATURE_EXTSCAN
17288
17289/*==========================================================================
17290 FUNCTION WDA_EXTScanStartRspCallback
17291
17292 DESCRIPTION
17293 API to send EXTScan Start Response to HDD
17294
17295 PARAMETERS
17296 pEventData: Response from FW
17297 pUserData:
17298===========================================================================*/
17299void WDA_EXTScanStartRspCallback(void *pEventData, void* pUserData)
17300{
17301 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17302 tWDA_CbContext *pWDA = NULL;
17303 void *pCallbackContext;
17304 tpAniSirGlobal pMac;
17305
17306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17307 "%s:", __func__);
17308 if (NULL == pWdaParams)
17309 {
17310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17311 "%s: pWdaParams received NULL", __func__);
17312 VOS_ASSERT(0);
17313 return;
17314 }
17315
17316 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17317
17318 if (NULL == pWDA)
17319 {
17320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17321 "%s: pWDA received NULL", __func__);
17322 VOS_ASSERT(0);
17323 goto error;
17324 }
17325
17326 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17327 if (NULL == pMac)
17328 {
17329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17330 "%s:pMac is NULL", __func__);
17331 VOS_ASSERT(0);
17332 goto error;
17333 }
17334
17335 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17336
17337 if (pMac->sme.pEXTScanIndCb)
17338 {
17339 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_START_RSP,
17340 pEventData);
17341 }
17342 else
17343 {
17344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17345 "%s:HDD callback is null", __func__);
17346 VOS_ASSERT(0);
17347 }
17348
17349error:
17350
17351 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17352 {
17353 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17354 }
17355 if (pWdaParams->wdaMsgParam != NULL)
17356 {
17357 vos_mem_free(pWdaParams->wdaMsgParam);
17358 }
17359 vos_mem_free(pWdaParams) ;
17360
17361 return;
17362}
17363
17364/*==========================================================================
17365 FUNCTION WDA_EXTScanStopRspCallback
17366
17367 DESCRIPTION
17368 API to send EXTScan Stop Response to HDD
17369
17370 PARAMETERS
17371 pEventData: Response from FW
17372 pUserData:
17373===========================================================================*/
17374void WDA_EXTScanStopRspCallback(void *pEventData, void* pUserData)
17375{
17376 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17377 tWDA_CbContext *pWDA = NULL;
17378 void *pCallbackContext;
17379 tpAniSirGlobal pMac;
17380
17381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17382 "%s:", __func__);
17383 if (NULL == pWdaParams)
17384 {
17385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17386 "%s: pWdaParams received NULL", __func__);
17387 VOS_ASSERT(0);
17388 return;
17389 }
17390
17391 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17392
17393 if (NULL == pWDA)
17394 {
17395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17396 "%s: pWDA received NULL", __func__);
17397 VOS_ASSERT(0);
17398 goto error;
17399 }
17400
17401 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17402 if (NULL == pMac)
17403 {
17404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17405 "%s:pMac is NULL", __func__);
17406 VOS_ASSERT(0);
17407 goto error;
17408 }
17409 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17410
17411 if (pMac->sme.pEXTScanIndCb)
17412 {
17413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17414 "%s:HDD call back function called", __func__);
17415 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_STOP_RSP,
17416 pEventData);
17417 }
17418 else
17419 {
17420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17421 "%s:HDD callback is null", __func__);
17422 VOS_ASSERT(0);
17423 }
17424
17425error:
17426
17427 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17428 {
17429 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17430 }
17431 if (pWdaParams->wdaMsgParam != NULL)
17432 {
17433 vos_mem_free(pWdaParams->wdaMsgParam);
17434 }
17435 vos_mem_free(pWdaParams) ;
17436
17437
17438 return;
17439}
17440
17441/*==========================================================================
17442 FUNCTION WDA_EXTScanGetCachedResultsRspCallback
17443
17444 DESCRIPTION
17445 API to send EXTScan Get Cached Results Response to HDD
17446
17447 PARAMETERS
17448 pEventData: Response from FW
17449 pUserData:
17450===========================================================================*/
17451void WDA_EXTScanGetCachedResultsRspCallback(void *pEventData, void* pUserData)
17452{
17453 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17454 tWDA_CbContext *pWDA = NULL;
17455 void *pCallbackContext;
17456 tpAniSirGlobal pMac;
17457
17458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17459 "%s: ", __func__);
17460 if (NULL == pWdaParams)
17461 {
17462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17463 "%s: pWdaParams received NULL", __func__);
17464 VOS_ASSERT(0);
17465 return;
17466 }
17467
17468 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17469
17470 if (NULL == pWDA)
17471 {
17472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17473 "%s: pWDA received NULL", __func__);
17474 VOS_ASSERT(0);
17475 goto error;
17476 }
17477
17478 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17479 if (NULL == pMac)
17480 {
17481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17482 "%s:pMac is NULL", __func__);
17483 VOS_ASSERT(0);
17484 goto error;
17485 }
17486
17487 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17488
17489 if (pMac->sme.pEXTScanIndCb)
17490 {
17491 pMac->sme.pEXTScanIndCb(pCallbackContext,
17492 WDA_EXTSCAN_GET_CACHED_RESULTS_RSP,
17493 pEventData);
17494 }
17495 else
17496 {
17497 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17498 "%s:HDD callback is null", __func__);
17499 VOS_ASSERT(0);
17500 }
17501
17502
17503error:
17504
17505 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17506 {
17507 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17508 }
17509 if (pWdaParams->wdaMsgParam != NULL)
17510 {
17511 vos_mem_free(pWdaParams->wdaMsgParam);
17512 }
17513 vos_mem_free(pWdaParams) ;
17514
17515 return;
17516}
17517
17518/*==========================================================================
17519 FUNCTION WDA_EXTScanGetCapabilitiesRspCallback
17520
17521 DESCRIPTION
17522 API to send EXTScan Get Capabilities Response to HDD
17523
17524 PARAMETERS
17525 pEventData: Response from FW
17526 pUserData:
17527===========================================================================*/
17528void WDA_EXTScanGetCapabilitiesRspCallback(void *pEventData, void* pUserData)
17529{
17530 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17531 tWDA_CbContext *pWDA = NULL;
17532 void *pCallbackContext;
17533 tpAniSirGlobal pMac;
17534
17535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17536 "%s:", __func__);
17537 if (NULL == pWdaParams)
17538 {
17539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17540 "%s: pWdaParams received NULL", __func__);
17541 VOS_ASSERT(0);
17542 return;
17543 }
17544
17545 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17546
17547 if (NULL == pWDA)
17548 {
17549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17550 "%s: pWDA received NULL", __func__);
17551 VOS_ASSERT(0);
17552 goto error;
17553 }
17554
17555 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17556 if (NULL == pMac)
17557 {
17558 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17559 "%s:pMac is NULL", __func__);
17560 VOS_ASSERT(0);
17561 goto error;
17562 }
17563
17564 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17565
17566 if (pMac->sme.pEXTScanIndCb)
17567 {
17568 pMac->sme.pEXTScanIndCb(pCallbackContext,
17569 WDA_EXTSCAN_GET_CAPABILITIES_RSP,
17570 pEventData);
17571 }
17572 else
17573 {
17574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17575 "%s:HDD callback is null", __func__);
17576 VOS_ASSERT(0);
17577 }
17578
17579
17580error:
17581
17582 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17583 {
17584 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17585 }
17586 if (pWdaParams->wdaMsgParam != NULL)
17587 {
17588 vos_mem_free(pWdaParams->wdaMsgParam);
17589 }
17590 vos_mem_free(pWdaParams) ;
17591
17592 return;
17593}
17594
17595/*==========================================================================
17596 FUNCTION WDA_EXTScanSetBSSIDHotlistRspCallback
17597
17598 DESCRIPTION
17599 API to send EXTScan Set BSSID Hotlist Response to HDD
17600
17601 PARAMETERS
17602 pEventData: Response from FW
17603 pUserData:
17604===========================================================================*/
17605void WDA_EXTScanSetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
17606{
17607 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17608 tWDA_CbContext *pWDA = NULL;
17609 void *pCallbackContext;
17610 tpAniSirGlobal pMac;
17611
17612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17613 "%s: ", __func__);
17614 if (NULL == pWdaParams)
17615 {
17616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17617 "%s: pWdaParams received NULL", __func__);
17618 VOS_ASSERT(0) ;
17619 return;
17620 }
17621
17622 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17623
17624 if (NULL == pWDA)
17625 {
17626 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17627 "%s: pWDA received NULL", __func__);
17628 VOS_ASSERT(0);
17629 goto error;
17630 }
17631
17632 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17633 if (NULL == pMac)
17634 {
17635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17636 "%s:pMac is NULL", __func__);
17637 VOS_ASSERT(0);
17638 goto error;
17639 }
17640
17641 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17642
17643 if (pMac->sme.pEXTScanIndCb)
17644 {
17645 pMac->sme.pEXTScanIndCb(pCallbackContext,
17646 WDA_EXTSCAN_SET_BSSID_HOTLIST_RSP,
17647 pEventData);
17648 }
17649 else
17650 {
17651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17652 "%s:HDD callback is null", __func__);
17653 VOS_ASSERT(0);
17654 }
17655
17656
17657error:
17658
17659 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17660 {
17661 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17662 }
17663 if (pWdaParams->wdaMsgParam != NULL)
17664 {
17665 vos_mem_free(pWdaParams->wdaMsgParam);
17666 }
17667 vos_mem_free(pWdaParams) ;
17668
17669 return;
17670}
17671
17672/*==========================================================================
17673 FUNCTION WDA_EXTScanResetBSSIDHotlistRspCallback
17674
17675 DESCRIPTION
17676 API to send EXTScan ReSet BSSID Hotlist Response to HDD
17677
17678 PARAMETERS
17679 pEventData: Response from FW
17680 pUserData:
17681===========================================================================*/
17682void WDA_EXTScanResetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
17683{
17684 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17685 tWDA_CbContext *pWDA = NULL;
17686 void *pCallbackContext;
17687 tpAniSirGlobal pMac;
17688
17689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17690 "%s:", __func__);
17691 if (NULL == pWdaParams)
17692 {
17693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17694 "%s: pWdaParams received NULL", __func__);
17695 VOS_ASSERT(0) ;
17696 return;
17697 }
17698
17699 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17700
17701 if (NULL == pWDA)
17702 {
17703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17704 "%s: pWDA received NULL", __func__);
17705 VOS_ASSERT(0);
17706 goto error;
17707 }
17708
17709 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17710 if (NULL == pMac)
17711 {
17712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17713 "%s:pMac is NULL", __func__);
17714 VOS_ASSERT(0);
17715 goto error;
17716 }
17717
17718 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17719
17720 if (pMac->sme.pEXTScanIndCb)
17721 {
17722 pMac->sme.pEXTScanIndCb(pCallbackContext,
17723 WDA_EXTSCAN_RESET_BSSID_HOTLIST_RSP,
17724 pEventData);
17725 }
17726 else
17727 {
17728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17729 "%s:HDD callback is null", __func__);
17730 VOS_ASSERT(0);
17731 }
17732
17733
17734error:
17735
17736 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17737 {
17738 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17739 }
17740 if (pWdaParams->wdaMsgParam != NULL)
17741 {
17742 vos_mem_free(pWdaParams->wdaMsgParam);
17743 }
17744 vos_mem_free(pWdaParams) ;
17745
17746 return;
17747}
17748
17749/*==========================================================================
17750 FUNCTION WDA_EXTScanSetSignfRSSIChangeRspCallback
17751
17752 DESCRIPTION
17753 API to send EXTScan Set Significant RSSI Change RSP to HDD
17754
17755 PARAMETERS
17756 pEventData: Response from FW
17757 pUserData:
17758===========================================================================*/
17759void WDA_EXTScanSetSignfRSSIChangeRspCallback(void *pEventData, void* pUserData)
17760{
17761 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17762 tWDA_CbContext *pWDA = NULL;
17763 void *pCallbackContext;
17764 tpAniSirGlobal pMac;
17765
17766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17767 "%s:", __func__);
17768 if (NULL == pWdaParams)
17769 {
17770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17771 "%s: pWdaParams received NULL", __func__);
17772 VOS_ASSERT(0) ;
17773 return;
17774 }
17775
17776 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17777
17778 if (NULL == pWDA)
17779 {
17780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17781 "%s: pWDA received NULL", __func__);
17782 VOS_ASSERT(0);
17783 goto error;
17784 }
17785
17786 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17787 if (NULL == pMac)
17788 {
17789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17790 "%s:pMac is NULL", __func__);
17791 VOS_ASSERT(0);
17792 goto error;
17793 }
17794
17795 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17796
17797 if (pMac->sme.pEXTScanIndCb)
17798 {
17799 pMac->sme.pEXTScanIndCb(pCallbackContext,
17800 WDA_EXTSCAN_SET_SIGNF_RSSI_CHANGE_RSP,
17801 pEventData);
17802 }
17803 else
17804 {
17805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17806 "%s:HDD callback is null", __func__);
17807 VOS_ASSERT(0);
17808 }
17809
17810
17811error:
17812
17813 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17814 {
17815 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17816 }
17817 if (pWdaParams->wdaMsgParam != NULL)
17818 {
17819 vos_mem_free(pWdaParams->wdaMsgParam);
17820 }
17821 vos_mem_free(pWdaParams) ;
17822
17823 return;
17824}
17825
17826/*==========================================================================
17827 FUNCTION WDA_EXTScanResetSignfRSSIChangeRspCallback
17828
17829 DESCRIPTION
17830 API to send EXTScan Set Significant RSSI Change RSP to HDD
17831
17832 PARAMETERS
17833 pEventData: Response from FW
17834 pUserData:
17835===========================================================================*/
17836void WDA_EXTScanResetSignfRSSIChangeRspCallback(void *pEventData,
17837 void* pUserData)
17838{
17839 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17840 tWDA_CbContext *pWDA = NULL;
17841 void *pCallbackContext;
17842 tpAniSirGlobal pMac;
17843
17844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17845 "%s:", __func__);
17846 if (NULL == pWdaParams)
17847 {
17848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17849 "%s: pWdaParams received NULL", __func__);
17850 VOS_ASSERT(0) ;
17851 return;
17852 }
17853
17854 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17855
17856 if (NULL == pWDA)
17857 {
17858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17859 "%s: pWDA received NULL", __func__);
17860 VOS_ASSERT(0);
17861 goto error;
17862 }
17863
17864 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17865 if (NULL == pMac)
17866 {
17867 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17868 "%s:pMac is NULL", __func__);
17869 VOS_ASSERT(0);
17870 goto error;
17871 }
17872
17873 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17874
17875 if (pMac->sme.pEXTScanIndCb)
17876 {
17877 pMac->sme.pEXTScanIndCb(pCallbackContext,
17878 WDA_EXTSCAN_RESET_SIGNF_RSSI_CHANGE_RSP,
17879 pEventData);
17880 }
17881 else
17882 {
17883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17884 "%s:HDD callback is null", __func__);
17885 VOS_ASSERT(0);
17886 }
17887
17888
17889error:
17890
17891 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17892 {
17893 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17894 }
17895 if (pWdaParams->wdaMsgParam != NULL)
17896 {
17897 vos_mem_free(pWdaParams->wdaMsgParam);
17898 }
17899 vos_mem_free(pWdaParams) ;
17900
17901 return;
17902}
17903
17904/*==========================================================================
17905 FUNCTION WDA_ProcessEXTScanStartReq
17906
17907 DESCRIPTION
17908 API to send EXTScan Start Request to WDI
17909
17910 PARAMETERS
17911 pWDA: Pointer to WDA context
17912 wdaRequest: Pointer to EXTScan req parameters
17913===========================================================================*/
17914VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
17915 tSirEXTScanStartReqParams *wdaRequest)
17916{
17917 WDI_Status status = WDI_STATUS_SUCCESS;
17918 tWDA_ReqParams *pWdaParams;
17919
17920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17921 "%s: ", __func__);
17922 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17923 if (NULL == pWdaParams)
17924 {
17925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17926 "%s: VOS MEM Alloc Failure", __func__);
17927 VOS_ASSERT(0);
17928 return VOS_STATUS_E_NOMEM;
17929 }
17930 pWdaParams->pWdaContext = pWDA;
17931 pWdaParams->wdaMsgParam = wdaRequest;
17932 pWdaParams->wdaWdiApiMsgParam = NULL;
17933
17934 status = WDI_EXTScanStartReq((void *)wdaRequest,
17935 (WDI_EXTScanStartRspCb)WDA_EXTScanStartRspCallback,
17936 (void *)pWdaParams);
17937 if (IS_WDI_STATUS_FAILURE(status))
17938 {
17939 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17940 "Failure to request. Free all the memory " );
17941 vos_mem_free(pWdaParams->wdaMsgParam);
17942 vos_mem_free(pWdaParams);
17943 }
17944 return CONVERT_WDI2VOS_STATUS(status);
17945}
17946
17947/*==========================================================================
17948 FUNCTION WDA_ProcessEXTScanStopReq
17949
17950 DESCRIPTION
17951 API to send EXTScan Start Request to WDI
17952
17953 PARAMETERS
17954 pWDA: Pointer to WDA context
17955 wdaRequest: Pointer to EXTScan req parameters
17956===========================================================================*/
17957VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
17958 tSirEXTScanStopReqParams *wdaRequest)
17959{
17960 WDI_Status status = WDI_STATUS_SUCCESS;
17961 tWDA_ReqParams *pWdaParams;
17962
17963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17964 "%s:", __func__);
17965 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17966 if (NULL == pWdaParams)
17967 {
17968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17969 "%s: VOS MEM Alloc Failure", __func__);
17970 VOS_ASSERT(0);
17971 return VOS_STATUS_E_NOMEM;
17972 }
17973 pWdaParams->pWdaContext = pWDA;
17974 pWdaParams->wdaMsgParam = wdaRequest;
17975 pWdaParams->wdaWdiApiMsgParam = NULL;
17976
17977 status = WDI_EXTScanStopReq((void *)wdaRequest,
17978 (WDI_EXTScanStopRspCb)WDA_EXTScanStopRspCallback,
17979 (void *)pWdaParams);
17980 if (IS_WDI_STATUS_FAILURE(status))
17981 {
17982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17983 "Failure to request. Free all the memory " );
17984 vos_mem_free(pWdaParams->wdaMsgParam);
17985 vos_mem_free(pWdaParams);
17986 }
17987 return CONVERT_WDI2VOS_STATUS(status);
17988}
17989
17990/*==========================================================================
17991 FUNCTION WDA_ProcessEXTScanGetCachedResultsReq
17992
17993 DESCRIPTION
17994 API to send EXTScan Get Cached Results Request to WDI
17995
17996 PARAMETERS
17997 pWDA: Pointer to WDA context
17998 wdaRequest: Pointer to EXTScan req parameters
17999===========================================================================*/
18000VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
18001 tSirEXTScanGetCachedResultsReqParams *wdaRequest)
18002{
18003 WDI_Status status = WDI_STATUS_SUCCESS;
18004 tWDA_ReqParams *pWdaParams;
18005
18006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18007 "%s: ", __func__);
18008 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18009 if (NULL == pWdaParams)
18010 {
18011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18012 "%s: VOS MEM Alloc Failure", __func__);
18013 VOS_ASSERT(0);
18014 return VOS_STATUS_E_NOMEM;
18015 }
18016 pWdaParams->pWdaContext = pWDA;
18017 pWdaParams->wdaMsgParam = wdaRequest;
18018 pWdaParams->wdaWdiApiMsgParam = NULL;
18019
18020 status = WDI_EXTScanGetCachedResultsReq((void *)wdaRequest,
18021 (WDI_EXTScanGetCachedResultsRspCb)WDA_EXTScanGetCachedResultsRspCallback,
18022 (void *)pWdaParams);
18023 if (IS_WDI_STATUS_FAILURE(status))
18024 {
18025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18026 "Failure to request. Free all the memory " );
18027 vos_mem_free(pWdaParams->wdaMsgParam);
18028 vos_mem_free(pWdaParams);
18029 }
18030 return CONVERT_WDI2VOS_STATUS(status);
18031}
18032
18033/*==========================================================================
18034 FUNCTION WDA_ProcessEXTScanGetCapabilitiesReq
18035
18036 DESCRIPTION
18037 API to send EXTScan Get Capabilities Request to WDI
18038
18039 PARAMETERS
18040 pWDA: Pointer to WDA context
18041 wdaRequest: Pointer to EXTScan req parameters
18042===========================================================================*/
18043VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
18044 tSirGetEXTScanCapabilitiesReqParams *wdaRequest)
18045{
18046 WDI_Status status = WDI_STATUS_SUCCESS;
18047 tWDA_ReqParams *pWdaParams;
18048
18049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18050 "%s:", __func__);
18051 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18052 if (NULL == pWdaParams)
18053 {
18054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18055 "%s: VOS MEM Alloc Failure", __func__);
18056 VOS_ASSERT(0);
18057 return VOS_STATUS_E_NOMEM;
18058 }
18059 pWdaParams->pWdaContext = pWDA;
18060 pWdaParams->wdaMsgParam = wdaRequest;
18061 pWdaParams->wdaWdiApiMsgParam = NULL;
18062
18063 status = WDI_EXTScanGetCapabilitiesReq((void *)wdaRequest,
18064 (WDI_EXTScanGetCapabilitiesRspCb)WDA_EXTScanGetCapabilitiesRspCallback,
18065 (void *)pWdaParams);
18066 if (IS_WDI_STATUS_FAILURE(status))
18067 {
18068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18069 "Failure to request. Free all the memory " );
18070 vos_mem_free(pWdaParams->wdaMsgParam);
18071 vos_mem_free(pWdaParams);
18072 }
18073 return CONVERT_WDI2VOS_STATUS(status);
18074}
18075
18076/*==========================================================================
18077 FUNCTION WDA_ProcessEXTScanSetBSSIDHotlistReq
18078
18079 DESCRIPTION
18080 API to send Set BSSID Hotlist Request to WDI
18081
18082 PARAMETERS
18083 pWDA: Pointer to WDA context
18084 wdaRequest: Pointer to EXTScan req parameters
18085===========================================================================*/
18086VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
18087 tSirEXTScanSetBssidHotListReqParams *wdaRequest)
18088{
18089 WDI_Status status = WDI_STATUS_SUCCESS;
18090 tWDA_ReqParams *pWdaParams;
18091
18092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18093 "%s: ", __func__);
18094 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18095 if (NULL == pWdaParams)
18096 {
18097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18098 "%s: VOS MEM Alloc Failure", __func__);
18099 VOS_ASSERT(0);
18100 return VOS_STATUS_E_NOMEM;
18101 }
18102 pWdaParams->pWdaContext = pWDA;
18103 pWdaParams->wdaMsgParam = wdaRequest;
18104 pWdaParams->wdaWdiApiMsgParam = NULL;
18105
18106 status = WDI_EXTScanSetBSSIDHotlistReq((void *)wdaRequest,
18107 (WDI_EXTScanSetBSSIDHotlistRspCb)WDA_EXTScanSetBSSIDHotlistRspCallback,
18108 (void *)pWdaParams);
18109 if (IS_WDI_STATUS_FAILURE(status))
18110 {
18111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18112 "Failure to request. Free all the memory " );
18113 vos_mem_free(pWdaParams->wdaMsgParam);
18114 vos_mem_free(pWdaParams);
18115 }
18116 return CONVERT_WDI2VOS_STATUS(status);
18117}
18118
18119/*==========================================================================
18120 FUNCTION WDA_ProcessEXTScanReSetBSSIDHotlistReq
18121
18122 DESCRIPTION
18123 API to send Reset BSSID Hotlist Request to WDI
18124
18125 PARAMETERS
18126 pWDA: Pointer to WDA context
18127 wdaRequest: Pointer to EXTScan req parameters
18128===========================================================================*/
18129VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
18130 tSirEXTScanResetBssidHotlistReqParams *wdaRequest)
18131{
18132 WDI_Status status = WDI_STATUS_SUCCESS;
18133 tWDA_ReqParams *pWdaParams;
18134
18135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18136 "%s:", __func__);
18137 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18138 if (NULL == pWdaParams)
18139 {
18140 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18141 "%s: VOS MEM Alloc Failure", __func__);
18142 VOS_ASSERT(0);
18143 return VOS_STATUS_E_NOMEM;
18144 }
18145 pWdaParams->pWdaContext = pWDA;
18146 pWdaParams->wdaMsgParam = wdaRequest;
18147 pWdaParams->wdaWdiApiMsgParam = NULL;
18148
18149 status = WDI_EXTScanResetBSSIDHotlistReq((void *)wdaRequest,
18150 (WDI_EXTScanResetBSSIDHotlistRspCb)WDA_EXTScanResetBSSIDHotlistRspCallback,
18151 (void *)pWdaParams);
18152 if (IS_WDI_STATUS_FAILURE(status))
18153 {
18154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18155 "Failure to request. Free all the memory " );
18156 vos_mem_free(pWdaParams->wdaMsgParam);
18157 vos_mem_free(pWdaParams);
18158 }
18159 return CONVERT_WDI2VOS_STATUS(status);
18160}
18161
18162/*==========================================================================
18163 FUNCTION WDA_ProcessEXTScanSetSignfRSSIChangeReq
18164
18165 DESCRIPTION
18166 API to send Set Significant RSSI Change Request to WDI
18167
18168 PARAMETERS
18169 pWDA: Pointer to WDA context
18170 wdaRequest: Pointer to EXTScan req parameters
18171===========================================================================*/
18172VOS_STATUS WDA_ProcessEXTScanSetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
18173 tSirEXTScanSetSignificantChangeReqParams *wdaRequest)
18174{
18175 WDI_Status status = WDI_STATUS_SUCCESS;
18176 tWDA_ReqParams *pWdaParams;
18177
18178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18179 "%s: ", __func__);
18180 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18181 if (NULL == pWdaParams)
18182 {
18183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18184 "%s: VOS MEM Alloc Failure", __func__);
18185 VOS_ASSERT(0);
18186 return VOS_STATUS_E_NOMEM;
18187 }
18188 pWdaParams->pWdaContext = pWDA;
18189 pWdaParams->wdaMsgParam = wdaRequest;
18190 pWdaParams->wdaWdiApiMsgParam = NULL;
18191
18192 status = WDI_EXTScanSetSignfRSSIChangeReq((void *)wdaRequest,
18193 (WDI_EXTScanSetSignfRSSIChangeRspCb)WDA_EXTScanSetSignfRSSIChangeRspCallback,
18194 (void *)pWdaParams);
18195 if (IS_WDI_STATUS_FAILURE(status))
18196 {
18197 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18198 "Failure to request. Free all the memory " );
18199 vos_mem_free(pWdaParams->wdaMsgParam);
18200 vos_mem_free(pWdaParams);
18201 }
18202 return CONVERT_WDI2VOS_STATUS(status);
18203}
18204
18205/*==========================================================================
18206 FUNCTION WDA_ProcessEXTScanResetSignfRSSIChangeReq
18207
18208 DESCRIPTION
18209 API to send Reset Significant RSSI Change Request to WDI
18210
18211 PARAMETERS
18212 pWDA: Pointer to WDA context
18213 wdaRequest: Pointer to EXTScan req parameters
18214===========================================================================*/
18215VOS_STATUS WDA_ProcessEXTScanResetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
18216 tSirEXTScanResetSignificantChangeReqParams *wdaRequest)
18217{
18218 WDI_Status status = WDI_STATUS_SUCCESS;
18219 tWDA_ReqParams *pWdaParams;
18220
18221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18222 "%s:", __func__);
18223 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18224 if (NULL == pWdaParams)
18225 {
18226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18227 "%s: VOS MEM Alloc Failure", __func__);
18228 VOS_ASSERT(0);
18229 return VOS_STATUS_E_NOMEM;
18230 }
18231 pWdaParams->pWdaContext = pWDA;
18232 pWdaParams->wdaMsgParam = wdaRequest;
18233 pWdaParams->wdaWdiApiMsgParam = NULL;
18234
18235 status = WDI_EXTScanResetSignfRSSIChangeReq((void *)wdaRequest,
18236 (WDI_EXTScanResetSignfRSSIChangeRspCb)
18237 WDA_EXTScanResetSignfRSSIChangeRspCallback,
18238 (void *)pWdaParams);
18239 if (IS_WDI_STATUS_FAILURE(status))
18240 {
18241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18242 "Failure to request. Free all the memory " );
18243 vos_mem_free(pWdaParams->wdaMsgParam);
18244 vos_mem_free(pWdaParams);
18245 }
18246 return CONVERT_WDI2VOS_STATUS(status);
18247}
18248#endif /* WLAN_FEATURE_EXTSCAN */
18249
Sunil Duttbd736ed2014-05-26 21:19:41 +053018250#ifdef WLAN_FEATURE_LINK_LAYER_STATS
18251
18252/*==========================================================================
18253 FUNCTION WDA_LLStatsSetRspCallback
18254
18255 DESCRIPTION
18256 API to process set link layer statistics response from FW
18257
18258 PARAMETERS
18259 pRsp: Pointer to set link layer statistics response
18260 pUserData: Pointer to user data
18261
18262 RETURN VALUE
18263 NONE
18264
18265===========================================================================*/
18266void WDA_LLStatsSetRspCallback(void *pEventData, void* pUserData)
18267{
18268 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18269
18270
18271 if (NULL == pWdaParams)
18272 {
18273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18274 "%s: pWdaParams received NULL", __func__);
18275 VOS_ASSERT(0) ;
18276 return ;
18277 }
18278
18279 /* Do not need to send notification to upper layer
18280 * Just free allocated resources */
18281 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18282 {
18283 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18284 }
18285 if (pWdaParams->wdaMsgParam != NULL)
18286 {
18287 vos_mem_free(pWdaParams->wdaMsgParam);
18288 }
18289 vos_mem_free(pWdaParams) ;
18290
18291 return;
18292}
18293
18294/*==========================================================================
18295 FUNCTION WDA_ProcessLLStatsSetReq
18296
18297 DESCRIPTION
18298 API to send Set Link Layer Stats request to WDI
18299
18300 PARAMETERS
18301 pWDA: Pointer to WDA context
18302 wdaRequest: Pointer to set Link Layer Stats req parameters
18303===========================================================================*/
18304VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
18305 tSirLLStatsSetReq *wdaRequest)
18306{
18307 WDI_Status status = WDI_STATUS_SUCCESS;
18308 tWDA_ReqParams *pWdaParams;
18309
18310 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18311 if (NULL == pWdaParams)
18312 {
18313 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18314 "%s: VOS MEM Alloc Failure", __func__);
18315 VOS_ASSERT(0);
18316 return VOS_STATUS_E_NOMEM;
18317 }
18318 pWdaParams->pWdaContext = pWDA;
18319 pWdaParams->wdaMsgParam = wdaRequest;
18320 pWdaParams->wdaWdiApiMsgParam = NULL;
18321
18322 status = WDI_LLStatsSetReq((void *)wdaRequest,
18323 (WDI_LLStatsSetRspCb)WDA_LLStatsSetRspCallback,
18324 (void *)pWdaParams);
18325 if (IS_WDI_STATUS_FAILURE(status))
18326 {
18327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18328 "Failure to request. Free all the memory " );
18329 vos_mem_free(pWdaParams->wdaMsgParam);
18330 vos_mem_free(pWdaParams);
18331 }
18332 return CONVERT_WDI2VOS_STATUS(status);
18333}
18334
18335/*==========================================================================
18336 FUNCTION WDA_LLStatsGetRspCallback
18337
18338 DESCRIPTION
18339 API to process get link layer statistics response from FW
18340
18341 PARAMETERS
18342 pRsp: Pointer to get link layer statistics response
18343 pUserData: Pointer to user data
18344
18345 RETURN VALUE
18346 NONE
18347
18348===========================================================================*/
18349void WDA_LLStatsGetRspCallback(void *pEventData, void* pUserData)
18350{
18351 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18352
18353 if (NULL == pWdaParams)
18354 {
18355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18356 "%s: pWdaParams received NULL", __func__);
18357 VOS_ASSERT(0) ;
18358 return ;
18359 }
18360
18361 /* Do not need to send notification to upper layer
18362 * Just free allocated resources */
18363 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18364 {
18365 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18366 }
18367 if (pWdaParams->wdaMsgParam != NULL)
18368 {
18369 vos_mem_free(pWdaParams->wdaMsgParam);
18370 }
18371 vos_mem_free(pWdaParams) ;
18372
18373 return;
18374}
18375
18376/*==========================================================================
18377 FUNCTION WDA_ProcessLLStatsGetReq
18378
18379 DESCRIPTION
18380 API to send Get Link Layer Stats request to WDI
18381
18382 PARAMETERS
18383 pWDA: Pointer to WDA context
18384 wdaRequest: Pointer to get Link Layer Stats req parameters
18385===========================================================================*/
18386VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
18387 tSirLLStatsGetReq *wdaRequest)
18388{
18389 WDI_Status status = WDI_STATUS_SUCCESS;
18390 tWDA_ReqParams *pWdaParams;
18391
18392 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18393 if (NULL == pWdaParams)
18394 {
18395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18396 "%s: VOS MEM Alloc Failure", __func__);
18397 VOS_ASSERT(0);
18398 return VOS_STATUS_E_NOMEM;
18399 }
18400 pWdaParams->pWdaContext = pWDA;
18401 pWdaParams->wdaMsgParam = wdaRequest;
18402 pWdaParams->wdaWdiApiMsgParam = NULL;
18403
18404 status = WDI_LLStatsGetReq((void *) wdaRequest,
18405 (WDI_LLStatsGetRspCb)WDA_LLStatsGetRspCallback,
18406 (void *)pWdaParams);
18407 if (IS_WDI_STATUS_FAILURE(status))
18408 {
18409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18410 "Failure to request. Free all the memory " );
18411 vos_mem_free(pWdaParams->wdaMsgParam);
18412 vos_mem_free(pWdaParams);
18413 }
18414 return CONVERT_WDI2VOS_STATUS(status);
18415}
18416
18417/*==========================================================================
18418 FUNCTION WDA_LLStatsClearRspCallback
18419
18420 DESCRIPTION
18421 API to process clear link layer statistics response from FW
18422
18423 PARAMETERS
18424 pRsp: Pointer to clear link layer statistics response
18425 pUserData: Pointer to user data
18426
18427 RETURN VALUE
18428 NONE
18429
18430===========================================================================*/
18431void WDA_LLStatsClearRspCallback(void *pEventData, void* pUserData)
18432{
18433 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18434
18435
18436 if (NULL == pWdaParams)
18437 {
18438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18439 "%s: pWdaParams received NULL", __func__);
18440 VOS_ASSERT(0) ;
18441 return ;
18442 }
18443 /* Do not need to send notification to upper layer
18444 * Just free allocated resources */
18445 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18446 {
18447 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18448 }
18449 if (pWdaParams->wdaMsgParam != NULL)
18450 {
18451 vos_mem_free(pWdaParams->wdaMsgParam);
18452 }
18453 vos_mem_free(pWdaParams) ;
18454 return;
18455}
18456
18457/*==========================================================================
18458 FUNCTION WDA_ProcessLLStatsClearReq
18459
18460 DESCRIPTION
18461 API to send Clear Link Layer Stats request to WDI
18462
18463 PARAMETERS
18464 pWDA: Pointer to WDA context
18465 wdaRequest: Pointer to earLink Layer Stats req
18466===========================================================================*/
18467VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
18468 tSirLLStatsClearReq *wdaRequest)
18469{
18470 WDI_Status status = WDI_STATUS_SUCCESS;
18471 tWDA_ReqParams *pWdaParams;
18472
18473 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18474 if (NULL == pWdaParams)
18475 {
18476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18477 "%s: VOS MEM Alloc Failure", __func__);
18478 VOS_ASSERT(0);
18479 return VOS_STATUS_E_NOMEM;
18480 }
18481 pWdaParams->pWdaContext = pWDA;
18482 pWdaParams->wdaMsgParam = wdaRequest;
18483 pWdaParams->wdaWdiApiMsgParam = NULL;
18484
18485 status = WDI_LLStatsClearReq((void *) wdaRequest,
18486 (WDI_LLStatsClearRspCb)WDA_LLStatsClearRspCallback,
18487 (void *)pWdaParams);
18488 if (IS_WDI_STATUS_FAILURE(status))
18489 {
18490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18491 "Failure to request. Free all the memory " );
18492 vos_mem_free(pWdaParams->wdaMsgParam);
18493 vos_mem_free(pWdaParams);
18494 }
18495 return CONVERT_WDI2VOS_STATUS(status);
18496}
18497
18498#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Abhishek Singh85b74712014-10-08 11:38:19 +053018499
Abhishek Singh85b74712014-10-08 11:38:19 +053018500void WDA_FWStatsGetRspCallback(WDI_Status status,void *fwStatsResp,void *pUserData)
18501{
18502 tSirFWStatsInfo *fwStatsinfo = (tSirFWStatsInfo *)pUserData;
18503
18504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18505 "<------ %s " ,__func__);
18506 if (NULL == fwStatsinfo)
18507 {
18508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18509 "%s: pWdaParams received NULL", __func__);
18510 VOS_ASSERT(0);
18511 return;
18512 }
18513
18514 if(fwStatsinfo->callback)
18515 fwStatsinfo->callback(status, fwStatsResp, fwStatsinfo->data);
18516
18517 vos_mem_free(pUserData);
18518 return;
18519}
18520
18521
18522v_VOID_t WDA_ProcessFWStatsGetReq(tWDA_CbContext *pWDA,
18523 tSirFWStatsGetReq *pData)
18524{
18525
18526 WDI_Status wdiStatus;
18527 tSirFWStatsInfo *fwStatsinfo;
18528
18529 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18530 "------> %s" , __func__);
18531
18532 fwStatsinfo =
18533 (tSirFWStatsInfo *)vos_mem_malloc(sizeof(tSirFWStatsInfo));
18534 if (NULL == fwStatsinfo)
18535 {
18536 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18537 "%s: VOS MEM Alloc Failure", __func__);
18538 VOS_ASSERT(0);
18539 vos_mem_free(pData);
18540 return;
18541 }
18542
18543 fwStatsinfo->callback = (tSirFWStatsCallback)(pData->callback);
18544 fwStatsinfo->data = pData->data;
18545
18546 wdiStatus = WDI_FWStatsGetReq(fwStatsinfo,
18547 WDA_FWStatsGetRspCallback,
18548 pData->stats);
18549 if (WDI_STATUS_PENDING == wdiStatus)
18550 {
18551 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18552 "Pending received for %s:%d ", __func__, __LINE__);
18553 }
18554 else if (WDI_STATUS_SUCCESS != wdiStatus)
18555 {
18556 if (fwStatsinfo->callback)
18557 {
18558 fwStatsinfo->callback(WDI_STATUS_E_FAILURE, NULL ,fwStatsinfo->data);
18559 }
18560 vos_mem_free(fwStatsinfo);
18561 }
18562 vos_mem_free(pData);
18563}
18564
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053018565/*==========================================================================
18566 FUNCTION WDA_EncryptMsgRspCallback
18567
18568 DESCRIPTION
18569 API to send Encrypt message response to HDD
18570
18571 PARAMETERS
18572 pEventData: Response from FW
18573 pUserData: Data sent to firmware as part of request
18574===========================================================================*/
18575void WDA_EncryptMsgRspCallback(WDI_Status status, void *pEventData,
18576 void* pUserData)
18577{
18578 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18579 tWDA_CbContext *pWDA = NULL;
18580 tpAniSirGlobal pMac;
18581 vos_msg_t vosMsg;
18582 tpSirEncryptedDataRspParams pEncRspParams;
18583 tpSetEncryptedDataRspParams pEncryptedDataRsp;
18584
18585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18586 FL("%s:"), __func__);
18587 if (NULL == pWdaParams)
18588 {
18589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18590 FL("%s: pWdaParams received NULL"), __func__);
18591 VOS_ASSERT(0);
18592 return;
18593 }
18594
18595 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
18596
18597 if (NULL == pWDA)
18598 {
18599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18600 FL("%s: pWDA received NULL"), __func__);
18601 VOS_ASSERT(0);
18602 goto error;
18603 }
18604
18605 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18606 if (NULL == pMac)
18607 {
18608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18609 FL("%s:pMac is NULL"), __func__);
18610 VOS_ASSERT(0);
18611 goto error;
18612 }
18613
18614 pEncryptedDataRsp = (tpSetEncryptedDataRspParams) pEventData;
18615
18616 pEncRspParams = vos_mem_malloc(sizeof(tSirEncryptedDataRspParams));
18617 if (NULL == pEncRspParams)
18618 {
18619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18620 FL("%s: VOS MEM Alloc Failure"), __func__);
18621 VOS_ASSERT(0);
18622 goto error;
18623 }
18624
18625 /* Message Header */
18626 pEncRspParams->mesgType = eWNI_SME_ENCRYPT_MSG_RSP;
18627 pEncRspParams->mesgLen = sizeof(tSirEncryptedDataRspParams);
18628 pEncRspParams->encryptedDataRsp.encryptedPayload.length =
18629 pEncryptedDataRsp->encryptedPayload.length;
18630 vos_mem_copy(pEncRspParams->encryptedDataRsp.encryptedPayload.data,
18631 pEncryptedDataRsp->encryptedPayload.data,
18632 pEncryptedDataRsp->encryptedPayload.length);
18633
18634 /* VOS message wrapper */
18635 vosMsg.type = eWNI_SME_ENCRYPT_MSG_RSP;
18636 vosMsg.bodyptr = (void *)pEncRspParams;
18637 vosMsg.bodyval = 0;
18638
18639 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
18640 {
18641 /* free the mem */
18642 vos_mem_free((v_VOID_t *) pEncRspParams);
18643 }
18644
18645error:
18646
18647 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18648 {
18649 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18650 }
18651 if (pWdaParams->wdaMsgParam != NULL)
18652 {
18653 vos_mem_free(pWdaParams->wdaMsgParam);
18654 }
18655 vos_mem_free(pWdaParams) ;
18656
18657 return;
18658}
18659/*==========================================================================
18660 FUNCTION WDA_ProcessEncryptMsgReq
18661
18662 DESCRIPTION
18663 API to send Encrypt message Request to WDI
18664
18665 PARAMETERS
18666 pWDA: Pointer to WDA context
18667 wdaRequest: Pointer to Encrypt_msg req parameters
18668===========================================================================*/
18669VOS_STATUS WDA_ProcessEncryptMsgReq(tWDA_CbContext *pWDA,
18670 u8 *wdaRequest)
18671{
18672 WDI_Status status = WDI_STATUS_SUCCESS;
18673 tWDA_ReqParams *pWdaParams;
18674
18675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18676 FL("%s: "), __func__);
18677 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18678 if (NULL == pWdaParams)
18679 {
18680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18681 FL("%s: VOS MEM Alloc Failure"), __func__);
18682 VOS_ASSERT(0);
18683 return VOS_STATUS_E_NOMEM;
18684 }
18685 pWdaParams->pWdaContext = pWDA;
18686 pWdaParams->wdaMsgParam = wdaRequest;
18687 pWdaParams->wdaWdiApiMsgParam = NULL;
18688
18689 status = WDI_EncryptMsgReq((void *)wdaRequest,
18690 (WDI_EncryptMsgRspCb)WDA_EncryptMsgRspCallback,
18691 (void *)pWdaParams);
18692 if (IS_WDI_STATUS_FAILURE(status))
18693 {
18694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18695 FL("Failure to request. Free all the memory " ));
18696 vos_mem_free(pWdaParams->wdaMsgParam);
18697 vos_mem_free(pWdaParams);
18698 }
18699 return CONVERT_WDI2VOS_STATUS(status);
18700}