blob: 2f94ddb6df07c75d3e5ec30b3ac6117132747a12 [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 Bhal64246172015-02-27 01:04:37 +05305080 * FUNCTION: WDA_GetFrameLogRspCallback
5081 * recieves get frame log response from FW
5082 */
5083void WDA_GetFrameLogRspCallback(WDI_GetFrameLogRspParamType* wdiRsp,
5084 void* pUserData)
5085{
5086 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5087 tWDA_CbContext *pWDA = NULL;
5088 tAniGetFrameLogReq *pGetFrameLogReqParams = NULL;
5089
5090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5091 "<------ Entering: %s " ,__func__);
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 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5101 if (NULL == pWDA)
5102 {
5103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5104 "%s:pWDA is NULL", __func__);
5105 VOS_ASSERT(0);
5106 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5107 vos_mem_free(pWdaParams);
5108 return ;
5109 }
5110
5111 pGetFrameLogReqParams = (tAniGetFrameLogReq *)pWdaParams->wdaMsgParam;
5112 if(NULL == pGetFrameLogReqParams)
5113 {
5114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5115 "%s: pGetFrameLogReqParams received NULL", __func__);
5116 VOS_ASSERT(0);
5117 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5118 vos_mem_free(pWdaParams);
5119 return;
5120 }
5121
5122 pGetFrameLogReqParams->rspStatus = wdiRsp->wdiStatus;
5123 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
5124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5125 "%s:GetFrameLog with rsp status %d", __func__, wdiRsp->wdiStatus);
5126 }
5127
5128 if(pGetFrameLogReqParams->getFramelogCallback)
5129 {
5130 pGetFrameLogReqParams->getFramelogCallback(
5131 pGetFrameLogReqParams->pDevContext);
5132 }
5133 else
5134 {
5135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5136 "%s: pGetFrameLogReqParams callback is NULL", __func__);
5137 }
5138
5139 /* free WDI command buffer only */
5140 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5141 vos_mem_free(pWdaParams->wdaMsgParam);
5142 vos_mem_free(pWdaParams);
5143
5144 return ;
5145
5146}
5147/*
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05305148 * FUNCTION: WDA_MgmtLoggingInitRspCallback
5149 * recieves Mgmt Logging init response from FW
5150 */
5151void WDA_MgmtLoggingInitRspCallback(WDI_MgmtLoggingRspParamType* wdiRsp,
5152 void* pUserData)
5153{
5154 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5155 tSirMgmtLoggingInitParam *pMgmtLoggingInitParams;
5156
5157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5158 "<------ %s " ,__func__);
5159
5160 if(NULL == pWdaParams)
5161 {
5162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5163 "%s: pWdaParams received NULL", __func__);
5164 VOS_ASSERT(0);
5165 return ;
5166 }
5167
5168 if(NULL == pWdaParams->wdaMsgParam)
5169 {
5170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5171 "%s: pWdaParams->wdaMsgParam is NULL", __func__);
5172 VOS_ASSERT(0);
5173 vos_mem_free(pWdaParams);
5174 return ;
5175 }
5176
5177 pMgmtLoggingInitParams = (tSirMgmtLoggingInitParam *)pWdaParams->wdaMsgParam;
5178
5179 if(pMgmtLoggingInitParams->mgmtlogInitCallback)
5180 {
5181 pMgmtLoggingInitParams->mgmtlogInitCallback(
5182 pMgmtLoggingInitParams->mgmtlogInitCbContext,
5183 CONVERT_WDI2VOS_STATUS(wdiRsp->wdiStatus));
5184 }
5185 else
5186 {
5187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5188 "%s: pMgmtLoggingInitParams callback is NULL", __func__);
5189 }
5190
5191 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5192 vos_mem_free(pWdaParams->wdaMsgParam);
5193 vos_mem_free(pWdaParams);
5194
5195 return;
5196}
5197
5198/*
Siddharth Bhal171788a2014-09-29 21:02:40 +05305199 * FUNCTION: WDA_SpoofMacAddrRspCallback
5200 * recieves spoof mac addr response from FW
5201 */
5202void WDA_SpoofMacAddrRspCallback(WDI_SpoofMacAddrRspParamType* wdiRsp, void* pUserData)
5203{
5204 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5205 tWDA_CbContext *pWDA;
Siddharth Bhal029d6732014-10-09 21:31:23 +05305206
Siddharth Bhal171788a2014-09-29 21:02:40 +05305207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5208 "<------ %s " ,__func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305209
Siddharth Bhal171788a2014-09-29 21:02:40 +05305210 if(NULL == pWdaParams)
5211 {
5212 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5213 "%s: pWdaParams received NULL", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305214 VOS_ASSERT(0);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305215 return ;
5216 }
Siddharth Bhal171788a2014-09-29 21:02:40 +05305217 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Siddharth Bhal171788a2014-09-29 21:02:40 +05305218
Siddharth Bhal029d6732014-10-09 21:31:23 +05305219 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
Siddharth Bhal171788a2014-09-29 21:02:40 +05305220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhal029d6732014-10-09 21:31:23 +05305221 "%s:Spoofing with rsp status %d", __func__, wdiRsp->wdiStatus);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305222 }
Siddharth Bhal029d6732014-10-09 21:31:23 +05305223 WDA_SendMsg(pWDA, WDA_SPOOF_MAC_ADDR_RSP, NULL,
5224 CONVERT_WDI2SIR_STATUS(wdiRsp->wdiStatus));
Siddharth Bhal171788a2014-09-29 21:02:40 +05305225
Siddharth Bhal171788a2014-09-29 21:02:40 +05305226 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305227 vos_mem_free(pWdaParams->wdaMsgParam);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305228 vos_mem_free(pWdaParams);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305229
5230 return;
Siddharth Bhal171788a2014-09-29 21:02:40 +05305231}
5232
Jeff Johnson295189b2012-06-20 16:38:30 -07005233/*
5234 * FUNCTION: WDA_ProcessRemoveBssKeyReq
5235 * Request to WDI to remove the BSS key( key for broadcast/multicast
5236 * frames Encryption)
5237 */
5238VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
5239 tRemoveBssKeyParams *removeBssKeyParams )
5240{
5241 WDI_Status status = WDI_STATUS_SUCCESS ;
5242 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
5243 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
5244 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
5245 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005247 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005248 if(NULL == wdiRemoveBssKeyParam)
5249 {
5250 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005251 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005252 VOS_ASSERT(0);
5253 return VOS_STATUS_E_NOMEM;
5254 }
5255 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5256 if(NULL == pWdaParams)
5257 {
5258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005259 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005260 VOS_ASSERT(0);
5261 vos_mem_free(wdiRemoveBssKeyParam);
5262 return VOS_STATUS_E_NOMEM;
5263 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005264 /* copy Remove BSS key params to WDI structure*/
5265 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
5266 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
5267 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
5268 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
5269 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005270 /* Store remove key pointer, as this will be used for response */
5271 /* store Params pass it to WDI */
5272 pWdaParams->pWdaContext = pWDA;
5273 pWdaParams->wdaMsgParam = removeBssKeyParams;
5274 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005275 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
5276 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005277 if(IS_WDI_STATUS_FAILURE(status))
5278 {
5279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5280 "Failure in Remove BSS Key Req WDI API, free all the memory " );
5281 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5282 vos_mem_free(pWdaParams) ;
5283 removeBssKeyParams->status = eSIR_FAILURE ;
5284 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
5285 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005286 return CONVERT_WDI2VOS_STATUS(status) ;
5287}
Jeff Johnson295189b2012-06-20 16:38:30 -07005288/*
5289 * FUNCTION: WDA_SetBssKeyReqCallback
5290 * send SET BSS key RSP back to PE
5291 */
5292void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
5293{
5294 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5295 tWDA_CbContext *pWDA;
5296 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005298 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005299 if(NULL == pWdaParams)
5300 {
5301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005302 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005303 VOS_ASSERT(0) ;
5304 return ;
5305 }
5306 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5307 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05305308 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
5309 sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005310 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5311 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005312 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005313 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005314 return ;
5315}
Jeff Johnson295189b2012-06-20 16:38:30 -07005316/*
5317 * FUNCTION: WDA_ProcessSetStaKeyReq
5318 * Request to WDI for programming the STA key( key for Unicast frames
5319 * Encryption)
5320 */
5321VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
5322 tSetStaKeyParams *setStaKeyParams )
5323{
5324 WDI_Status status = WDI_STATUS_SUCCESS ;
5325 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
5326 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
5327 sizeof(WDI_SetSTAKeyReqParamsType)) ;
5328 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005329 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005331 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005332 if(NULL == wdiSetStaKeyParam)
5333 {
5334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005335 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005336 VOS_ASSERT(0);
5337 return VOS_STATUS_E_NOMEM;
5338 }
5339 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5340 if(NULL == pWdaParams)
5341 {
5342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005343 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005344 VOS_ASSERT(0);
5345 vos_mem_free(wdiSetStaKeyParam);
5346 return VOS_STATUS_E_NOMEM;
5347 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005348 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005349 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005350 /* copy set STA key params to WDI structure */
5351 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
5352 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
5353 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
5354 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005355 if(setStaKeyParams->encType != eSIR_ED_NONE)
5356 {
Jeff Johnson43971f52012-07-17 12:26:56 -07005357 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005358 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
5359 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
5360 {
5361 WDA_GetWepKeysFromCfg( pWDA,
5362 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
5363 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
5364 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
5365 }
5366 else
5367 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005368 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5369 keyIndex++)
5370 {
5371 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
5372 setStaKeyParams->key[keyIndex].keyId;
5373 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
5374 setStaKeyParams->key[keyIndex].unicast;
5375 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
5376 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005377 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
5378 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5379 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
5380 setStaKeyParams->key[keyIndex].paeRole;
5381 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
5382 setStaKeyParams->key[keyIndex].keyLength;
5383 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
5384 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
5385 /* set default index to index which have key direction as WDI_TX_DEFAULT */
5386 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
5387 {
5388 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
5389 }
5390 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005391 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
5392 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005393 }
5394 }
5395 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
5396 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005397 /* Store set key pointer, as this will be used for response */
5398 /* store Params pass it to WDI */
5399 pWdaParams->pWdaContext = pWDA;
5400 pWdaParams->wdaMsgParam = setStaKeyParams;
5401 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005402 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
5403 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005404 if(IS_WDI_STATUS_FAILURE(status))
5405 {
5406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5407 "Failure in set STA Key Req WDI API, free all the memory " );
5408 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5409 vos_mem_free(pWdaParams) ;
5410 setStaKeyParams->status = eSIR_FAILURE ;
5411 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
5412 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005413 return CONVERT_WDI2VOS_STATUS(status) ;
5414}
Jeff Johnson295189b2012-06-20 16:38:30 -07005415/*
5416 * FUNCTION: WDA_SetBcastStaKeyReqCallback
5417 * send SET Bcast STA key RSP back to PE
5418 */
5419void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
5420{
5421 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5422 tWDA_CbContext *pWDA;
5423 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005425 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005426 if(NULL == pWdaParams)
5427 {
5428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005429 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005430 VOS_ASSERT(0) ;
5431 return ;
5432 }
5433 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5434 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005435 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5436 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005437 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005438 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005439 return ;
5440}
5441
Jeff Johnson295189b2012-06-20 16:38:30 -07005442/*
5443 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
5444 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
5445 * Encryption)
5446 */
5447VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
5448 tSetStaKeyParams *setStaKeyParams )
5449{
5450 WDI_Status status = WDI_STATUS_SUCCESS ;
5451 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
5452 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
5453 sizeof(WDI_SetSTAKeyReqParamsType)) ;
5454 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005455 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005457 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005458 if(NULL == wdiSetStaKeyParam)
5459 {
5460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005461 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005462 VOS_ASSERT(0);
5463 return VOS_STATUS_E_NOMEM;
5464 }
5465 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5466 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: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005470 VOS_ASSERT(0);
5471 vos_mem_free(wdiSetStaKeyParam);
5472 return VOS_STATUS_E_NOMEM;
5473 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005474 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005475 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005476 /* copy set STA key params to WDI structure */
5477 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
5478 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
5479 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
5480 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005481 if(setStaKeyParams->encType != eSIR_ED_NONE)
5482 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005483 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5484 keyIndex++)
5485 {
5486 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
5487 setStaKeyParams->key[keyIndex].keyId;
5488 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
5489 setStaKeyParams->key[keyIndex].unicast;
5490 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
5491 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005492 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
5493 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5494 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
5495 setStaKeyParams->key[keyIndex].paeRole;
5496 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
5497 setStaKeyParams->key[keyIndex].keyLength;
5498 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
5499 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
5500 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005501 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
5502 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005503 }
5504 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07005505 /* Store set key pointer, as this will be used for response */
5506 /* store Params pass it to WDI */
5507 pWdaParams->pWdaContext = pWDA;
5508 pWdaParams->wdaMsgParam = setStaKeyParams;
5509 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005510 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
5511 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005512 if(IS_WDI_STATUS_FAILURE(status))
5513 {
5514 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5515 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
5516 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5517 vos_mem_free(pWdaParams) ;
5518 setStaKeyParams->status = eSIR_FAILURE ;
5519 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
5520 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005521 return CONVERT_WDI2VOS_STATUS(status) ;
5522}
Jeff Johnson295189b2012-06-20 16:38:30 -07005523/*
5524 * FUNCTION: WDA_RemoveStaKeyReqCallback
5525 * send SET BSS key RSP back to PE
5526 */
5527void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
5528{
5529 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5530 tWDA_CbContext *pWDA;
5531 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005533 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005534 if(NULL == pWdaParams)
5535 {
5536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005537 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005538 VOS_ASSERT(0) ;
5539 return ;
5540 }
5541 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5542 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005543 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5544 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005545 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005546 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005547 return ;
5548}
5549
Jeff Johnson295189b2012-06-20 16:38:30 -07005550/*
5551 * FUNCTION: WDA_ProcessRemoveStaKeyReq
5552 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
5553 */
5554VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
5555 tRemoveStaKeyParams *removeStaKeyParams )
5556{
5557 WDI_Status status = WDI_STATUS_SUCCESS ;
5558 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
5559 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
5560 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
5561 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005563 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005564 if(NULL == wdiRemoveStaKeyParam)
5565 {
5566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005567 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005568 VOS_ASSERT(0);
5569 return VOS_STATUS_E_NOMEM;
5570 }
5571 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5572 if(NULL == pWdaParams)
5573 {
5574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005575 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005576 VOS_ASSERT(0);
5577 vos_mem_free(wdiRemoveStaKeyParam);
5578 return VOS_STATUS_E_NOMEM;
5579 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005580 /* copy remove STA key params to WDI structure*/
5581 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
5582 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
5583 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
5584 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
5585 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005586 /* Store remove key pointer, as this will be used for response */
5587 /* store Params pass it to WDI */
5588 pWdaParams->pWdaContext = pWDA;
5589 pWdaParams->wdaMsgParam = removeStaKeyParams;
5590 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005591 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
5592 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005593 if(IS_WDI_STATUS_FAILURE(status))
5594 {
5595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5596 "Failure in remove STA Key Req WDI API, free all the memory " );
5597 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5598 vos_mem_free(pWdaParams) ;
5599 removeStaKeyParams->status = eSIR_FAILURE ;
5600 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
5601 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005602 return CONVERT_WDI2VOS_STATUS(status) ;
5603}
Jeff Johnson295189b2012-06-20 16:38:30 -07005604/*
5605 * FUNCTION: WDA_IsHandleSetLinkStateReq
5606 * Update the WDA state and return the status to handle this message or not
5607 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005608WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
5609 tWDA_CbContext *pWDA,
5610 tLinkStateParams *linkStateParams)
5611{
5612 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005613 switch(linkStateParams->state)
5614 {
5615 case eSIR_LINK_PREASSOC_STATE:
5616 case eSIR_LINK_BTAMP_PREASSOC_STATE:
5617 /*
5618 * set the WDA state to PRE ASSOC
5619 * copy the BSSID into pWDA to use it in join request and return,
5620 * No need to handle these messages.
5621 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005622 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
5623 {
5624 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07005625 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005626 }
5627 else
5628 {
5629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005630 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005631 VOS_ASSERT(0);
5632 }
5633
5634 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
5635 {
5636 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07005637 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005638 }
5639 else
5640 {
5641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005642 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005643 VOS_ASSERT(0);
5644 }
5645
Jeff Johnson295189b2012-06-20 16:38:30 -07005646 /* UMAC is issuing the setlink state with PREASSOC twice (before set
5647 *channel and after ) so reset the WDA state to ready when the second
5648 * time UMAC issue the link state with PREASSOC
5649 */
5650 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
5651 {
5652 /* RESET WDA state back to WDA_READY_STATE */
5653 pWDA->wdaState = WDA_READY_STATE;
5654 }
5655 else
5656 {
5657 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
5658 }
5659 //populate linkState info in WDACbCtxt
5660 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07005661 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07005662 default:
5663 if(pWDA->wdaState != WDA_READY_STATE)
5664 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005665 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
5666 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
5667 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
5668 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
5669 *the ASSERT in WDA_Stop during module unload.*/
5670 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
5671 {
5672 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005673 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005674 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005675 else
5676 {
5677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005678 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005679 status = WDA_IGNORE_SET_LINK_STATE;
5680 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005681 }
5682 break;
5683 }
5684
5685 return status;
5686}
Jeff Johnson295189b2012-06-20 16:38:30 -07005687/*
5688 * FUNCTION: WDA_SetLinkStateCallback
5689 * call back function for set link state from WDI
5690 */
5691void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
5692{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05305693 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07005694 tLinkStateParams *linkStateParams;
5695 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005697 "<------ %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05305698 if (NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07005699 {
5700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005701 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005702 VOS_ASSERT(0) ;
5703 return ;
5704 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005705 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05305706 if (NULL == pWDA)
5707 {
5708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5709 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05305710 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5711 vos_mem_free(pWdaParams->wdaMsgParam);
5712 vos_mem_free(pWdaParams);
5713
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05305714 VOS_ASSERT(0);
5715 return ;
5716 }
5717
Jeff Johnson295189b2012-06-20 16:38:30 -07005718 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005719 /*
5720 * In STA mode start the BA activity check timer after association
5721 * and in AP mode start BA activity check timer after BSS start */
5722 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
5723 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07005724 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
5725 ((status == WDI_STATUS_SUCCESS) &&
5726 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07005727 {
5728 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5729 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005730 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005731 /*
5732 * No respone required for WDA_SET_LINK_STATE so free the request
5733 * param here
5734 */
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05305735 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5736 vos_mem_free(pWdaParams);
5737
Jeff Johnson295189b2012-06-20 16:38:30 -07005738 return ;
5739}
Jeff Johnson295189b2012-06-20 16:38:30 -07005740/*
5741 * FUNCTION: WDA_ProcessSetLinkState
5742 * Request to WDI to set the link status.
5743 */
5744VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
5745 tLinkStateParams *linkStateParams)
5746{
5747 WDI_Status status = WDI_STATUS_SUCCESS ;
5748 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
5749 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
5750 sizeof(WDI_SetLinkReqParamsType)) ;
5751 tWDA_ReqParams *pWdaParams ;
5752 tpAniSirGlobal pMac;
5753 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
5754
5755 if(NULL == pMac)
5756 {
5757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005758 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005759 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005760 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005761 return VOS_STATUS_E_FAILURE;
5762 }
5763
5764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005765 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005766 if(NULL == wdiSetLinkStateParam)
5767 {
5768 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005769 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005770 VOS_ASSERT(0);
5771 return VOS_STATUS_E_NOMEM;
5772 }
5773 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5774 if(NULL == pWdaParams)
5775 {
5776 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005777 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005778 VOS_ASSERT(0);
5779 vos_mem_free(wdiSetLinkStateParam);
5780 return VOS_STATUS_E_NOMEM;
5781 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005782 if(WDA_IGNORE_SET_LINK_STATE ==
5783 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
5784 {
5785 status = WDI_STATUS_E_FAILURE;
5786 }
5787 else
5788 {
5789 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
5790 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005791 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
5792 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005793 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
5794 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005795 pWdaParams->pWdaContext = pWDA;
5796 /* Store remove key pointer, as this will be used for response */
5797 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005798 /* store Params pass it to WDI */
5799 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
5800 /* Stop Timer only other than GO role and concurrent session */
5801 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07005802 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005803 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
5804 {
5805 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5806 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005807 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
5808 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005809 if(IS_WDI_STATUS_FAILURE(status))
5810 {
5811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5812 "Failure in set link state Req WDI API, free all the memory " );
5813 }
5814 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005815 if(IS_WDI_STATUS_FAILURE(status))
5816 {
5817 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07005818 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005819 vos_mem_free(pWdaParams);
5820 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005821 return CONVERT_WDI2VOS_STATUS(status) ;
5822}
Jeff Johnson295189b2012-06-20 16:38:30 -07005823/*
5824 * FUNCTION: WDA_GetStatsReqParamsCallback
5825 * send the response to PE with Stats received from WDI
5826 */
5827void WDA_GetStatsReqParamsCallback(
5828 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
5829 void* pUserData)
5830{
5831 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
5832 tAniGetPEStatsRsp *pGetPEStatsRspParams;
5833
5834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005835 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005836 pGetPEStatsRspParams =
5837 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
5838 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
5839
5840 if(NULL == pGetPEStatsRspParams)
5841 {
5842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005843 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005844 VOS_ASSERT(0);
5845 return;
5846 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005847 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
5848 pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType;
5849 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
5850 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005851
5852 //Fill the Session Id Properly in PE
5853 pGetPEStatsRspParams->sessionId = 0;
5854 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005855 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005856 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
5857 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005858 vos_mem_copy( pGetPEStatsRspParams + 1,
5859 wdiGetStatsRsp + 1,
5860 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005861 /* send response to UMAC*/
5862 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP, pGetPEStatsRspParams , 0) ;
5863
5864 return;
5865}
5866
Jeff Johnson295189b2012-06-20 16:38:30 -07005867/*
5868 * FUNCTION: WDA_ProcessGetStatsReq
5869 * Request to WDI to get the statistics
5870 */
5871VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
5872 tAniGetPEStatsReq *pGetStatsParams)
5873{
5874 WDI_Status status = WDI_STATUS_SUCCESS ;
5875 WDI_GetStatsReqParamsType wdiGetStatsParam;
5876 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005878 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005879 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
5880 pGetStatsParams->staId;
5881 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
5882 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005883 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005884 status = WDI_GetStatsReq(&wdiGetStatsParam,
5885 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005886 if(IS_WDI_STATUS_FAILURE(status))
5887 {
5888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5889 "Failure in Get Stats Req WDI API, free all the memory " );
5890 pGetPEStatsRspParams =
5891 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
5892 if(NULL == pGetPEStatsRspParams)
5893 {
5894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005895 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005896 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005897 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005898 return VOS_STATUS_E_NOMEM;
5899 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005900 pGetPEStatsRspParams->msgType = WDA_GET_STATISTICS_RSP;
5901 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
5902 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
5903 pGetPEStatsRspParams->rc = eSIR_FAILURE;
5904 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP,
5905 (void *)pGetPEStatsRspParams, 0) ;
5906 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005907 /* Free the request message */
5908 vos_mem_free(pGetStatsParams);
5909 return CONVERT_WDI2VOS_STATUS(status);
5910}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005911
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08005912#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005913/*
5914 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
5915 * send the response to PE with roam Rssi received from WDI
5916 */
5917void WDA_GetRoamRssiReqParamsCallback(
5918 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
5919 void* pUserData)
5920{
5921 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5922 tWDA_CbContext *pWDA = NULL;
5923 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5924 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
5925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5926 "<------ %s " ,__func__);
5927 if(NULL == pWdaParams)
5928 {
5929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5930 "%s: pWdaParams received NULL", __func__);
5931 VOS_ASSERT(0) ;
5932 return ;
5933 }
5934 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5935 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
5936
5937 if(NULL == pGetRoamRssiReqParams)
5938 {
5939 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5940 "%s: pGetRoamRssiReqParams received NULL", __func__);
5941 VOS_ASSERT(0);
5942 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5943 vos_mem_free(pWdaParams);
5944 return ;
5945 }
5946 pGetRoamRssiRspParams =
5947 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5948
5949 if(NULL == pGetRoamRssiRspParams)
5950 {
5951 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5952 "%s: VOS MEM Alloc Failure", __func__);
5953 VOS_ASSERT(0);
5954 return;
5955 }
5956 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
5957 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005958 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005959 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
5960 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
5961
5962 /* Assign get roam rssi req (backup) in to the response */
5963 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
5964
5965 /* free WDI command buffer */
5966 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5967 vos_mem_free(pWdaParams) ;
5968
5969 /* send response to UMAC*/
5970 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
5971
5972 return;
5973}
5974
5975
5976
5977/*
5978 * FUNCTION: WDA_ProcessGetRoamRssiReq
5979 * Request to WDI to get the statistics
5980 */
5981VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
5982 tAniGetRssiReq *pGetRoamRssiParams)
5983{
5984 WDI_Status status = WDI_STATUS_SUCCESS ;
5985 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
5986 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5987 tWDA_ReqParams *pWdaParams = NULL;
5988
5989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5990 "------> %s " ,__func__);
5991 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
5992 pGetRoamRssiParams->staId;
5993 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
5994
5995 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5996 if(NULL == pWdaParams)
5997 {
5998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5999 "%s: VOS MEM Alloc Failure", __func__);
6000 VOS_ASSERT(0);
6001 return VOS_STATUS_E_NOMEM;
6002 }
6003
6004 /* Store Init Req pointer, as this will be used for response */
6005 pWdaParams->pWdaContext = pWDA;
6006
6007 /* Take Get roam Rssi req backup as it stores the callback to be called after
6008 receiving the response */
6009 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
6010 pWdaParams->wdaWdiApiMsgParam = NULL;
6011
6012 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
6013 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
6014 if(IS_WDI_STATUS_FAILURE(status))
6015 {
6016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6017 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
6018 pGetRoamRssiRspParams =
6019 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
6020 if(NULL == pGetRoamRssiRspParams)
6021 {
6022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6023 "%s: VOS MEM Alloc Failure", __func__);
6024 VOS_ASSERT(0);
Abhishek Singh1e2bfa32014-01-02 15:44:15 +05306025 vos_mem_free(pGetRoamRssiParams);
6026 vos_mem_free(pWdaParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08006027 return VOS_STATUS_E_NOMEM;
6028 }
6029 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
6030 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
6031 pGetRoamRssiRspParams->rssi = 0;
6032 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
6033 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
6034 (void *)pGetRoamRssiRspParams, 0) ;
6035 }
6036 return CONVERT_WDI2VOS_STATUS(status);
6037}
6038#endif
6039
6040
Jeff Johnson295189b2012-06-20 16:38:30 -07006041/*
6042 * FUNCTION: WDA_UpdateEDCAParamCallback
6043 * call back function for Update EDCA params from WDI
6044 */
6045void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
6046{
6047 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6048 tEdcaParams *pEdcaParams;
6049
6050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006051 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006052 if(NULL == pWdaParams)
6053 {
6054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006055 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006056 VOS_ASSERT(0) ;
6057 return ;
6058 }
6059 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006060 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6061 vos_mem_free(pWdaParams);
6062 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006063 return ;
6064}
Jeff Johnson295189b2012-06-20 16:38:30 -07006065/*
6066 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
6067 * Request to WDI to Update the EDCA params.
6068 */
6069VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
6070 tEdcaParams *pEdcaParams)
6071{
6072 WDI_Status status = WDI_STATUS_SUCCESS ;
6073 WDI_UpdateEDCAParamsType *wdiEdcaParam =
6074 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
6075 sizeof(WDI_UpdateEDCAParamsType)) ;
6076 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006078 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006079 if(NULL == wdiEdcaParam)
6080 {
6081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006082 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006083 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006084 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006085 return VOS_STATUS_E_NOMEM;
6086 }
6087 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6088 if(NULL == pWdaParams)
6089 {
6090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006091 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006092 VOS_ASSERT(0);
6093 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006094 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006095 return VOS_STATUS_E_NOMEM;
6096 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006097 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
Bansidhar Gopalachari5dcf9e02013-07-29 19:53:58 -07006098 /*
6099 Since firmware is not using highperformance flag, we have removed
6100 this flag from wdiEDCAInfo structure to match sizeof the structure
6101 between host and firmware.In future if we are planning to use
6102 highperformance flag then Please define this flag in wdiEDCAInfo
6103 structure, update it here and send it to firmware. i.e.
6104 Following is the original line which we removed as part of the fix
6105 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid =
6106 pEdcaParams->highPerformance;
6107 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006108 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
6109 &pEdcaParams->acbe);
6110 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
6111 &pEdcaParams->acbk);
6112 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
6113 &pEdcaParams->acvi);
6114 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
6115 &pEdcaParams->acvo);
6116 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006117 pWdaParams->pWdaContext = pWDA;
6118 /* Store remove key pointer, as this will be used for response */
6119 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006120 /* store Params pass it to WDI */
6121 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006122 status = WDI_UpdateEDCAParams(wdiEdcaParam,
6123 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006124 if(IS_WDI_STATUS_FAILURE(status))
6125 {
6126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6127 "Failure in Update EDCA Params WDI API, free all the memory " );
6128 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6129 vos_mem_free(pWdaParams);
6130 vos_mem_free(pEdcaParams);
6131 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006132 return CONVERT_WDI2VOS_STATUS(status) ;
6133}
Jeff Johnson295189b2012-06-20 16:38:30 -07006134/*
6135 * FUNCTION: WDA_AddBAReqCallback
6136 * send ADD BA RSP back to PE
6137 */
6138void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
6139 void* pUserData)
6140{
6141 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6142 tWDA_CbContext *pWDA;
6143 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006145 "<------ %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306146 if (NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006147 {
6148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006149 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006150 VOS_ASSERT(0) ;
6151 return ;
6152 }
6153 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306154 if (NULL == pWDA)
6155 {
6156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6157 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306158 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6159 vos_mem_free(pWdaParams->wdaMsgParam);
6160 vos_mem_free(pWdaParams);
6161
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306162 VOS_ASSERT(0);
6163 return ;
6164 }
6165
Jeff Johnson295189b2012-06-20 16:38:30 -07006166 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006167 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6168 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006169 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006170 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006171 return ;
6172}
6173
Jeff Johnson295189b2012-06-20 16:38:30 -07006174/*
6175 * FUNCTION: WDA_ProcessAddBAReq
6176 * Request to WDI to Update the ADDBA REQ params.
6177 */
6178VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
Abhishek Singh01c73d12015-03-12 15:13:44 +05306179 tANI_U16 baSessionID, tANI_U8 staIdx, tANI_U8 ucWinSize, tAddBAParams *pAddBAReqParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006180{
Jeff Johnson43971f52012-07-17 12:26:56 -07006181 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07006182 WDI_AddBAReqParamsType *wdiAddBAReqParam =
6183 (WDI_AddBAReqParamsType *)vos_mem_malloc(
6184 sizeof(WDI_AddBAReqParamsType)) ;
6185 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006186 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006187 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006188 if(NULL == wdiAddBAReqParam)
6189 {
6190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006191 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006192 VOS_ASSERT(0);
6193 return VOS_STATUS_E_NOMEM;
6194 }
6195 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6196 if(NULL == pWdaParams)
6197 {
6198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006199 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006200 VOS_ASSERT(0);
6201 vos_mem_free(wdiAddBAReqParam);
6202 return VOS_STATUS_E_NOMEM;
6203 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006204 do
6205 {
6206 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006207 wdiAddBaInfo->ucSTAIdx = staIdx ;
6208 wdiAddBaInfo->ucBaSessionID = baSessionID ;
Abhishek Singh01c73d12015-03-12 15:13:44 +05306209 wdiAddBaInfo->ucWinSize = ucWinSize ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006210 } while(0) ;
6211 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006212 pWdaParams->pWdaContext = pWDA;
6213 /* store Params pass it to WDI */
6214 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
6215 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07006216 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
6217 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006218
Jeff Johnson43971f52012-07-17 12:26:56 -07006219 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07006220 {
6221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07006222 "Failure in ADD BA REQ Params WDI API, free all the memory" );
6223 status = CONVERT_WDI2VOS_STATUS(wstatus);
6224 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006225 vos_mem_free(pWdaParams);
6226 pAddBAReqParams->status = eSIR_FAILURE;
6227 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6228 }
Jeff Johnson43971f52012-07-17 12:26:56 -07006229 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07006230}
Jeff Johnson295189b2012-06-20 16:38:30 -07006231/*
6232 * FUNCTION: WDA_AddBASessionReqCallback
6233 * send ADD BA SESSION RSP back to PE/(or TL)
6234 */
6235void WDA_AddBASessionReqCallback(
6236 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
6237{
6238 VOS_STATUS status = VOS_STATUS_SUCCESS ;
6239 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306240 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006241 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006243 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006244 if(NULL == pWdaParams)
6245 {
6246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006247 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006248 VOS_ASSERT(0) ;
6249 return ;
6250 }
6251 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306252 if (NULL == pWDA)
6253 {
6254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6255 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306256 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6257 vos_mem_free(pWdaParams->wdaMsgParam);
6258 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306259 VOS_ASSERT(0);
6260 return ;
6261 }
6262
Jeff Johnson295189b2012-06-20 16:38:30 -07006263 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006264 if( NULL == pAddBAReqParams )
6265 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006267 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006268 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006269 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6270 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006271 return ;
6272 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006273 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6274 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006275 /*
Deepthi Gowriba794fc2015-03-27 17:14:01 +05306276 * if BA direction is for recipient, update TL with BA session params and send
Jeff Johnson295189b2012-06-20 16:38:30 -07006277 * another request to HAL(/WDI) (ADD_BA_REQ)
6278 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006279 if((VOS_STATUS_SUCCESS ==
6280 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
Deepthi Gowriba794fc2015-03-27 17:14:01 +05306281 (eBA_RECIPIENT == pAddBAReqParams->baDirection))
Jeff Johnson295189b2012-06-20 16:38:30 -07006282 {
6283 /* Update TL with BA info received from HAL/WDI */
6284 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
6285 wdiAddBaSession->usBaSessionID,
6286 wdiAddBaSession->ucSTAIdx,
6287 wdiAddBaSession->ucBaTID,
6288 wdiAddBaSession->ucBaBufferSize,
6289 wdiAddBaSession->ucWinSize,
6290 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07006291 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
Abhishek Singh01c73d12015-03-12 15:13:44 +05306292 wdiAddBaSession->ucSTAIdx,
6293 wdiAddBaSession->ucWinSize, pAddBAReqParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006294 }
6295 else
6296 {
6297 pAddBAReqParams->status =
6298 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
6299
6300 /* Setting Flag to indicate that Set BA is success */
6301 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
6302 {
6303 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
6304 tANI_U8 tid = wdiAddBaSession->ucBaTID;
6305 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
6306 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006307 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6308 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006309 /*Reset the WDA state to READY */
6310 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006311 return ;
6312}
6313
Jeff Johnson295189b2012-06-20 16:38:30 -07006314/*
6315 * FUNCTION: WDA_ProcessAddBASessionReq
6316 * Request to WDI to Update the ADDBA REQ params.
6317 */
6318VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
6319 tAddBAParams *pAddBAReqParams)
6320{
6321 WDI_Status status = WDI_STATUS_SUCCESS ;
6322 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
6323 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
6324 sizeof(WDI_AddBASessionReqParamsType)) ;
6325 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07006326 WLANTL_STAStateType tlSTAState = 0;
6327
Jeff Johnson295189b2012-06-20 16:38:30 -07006328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006329 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006330 if(NULL == wdiAddBASessionReqParam)
6331 {
6332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006333 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006334 VOS_ASSERT(0);
6335 return VOS_STATUS_E_NOMEM;
6336 }
6337 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6338 if(NULL == pWdaParams)
6339 {
6340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006341 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006342 VOS_ASSERT(0);
6343 vos_mem_free(wdiAddBASessionReqParam);
6344 return VOS_STATUS_E_NOMEM;
6345 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006346 /*
6347 * Populate ADD BA parameters and pass these paarmeters to WDI.
6348 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
6349 * the state to track if these is BA recipient case or BA initiator
6350 * case.
6351 */
6352 do
6353 {
6354 WDI_AddBASessionReqinfoType *wdiBAInfoType =
6355 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
6356 /* vos_mem_copy(wdiBAInfoType->macBSSID,
6357 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
6358 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
6359 vos_mem_copy(wdiBAInfoType->macPeerAddr,
6360 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006361 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07006362 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
6363 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
6364 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
6365 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
6366 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Deepthi Gowriba794fc2015-03-27 17:14:01 +05306367
Jeff Johnson295189b2012-06-20 16:38:30 -07006368 }while(0) ;
6369 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006370 pWdaParams->pWdaContext = pWDA;
6371 /* Store ADD BA pointer, as this will be used for response */
6372 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
6373 /* store Params pass it to WDI */
6374 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07006375
6376 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
6377 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
6378 */
6379 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
6380 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
6381 {
6382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08006383 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.", pAddBAReqParams->staIdx, tlSTAState );
Hoonki Leea0631ce2013-04-15 16:59:08 -07006384 status = WDI_STATUS_E_NOT_ALLOWED;
6385 pAddBAReqParams->status =
6386 CONVERT_WDI2SIR_STATUS(status) ;
6387 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6388 /*Reset the WDA state to READY */
6389 pWDA->wdaState = WDA_READY_STATE;
6390 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6391 vos_mem_free(pWdaParams);
6392
6393 return CONVERT_WDI2VOS_STATUS(status) ;
6394 }
6395
Jeff Johnson295189b2012-06-20 16:38:30 -07006396 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
6397 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006398 if(IS_WDI_STATUS_FAILURE(status))
6399 {
6400 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08006401 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d", status);
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07006402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08006403 "Send ADD BA failure response to PE");
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07006404 pAddBAReqParams->status =
6405 CONVERT_WDI2SIR_STATUS(status) ;
6406 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07006407 /*Reset the WDA state to READY */
6408 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006409 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006410 vos_mem_free(pWdaParams);
6411 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006412 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006413}
Jeff Johnson295189b2012-06-20 16:38:30 -07006414/*
6415 * FUNCTION: WDA_DelBANotifyTL
6416 * send DEL BA IND to TL
6417 */
6418void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
6419 tDelBAParams *pDelBAReqParams)
6420{
6421 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
6422 //tSirMsgQ msg;
6423 vos_msg_t vosMsg;
6424 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07006425 if(NULL == pDelBAInd)
6426 {
6427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006428 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006429 VOS_ASSERT(0) ;
6430 return;
6431 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006432 pDelBAInd->mesgType = WDA_DELETEBA_IND;
6433 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
6434 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
6435 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07006436
Jeff Johnson295189b2012-06-20 16:38:30 -07006437
6438 vosMsg.type = WDA_DELETEBA_IND;
6439 vosMsg.bodyptr = pDelBAInd;
6440 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
6441 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
6442 {
6443 vosStatus = VOS_STATUS_E_BADMSG;
6444 }
6445}
Jeff Johnson295189b2012-06-20 16:38:30 -07006446/*
6447 * FUNCTION: WDA_DelBAReqCallback
6448 * send DEL BA RSP back to PE
6449 */
6450void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
6451{
6452 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6453 tWDA_CbContext *pWDA;
6454 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006456 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006457 if(NULL == pWdaParams)
6458 {
6459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006460 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006461 VOS_ASSERT(0) ;
6462 return ;
6463 }
6464 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306465
Jeff Johnson295189b2012-06-20 16:38:30 -07006466 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006467 /* Notify TL about DEL BA in case of recipinet */
6468 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
6469 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
6470 {
6471 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
6472 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006473 /*
6474 * No respone required for WDA_DELBA_IND so just free the request
6475 * param here
6476 */
6477 vos_mem_free(pDelBAReqParams);
6478 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6479 vos_mem_free(pWdaParams);
6480 return ;
6481}
6482
Jeff Johnson295189b2012-06-20 16:38:30 -07006483/*
6484 * FUNCTION: WDA_ProcessDelBAReq
6485 * Request to WDI to Update the DELBA REQ params.
6486 */
6487VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
6488 tDelBAParams *pDelBAReqParams)
6489{
6490 WDI_Status status = WDI_STATUS_SUCCESS ;
6491 WDI_DelBAReqParamsType *wdiDelBAReqParam =
6492 (WDI_DelBAReqParamsType *)vos_mem_malloc(
6493 sizeof(WDI_DelBAReqParamsType)) ;
6494 tWDA_ReqParams *pWdaParams ;
6495 tANI_U16 staIdx = 0;
6496 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07006497 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006498 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006499 if(NULL == wdiDelBAReqParam)
6500 {
6501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006502 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006503 VOS_ASSERT(0);
6504 return VOS_STATUS_E_NOMEM;
6505 }
6506 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6507 if(NULL == pWdaParams)
6508 {
6509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006510 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006511 VOS_ASSERT(0);
6512 vos_mem_free(wdiDelBAReqParam);
6513 return VOS_STATUS_E_NOMEM;
6514 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006515 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
6516 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
6517 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
6518 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006519 pWdaParams->pWdaContext = pWDA;
6520 /* Store DEL BA pointer, as this will be used for response */
6521 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006522 /* store Params pass it to WDI */
6523 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006524 /* if BA exchange over the air is failed, clear this tid in BaBitmap
6525 * maintained in WDA, so that WDA can retry for another BA session
6526 */
6527 staIdx = pDelBAReqParams->staIdx;
6528 tid = pDelBAReqParams->baTID;
6529 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07006530 status = WDI_DelBAReq(wdiDelBAReqParam,
6531 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006532 if(IS_WDI_STATUS_FAILURE(status))
6533 {
6534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6535 "Failure in DEL BA REQ Params WDI API, free all the memory " );
6536 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6537 vos_mem_free(pWdaParams->wdaMsgParam);
6538 vos_mem_free(pWdaParams);
6539 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006540 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006541}
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006542
6543/*
6544 * FUNCTION: WDA_UpdateChReqCallback
6545 *
6546 */
6547void WDA_UpdateChReqCallback(WDI_Status status, void* pUserData)
6548{
Siddharth Bhala006c122014-05-03 12:13:27 +05306549 tWDA_ReqParams *pWdaParams;
6550 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
6551 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
6552 WDI_UpdateChannelReqinfoType *pChanInfoType;
6553 tSirUpdateChanList *pChanList;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006554
6555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6556 "<------ %s " ,__func__);
Siddharth Bhala006c122014-05-03 12:13:27 +05306557 if(NULL == pUserData)
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006558 {
6559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhala006c122014-05-03 12:13:27 +05306560 "%s: pUserData received NULL", __func__);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006561 VOS_ASSERT(0);
6562 return;
6563 }
6564
Siddharth Bhala006c122014-05-03 12:13:27 +05306565 pWdaParams = (tWDA_ReqParams *)pUserData;
6566 pwdiUpdateChReqParam =
6567 (WDI_UpdateChReqParamsType *)pWdaParams->wdaWdiApiMsgParam;
6568 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
6569 pChanInfoType = pwdiUpdateChanReqType->pchanParam;
6570 pChanList = (tSirUpdateChanList *)pWdaParams->wdaMsgParam;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006571 /*
6572 * currently there is no response message is expected between PE and
6573 * WDA, Failure return from WDI is a ASSERT condition
6574 */
6575 vos_mem_free(pChanInfoType);
6576 vos_mem_free(pChanList);
6577 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6578 vos_mem_free(pWdaParams);
6579
6580 return;
6581}
6582
6583/*
6584 * FUNCTION: WDA_ProcessUpdateChannelList
6585 * Request to WDI to Update the ChannelList params.
6586 */
6587VOS_STATUS WDA_ProcessUpdateChannelList(tWDA_CbContext *pWDA,
6588 tSirUpdateChanList *pChanList)
6589{
6590 WDI_Status status = WDI_STATUS_SUCCESS;
6591 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
6592 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
6593 WDI_UpdateChannelReqinfoType *pChanInfoType;
6594 tWDA_ReqParams *pWdaParams;
6595 wpt_uint8 i;
6596
6597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6598 "------> %s " ,__func__);
6599 if(NULL == pChanList)
6600 {
6601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6602 "%s: NULL pChanList", __func__);
6603 VOS_ASSERT(0);
6604 return VOS_STATUS_E_INVAL;
6605 }
6606
6607 if(!WDA_getFwWlanFeatCaps(UPDATE_CHANNEL_LIST))
6608 {
6609 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6610 "Update channel list capability Not Supported");
6611 vos_mem_free(pChanList);
6612 return VOS_STATUS_E_INVAL;
6613 }
6614
6615 pwdiUpdateChReqParam = (WDI_UpdateChReqParamsType *)vos_mem_malloc(
6616 sizeof(WDI_UpdateChReqParamsType));
6617 if(NULL == pwdiUpdateChReqParam)
6618 {
6619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6620 "%s: VOS MEM Alloc Failed for WDI_UpdateChReqParamsType",
6621 __func__);
6622 VOS_ASSERT(0);
6623 vos_mem_free(pChanList);
6624 return VOS_STATUS_E_NOMEM;
6625 }
6626 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
6627 pChanInfoType = (WDI_UpdateChannelReqinfoType *)
6628 vos_mem_malloc(sizeof(WDI_UpdateChannelReqinfoType) *
6629 pChanList->numChan);
6630 if(NULL == pChanInfoType)
6631 {
6632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6633 "%s: VOS MEM Alloc Failure", __func__);
6634 VOS_ASSERT(0);
6635 vos_mem_free(pChanList);
6636 vos_mem_free(pwdiUpdateChReqParam);
6637 return VOS_STATUS_E_NOMEM;
6638 }
6639 vos_mem_zero(pChanInfoType, sizeof(WDI_UpdateChannelReqinfoType)
6640 * pChanList->numChan);
6641 pwdiUpdateChanReqType->pchanParam = pChanInfoType;
6642
6643 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
6644 if(NULL == pWdaParams)
6645 {
6646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6647 "%s: VOS MEM Alloc Failure", __func__);
6648 VOS_ASSERT(0);
6649 vos_mem_free(pChanList);
6650 vos_mem_free(pChanInfoType);
6651 vos_mem_free(pwdiUpdateChReqParam);
6652 return VOS_STATUS_E_NOMEM;
6653 }
6654 pwdiUpdateChanReqType->numchan = pChanList->numChan;
6655
6656 for(i = 0; i < pwdiUpdateChanReqType->numchan; i++)
6657 {
6658 pChanInfoType->mhz =
6659 vos_chan_to_freq(pChanList->chanParam[i].chanId);
6660
6661 pChanInfoType->band_center_freq1 = pChanInfoType->mhz;
6662 pChanInfoType->band_center_freq2 = 0;
6663
6664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6665 "chan[%d] = %u", i, pChanInfoType->mhz);
6666 if (pChanList->chanParam[i].dfsSet)
6667 {
6668 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_PASSIVE);
6669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6670 "chan[%d] DFS[%d]", pChanList->chanParam[i].chanId,
6671 pChanList->chanParam[i].dfsSet);
6672 }
6673
6674 if (pChanInfoType->mhz < WDA_2_4_GHZ_MAX_FREQ)
6675 {
6676 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11G);
6677 }
6678 else
6679 {
6680 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11A);
6681 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_HT);
6682 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_VHT);
6683 }
6684
6685 WDA_SET_CHANNEL_MAX_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
6686 WDA_SET_CHANNEL_REG_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
Sachin Ahujacb64fc82015-01-12 17:01:05 +05306687 WDA_SET_CUURENT_REG_DOMAIN(pChanInfoType, pChanList->regId);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006688 pChanInfoType++;
6689 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006690 pwdiUpdateChReqParam->wdiReqStatusCB = NULL;
6691 pWdaParams->pWdaContext = pWDA;
6692 pWdaParams->wdaMsgParam = (void *)pChanList;
6693 /* store Params pass it to WDI */
6694 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiUpdateChReqParam;
6695 status = WDI_UpdateChannelReq(pwdiUpdateChReqParam,
6696 (WDI_UpdateChannelRspCb)WDA_UpdateChReqCallback, pWdaParams);
6697 if(IS_WDI_STATUS_FAILURE(status))
6698 {
6699 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6700 "Failure in Update Channel REQ Params WDI API, free all the memory");
6701 vos_mem_free(pwdiUpdateChanReqType->pchanParam);
6702 vos_mem_free(pwdiUpdateChReqParam);
6703 vos_mem_free(pWdaParams->wdaMsgParam);
6704 vos_mem_free(pWdaParams);
6705 }
6706 return CONVERT_WDI2VOS_STATUS(status);
6707}
6708
Jeff Johnson295189b2012-06-20 16:38:30 -07006709/*
6710 * FUNCTION: WDA_AddTSReqCallback
6711 * send ADD TS RSP back to PE
6712 */
6713void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
6714{
6715 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306716 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006717 tAddTsParams *pAddTsReqParams;
6718
6719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006720 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006721 if(NULL == pWdaParams)
6722 {
6723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006724 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006725 VOS_ASSERT(0) ;
6726 return ;
6727 }
6728 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306729 if (NULL == pWDA)
6730 {
6731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6732 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05306733 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6734 vos_mem_free(pWdaParams->wdaMsgParam);
6735 vos_mem_free(pWdaParams);
6736
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306737 VOS_ASSERT(0);
6738 return ;
6739 }
6740
Jeff Johnson295189b2012-06-20 16:38:30 -07006741 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
6742 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6743 vos_mem_free(pWdaParams);
6744
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006745 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006746 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006747 return ;
6748}
6749
Jeff Johnson295189b2012-06-20 16:38:30 -07006750/*
6751 * FUNCTION: WDA_ProcessAddTSReq
6752 * Request to WDI to Update the ADD TS REQ params.
6753 */
6754VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
6755 tAddTsParams *pAddTsReqParams)
6756{
6757 WDI_Status status = WDI_STATUS_SUCCESS ;
6758 WDI_AddTSReqParamsType *wdiAddTSReqParam =
6759 (WDI_AddTSReqParamsType *)vos_mem_malloc(
6760 sizeof(WDI_AddTSReqParamsType)) ;
6761 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006763 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006764 if(NULL == wdiAddTSReqParam)
6765 {
6766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006767 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006768 VOS_ASSERT(0);
6769 return VOS_STATUS_E_NOMEM;
6770 }
6771 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6772 if(NULL == pWdaParams)
6773 {
6774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006775 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006776 VOS_ASSERT(0);
6777 vos_mem_free(wdiAddTSReqParam);
6778 return VOS_STATUS_E_NOMEM;
6779 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006780 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
6781 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006782 //TS IE
6783 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
6784 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
6785 pAddTsReqParams->tspec.length;
6786
6787 //TS IE : TS INFO : TRAFFIC
6788 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
6789 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
6790 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
6791 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
6792 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
6793 pAddTsReqParams->tspec.tsinfo.traffic.psb;
6794 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
6795 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
6796 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
6797 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
6798 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
6799 pAddTsReqParams->tspec.tsinfo.traffic.direction;
6800 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
6801 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
6802 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
6803 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
6804
6805 //TS IE : TS INFO : SCHEDULE
6806 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
6807 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
6808 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
6809 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07006810 //TS IE
6811 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
6812 pAddTsReqParams->tspec.nomMsduSz;
6813 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
6814 pAddTsReqParams->tspec.maxMsduSz;
6815 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
6816 pAddTsReqParams->tspec.minSvcInterval;
6817 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
6818 pAddTsReqParams->tspec.maxSvcInterval;
6819 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
6820 pAddTsReqParams->tspec.inactInterval;
6821 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
6822 pAddTsReqParams->tspec.suspendInterval;
6823 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
6824 pAddTsReqParams->tspec.svcStartTime;
6825 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
6826 pAddTsReqParams->tspec.minDataRate;
6827 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
6828 pAddTsReqParams->tspec.meanDataRate;
6829 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
6830 pAddTsReqParams->tspec.peakDataRate;
6831 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
6832 pAddTsReqParams->tspec.maxBurstSz;
6833 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
6834 pAddTsReqParams->tspec.delayBound;
6835 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
6836 pAddTsReqParams->tspec.minPhyRate;
6837 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
6838 pAddTsReqParams->tspec.surplusBw;
6839 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
6840 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07006841 /* TODO: tAddTsParams doesn't have the following fields */
6842#if 0
6843 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
6844 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
6845 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
6846 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
6847#endif
6848 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
6849
6850 pWdaParams->pWdaContext = pWDA;
6851 /* Store ADD TS pointer, as this will be used for response */
6852 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006853 /* store Params pass it to WDI */
6854 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006855 status = WDI_AddTSReq(wdiAddTSReqParam,
6856 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006857 if(IS_WDI_STATUS_FAILURE(status))
6858 {
6859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6860 "Failure in ADD TS REQ Params WDI API, free all the memory " );
6861 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6862 vos_mem_free(pWdaParams);
6863 pAddTsReqParams->status = eSIR_FAILURE ;
6864 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
6865 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006866 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006867}
6868
Jeff Johnson295189b2012-06-20 16:38:30 -07006869/*
6870 * FUNCTION: WDA_DelTSReqCallback
6871 * send DEL TS RSP back to PE
6872 */
6873void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
6874{
6875 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006877 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006878 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6879 vos_mem_free(pWdaParams->wdaMsgParam) ;
6880 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006881 /*
6882 * No respone required for WDA_DEL_TS_REQ so just free the request
6883 * param here
6884 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006885 return ;
6886}
6887
Jeff Johnson295189b2012-06-20 16:38:30 -07006888/*
6889 * FUNCTION: WDA_ProcessDelTSReq
6890 * Request to WDI to Update the DELTS REQ params.
6891 */
6892VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
6893 tDelTsParams *pDelTSReqParams)
6894{
6895 WDI_Status status = WDI_STATUS_SUCCESS ;
6896 WDI_DelTSReqParamsType *wdiDelTSReqParam =
6897 (WDI_DelTSReqParamsType *)vos_mem_malloc(
6898 sizeof(WDI_DelTSReqParamsType)) ;
6899 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006901 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006902 if(NULL == wdiDelTSReqParam)
6903 {
6904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006905 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006906 VOS_ASSERT(0);
6907 return VOS_STATUS_E_NOMEM;
6908 }
6909 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6910 if(NULL == pWdaParams)
6911 {
6912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006913 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006914 VOS_ASSERT(0);
6915 vos_mem_free(wdiDelTSReqParam);
6916 return VOS_STATUS_E_NOMEM;
6917 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006918 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
6919 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
6920 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
6921 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
6922 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006923 pWdaParams->pWdaContext = pWDA;
6924 /* Store DEL TS pointer, as this will be used for response */
6925 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006926 /* store Params pass it to WDI */
6927 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006928 status = WDI_DelTSReq(wdiDelTSReqParam,
6929 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006930 if(IS_WDI_STATUS_FAILURE(status))
6931 {
6932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6933 "Failure in DEL TS REQ Params WDI API, free all the memory " );
6934 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6935 vos_mem_free(pWdaParams->wdaMsgParam);
6936 vos_mem_free(pWdaParams);
6937 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006938 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006939}
Jeff Johnson295189b2012-06-20 16:38:30 -07006940/*
6941 * FUNCTION: WDA_UpdateBeaconParamsCallback
6942 * Free the memory. No need to send any response to PE in this case
6943 */
6944void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
6945{
6946 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006948 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006949 if(NULL == pWdaParams)
6950 {
6951 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006952 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006953 VOS_ASSERT(0) ;
6954 return ;
6955 }
6956 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6957 vos_mem_free(pWdaParams->wdaMsgParam) ;
6958 vos_mem_free(pWdaParams);
6959 /*
6960 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
6961 * param here
6962 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006963 return ;
6964}
Jeff Johnson295189b2012-06-20 16:38:30 -07006965/*
6966 * FUNCTION: WDA_ProcessUpdateBeaconParams
6967 * Request to WDI to send the beacon parameters to HAL to update the Hardware
6968 */
6969VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
6970 tUpdateBeaconParams *pUpdateBeaconParams)
6971{
6972 WDI_Status status = WDI_STATUS_SUCCESS ;
6973 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
6974 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
6975 sizeof(WDI_UpdateBeaconParamsType)) ;
6976 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006978 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006979 if(NULL == wdiUpdateBeaconParams)
6980 {
6981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006982 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006983 VOS_ASSERT(0);
6984 return VOS_STATUS_E_NOMEM;
6985 }
6986 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6987 if(NULL == pWdaParams)
6988 {
6989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006990 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006991 VOS_ASSERT(0);
6992 vos_mem_free(wdiUpdateBeaconParams);
6993 return VOS_STATUS_E_NOMEM;
6994 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006995 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
6996 pUpdateBeaconParams->bssIdx;
6997 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
6998 pUpdateBeaconParams->fShortPreamble;
6999 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
7000 pUpdateBeaconParams->fShortSlotTime;
7001 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
7002 pUpdateBeaconParams->beaconInterval;
7003 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
7004 pUpdateBeaconParams->llaCoexist;
7005 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
7006 pUpdateBeaconParams->llbCoexist;
7007 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
7008 pUpdateBeaconParams->llgCoexist;
7009 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
7010 pUpdateBeaconParams->ht20MhzCoexist;
7011 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
7012 pUpdateBeaconParams->llnNonGFCoexist;
7013 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
7014 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
7015 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
7016 pUpdateBeaconParams->fRIFSMode;
7017 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
7018 pUpdateBeaconParams->paramChangeBitmap;
7019 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
7020
7021 pWdaParams->pWdaContext = pWDA;
7022 /* Store UpdateBeacon Req pointer, as this will be used for response */
7023 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007024 /* store Params pass it to WDI */
7025 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007026 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
7027 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
7028 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007029 if(IS_WDI_STATUS_FAILURE(status))
7030 {
7031 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7032 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
7033 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7034 vos_mem_free(pWdaParams->wdaMsgParam);
7035 vos_mem_free(pWdaParams);
7036 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007037 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007038}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08007039#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -07007040/*
7041 * FUNCTION: WDA_TSMStatsReqCallback
7042 * send TSM Stats RSP back to PE
7043 */
7044void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
7045{
7046 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7047 tWDA_CbContext *pWDA = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007048 tpAniGetTsmStatsRsp pTsmRspParams = NULL;
7049 tpAniGetTsmStatsReq pGetTsmStatsReqParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007050
7051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007052 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007053 if(NULL == pWdaParams)
7054 {
7055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007056 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007057 VOS_ASSERT(0) ;
7058 return ;
7059 }
7060 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307061 if (NULL == pWDA)
7062 {
7063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7064 "%s:pWDA is NULL", __func__);
7065 VOS_ASSERT(0);
7066 return ;
7067 }
7068
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007069 pGetTsmStatsReqParams = (tAniGetTsmStatsReq *)pWdaParams->wdaMsgParam;
7070
7071 if(NULL == pGetTsmStatsReqParams)
7072 {
7073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7074 "%s: pGetTsmStatsReqParams received NULL", __func__);
7075 VOS_ASSERT(0);
7076 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7077 vos_mem_free(pWdaParams);
7078 return;
7079 }
7080
7081 pTsmRspParams =
7082 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
Jeff Johnson295189b2012-06-20 16:38:30 -07007083 if( NULL == pTsmRspParams )
7084 {
7085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007086 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007087 VOS_ASSERT( 0 );
7088 return ;
7089 }
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007090 vos_mem_set(pTsmRspParams, sizeof(tAniGetTsmStatsRsp), 0);
7091 pTsmRspParams->rc = pwdiTSMStatsRspParams->wdiStatus;
7092 pTsmRspParams->staId = pGetTsmStatsReqParams->staId;
7093
Jeff Johnson295189b2012-06-20 16:38:30 -07007094 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
7095 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
7096 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
7097 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
7098 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
7099 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
7100 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
7101 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
7102 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
7103 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007104
7105 /* Assign get tsm stats req req (backup) in to the response */
7106 pTsmRspParams->tsmStatsReq = pGetTsmStatsReqParams;
7107
7108 /* free WDI command buffer */
7109 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7110 vos_mem_free(pWdaParams);
7111
Jeff Johnson295189b2012-06-20 16:38:30 -07007112 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007113 return ;
7114}
7115
7116
Jeff Johnson295189b2012-06-20 16:38:30 -07007117/*
7118 * FUNCTION: WDA_ProcessTsmStatsReq
7119 * Request to WDI to get the TSM Stats params.
7120 */
7121VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007122 tpAniGetTsmStatsReq pTsmStats)
Jeff Johnson295189b2012-06-20 16:38:30 -07007123{
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007124 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007125 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007126 tWDA_ReqParams *pWdaParams = NULL;
7127 tAniGetTsmStatsRsp *pGetTsmStatsRspParams = NULL;
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 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007131 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
7132 sizeof(WDI_TSMStatsReqParamsType));
7133 if(NULL == wdiTSMReqParam)
7134 {
7135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007136 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007137 VOS_ASSERT(0);
7138 return VOS_STATUS_E_NOMEM;
7139 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007140 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7141 if(NULL == pWdaParams)
7142 {
7143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007144 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007145 VOS_ASSERT(0);
7146 vos_mem_free(wdiTSMReqParam);
7147 return VOS_STATUS_E_NOMEM;
7148 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007149 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
7150 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
7151 pTsmStats->bssId,
7152 sizeof(wpt_macAddr));
7153 wdiTSMReqParam->wdiReqStatusCB = NULL ;
7154
7155 pWdaParams->pWdaContext = pWDA;
7156 /* Store TSM Stats pointer, as this will be used for response */
7157 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007158 pWdaParams->wdaWdiApiMsgParam = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007159 status = WDI_TSMStatsReq(wdiTSMReqParam,
7160 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007161 if(IS_WDI_STATUS_FAILURE(status))
7162 {
7163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7164 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007165 vos_mem_free(pWdaParams);
7166
7167 pGetTsmStatsRspParams =
7168 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
7169 if(NULL == pGetTsmStatsRspParams)
7170 {
7171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7172 "%s: VOS MEM Alloc Failure", __func__);
7173 VOS_ASSERT(0);
7174 vos_mem_free(pTsmStats);
7175 return VOS_STATUS_E_NOMEM;
7176 }
7177 pGetTsmStatsRspParams->staId = pTsmStats->staId;
7178 pGetTsmStatsRspParams->rc = eSIR_FAILURE;
7179 pGetTsmStatsRspParams->tsmStatsReq = pTsmStats;
7180
7181 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pGetTsmStatsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007182 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007183 return CONVERT_WDI2VOS_STATUS(status) ;
7184}
7185#endif
7186/*
7187 * FUNCTION: WDA_SendBeaconParamsCallback
7188 * No need to send any response to PE in this case
7189 */
7190void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
7191{
7192
Jeff Johnson295189b2012-06-20 16:38:30 -07007193 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007194 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007195 return ;
7196}
Jeff Johnson295189b2012-06-20 16:38:30 -07007197/*
7198 * FUNCTION: WDA_ProcessSendBeacon
7199 * Request to WDI to send the beacon template to HAL to update the TPE memory and
7200 * start beacon trasmission
7201 */
7202VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
7203 tSendbeaconParams *pSendbeaconParams)
7204{
7205 WDI_Status status = WDI_STATUS_SUCCESS ;
7206 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007208 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007209 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
7210 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
7211 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
7212 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07007213 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
7214 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05307215 /* p2pIeOffset should be atleast greater than timIeOffset */
7216 if ((pSendbeaconParams->p2pIeOffset != 0) &&
7217 (pSendbeaconParams->p2pIeOffset <
7218 pSendbeaconParams->timIeOffset))
7219 {
7220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7221 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
7222 VOS_ASSERT( 0 );
7223 return WDI_STATUS_E_FAILURE;
7224 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007225 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
7226 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07007227 /* Copy the beacon template to local buffer */
7228 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
7229 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
7230 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
7231
Jeff Johnson295189b2012-06-20 16:38:30 -07007232 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
7233 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007234 if(IS_WDI_STATUS_FAILURE(status))
7235 {
7236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7237 "Failure in SEND BEACON REQ Params WDI API" );
7238 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007239 vos_mem_free(pSendbeaconParams);
7240 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07007241}
Jeff Johnson295189b2012-06-20 16:38:30 -07007242/*
7243 * FUNCTION: WDA_UpdateProbeRspParamsCallback
7244 * No need to send any response to PE in this case
7245 */
7246void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
7247{
Jeff Johnson295189b2012-06-20 16:38:30 -07007248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007249 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007250 return ;
7251}
7252
Jeff Johnson295189b2012-06-20 16:38:30 -07007253/*
7254 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
7255 * Request to WDI to send the probe response template to HAL to update the TPE memory and
7256 * send probe response
7257 */
7258VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
7259 tSendProbeRespParams *pSendProbeRspParams)
7260{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007261 WDI_Status status = WDI_STATUS_SUCCESS;
7262 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
7263 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07007264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007265 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007266
7267 if (!wdiSendProbeRspParam)
7268 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
7269
Jeff Johnson295189b2012-06-20 16:38:30 -07007270 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007271 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07007272 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007273 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07007274 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07007275 /* Copy the Probe Response template to local buffer */
7276 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007277 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07007278 pSendProbeRspParams->pProbeRespTemplate,
7279 pSendProbeRspParams->probeRespTemplateLen);
7280 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007281 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07007282 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
7283 WDI_PROBE_REQ_BITMAP_IE_LEN);
7284
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007285 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007286
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007287 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07007288 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007289 if(IS_WDI_STATUS_FAILURE(status))
7290 {
7291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7292 "Failure in SEND Probe RSP Params WDI API" );
7293 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007294 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007295 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007296 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07007297}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08007298#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -07007299/*
7300 * FUNCTION: WDA_SetMaxTxPowerCallBack
7301 * send the response to PE with power value received from WDI
7302 */
7303void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
7304 void* pUserData)
7305{
7306 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7307 tWDA_CbContext *pWDA = NULL;
7308 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
7309
7310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007311 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007312 if(NULL == pWdaParams)
7313 {
7314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007315 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007316 VOS_ASSERT(0) ;
7317 return ;
7318 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007319 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307320 if (NULL == pWDA)
7321 {
7322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7323 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307324 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7325 vos_mem_free(pWdaParams->wdaMsgParam);
7326 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307327 VOS_ASSERT(0);
7328 return ;
7329 }
7330
Jeff Johnson295189b2012-06-20 16:38:30 -07007331 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007332 if( NULL == pMaxTxPowerParams )
7333 {
7334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007335 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07007336 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007337 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7338 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007339 return ;
7340 }
Jeff Johnsone7245742012-09-05 17:12:55 -07007341
Jeff Johnson295189b2012-06-20 16:38:30 -07007342
7343 /*need to free memory for the pointers used in the
7344 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007345 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7346 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007347 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07007348
Jeff Johnson295189b2012-06-20 16:38:30 -07007349
7350 /* send response to UMAC*/
7351 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
7352
7353 return;
7354}
Jeff Johnson295189b2012-06-20 16:38:30 -07007355/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007356 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07007357 * Request to WDI to send set Max Tx Power Request
7358 */
7359 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
7360 tMaxTxPowerParams *MaxTxPowerParams)
7361{
7362 WDI_Status status = WDI_STATUS_SUCCESS;
7363 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
7364 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007365
Jeff Johnson295189b2012-06-20 16:38:30 -07007366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007367 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007368
Jeff Johnson295189b2012-06-20 16:38:30 -07007369 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
7370 sizeof(WDI_SetMaxTxPowerParamsType));
7371 if(NULL == wdiSetMaxTxPowerParams)
7372 {
7373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007374 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007375 VOS_ASSERT(0);
7376 return VOS_STATUS_E_NOMEM;
7377 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007378 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7379 if(NULL == pWdaParams)
7380 {
7381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007382 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007383 vos_mem_free(wdiSetMaxTxPowerParams);
7384 VOS_ASSERT(0);
7385 return VOS_STATUS_E_NOMEM;
7386 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007387 /* Copy.Max.Tx.Power Params to WDI structure */
7388 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
7389 MaxTxPowerParams->bssId,
7390 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007391 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
7392 MaxTxPowerParams->selfStaMacAddr,
7393 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007394 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
7395 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07007396 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007397 pWdaParams->pWdaContext = pWDA;
7398 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007399 /* store Params pass it to WDI */
7400 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007401 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
7402 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007403 if(IS_WDI_STATUS_FAILURE(status))
7404 {
7405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7406 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
7407 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7408 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007409 /* send response to UMAC*/
7410 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007411 }
7412 return CONVERT_WDI2VOS_STATUS(status);
7413
7414}
Jeff Johnson295189b2012-06-20 16:38:30 -07007415#endif
schang86c22c42013-03-13 18:41:24 -07007416
7417/*
Arif Hussaina5ebce02013-08-09 15:09:58 -07007418 * FUNCTION: WDA_SetMaxTxPowerPerBandCallBack
7419 * send the response to PE with power value received from WDI
7420 */
7421void WDA_SetMaxTxPowerPerBandCallBack(WDI_SetMaxTxPowerPerBandRspMsg
7422 *pwdiSetMaxTxPowerPerBandRsp,
7423 void* pUserData)
7424{
7425 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7426 tWDA_CbContext *pWDA = NULL;
7427 tMaxTxPowerPerBandParams *pMxTxPwrPerBandParams = NULL;
7428
7429 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7430 "<------ %s ", __func__);
7431 if (NULL == pWdaParams)
7432 {
7433 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7434 "%s: pWdaParams received NULL", __func__);
7435 VOS_ASSERT(0);
7436 return ;
7437 }
7438 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307439 if (NULL == pWDA)
7440 {
7441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7442 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307443 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7444 vos_mem_free(pWdaParams->wdaMsgParam);
7445 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307446 VOS_ASSERT(0);
7447 return ;
7448 }
7449
Arif Hussaina5ebce02013-08-09 15:09:58 -07007450 pMxTxPwrPerBandParams = (tMaxTxPowerPerBandParams*)pWdaParams->wdaMsgParam;
7451 if ( NULL == pMxTxPwrPerBandParams )
7452 {
7453 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7454 "%s: pMxTxPwrPerBandParams received NULL ", __func__);
7455 VOS_ASSERT(0);
7456 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7457 vos_mem_free(pWdaParams);
7458 return;
7459 }
7460
7461 /*need to free memory for the pointers used in the
7462 WDA Process.Set Max Tx Power Req function*/
7463 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7464 vos_mem_free(pWdaParams);
7465 pMxTxPwrPerBandParams->power = pwdiSetMaxTxPowerPerBandRsp->ucPower;
7466
7467 /* send response to UMAC*/
7468 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
7469 pMxTxPwrPerBandParams, 0);
7470
7471 return;
7472}
7473
7474/*
7475 * FUNCTION: WDA_ProcessSetMaxTxPowerPerBandReq
7476 * Request to WDI to send set Max Tx Power Per band Request
7477 */
7478 VOS_STATUS WDA_ProcessSetMaxTxPowerPerBandReq(tWDA_CbContext *pWDA,
7479 tMaxTxPowerPerBandParams
7480 *MaxTxPowerPerBandParams)
7481{
7482 WDI_Status status = WDI_STATUS_SUCCESS;
7483 WDI_SetMaxTxPowerPerBandParamsType *wdiSetMxTxPwrPerBandParams = NULL;
7484 tWDA_ReqParams *pWdaParams = NULL;
7485
7486 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7487 "------> %s ", __func__);
7488
7489 wdiSetMxTxPwrPerBandParams = vos_mem_malloc(
7490 sizeof(WDI_SetMaxTxPowerPerBandParamsType));
7491
7492 if (NULL == wdiSetMxTxPwrPerBandParams)
7493 {
7494 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7495 "%s: VOS MEM Alloc Failure", __func__);
7496 VOS_ASSERT(0);
7497 return VOS_STATUS_E_NOMEM;
7498 }
7499 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7500 if (NULL == pWdaParams)
7501 {
7502 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7503 "%s: VOS MEM Alloc Failure", __func__);
7504 vos_mem_free(wdiSetMxTxPwrPerBandParams);
7505 VOS_ASSERT(0);
7506 return VOS_STATUS_E_NOMEM;
7507 }
7508 /* Copy.Max.Tx.Power.Per.Band Params to WDI structure */
7509 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.bandInfo = \
7510 MaxTxPowerPerBandParams->bandInfo;
7511 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.ucPower = \
7512 MaxTxPowerPerBandParams->power;
7513 wdiSetMxTxPwrPerBandParams->wdiReqStatusCB = NULL;
7514 pWdaParams->pWdaContext = pWDA;
7515 pWdaParams->wdaMsgParam = (void *)MaxTxPowerPerBandParams;
7516 /* store Params pass it to WDI */
7517 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMxTxPwrPerBandParams;
7518 status = WDI_SetMaxTxPowerPerBandReq(wdiSetMxTxPwrPerBandParams,
7519 WDA_SetMaxTxPowerPerBandCallBack,
7520 pWdaParams);
7521 if (IS_WDI_STATUS_FAILURE(status))
7522 {
7523 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7524 "Failure in SET MAX TX Power REQ Params WDI API,"
7525 " free all the memory");
7526 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7527 vos_mem_free(pWdaParams);
7528 /* send response to UMAC*/
7529 WDA_SendMsg(pWDA,
7530 WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
7531 MaxTxPowerPerBandParams, 0);
7532 }
7533 return CONVERT_WDI2VOS_STATUS(status);
7534}
7535
7536/*
schang86c22c42013-03-13 18:41:24 -07007537 * FUNCTION: WDA_SetTxPowerCallBack
7538 * send the response to PE with power value received from WDI
7539 */
7540void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
7541 void* pUserData)
7542{
7543 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7544 tWDA_CbContext *pWDA = NULL;
7545 tSirSetTxPowerReq *pTxPowerParams = NULL;
7546
7547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7548 "<------ %s ", __func__);
7549 if(NULL == pWdaParams)
7550 {
7551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7552 "%s: pWdaParams received NULL", __func__);
7553 VOS_ASSERT(0) ;
7554 return ;
7555 }
7556 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307557 if (NULL == pWDA)
7558 {
7559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7560 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307561 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7562 vos_mem_free(pWdaParams->wdaMsgParam);
7563 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307564 VOS_ASSERT(0);
7565 return ;
7566 }
7567
schang86c22c42013-03-13 18:41:24 -07007568 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
7569 if(NULL == pTxPowerParams)
7570 {
7571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7572 "%s: pTxPowerParams received NULL " ,__func__);
7573 VOS_ASSERT(0);
7574 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7575 vos_mem_free(pWdaParams);
7576 return ;
7577 }
7578
7579 /*need to free memory for the pointers used in the
7580 WDA Process.Set Max Tx Power Req function*/
7581 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7582 vos_mem_free(pWdaParams);
7583
7584 /* send response to UMAC*/
7585 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
7586 return;
7587}
7588
7589/*
7590 * FUNCTION: WDA_ProcessSetTxPowerReq
7591 * Request to WDI to send set Tx Power Request
7592 */
7593 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
7594 tSirSetTxPowerReq *txPowerParams)
7595{
7596 WDI_Status status = WDI_STATUS_SUCCESS;
7597 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
7598 tWDA_ReqParams *pWdaParams = NULL;
7599
7600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7601 "------> %s ", __func__);
7602
7603 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
7604 sizeof(WDI_SetTxPowerParamsType));
7605 if(NULL == wdiSetTxPowerParams)
7606 {
7607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7608 "%s: VOS MEM Alloc Failure", __func__);
7609 VOS_ASSERT(0);
7610 return VOS_STATUS_E_NOMEM;
7611 }
7612 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7613 if(NULL == pWdaParams)
7614 {
7615 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7616 "%s: VOS MEM Alloc Failure", __func__);
7617 vos_mem_free(wdiSetTxPowerParams);
7618 VOS_ASSERT(0);
7619 return VOS_STATUS_E_NOMEM;
7620 }
7621 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
7622 txPowerParams->bssIdx;
7623 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
7624 txPowerParams->mwPower;
7625 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
7626 pWdaParams->pWdaContext = pWDA;
7627 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
7628 /* store Params pass it to WDI */
7629 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
7630 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
7631 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
7632 if(IS_WDI_STATUS_FAILURE(status))
7633 {
7634 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7635 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
7636 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7637 vos_mem_free(pWdaParams);
7638 /* send response to UMAC*/
7639 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
7640 }
7641 return CONVERT_WDI2VOS_STATUS(status);
7642}
7643
Jeff Johnson295189b2012-06-20 16:38:30 -07007644/*
7645 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
7646 * Free the memory. No need to send any response to PE in this case
7647 */
7648void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
7649{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007650 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7651
Jeff Johnson295189b2012-06-20 16:38:30 -07007652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007653 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007654
7655 if(NULL == pWdaParams)
7656 {
7657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007658 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007659 VOS_ASSERT(0) ;
7660 return ;
7661 }
7662
7663 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7664 vos_mem_free(pWdaParams->wdaMsgParam) ;
7665 vos_mem_free(pWdaParams);
7666
Jeff Johnson295189b2012-06-20 16:38:30 -07007667 /*
7668 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
7669 * so just free the request param here
7670 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007671 return ;
7672}
7673
Jeff Johnson295189b2012-06-20 16:38:30 -07007674/*
7675 * FUNCTION: WDA_ProcessSetP2PGONOAReq
7676 * Request to WDI to set the P2P Group Owner Notice of Absence Req
7677 */
7678VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
7679 tP2pPsParams *pP2pPsConfigParams)
7680{
7681 WDI_Status status = WDI_STATUS_SUCCESS ;
7682 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
7683 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
7684 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007685 tWDA_ReqParams *pWdaParams = NULL;
7686
Jeff Johnson295189b2012-06-20 16:38:30 -07007687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007688 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007689 if(NULL == wdiSetP2PGONOAReqParam)
7690 {
7691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007692 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007693 VOS_ASSERT(0);
7694 return VOS_STATUS_E_NOMEM;
7695 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007696
7697 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7698 if(NULL == pWdaParams)
7699 {
7700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007701 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007702 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007703 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007704 VOS_ASSERT(0);
7705 return VOS_STATUS_E_NOMEM;
7706 }
7707
Jeff Johnson295189b2012-06-20 16:38:30 -07007708 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
7709 pP2pPsConfigParams->opp_ps;
7710 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
7711 pP2pPsConfigParams->ctWindow;
7712 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
7713 pP2pPsConfigParams->count;
7714 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
7715 pP2pPsConfigParams->duration;
7716 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
7717 pP2pPsConfigParams->interval;
7718 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
7719 pP2pPsConfigParams->single_noa_duration;
7720 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
7721 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007722
Jeff Johnson295189b2012-06-20 16:38:30 -07007723 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
7724 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007725 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
7726
Jeff Johnson295189b2012-06-20 16:38:30 -07007727 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007728 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
7729 pWdaParams->pWdaContext = pWDA;
7730
Jeff Johnson295189b2012-06-20 16:38:30 -07007731 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007732 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
7733
Jeff Johnson295189b2012-06-20 16:38:30 -07007734 if(IS_WDI_STATUS_FAILURE(status))
7735 {
7736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7737 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007738 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7739 vos_mem_free(pWdaParams->wdaMsgParam);
7740 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007741 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007742 return CONVERT_WDI2VOS_STATUS(status);
7743
Jeff Johnson295189b2012-06-20 16:38:30 -07007744}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307745
7746#ifdef FEATURE_WLAN_TDLS
7747/*
7748 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
7749 * Free the memory. No need to send any response to PE in this case
7750 */
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307751void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
7752 void* pUserData)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307753{
7754 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7755 tWDA_CbContext *pWDA = NULL;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307756 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307757
7758
7759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7760 "<------ %s " ,__func__);
7761 if(NULL == pWdaParams)
7762 {
7763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7764 "%s: pWdaParams received NULL", __func__);
7765 VOS_ASSERT(0) ;
7766 return ;
7767 }
7768 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
7769
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307770 if (NULL == pWDA)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307771 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7773 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307774 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7775 vos_mem_free(pWdaParams->wdaMsgParam);
7776 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307777 VOS_ASSERT(0);
7778 return ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307779 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307780
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307781 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
7782 if( NULL == pTdlsLinkEstablishParams )
7783 {
7784 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7785 "%s: pTdlsLinkEstablishParams "
7786 "received NULL " ,__func__);
7787 VOS_ASSERT(0);
7788 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7789 vos_mem_free(pWdaParams);
7790 return ;
7791 }
7792 pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
7793 wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307794 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307795 vos_mem_free(pWdaParams);
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307796 /* send response to UMAC*/
7797 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
7798
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307799 return ;
7800}
7801
7802VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
7803 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
7804{
7805 WDI_Status status = WDI_STATUS_SUCCESS ;
7806 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
7807 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
7808 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
7809 tWDA_ReqParams *pWdaParams = NULL;
7810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7811 "------> %s " ,__func__);
7812 if(NULL == wdiSetTDLSLinkEstablishReqParam)
7813 {
7814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7815 "%s: VOS MEM Alloc Failure", __func__);
7816 VOS_ASSERT(0);
7817 return VOS_STATUS_E_NOMEM;
7818 }
7819 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7820 if(NULL == pWdaParams)
7821 {
7822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7823 "%s: VOS MEM Alloc Failure", __func__);
7824 vos_mem_free(pTdlsLinkEstablishParams);
7825 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
7826 VOS_ASSERT(0);
7827 return VOS_STATUS_E_NOMEM;
7828 }
7829 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307830 pTdlsLinkEstablishParams->staIdx;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307831 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307832 pTdlsLinkEstablishParams->isResponder;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307833 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307834 pTdlsLinkEstablishParams->uapsdQueues;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307835 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307836 pTdlsLinkEstablishParams->maxSp;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307837 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307838 pTdlsLinkEstablishParams->isBufsta;
Naresh Jayaramc7cbd782014-02-04 17:38:23 +05307839 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsOffChannelSupported =
7840 pTdlsLinkEstablishParams->isOffChannelSupported;
7841
7842 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannels,
7843 pTdlsLinkEstablishParams->validChannels,
7844 pTdlsLinkEstablishParams->validChannelsLen);
7845
7846 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannelsLen =
7847 pTdlsLinkEstablishParams->validChannelsLen;
7848
7849 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClasses,
7850 pTdlsLinkEstablishParams->validOperClasses,
7851 pTdlsLinkEstablishParams->validOperClassesLen);
7852 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClassesLen =
7853 pTdlsLinkEstablishParams->validOperClassesLen;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307854
7855 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
7856 /* Store msg pointer from PE, as this will be used for response */
7857 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
7858 /* store Params pass it to WDI */
7859 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
7860 pWdaParams->pWdaContext = pWDA;
7861
7862 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
7863 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
7864 WDA_SetTDLSLinkEstablishReqParamsCallback,
7865 pWdaParams);
7866 if(IS_WDI_STATUS_FAILURE(status))
7867 {
7868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7869 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
7870 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7871 vos_mem_free(pWdaParams->wdaMsgParam);
7872 vos_mem_free(pWdaParams);
7873 }
7874 return CONVERT_WDI2VOS_STATUS(status);
7875}
Atul Mittalc0f739f2014-07-31 13:47:47 +05307876
7877// tdlsoffchan
7878void WDA_SetTDLSChanSwitchReqParamsCallback(WDI_SetTdlsChanSwitchReqResp *wdiSetTdlsChanSwitchReqRsp,
7879 void* pUserData)
7880{
7881 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7882 tWDA_CbContext *pWDA = NULL;
7883 tTdlsChanSwitchParams *pTdlsChanSwitchParams;
7884
7885
7886 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7887 "<------ %s " ,__func__);
7888 if(NULL == pWdaParams)
7889 {
7890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7891 "%s: pWdaParams received NULL", __func__);
Atul Mittalc0f739f2014-07-31 13:47:47 +05307892 VOS_ASSERT(0) ;
7893 return ;
7894 }
7895 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
7896
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307897 if (NULL == pWDA)
Atul Mittal60bd4292014-08-14 12:19:27 +05307898 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7900 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05307901 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7902 vos_mem_free(pWdaParams->wdaMsgParam);
7903 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307904 VOS_ASSERT(0);
7905 return ;
Atul Mittal60bd4292014-08-14 12:19:27 +05307906 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307907
Atul Mittalc0f739f2014-07-31 13:47:47 +05307908 pTdlsChanSwitchParams = (tTdlsChanSwitchParams *)pWdaParams->wdaMsgParam ;
Atul Mittal60bd4292014-08-14 12:19:27 +05307909 if( NULL == pTdlsChanSwitchParams )
Atul Mittalc0f739f2014-07-31 13:47:47 +05307910 {
7911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7912 "%s: pTdlsChanSwitchParams "
7913 "received NULL " ,__func__);
7914 VOS_ASSERT(0);
7915 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7916 vos_mem_free(pWdaParams);
7917 return ;
7918 }
7919 pTdlsChanSwitchParams->status = CONVERT_WDI2SIR_STATUS(
7920 wdiSetTdlsChanSwitchReqRsp->wdiStatus);
Atul Mittalc0f739f2014-07-31 13:47:47 +05307921 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7922 vos_mem_free(pWdaParams);
Atul Mittal60bd4292014-08-14 12:19:27 +05307923 /* send response to UMAC*/
7924 WDA_SendMsg(pWDA, WDA_SET_TDLS_CHAN_SWITCH_REQ_RSP, pTdlsChanSwitchParams, 0) ;
Atul Mittalc0f739f2014-07-31 13:47:47 +05307925
7926 return ;
7927}
7928VOS_STATUS WDA_ProcessSetTdlsChanSwitchReq(tWDA_CbContext *pWDA,
7929 tTdlsChanSwitchParams *pTdlsChanSwitchParams)
7930{
7931 WDI_Status status = WDI_STATUS_SUCCESS ;
7932 WDI_SetTDLSChanSwitchReqParamsType *wdiSetTDLSChanSwitchReqParam =
7933 (WDI_SetTDLSChanSwitchReqParamsType *)vos_mem_malloc(
7934 sizeof(WDI_SetTDLSChanSwitchReqParamsType));
7935 tWDA_ReqParams *pWdaParams = NULL;
7936
7937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7938 "Enter: %s ",__func__);
7939 if(NULL == wdiSetTDLSChanSwitchReqParam)
7940 {
7941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7942 "%s: VOS MEM Alloc Failure", __func__);
7943 VOS_ASSERT(0);
7944 return VOS_STATUS_E_NOMEM;
7945 }
7946
7947 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7948 if(NULL == pWdaParams)
7949 {
7950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7951 "%s: VOS MEM Alloc Failure", __func__);
7952 vos_mem_free(pTdlsChanSwitchParams);
7953 vos_mem_free(wdiSetTDLSChanSwitchReqParam);
7954 VOS_ASSERT(0);
7955 return VOS_STATUS_E_NOMEM;
7956 }
7957 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.staIdx =
7958 pTdlsChanSwitchParams->staIdx;
7959 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.isOffchannelInitiator =
7960 pTdlsChanSwitchParams->tdlsSwMode;
7961 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetOperClass =
7962 pTdlsChanSwitchParams->operClass;
7963 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetChannel =
7964 pTdlsChanSwitchParams->tdlsOffCh;
7965 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.secondaryChannelOffset =
7966 pTdlsChanSwitchParams->tdlsOffChBwOffset;
7967
7968
7969 /* Store msg pointer from PE, as this will be used for response */
7970 pWdaParams->wdaMsgParam = (void *)pTdlsChanSwitchParams ;
7971 /* store Params pass it to WDI */
7972 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSChanSwitchReqParam ;
7973 pWdaParams->pWdaContext = pWDA;
7974 status = WDI_SetTDLSChanSwitchReq(wdiSetTDLSChanSwitchReqParam,
7975 (WDI_SetTDLSChanSwitchReqParamsRspCb)
7976 WDA_SetTDLSChanSwitchReqParamsCallback,
7977 pWdaParams);
7978 if(IS_WDI_STATUS_FAILURE(status))
7979 {
7980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7981 "Failure in TDLS Channel Switch Req WDI API, free all the memory" );
7982 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7983 vos_mem_free(pWdaParams->wdaMsgParam);
7984 vos_mem_free(pWdaParams);
7985 }
7986 return CONVERT_WDI2VOS_STATUS(status);
7987}
7988#endif /*FEATURE_WLAN_TDLS*/
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307989
7990
Jeff Johnson295189b2012-06-20 16:38:30 -07007991#ifdef WLAN_FEATURE_VOWIFI_11R
7992/*
7993 * FUNCTION: WDA_AggrAddTSReqCallback
7994 * send ADD AGGREGATED TS RSP back to PE
7995 */
7996void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
7997{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007998 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307999 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008000 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008001 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07008002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008003 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008004 if(NULL == pWdaParams)
8005 {
8006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008007 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008008 VOS_ASSERT(0) ;
8009 return ;
8010 }
8011
8012 pWDA = pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308013 if (NULL == pWDA)
8014 {
8015 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8016 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308017 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8018 vos_mem_free(pWdaParams->wdaMsgParam);
8019 vos_mem_free(pWdaParams);
8020
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308021 VOS_ASSERT(0);
8022 return ;
8023 }
8024
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008025 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008026
8027 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
8028 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008029 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008030 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008031 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008032
8033 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8034 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008035 return ;
8036}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07008037/*
8038 * FUNCTION: WDA_ProcessAddTSReq
8039 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
8040 */
8041VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
8042 tAggrAddTsParams *pAggrAddTsReqParams)
8043{
8044 WDI_Status status = WDI_STATUS_SUCCESS ;
8045 int i;
8046 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008047 tWDA_ReqParams *pWdaParams = NULL;
8048
8049
Jeff Johnson295189b2012-06-20 16:38:30 -07008050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008051 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008052 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
8053 sizeof(WDI_AggrAddTSReqParamsType)) ;
8054 if(NULL == wdiAggrAddTSReqParam)
8055 {
8056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008057 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008058 VOS_ASSERT(0);
8059 return VOS_STATUS_E_NOMEM;
8060 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008061
8062
8063 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8064 if(NULL == pWdaParams)
8065 {
8066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008067 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008068 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008069 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008070 VOS_ASSERT(0);
8071 return VOS_STATUS_E_NOMEM;
8072 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008073 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
8074 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
8075 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008076 for( i = 0; i < WDI_MAX_NO_AC; i++ )
8077 {
8078 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
8079 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
8080 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07008081 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
8082 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
8083 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
8084 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
8085 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
8086 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
8087 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
8088 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
8089 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
8090 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
8091 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
8092 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
8093 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
8094 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
8095 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
8096 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07008097 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
8098 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07008099 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
8100 pAggrAddTsReqParams->tspec[i].nomMsduSz;
8101 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
8102 pAggrAddTsReqParams->tspec[i].maxMsduSz;
8103 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
8104 pAggrAddTsReqParams->tspec[i].minSvcInterval;
8105 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
8106 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
8107 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
8108 pAggrAddTsReqParams->tspec[i].inactInterval;
8109 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
8110 pAggrAddTsReqParams->tspec[i].suspendInterval;
8111 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
8112 pAggrAddTsReqParams->tspec[i].svcStartTime;
8113 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
8114 pAggrAddTsReqParams->tspec[i].minDataRate;
8115 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
8116 pAggrAddTsReqParams->tspec[i].meanDataRate;
8117 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
8118 pAggrAddTsReqParams->tspec[i].peakDataRate;
8119 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
8120 pAggrAddTsReqParams->tspec[i].maxBurstSz;
8121 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
8122 pAggrAddTsReqParams->tspec[i].delayBound;
8123 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
8124 pAggrAddTsReqParams->tspec[i].minPhyRate;
8125 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
8126 pAggrAddTsReqParams->tspec[i].surplusBw;
8127 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
8128 pAggrAddTsReqParams->tspec[i].mediumTime;
8129 }
8130
8131 /* TODO: tAggrAddTsParams doesn't have the following fields */
8132#if 0
8133 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
8134 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
8135 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
8136 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
8137#endif
8138 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
8139
8140 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008141 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008142 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008143 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
8144
8145 pWdaParams->pWdaContext = pWDA;
8146
Jeff Johnson295189b2012-06-20 16:38:30 -07008147 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008148 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
8149
Jeff Johnson295189b2012-06-20 16:38:30 -07008150 if(IS_WDI_STATUS_FAILURE(status))
8151 {
8152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8153 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008154 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8155 vos_mem_free(pWdaParams);
8156
8157 /* send the failure response back to PE*/
8158 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
8159 {
8160 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
8161 }
8162
8163 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
8164 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008165 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008166 return CONVERT_WDI2VOS_STATUS(status) ;
8167}
8168#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07008169/*
Mihir Shetea4306052014-03-25 00:02:54 +05308170 * FUNCTION: WDA_EnterImpsRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008171 * send Enter IMPS RSP back to PE
8172 */
Mihir Shetea4306052014-03-25 00:02:54 +05308173void WDA_EnterImpsRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008174{
Mihir Shetea4306052014-03-25 00:02:54 +05308175 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308176 tWDA_CbContext *pWDA = NULL;
Mihir Shetea4306052014-03-25 00:02:54 +05308177
Jeff Johnson295189b2012-06-20 16:38:30 -07008178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Mihir Shetea4306052014-03-25 00:02:54 +05308179 "<------ %s status=%d" ,__func__,status);
8180 if(NULL == pWdaParams)
8181 {
8182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8183 "%s: pWdaParams received NULL", __func__);
8184 VOS_ASSERT(0);
8185 return;
8186 }
8187
8188 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308189 if (NULL == pWDA)
8190 {
8191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8192 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308193 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8194 vos_mem_free(pWdaParams->wdaMsgParam);
8195 vos_mem_free(pWdaParams);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308196 VOS_ASSERT(0);
8197 return ;
8198 }
Mihir Shetea4306052014-03-25 00:02:54 +05308199
8200 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8201 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008202 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008203 return ;
8204}
Mihir Shetea4306052014-03-25 00:02:54 +05308205
8206
8207/*
8208 * FUNCTION: WDA_EnterImpsReqCallback
8209 * Free memory and send Enter IMPS RSP back to PE.
8210 * Invoked when Enter IMPS REQ failed in WDI and no RSP callback is generated.
8211 */
8212void WDA_EnterImpsReqCallback(WDI_Status wdiStatus, void* pUserData)
8213{
8214 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308215 tWDA_CbContext *pWDA = NULL;
Mihir Shetea4306052014-03-25 00:02:54 +05308216
8217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8218 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8219
8220 if(NULL == pWdaParams)
8221 {
8222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8223 "%s: pWdaParams received NULL", __func__);
8224 VOS_ASSERT(0);
8225 return;
8226 }
8227
8228 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308229 if (NULL == pWDA)
8230 {
8231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8232 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +05308233 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8234 vos_mem_free(pWdaParams->wdaMsgParam);
8235 vos_mem_free(pWdaParams);
8236
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308237 VOS_ASSERT(0);
8238 return ;
8239 }
8240
Mihir Shetea4306052014-03-25 00:02:54 +05308241
8242 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8243 {
8244 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8245 vos_mem_free(pWdaParams);
8246 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
8247 CONVERT_WDI2SIR_STATUS(wdiStatus));
8248 }
8249
8250 return;
8251}
Jeff Johnson295189b2012-06-20 16:38:30 -07008252/*
8253 * FUNCTION: WDA_ProcessEnterImpsReq
8254 * Request to WDI to Enter IMPS power state.
8255 */
8256VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
8257{
8258 WDI_Status status = WDI_STATUS_SUCCESS ;
Mihir Shetea4306052014-03-25 00:02:54 +05308259 WDI_EnterImpsReqParamsType *wdiEnterImpsReqParams;
8260 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008262 "------> %s " ,__func__);
Mihir Shetea4306052014-03-25 00:02:54 +05308263
8264
8265 wdiEnterImpsReqParams = vos_mem_malloc(sizeof(WDI_EnterImpsReqParamsType));
8266 if (NULL == wdiEnterImpsReqParams)
8267 {
8268 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8269 "%s: VOS MEM Alloc Failure", __func__);
8270 VOS_ASSERT(0);
8271 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
8272 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
8273 return VOS_STATUS_E_NOMEM;
8274 }
8275
8276 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8277 if (NULL == pWdaParams)
8278 {
8279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8280 "%s: VOS MEM Alloc Failure", __func__);
8281 VOS_ASSERT(0);
8282 vos_mem_free(wdiEnterImpsReqParams);
8283 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL ,
8284 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
8285 return VOS_STATUS_E_NOMEM;
8286 }
8287
8288 wdiEnterImpsReqParams->wdiReqStatusCB = WDA_EnterImpsReqCallback;
8289 wdiEnterImpsReqParams->pUserData = pWdaParams;
8290
8291 pWdaParams->wdaWdiApiMsgParam = wdiEnterImpsReqParams;
8292 pWdaParams->wdaMsgParam = NULL;
8293 pWdaParams->pWdaContext = pWDA;
8294
8295 status = WDI_EnterImpsReq(wdiEnterImpsReqParams,
8296 (WDI_EnterImpsRspCb)WDA_EnterImpsRspCallback,
8297 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008298 if(IS_WDI_STATUS_FAILURE(status))
8299 {
8300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8301 "Failure in Enter IMPS REQ WDI API, free all the memory " );
Mihir Shetea4306052014-03-25 00:02:54 +05308302 vos_mem_free(wdiEnterImpsReqParams);
8303 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008304 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008305 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008306 return CONVERT_WDI2VOS_STATUS(status) ;
8307}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308308
8309/*
8310 * FUNCTION: WDA_ExitImpsRespCallback
8311 * send Exit IMPS RSP back to PE
8312 */
8313void WDA_ExitImpsRespCallback(WDI_Status status, void* pUserData)
8314{
8315 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8316 tWDA_CbContext *pWDA;
8317
8318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8319 "<------ %s " ,__func__);
8320
8321 if (NULL == pWdaParams)
8322 {
8323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8324 "%s: pWdaParams received NULL", __func__);
8325 VOS_ASSERT(0);
8326 return;
8327 }
8328 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8329
8330 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8331 vos_mem_free(pWdaParams);
8332
8333 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status));
8334 return;
8335}
8336
Jeff Johnson295189b2012-06-20 16:38:30 -07008337/*
8338 * FUNCTION: WDA_ExitImpsReqCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008339 */
8340void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
8341{
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308342 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008344 "<------ %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308345 if(NULL == pWdaParams)
8346 {
8347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8348 "%s: pWdaParams received NULL", __func__);
8349 VOS_ASSERT(0);
8350 return;
8351 }
8352
8353 if (IS_WDI_STATUS_FAILURE(status))
8354 {
8355 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8356 vos_mem_free(pWdaParams);
8357 if (WDI_STATUS_DEV_INTERNAL_FAILURE == status)
8358 {
8359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8360 FL("reload wlan driver"));
8361 wpalWlanReload();
8362 }
8363 }
8364 return;
Jeff Johnson295189b2012-06-20 16:38:30 -07008365}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308366
Jeff Johnson295189b2012-06-20 16:38:30 -07008367/*
8368 * FUNCTION: WDA_ProcessExitImpsReq
8369 * Request to WDI to Exit IMPS power state.
8370 */
8371VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
8372{
8373 WDI_Status status = WDI_STATUS_SUCCESS ;
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308374 tWDA_ReqParams *pWdaParams;
8375 WDI_ExitImpsReqParamsType *wdiExitImpsReqParams;
8376
Jeff Johnson295189b2012-06-20 16:38:30 -07008377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008378 "------> %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308379 wdiExitImpsReqParams = (WDI_ExitImpsReqParamsType *)vos_mem_malloc(
8380 sizeof(WDI_ExitImpsReqParamsType));
8381 if (NULL == wdiExitImpsReqParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008382 {
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8384 "%s: VOS MEM Alloc Failure", __func__);
8385 VOS_ASSERT(0);
8386 return VOS_STATUS_E_NOMEM;
8387 }
8388 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8389 if(NULL == pWdaParams)
8390 {
8391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8392 "%s: VOS MEM Alloc Failure", __func__);
8393 VOS_ASSERT(0);
8394 vos_mem_free(wdiExitImpsReqParams);
8395 return VOS_STATUS_E_NOMEM;
8396 }
8397 wdiExitImpsReqParams->wdiReqStatusCB = WDA_ExitImpsReqCallback;
8398 wdiExitImpsReqParams->pUserData = pWdaParams;
8399
8400 /* Store param pointer as passed in by caller */
8401 /* store Params pass it to WDI */
8402 pWdaParams->wdaWdiApiMsgParam = wdiExitImpsReqParams;
8403 pWdaParams->pWdaContext = pWDA;
8404 pWdaParams->wdaMsgParam = wdiExitImpsReqParams;
8405 status = WDI_ExitImpsReq(wdiExitImpsReqParams,
8406 (WDI_ExitImpsRspCb)WDA_ExitImpsRespCallback,
8407 pWdaParams);
8408 if (IS_WDI_STATUS_FAILURE(status))
8409 {
8410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8411 "Failure in Exit IMPS REQ WDI API, free all the memory " );
8412 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8413 vos_mem_free(pWdaParams);
8414 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008415 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008416 return CONVERT_WDI2VOS_STATUS(status) ;
8417}
Jeff Johnson295189b2012-06-20 16:38:30 -07008418/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008419 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008420 * send Enter BMPS RSP back to PE
8421 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008422void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008423{
8424 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308425 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008426 tEnterBmpsParams *pEnterBmpsRspParams;
8427
Jeff Johnson295189b2012-06-20 16:38:30 -07008428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008429 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008430 if(NULL == pWdaParams)
8431 {
8432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008433 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008434 VOS_ASSERT(0) ;
8435 return ;
8436 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008437
8438 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308439 if (NULL == pWDA)
8440 {
8441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8442 "%s:pWDA is NULL", __func__);
8443 VOS_ASSERT(0);
8444 return ;
8445 }
8446
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008447 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
8448
8449 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008450 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008451
8452 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008453 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008454 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
8455
Jeff Johnson295189b2012-06-20 16:38:30 -07008456 return ;
8457}
Jeff Johnson295189b2012-06-20 16:38:30 -07008458/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008459 * FUNCTION: WDA_EnterBmpsReqCallback
8460 * Free memory and send Enter BMPS RSP back to PE.
8461 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
8462 */
8463void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
8464{
8465 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308466 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008467 tEnterBmpsParams *pEnterBmpsRspParams;
8468
8469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8470 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8471
8472 if(NULL == pWdaParams)
8473 {
8474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8475 "%s: pWdaParams received NULL", __func__);
8476 VOS_ASSERT(0);
8477 return;
8478 }
8479
8480 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308481 if (NULL == pWDA)
8482 {
8483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8484 "%s:pWDA is NULL", __func__);
8485 VOS_ASSERT(0);
8486 return ;
8487 }
8488
Yue Ma7f44bbe2013-04-12 11:47:39 -07008489 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
8490 pEnterBmpsRspParams->status = wdiStatus;
8491
8492 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8493 {
8494 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8495 vos_mem_free(pWdaParams);
8496 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
8497 }
8498
8499 return;
8500}
8501/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008502 * FUNCTION: WDA_ProcessEnterBmpsReq
8503 * Request to WDI to Enter BMPS power state.
8504 */
8505VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
8506 tEnterBmpsParams *pEnterBmpsReqParams)
8507{
8508 WDI_Status status = WDI_STATUS_SUCCESS;
8509 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
8510 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008512 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008513 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
8514 {
8515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008516 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008517 VOS_ASSERT(0);
8518 return VOS_STATUS_E_FAILURE;
8519 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008520 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
8521 if (NULL == wdiEnterBmpsReqParams)
8522 {
8523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008524 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008525 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008526 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
8527 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008528 return VOS_STATUS_E_NOMEM;
8529 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008530 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8531 if (NULL == pWdaParams)
8532 {
8533 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008534 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008535 VOS_ASSERT(0);
8536 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008537 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
8538 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008539 return VOS_STATUS_E_NOMEM;
8540 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008541 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
8542 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
8543 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
8544 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08008545 // For ESE and 11R Roaming
Jeff Johnson295189b2012-06-20 16:38:30 -07008546 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
8547 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
8548 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008549 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
8550 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008551
Jeff Johnson295189b2012-06-20 16:38:30 -07008552 /* Store param pointer as passed in by caller */
8553 /* store Params pass it to WDI */
8554 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008555 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008556 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07008557 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008558 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008559 if (IS_WDI_STATUS_FAILURE(status))
8560 {
8561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8562 "Failure in Enter BMPS REQ WDI API, free all the memory" );
8563 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008564 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07008565 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008566 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008567 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008568 return CONVERT_WDI2VOS_STATUS(status);
8569}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008570
8571
8572static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
8573 WDI_Status wdiStatus,
8574 tExitBmpsParams *pExitBmpsReqParams)
8575{
8576 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
8577
8578 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
8579}
8580
8581
Jeff Johnson295189b2012-06-20 16:38:30 -07008582/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008583 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008584 * send Exit BMPS RSP back to PE
8585 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008586void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008587{
8588 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308589 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008590 tExitBmpsParams *pExitBmpsRspParams;
8591
Jeff Johnson295189b2012-06-20 16:38:30 -07008592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008593 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008594 if(NULL == pWdaParams)
8595 {
8596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008597 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008598 VOS_ASSERT(0) ;
8599 return ;
8600 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008601
8602 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308603 if (NULL == pWDA)
8604 {
8605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8606 "%s:pWDA is NULL", __func__);
8607 VOS_ASSERT(0);
8608 return ;
8609 }
8610
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008611 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
8612
8613 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008614 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008615
Jeff Johnson295189b2012-06-20 16:38:30 -07008616 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8617 vos_mem_free(pWdaParams) ;
8618
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008619 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008620 return ;
8621}
Jeff Johnson295189b2012-06-20 16:38:30 -07008622/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008623 * FUNCTION: WDA_ExitBmpsReqCallback
8624 * Free memory and send Exit BMPS RSP back to PE.
8625 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
8626 */
8627void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
8628{
8629 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308630 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008631 tExitBmpsParams *pExitBmpsRspParams;
8632
8633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8634 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8635
8636 if(NULL == pWdaParams)
8637 {
8638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8639 "%s: pWdaParams received NULL", __func__);
8640 VOS_ASSERT(0);
8641 return;
8642 }
8643
8644 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308645 if (NULL == pWDA)
8646 {
8647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8648 "%s:pWDA is NULL", __func__);
8649 VOS_ASSERT(0);
8650 return ;
8651 }
8652
Yue Ma7f44bbe2013-04-12 11:47:39 -07008653 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
8654 pExitBmpsRspParams->status = wdiStatus;
8655
8656 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8657 {
8658 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8659 vos_mem_free(pWdaParams);
8660 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
8661 }
8662
8663 return;
8664}
8665/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008666 * FUNCTION: WDA_ProcessExitBmpsReq
8667 * Request to WDI to Exit BMPS power state.
8668 */
8669VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
8670 tExitBmpsParams *pExitBmpsReqParams)
8671{
8672 WDI_Status status = WDI_STATUS_SUCCESS ;
8673 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
8674 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
8675 sizeof(WDI_ExitBmpsReqParamsType)) ;
8676 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008678 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008679 if(NULL == wdiExitBmpsReqParams)
8680 {
8681 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008682 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008683 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008684 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008685 return VOS_STATUS_E_NOMEM;
8686 }
8687 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8688 if(NULL == pWdaParams)
8689 {
8690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008691 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008692 VOS_ASSERT(0);
8693 vos_mem_free(wdiExitBmpsReqParams);
8694 return VOS_STATUS_E_NOMEM;
8695 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008696 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07008697
8698 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
8699
Yue Ma7f44bbe2013-04-12 11:47:39 -07008700 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
8701 wdiExitBmpsReqParams->pUserData = pWdaParams;
8702
Jeff Johnson295189b2012-06-20 16:38:30 -07008703 /* Store param pointer as passed in by caller */
8704 /* store Params pass it to WDI */
8705 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
8706 pWdaParams->pWdaContext = pWDA;
8707 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008708 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008709 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008710 if(IS_WDI_STATUS_FAILURE(status))
8711 {
8712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8713 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008714 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8715 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008716 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008717 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008718 return CONVERT_WDI2VOS_STATUS(status) ;
8719}
Jeff Johnson295189b2012-06-20 16:38:30 -07008720/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008721 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008722 * send Enter UAPSD RSP back to PE
8723 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008724void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008725{
8726 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308727 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008728 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008730 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008731 if(NULL == pWdaParams)
8732 {
8733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008734 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008735 VOS_ASSERT(0) ;
8736 return ;
8737 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008738
8739 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308740 if (NULL == pWDA)
8741 {
8742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8743 "%s:pWDA is NULL", __func__);
8744 VOS_ASSERT(0);
8745 return ;
8746 }
8747
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008748 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
8749
8750 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008751 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008752
Jeff Johnson295189b2012-06-20 16:38:30 -07008753 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8754 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008755 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008756 return ;
8757}
Jeff Johnson295189b2012-06-20 16:38:30 -07008758/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008759 * FUNCTION: WDA_EnterUapsdReqCallback
8760 * Free memory and send Enter UAPSD RSP back to PE.
8761 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
8762 */
8763void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
8764{
8765 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8766 tWDA_CbContext *pWDA;
8767 tUapsdParams *pEnterUapsdRsqParams;
8768
8769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8770 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8771
8772 if(NULL == pWdaParams)
8773 {
8774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8775 "%s: pWdaParams received NULL", __func__);
8776 VOS_ASSERT(0);
8777 return;
8778 }
8779
8780 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308781 if (NULL == pWDA)
8782 {
8783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8784 "%s:pWDA is NULL", __func__);
8785 VOS_ASSERT(0);
8786 return ;
8787 }
8788
Yue Ma7f44bbe2013-04-12 11:47:39 -07008789 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
8790 pEnterUapsdRsqParams->status = wdiStatus;
8791
8792 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8793 {
8794 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8795 vos_mem_free(pWdaParams);
8796 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
8797 }
8798
8799 return;
8800}
8801/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008802 * FUNCTION: WDA_ProcessEnterUapsdReq
8803 * Request to WDI to Enter UAPSD power state.
8804 */
8805VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
8806 tUapsdParams *pEnterUapsdReqParams)
8807{
8808 WDI_Status status = WDI_STATUS_SUCCESS ;
8809 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
8810 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
8811 sizeof(WDI_EnterUapsdReqParamsType)) ;
8812 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008814 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008815 if(NULL == wdiEnterUapsdReqParams)
8816 {
8817 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008818 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008819 VOS_ASSERT(0);
8820 return VOS_STATUS_E_NOMEM;
8821 }
8822 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8823 if(NULL == pWdaParams)
8824 {
8825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008826 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008827 VOS_ASSERT(0);
8828 vos_mem_free(wdiEnterUapsdReqParams);
8829 return VOS_STATUS_E_NOMEM;
8830 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008831 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
8832 pEnterUapsdReqParams->beDeliveryEnabled;
8833 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
8834 pEnterUapsdReqParams->beTriggerEnabled;
8835 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
8836 pEnterUapsdReqParams->bkDeliveryEnabled;
8837 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
8838 pEnterUapsdReqParams->bkTriggerEnabled;
8839 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
8840 pEnterUapsdReqParams->viDeliveryEnabled;
8841 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
8842 pEnterUapsdReqParams->viTriggerEnabled;
8843 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
8844 pEnterUapsdReqParams->voDeliveryEnabled;
8845 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
8846 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07008847 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008848
Yue Ma7f44bbe2013-04-12 11:47:39 -07008849 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
8850 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008851
Jeff Johnson295189b2012-06-20 16:38:30 -07008852 /* Store param pointer as passed in by caller */
8853 /* store Params pass it to WDI */
8854 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
8855 pWdaParams->pWdaContext = pWDA;
8856 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008857 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008858 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008859 if(IS_WDI_STATUS_FAILURE(status))
8860 {
8861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8862 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
8863 vos_mem_free(pWdaParams->wdaMsgParam) ;
8864 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8865 vos_mem_free(pWdaParams) ;
8866 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008867 return CONVERT_WDI2VOS_STATUS(status) ;
8868}
Jeff Johnson295189b2012-06-20 16:38:30 -07008869/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008870 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008871 * send Exit UAPSD RSP back to PE
8872 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008873void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008874{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008875
8876 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8877 tWDA_CbContext *pWDA;
8878 tExitUapsdParams *pExitUapsdRspParams;
8879
Jeff Johnson295189b2012-06-20 16:38:30 -07008880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008881 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008882 if(NULL == pWdaParams)
8883 {
8884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008885 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008886 VOS_ASSERT(0);
8887 return;
8888 }
8889
8890 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8891 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
8892
8893 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008894 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008895
8896 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8897 vos_mem_free(pWdaParams) ;
8898
8899 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008900 return ;
8901}
Jeff Johnson295189b2012-06-20 16:38:30 -07008902/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008903 * FUNCTION: WDA_ExitUapsdReqCallback
8904 * Free memory and send Exit UAPSD RSP back to PE.
8905 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
8906 */
8907void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
8908{
8909 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308910 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008911 tExitUapsdParams *pExitUapsdRspParams;
8912
8913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8914 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8915
8916 if(NULL == pWdaParams)
8917 {
8918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8919 "%s: pWdaParams received NULL", __func__);
8920 VOS_ASSERT(0);
8921 return;
8922 }
8923
8924 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308925 if (NULL == pWDA)
8926 {
8927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8928 "%s:pWDA is NULL", __func__);
8929 VOS_ASSERT(0);
8930 return ;
8931 }
8932
Yue Ma7f44bbe2013-04-12 11:47:39 -07008933 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
8934 pExitUapsdRspParams->status = wdiStatus;
8935
8936 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8937 {
8938 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8939 vos_mem_free(pWdaParams);
8940 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
8941 }
8942
8943 return;
8944}
8945/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008946 * FUNCTION: WDA_ProcessExitUapsdReq
8947 * Request to WDI to Exit UAPSD power state.
8948 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008949VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
8950 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008951{
8952 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008953 tWDA_ReqParams *pWdaParams ;
8954 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
8955 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
8956 sizeof(WDI_ExitUapsdReqParamsType)) ;
8957
Jeff Johnson295189b2012-06-20 16:38:30 -07008958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008959 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008960
8961 if(NULL == wdiExitUapsdReqParams)
8962 {
8963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008964 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008965 VOS_ASSERT(0);
8966 return VOS_STATUS_E_NOMEM;
8967 }
8968 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8969 if(NULL == pWdaParams)
8970 {
8971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008972 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008973 VOS_ASSERT(0);
8974 vos_mem_free(wdiExitUapsdReqParams);
8975 return VOS_STATUS_E_NOMEM;
8976 }
8977
8978 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008979 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
8980 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008981
8982 /* Store param pointer as passed in by caller */
8983 /* store Params pass it to WDI */
8984 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
8985 pWdaParams->pWdaContext = pWDA;
8986 pWdaParams->wdaMsgParam = pExitUapsdParams;
8987
Yue Ma7f44bbe2013-04-12 11:47:39 -07008988 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008989 if(IS_WDI_STATUS_FAILURE(status))
8990 {
8991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8992 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008993 vos_mem_free(pWdaParams->wdaMsgParam) ;
8994 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8995 vos_mem_free(pWdaParams) ;
8996
Jeff Johnson295189b2012-06-20 16:38:30 -07008997 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008998 return CONVERT_WDI2VOS_STATUS(status) ;
8999}
9000
Jeff Johnson295189b2012-06-20 16:38:30 -07009001/*
9002 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
9003 *
9004 */
9005void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
9006{
9007 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009009 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009010 if(NULL == pWdaParams)
9011 {
9012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009013 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009014 VOS_ASSERT(0) ;
9015 return ;
9016 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009017 if( pWdaParams != NULL )
9018 {
9019 if( pWdaParams->wdaWdiApiMsgParam != NULL )
9020 {
9021 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9022 }
9023 if( pWdaParams->wdaMsgParam != NULL )
9024 {
9025 vos_mem_free(pWdaParams->wdaMsgParam) ;
9026 }
9027 vos_mem_free(pWdaParams) ;
9028 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009029 return ;
9030}
Jeff Johnson295189b2012-06-20 16:38:30 -07009031/*
9032 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
9033 * Request to WDI to set the power save params at start.
9034 */
9035VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
9036 tSirPowerSaveCfg *pPowerSaveCfg)
9037{
9038 WDI_Status status = WDI_STATUS_SUCCESS ;
9039 tHalCfg *tlvStruct = NULL ;
9040 tANI_U8 *tlvStructStart = NULL ;
9041 v_PVOID_t *configParam;
9042 tANI_U32 configParamSize;
9043 tANI_U32 *configDataValue;
9044 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
9045 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009047 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009048 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
9049 {
9050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009051 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009052 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009053 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009054 return VOS_STATUS_E_FAILURE;
9055 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009056 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
9057 if (NULL == wdiPowerSaveCfg)
9058 {
9059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009060 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009061 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009062 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009063 return VOS_STATUS_E_NOMEM;
9064 }
9065 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9066 if(NULL == pWdaParams)
9067 {
9068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009069 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009070 VOS_ASSERT(0);
9071 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009072 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009073 return VOS_STATUS_E_NOMEM;
9074 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009075 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
9076 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07009077 if(NULL == configParam)
9078 {
9079 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08009080 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009081 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07009082 vos_mem_free(pWdaParams);
9083 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009084 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009085 return VOS_STATUS_E_NOMEM;
9086 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009087 vos_mem_set(configParam, configParamSize, 0);
9088 wdiPowerSaveCfg->pConfigBuffer = configParam;
9089 tlvStruct = (tHalCfg *)configParam;
9090 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009091 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
9092 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
9093 tlvStruct->length = sizeof(tANI_U32);
9094 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9095 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07009096 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9097 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009098 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
9099 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
9100 tlvStruct->length = sizeof(tANI_U32);
9101 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9102 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07009103 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9104 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009105 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
9106 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
9107 tlvStruct->length = sizeof(tANI_U32);
9108 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9109 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07009110 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9111 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009112 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
9113 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
9114 tlvStruct->length = sizeof(tANI_U32);
9115 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9116 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07009117 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9118 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009119 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
9120 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
9121 tlvStruct->length = sizeof(tANI_U32);
9122 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9123 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07009124 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9125 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009126 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
9127 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
9128 tlvStruct->length = sizeof(tANI_U32);
9129 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9130 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07009131 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9132 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009133 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
9134 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
9135 tlvStruct->length = sizeof(tANI_U32);
9136 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9137 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07009138 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9139 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009140 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
9141 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
9142 tlvStruct->length = sizeof(tANI_U32);
9143 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9144 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
9145 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9146 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009147 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
9148 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
9149 tlvStruct->length = sizeof(tANI_U32);
9150 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9151 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
9152 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9153 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009154 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
9155 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
9156 tlvStruct->length = sizeof(tANI_U32);
9157 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9158 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07009159 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9160 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009161 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
9162 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
9163 tlvStruct->length = sizeof(tANI_U32);
9164 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9165 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07009166 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9167 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009168 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009169 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009170 /* store Params pass it to WDI */
9171 pWdaParams->wdaMsgParam = configParam;
9172 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
9173 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009174 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
9175 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009176 if(IS_WDI_STATUS_FAILURE(status))
9177 {
9178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9179 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
9180 vos_mem_free(pWdaParams->wdaMsgParam);
9181 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9182 vos_mem_free(pWdaParams);
9183 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009184 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009185 return CONVERT_WDI2VOS_STATUS(status);
9186}
Jeff Johnson295189b2012-06-20 16:38:30 -07009187/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009188 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009189 *
9190 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009191void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009192{
Yue Ma7f44bbe2013-04-12 11:47:39 -07009193 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9194
Jeff Johnson295189b2012-06-20 16:38:30 -07009195 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009196 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -07009197
9198 if(NULL == pWdaParams)
9199 {
9200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9201 "%s: pWdaParams received NULL", __func__);
9202 VOS_ASSERT(0);
9203 return ;
9204 }
9205
9206 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07009207 vos_mem_free(pWdaParams);
9208
Jeff Johnson295189b2012-06-20 16:38:30 -07009209 return ;
9210}
Jeff Johnson295189b2012-06-20 16:38:30 -07009211/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009212 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
9213 * Free memory.
9214 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
9215 */
9216void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
9217{
9218 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9219
9220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9221 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9222
9223 if(NULL == pWdaParams)
9224 {
9225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9226 "%s: pWdaParams received NULL", __func__);
9227 VOS_ASSERT(0);
9228 return;
9229 }
9230
9231 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9232 {
9233 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9234 vos_mem_free(pWdaParams);
9235 }
9236
9237 return;
9238}
9239/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009240 * FUNCTION: WDA_SetUapsdAcParamsReq
9241 * Request to WDI to set the UAPSD params for an ac (sta mode).
9242 */
9243VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
9244 tUapsdInfo *pUapsdInfo)
9245{
9246 WDI_Status status = WDI_STATUS_SUCCESS;
9247 tWDA_CbContext *pWDA = NULL ;
9248 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
9249 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
9250 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
9251 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009253 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009254 if(NULL == wdiUapsdParams)
9255 {
9256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009257 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009258 VOS_ASSERT(0);
9259 return VOS_STATUS_E_NOMEM;
9260 }
9261 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9262 if(NULL == pWdaParams)
9263 {
9264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009265 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009266 VOS_ASSERT(0);
9267 vos_mem_free(wdiUapsdParams);
9268 return VOS_STATUS_E_NOMEM;
9269 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009270 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
9271 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
9272 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
9273 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
9274 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
9275 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009276 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
9277 wdiUapsdParams->pUserData = pWdaParams;
9278
Jeff Johnson295189b2012-06-20 16:38:30 -07009279 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -07009280 pWdaParams->pWdaContext = pWDA;
9281 /* Store param pointer as passed in by caller */
9282 pWdaParams->wdaMsgParam = pUapsdInfo;
9283 /* store Params pass it to WDI */
9284 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009285 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009286 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07009287 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009288 if(IS_WDI_STATUS_FAILURE(status))
9289 {
9290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9291 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
9292 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9293 vos_mem_free(pWdaParams);
9294 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009295 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
9296 return VOS_STATUS_SUCCESS;
9297 else
9298 return VOS_STATUS_E_FAILURE;
9299
Jeff Johnson295189b2012-06-20 16:38:30 -07009300}
9301/*
9302 * FUNCTION: WDA_ClearUapsdAcParamsReq
9303 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
9304 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
9305 * and again enter the UPASD with the modified params. Hence the disable
9306 * function was kept empty.
9307 *
9308 */
9309VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
9310{
9311 /* do nothing */
9312 return VOS_STATUS_SUCCESS;
9313}
Jeff Johnson295189b2012-06-20 16:38:30 -07009314/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009315 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009316 *
9317 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009318void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009319{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009320 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9321
Jeff Johnson295189b2012-06-20 16:38:30 -07009322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009323 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009324
9325 if(NULL == pWdaParams)
9326 {
9327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009328 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009329 VOS_ASSERT(0) ;
9330 return ;
9331 }
9332
9333 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9334 vos_mem_free(pWdaParams->wdaMsgParam);
9335 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009336
Jeff Johnson295189b2012-06-20 16:38:30 -07009337 //print a msg, nothing else to do
9338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009339 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009340 return ;
9341}
Jeff Johnson295189b2012-06-20 16:38:30 -07009342/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009343 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
9344 * Free memory.
9345 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
9346 */
9347void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
9348{
9349 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9350
9351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9352 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9353
9354 if(NULL == pWdaParams)
9355 {
9356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9357 "%s: pWdaParams received NULL", __func__);
9358 VOS_ASSERT(0);
9359 return;
9360 }
9361
9362 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9363 {
9364 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9365 vos_mem_free(pWdaParams->wdaMsgParam);
9366 vos_mem_free(pWdaParams);
9367 }
9368
9369 return;
9370}
9371/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009372 * FUNCTION: WDA_UpdateUapsdParamsReq
9373 * Request to WDI to update UAPSD params (in softAP mode) for a station.
9374 */
9375VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
9376 tUpdateUapsdParams* pUpdateUapsdInfo)
9377{
9378 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009379 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009380 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
9381 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
9382 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009383 tWDA_ReqParams *pWdaParams = NULL;
9384
Jeff Johnson295189b2012-06-20 16:38:30 -07009385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009386 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009387 if(NULL == wdiUpdateUapsdParams)
9388 {
9389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009390 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009391 VOS_ASSERT(0);
9392 return VOS_STATUS_E_NOMEM;
9393 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009394 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
9395 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
9396 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009397 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
9398 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009399
9400 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9401 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009402 {
9403 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009404 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009405 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009406 vos_mem_free(pUpdateUapsdInfo);
9407 vos_mem_free(wdiUpdateUapsdParams);
9408 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07009409 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009410 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009411 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07009412 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009413 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
9414 pWdaParams->pWdaContext = pWDA;
9415
Jeff Johnson43971f52012-07-17 12:26:56 -07009416 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009417 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009418 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009419
Jeff Johnson43971f52012-07-17 12:26:56 -07009420 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009421 {
9422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9423 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009424 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
9425 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9426 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009427 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009428 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009429 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009430}
Jeff Johnson295189b2012-06-20 16:38:30 -07009431/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009432 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009433 *
9434 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009435void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009436{
9437 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009439 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009440 if(WDI_STATUS_SUCCESS != wdiStatus)
9441 {
9442 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08009443 "%s: RXP config filter failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009444 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009445 if(NULL == pWdaParams)
9446 {
9447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009448 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009449 VOS_ASSERT(0) ;
9450 return ;
9451 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009452 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9453 vos_mem_free(pWdaParams->wdaMsgParam);
9454 vos_mem_free(pWdaParams);
9455 return ;
9456}
Jeff Johnson295189b2012-06-20 16:38:30 -07009457/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009458 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
9459 * Free memory.
9460 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
9461 */
9462void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
9463{
9464 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9465
9466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9467 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9468
9469 if(NULL == pWdaParams)
9470 {
9471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9472 "%s: pWdaParams received NULL", __func__);
9473 VOS_ASSERT(0);
9474 return;
9475 }
9476
9477 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9478 {
9479 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9480 vos_mem_free(pWdaParams->wdaMsgParam);
9481 vos_mem_free(pWdaParams);
9482 }
9483
9484 return;
9485}
9486/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009487 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
9488 *
9489 */
9490VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
9491 tSirWlanSetRxpFilters *pWlanSuspendParam)
9492{
Jeff Johnson295189b2012-06-20 16:38:30 -07009493 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009494 WDI_Status wstatus;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +05309495 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009496 tWDA_ReqParams *pWdaParams ;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +05309497 /* Sanity Check
9498 * This is very unlikely and add assert to collect more info next time */
9499 if(NULL == pWlanSuspendParam)
9500 {
9501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9502 "%s: pWlanSuspendParam received NULL", __func__);
9503 VOS_ASSERT(0) ;
9504 return VOS_STATUS_E_FAULT;
9505 }
9506 wdiRxpFilterParams = (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
9507 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009509 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009510 if(NULL == wdiRxpFilterParams)
9511 {
9512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009513 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009514 VOS_ASSERT(0);
9515 vos_mem_free(pWlanSuspendParam);
9516 return VOS_STATUS_E_NOMEM;
9517 }
9518 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9519 if(NULL == pWdaParams)
9520 {
9521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009522 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009523 VOS_ASSERT(0);
9524 vos_mem_free(wdiRxpFilterParams);
9525 vos_mem_free(pWlanSuspendParam);
9526 return VOS_STATUS_E_NOMEM;
9527 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009528 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
9529 pWlanSuspendParam->setMcstBcstFilter;
9530 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
9531 pWlanSuspendParam->configuredMcstBcstFilterSetting;
9532
Yue Ma7f44bbe2013-04-12 11:47:39 -07009533 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
9534 wdiRxpFilterParams->pUserData = pWdaParams;
9535
Jeff Johnson295189b2012-06-20 16:38:30 -07009536 pWdaParams->pWdaContext = pWDA;
9537 pWdaParams->wdaMsgParam = pWlanSuspendParam;
9538 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009539 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009540 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07009541 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009542 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009543 {
9544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9545 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009546 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009547 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9548 vos_mem_free(pWdaParams->wdaMsgParam);
9549 vos_mem_free(pWdaParams);
9550 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009551 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009552}
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05309553
9554/*
Siddharth Bhal64246172015-02-27 01:04:37 +05309555 * FUNCTION: WDA_ProcessGetFrameLogReq
9556 * Request to WDI to get the Frame Log.
9557 */
9558VOS_STATUS WDA_ProcessGetFrameLogReq(tWDA_CbContext *pWDA,
9559 tAniGetFrameLogReq *pGetFrameLog)
9560{
9561 VOS_STATUS status = VOS_STATUS_SUCCESS;
9562 WDI_Status wstatus;
9563 WDI_GetFrameLogReqInfoType *wdiGetFrameLogInfo;
9564 tWDA_ReqParams *pWdaParams ;
9565
9566 /* Sanity Check*/
9567 if(NULL == pGetFrameLog)
9568 {
9569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9570 "%s: pMgmtLoggingInitParam received NULL", __func__);
9571 VOS_ASSERT(0) ;
9572 return VOS_STATUS_E_FAULT;
9573 }
9574
9575 wdiGetFrameLogInfo = (WDI_GetFrameLogReqInfoType *)vos_mem_malloc(
9576 sizeof(WDI_GetFrameLogReqInfoType));
9577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9578 "------> %s " ,__func__);
9579
9580 if(NULL == wdiGetFrameLogInfo)
9581 {
9582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9583 "%s: VOS MEM Alloc Failure", __func__);
9584 VOS_ASSERT(0);
9585 vos_mem_free(pGetFrameLog);
9586 return VOS_STATUS_E_NOMEM;
9587 }
9588
9589 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
9590 if(NULL == pWdaParams)
9591 {
9592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9593 "%s: VOS MEM Alloc Failure", __func__);
9594 VOS_ASSERT(0);
9595 vos_mem_free(wdiGetFrameLogInfo);
9596 vos_mem_free(pGetFrameLog);
9597 return VOS_STATUS_E_NOMEM;
9598 }
9599
9600 wdiGetFrameLogInfo->flags = pGetFrameLog->getFrameLogCmdFlag;
9601
9602 pWdaParams->pWdaContext = pWDA;
9603 pWdaParams->wdaMsgParam = pGetFrameLog;
9604 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGetFrameLogInfo;
9605
9606 wstatus = WDI_GetFrameLogReq(wdiGetFrameLogInfo,
9607 (WDI_GetFrameLogRspCb)WDA_GetFrameLogRspCallback,
9608 pWdaParams);
9609 if(IS_WDI_STATUS_FAILURE(wstatus))
9610 {
9611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9612 "Failure in get frame log REQ WDI API, free all the memory" );
9613 status = CONVERT_WDI2VOS_STATUS(wstatus);
9614 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9615 vos_mem_free(pWdaParams->wdaMsgParam);
9616 vos_mem_free(pWdaParams);
9617 }
9618 return status;
9619}
9620
9621/*
Siddharth Bhalb7c421c2015-02-27 00:26:09 +05309622 * FUNCTION: WDA_ProcessMgmtLoggingInitReq
9623 *
9624 */
9625VOS_STATUS WDA_ProcessMgmtLoggingInitReq(tWDA_CbContext *pWDA,
9626 tSirMgmtLoggingInitParam *pMgmtLoggingInitParam)
9627{
9628 VOS_STATUS status = VOS_STATUS_SUCCESS;
9629 WDI_Status wstatus;
9630 WDI_MgmtLoggingInitReqInfoType *wdiMgmtLoggingInitInfo;
9631 tWDA_ReqParams *pWdaParams ;
9632
9633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9634 "------> %s " ,__func__);
9635
9636 /* Sanity Check*/
9637 if(NULL == pMgmtLoggingInitParam)
9638 {
9639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9640 "%s: pMgmtLoggingInitParam received NULL", __func__);
9641 VOS_ASSERT(0) ;
9642 return VOS_STATUS_E_FAULT;
9643 }
9644
9645 wdiMgmtLoggingInitInfo = (WDI_MgmtLoggingInitReqInfoType *)vos_mem_malloc(
9646 sizeof(WDI_MgmtLoggingInitReqInfoType));
9647 if(NULL == wdiMgmtLoggingInitInfo)
9648 {
9649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9650 "%s: VOS MEM Alloc Failure", __func__);
9651 VOS_ASSERT(0);
9652 vos_mem_free(pMgmtLoggingInitParam);
9653 return VOS_STATUS_E_NOMEM;
9654 }
9655
9656 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9657 if(NULL == pWdaParams)
9658 {
9659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9660 "%s: VOS MEM Alloc Failure", __func__);
9661 VOS_ASSERT(0);
9662 vos_mem_free(wdiMgmtLoggingInitInfo);
9663 vos_mem_free(pMgmtLoggingInitParam);
9664 return VOS_STATUS_E_NOMEM;
9665 }
9666
9667 wdiMgmtLoggingInitInfo->enableFlag=
9668 pMgmtLoggingInitParam->enableFlag;
9669 wdiMgmtLoggingInitInfo->frameType=
9670 pMgmtLoggingInitParam->frameType;
9671 wdiMgmtLoggingInitInfo->frameSize=
9672 pMgmtLoggingInitParam->frameSize;
9673 wdiMgmtLoggingInitInfo->bufferMode=
9674 pMgmtLoggingInitParam->bufferMode;
9675
9676 pWdaParams->pWdaContext = pWDA;
9677 pWdaParams->wdaMsgParam = pMgmtLoggingInitParam;
9678 pWdaParams->wdaWdiApiMsgParam = (void *)wdiMgmtLoggingInitInfo;
9679
9680 wstatus = WDI_MgmtLoggingInitReq(wdiMgmtLoggingInitInfo,
9681 (WDI_MgmtLoggingInitRspCb)WDA_MgmtLoggingInitRspCallback,
9682 pWdaParams);
9683 if(IS_WDI_STATUS_FAILURE(wstatus))
9684 {
9685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9686 "Failure in Mgmt Logging init REQ WDI API, free all the memory" );
9687 status = CONVERT_WDI2VOS_STATUS(wstatus);
9688 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9689 vos_mem_free(pWdaParams->wdaMsgParam);
9690 vos_mem_free(pWdaParams);
9691 }
9692
9693 return status;
9694}
9695
Jeff Johnson295189b2012-06-20 16:38:30 -07009696/*
9697 * FUNCTION: WDA_WdiIndicationCallback
9698 *
9699 */
9700void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
9701 void* pUserData)
9702{
9703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009704 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009705}
Jeff Johnson295189b2012-06-20 16:38:30 -07009706/*
9707 * FUNCTION: WDA_ProcessWlanSuspendInd
9708 *
9709 */
9710VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
9711 tSirWlanSuspendParam *pWlanSuspendParam)
9712{
9713 WDI_Status wdiStatus;
9714 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009715 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009716 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009717 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
9718 pWlanSuspendParam->configuredMcstBcstFilterSetting;
9719 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
9720 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07009722 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
9723 if(WDI_STATUS_PENDING == wdiStatus)
9724 {
9725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009726 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009727 }
9728 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
9729 {
9730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009731 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009732 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009733 vos_mem_free(pWlanSuspendParam);
9734 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
9735}
9736
Chet Lanctot186b5732013-03-18 10:26:30 -07009737#ifdef WLAN_FEATURE_11W
9738/*
9739 * FUNCTION: WDA_ProcessExcludeUnecryptInd
9740 *
9741 */
9742VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
9743 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
9744{
9745 WDI_Status wdiStatus;
9746 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
9747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9748 "------> %s ", __func__);
9749
9750 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
9751 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
9752 sizeof(tSirMacAddr));
9753
9754 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
9755 wdiExclUnencryptParams.pUserData = pWDA;
9756
9757 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
9758 if(WDI_STATUS_PENDING == wdiStatus)
9759 {
9760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9761 "Pending received for %s:%d ", __func__, __LINE__ );
9762 }
9763 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
9764 {
9765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9766 "Failure in %s:%d ", __func__, __LINE__ );
9767 }
9768 vos_mem_free(pExclUnencryptParam);
9769 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
9770}
9771#endif
9772
Jeff Johnson295189b2012-06-20 16:38:30 -07009773/*
9774 * FUNCTION: WDA_ProcessWlanResumeCallback
9775 *
9776 */
9777void WDA_ProcessWlanResumeCallback(
9778 WDI_SuspendResumeRspParamsType *resumeRspParams,
9779 void* pUserData)
9780{
9781 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009783 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009784 if(NULL == pWdaParams)
9785 {
9786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009787 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009788 VOS_ASSERT(0) ;
9789 return ;
9790 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009791 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
9792 {
9793 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08009794 "%s: Process Wlan Resume failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009795 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009796 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9797 vos_mem_free(pWdaParams->wdaMsgParam);
9798 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009799 return ;
9800}
Jeff Johnson295189b2012-06-20 16:38:30 -07009801/*
9802 * FUNCTION: WDA_ProcessWlanResumeReq
9803 *
9804 */
9805VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
9806 tSirWlanResumeParam *pWlanResumeParam)
9807{
9808 WDI_Status wdiStatus;
9809 WDI_ResumeParamsType *wdiResumeParams =
9810 (WDI_ResumeParamsType *)vos_mem_malloc(
9811 sizeof(WDI_ResumeParamsType) ) ;
9812 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009814 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009815 if(NULL == wdiResumeParams)
9816 {
9817 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009818 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009819 VOS_ASSERT(0);
9820 return VOS_STATUS_E_NOMEM;
9821 }
9822 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9823 if(NULL == pWdaParams)
9824 {
9825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009826 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009827 VOS_ASSERT(0);
9828 vos_mem_free(wdiResumeParams);
9829 return VOS_STATUS_E_NOMEM;
9830 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009831 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
9832 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07009834 wdiResumeParams->wdiReqStatusCB = NULL;
9835 pWdaParams->wdaMsgParam = pWlanResumeParam;
9836 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
9837 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009838 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
9839 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
9840 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009841 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9842 {
9843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9844 "Failure in Host Resume REQ WDI API, free all the memory " );
9845 VOS_ASSERT(0);
9846 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9847 vos_mem_free(pWdaParams->wdaMsgParam);
9848 vos_mem_free(pWdaParams);
9849 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009850 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
9851}
9852
Jeff Johnson295189b2012-06-20 16:38:30 -07009853/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009854 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009855 *
9856 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009857void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009858{
9859 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009861 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009862 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__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009866 VOS_ASSERT(0) ;
9867 return ;
9868 }
9869
9870 vos_mem_free(pWdaParams->wdaMsgParam) ;
9871 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9872 vos_mem_free(pWdaParams) ;
9873 /*
9874 * No respone required for SetBeaconFilter req so just free the request
9875 * param here
9876 */
9877
Jeff Johnson295189b2012-06-20 16:38:30 -07009878 return ;
9879}
Jeff Johnson295189b2012-06-20 16:38:30 -07009880/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009881 * FUNCTION: WDA_SetBeaconFilterReqCallback
9882 * Free memory.
9883 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
9884 */
9885void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
9886{
9887 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9888
9889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9890 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9891
9892 if(NULL == pWdaParams)
9893 {
9894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9895 "%s: pWdaParams received NULL", __func__);
9896 VOS_ASSERT(0);
9897 return;
9898 }
9899
9900 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9901 {
9902 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9903 vos_mem_free(pWdaParams->wdaMsgParam);
9904 vos_mem_free(pWdaParams);
9905 }
9906
9907 return;
9908}
9909/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009910 * FUNCTION: WDA_SetBeaconFilterReq
9911 * Request to WDI to send the beacon filtering related information.
9912 */
9913VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
9914 tBeaconFilterMsg* pBeaconFilterInfo)
9915{
9916 WDI_Status status = WDI_STATUS_SUCCESS;
9917 tANI_U8 *dstPtr, *srcPtr;
9918 tANI_U8 filterLength;
9919 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
9920 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
9921 sizeof(WDI_BeaconFilterReqParamsType) ) ;
9922 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009924 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009925 if(NULL == wdiBeaconFilterInfo)
9926 {
9927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009928 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009929 VOS_ASSERT(0);
9930 return VOS_STATUS_E_NOMEM;
9931 }
9932 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9933 if(NULL == pWdaParams)
9934 {
9935 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009936 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009937 VOS_ASSERT(0);
9938 vos_mem_free(wdiBeaconFilterInfo);
9939 return VOS_STATUS_E_NOMEM;
9940 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009941 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
9942 pBeaconFilterInfo->beaconInterval;
9943 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
9944 pBeaconFilterInfo->capabilityInfo;
9945 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
9946 pBeaconFilterInfo->capabilityMask;
9947 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -07009948
9949 //Fill the BssIdx
9950 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
9951
Jeff Johnson295189b2012-06-20 16:38:30 -07009952 //Fill structure with info contained in the beaconFilterTable
9953 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
9954 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
9955 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
9956 if(WDI_BEACON_FILTER_LEN < filterLength)
9957 {
9958 filterLength = WDI_BEACON_FILTER_LEN;
9959 }
9960 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -07009961 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
9962 wdiBeaconFilterInfo->pUserData = pWdaParams;
9963
Jeff Johnson295189b2012-06-20 16:38:30 -07009964 /* Store param pointer as passed in by caller */
9965 /* store Params pass it to WDI */
9966 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
9967 pWdaParams->pWdaContext = pWDA;
9968 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
9969
Jeff Johnson295189b2012-06-20 16:38:30 -07009970 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009971 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009972 if(IS_WDI_STATUS_FAILURE(status))
9973 {
9974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9975 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
9976 vos_mem_free(pWdaParams->wdaMsgParam) ;
9977 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9978 vos_mem_free(pWdaParams) ;
9979 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009980 return CONVERT_WDI2VOS_STATUS(status) ;
9981}
Jeff Johnson295189b2012-06-20 16:38:30 -07009982/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009983 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009984 *
9985 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009986void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009987{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009988 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9989
Jeff Johnson295189b2012-06-20 16:38:30 -07009990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009991 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009992
9993 if(NULL == pWdaParams)
9994 {
9995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009996 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009997 VOS_ASSERT(0) ;
9998 return ;
9999 }
10000
10001 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10002 vos_mem_free(pWdaParams->wdaMsgParam);
10003 vos_mem_free(pWdaParams);
10004
Jeff Johnson295189b2012-06-20 16:38:30 -070010005 //print a msg, nothing else to do
10006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010007 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010008 return ;
10009}
Yue Ma7f44bbe2013-04-12 11:47:39 -070010010/*
10011 * FUNCTION: WDA_RemBeaconFilterReqCallback
10012 * Free memory.
10013 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
10014 */
10015void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
10016{
10017 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10018
10019 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10020 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10021
10022 if(NULL == pWdaParams)
10023 {
10024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10025 "%s: pWdaParams received NULL", __func__);
10026 VOS_ASSERT(0);
10027 return;
10028 }
10029
10030 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10031 {
10032 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10033 vos_mem_free(pWdaParams->wdaMsgParam);
10034 vos_mem_free(pWdaParams);
10035 }
10036
10037 return;
10038}
Jeff Johnson295189b2012-06-20 16:38:30 -070010039 // TODO: PE does not have this feature for now implemented,
10040 // but the support for removing beacon filter exists between
10041 // HAL and FW. This function can be called whenever PE defines
10042 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -070010043/*
10044 * FUNCTION: WDA_RemBeaconFilterReq
10045 * Request to WDI to send the removal of beacon filtering related information.
10046 */
10047VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
10048 tRemBeaconFilterMsg* pBeaconFilterInfo)
10049{
10050 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010051 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010052 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
10053 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
10054 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010055 tWDA_ReqParams *pWdaParams ;
10056
Jeff Johnson295189b2012-06-20 16:38:30 -070010057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010058 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010059 if(NULL == wdiBeaconFilterInfo)
10060 {
10061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010062 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010063 VOS_ASSERT(0);
10064 return VOS_STATUS_E_NOMEM;
10065 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010066 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10067 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010068 {
10069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010070 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010071 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010072 vos_mem_free(wdiBeaconFilterInfo);
10073 vos_mem_free(pBeaconFilterInfo);
10074 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -070010075 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010076
10077 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
10078 pBeaconFilterInfo->ucIeCount;
10079 //Fill structure with info contained in the ucRemIeId
10080 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
10081 pBeaconFilterInfo->ucRemIeId,
10082 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
10083 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
10084 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010085
10086 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010087 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -070010088 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010089 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
10090
10091 pWdaParams->pWdaContext = pWDA;
10092
Jeff Johnson43971f52012-07-17 12:26:56 -070010093 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010094 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010095 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010096 {
10097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10098 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010099 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010100 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10101 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070010102 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010103 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010104 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010105}
Jeff Johnson295189b2012-06-20 16:38:30 -070010106/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010107 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010108 *
10109 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010110void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010111{
10112 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010114 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010115 if(NULL == pWdaParams)
10116 {
10117 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010118 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010119 VOS_ASSERT(0) ;
10120 return ;
10121 }
10122
10123 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10124 vos_mem_free(pWdaParams) ;
10125
Jeff Johnson295189b2012-06-20 16:38:30 -070010126 return ;
10127}
Jeff Johnson295189b2012-06-20 16:38:30 -070010128/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010129 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
10130 * Free memory.
10131 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
10132 */
10133void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
10134{
10135 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10136
10137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10138 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10139
10140 if(NULL == pWdaParams)
10141 {
10142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10143 "%s: pWdaParams received NULL", __func__);
10144 VOS_ASSERT(0);
10145 return;
10146 }
10147
10148 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10149 {
10150 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10151 vos_mem_free(pWdaParams);
10152 }
10153
10154 return;
10155}
10156/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010157 * FUNCTION: WDA_SetRSSIThresholdsReq
10158 * Request to WDI to set the RSSI thresholds (sta mode).
10159 */
10160VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
10161{
10162 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010163 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010164 tWDA_CbContext *pWDA = NULL ;
10165 v_PVOID_t pVosContext = NULL;
10166 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
10167 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
10168 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
10169 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010171 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010172 if(NULL == wdiRSSIThresholdsInfo)
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 return VOS_STATUS_E_NOMEM;
10178 }
10179 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10180 if(NULL == pWdaParams)
10181 {
10182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010183 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010184 VOS_ASSERT(0);
10185 vos_mem_free(wdiRSSIThresholdsInfo);
10186 return VOS_STATUS_E_NOMEM;
10187 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010188 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -070010189 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
10190 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
10191 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -070010192 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
10193 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
10194 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -070010195 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
10196 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
10197 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010198 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
10199 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010200 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
10201 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
10202
Jeff Johnson295189b2012-06-20 16:38:30 -070010203 /* Store param pointer as passed in by caller */
10204 /* store Params pass it to WDI */
10205 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
10206 pWdaParams->pWdaContext = pWDA;
10207 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -070010208 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010209 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010210 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010211 {
10212 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10213 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010214 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010215 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10216 vos_mem_free(pWdaParams) ;
10217 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010218 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010219
10220}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010221/*
Yue Madb90ac12013-04-04 13:39:13 -070010222 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010223 *
10224 */
Yue Madb90ac12013-04-04 13:39:13 -070010225void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010226{
10227 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10228
10229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010230 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010231 if(NULL == pWdaParams)
10232 {
10233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010234 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010235 VOS_ASSERT(0) ;
10236 return ;
10237 }
10238
10239 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10240 vos_mem_free(pWdaParams->wdaMsgParam);
10241 vos_mem_free(pWdaParams) ;
10242
10243 //print a msg, nothing else to do
10244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -070010245 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010246 return ;
10247}
Jeff Johnson295189b2012-06-20 16:38:30 -070010248/*
Yue Madb90ac12013-04-04 13:39:13 -070010249 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -070010250 * Free memory.
10251 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -070010252 */
10253void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
10254{
10255 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10256
10257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10258 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10259
10260 if(NULL == pWdaParams)
10261 {
10262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10263 "%s: Invalid pWdaParams pointer", __func__);
10264 VOS_ASSERT(0);
10265 return;
10266 }
10267
10268 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10269 {
10270 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10271 vos_mem_free(pWdaParams->wdaMsgParam);
10272 vos_mem_free(pWdaParams);
10273 }
10274
10275 return;
10276}
10277/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010278 * FUNCTION: WDA_ProcessHostOffloadReq
10279 * Request to WDI to set the filter to minimize unnecessary host wakeup due
10280 * to broadcast traffic (sta mode).
10281 */
10282VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
10283 tSirHostOffloadReq *pHostOffloadParams)
10284{
10285 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010286 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010287 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
10288 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
10289 sizeof(WDI_HostOffloadReqParamsType)) ;
10290 tWDA_ReqParams *pWdaParams ;
10291
10292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010293 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -070010294
10295 if(NULL == wdiHostOffloadInfo)
10296 {
10297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010298 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010299 VOS_ASSERT(0);
10300 return VOS_STATUS_E_NOMEM;
10301 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010302 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10303 if(NULL == pWdaParams)
10304 {
10305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010306 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010307 VOS_ASSERT(0);
10308 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010309 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010310 return VOS_STATUS_E_NOMEM;
10311 }
10312
10313 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
10314 pHostOffloadParams->offloadType;
10315 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
10316 pHostOffloadParams->enableOrDisable;
10317
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010318 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
10319 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
10320
Jeff Johnson295189b2012-06-20 16:38:30 -070010321 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
10322 {
10323 case SIR_IPV4_ARP_REPLY_OFFLOAD:
10324 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
10325 pHostOffloadParams->params.hostIpv4Addr,
10326 4);
10327 break;
10328 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
10329 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
10330 pHostOffloadParams->params.hostIpv6Addr,
10331 16);
10332 break;
10333 case SIR_IPV6_NS_OFFLOAD:
10334 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
10335 pHostOffloadParams->params.hostIpv6Addr,
10336 16);
10337
10338#ifdef WLAN_NS_OFFLOAD
10339 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
10340 {
10341 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
10342 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
10343 16);
10344 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
10345 }
10346 else
10347 {
10348 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
10349 }
10350
10351 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
10352 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
10353 16);
10354 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
10355 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
10356 6);
10357
10358 //Only two are supported so let's go through them without a loop
10359 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
10360 {
10361 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
10362 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
10363 16);
10364 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
10365 }
10366 else
10367 {
10368 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
10369 }
10370
10371 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
10372 {
10373 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
10374 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
10375 16);
10376 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
10377 }
10378 else
10379 {
10380 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
10381 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +053010382 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
10383 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070010384 break;
10385#endif //WLAN_NS_OFFLOAD
10386 default:
10387 {
10388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10389 "No Handling for Offload Type %x in WDA "
10390 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
10391 //WDA_VOS_ASSERT(0) ;
10392 }
10393 }
Yue Madb90ac12013-04-04 13:39:13 -070010394 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
10395 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010396
Jeff Johnson295189b2012-06-20 16:38:30 -070010397 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010398 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010399 /* store Params pass it to WDI */
10400 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
10401 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010402
Jeff Johnson295189b2012-06-20 16:38:30 -070010403
Jeff Johnson43971f52012-07-17 12:26:56 -070010404 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -070010405 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010406
Jeff Johnson43971f52012-07-17 12:26:56 -070010407 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010408 {
10409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
c_hpothu86feba52014-10-28 15:51:18 +053010410 "Failure in host offload REQ WDI API, free all the memory %d",
10411 wstatus);
Jeff Johnson43971f52012-07-17 12:26:56 -070010412 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010413 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10414 vos_mem_free(pWdaParams->wdaMsgParam);
10415 vos_mem_free(pWdaParams) ;
10416 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010417 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010418
10419}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010420/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010421 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010422 *
10423 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010424void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010425{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010426 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10427
Jeff Johnson295189b2012-06-20 16:38:30 -070010428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010429 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010430
10431 if(NULL == pWdaParams)
10432 {
10433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010434 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010435 VOS_ASSERT(0) ;
10436 return ;
10437 }
10438
10439 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10440 vos_mem_free(pWdaParams->wdaMsgParam);
10441 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -070010442
Jeff Johnson295189b2012-06-20 16:38:30 -070010443 //print a msg, nothing else to do
10444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010445 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010446 return ;
10447}
Jeff Johnson295189b2012-06-20 16:38:30 -070010448/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010449 * FUNCTION: WDA_KeepAliveReqCallback
10450 * Free memory.
10451 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
10452 */
10453void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
10454{
10455 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10456
10457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10458 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10459
10460 if(NULL == pWdaParams)
10461 {
10462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10463 "%s: pWdaParams received NULL", __func__);
10464 VOS_ASSERT(0);
10465 return;
10466 }
10467
10468 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10469 {
10470 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10471 vos_mem_free(pWdaParams->wdaMsgParam);
10472 vos_mem_free(pWdaParams);
10473 }
10474
10475 return;
10476}
10477/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010478 * FUNCTION: WDA_ProcessKeepAliveReq
10479 * Request to WDI to send Keep Alive packets to minimize unnecessary host
10480 * wakeup due to broadcast traffic (sta mode).
10481 */
10482VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
10483 tSirKeepAliveReq *pKeepAliveParams)
10484{
10485 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010486 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010487 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
10488 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
10489 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010490 tWDA_ReqParams *pWdaParams;
10491
Jeff Johnson295189b2012-06-20 16:38:30 -070010492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010493 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010494 if(NULL == wdiKeepAliveInfo)
10495 {
10496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010497 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010498 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010499 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010500 return VOS_STATUS_E_NOMEM;
10501 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010502
10503 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10504 if(NULL == pWdaParams)
10505 {
10506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010507 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010508 VOS_ASSERT(0);
10509 vos_mem_free(wdiKeepAliveInfo);
10510 vos_mem_free(pKeepAliveParams);
10511 return VOS_STATUS_E_NOMEM;
10512 }
10513
Jeff Johnson295189b2012-06-20 16:38:30 -070010514 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
10515 pKeepAliveParams->packetType;
10516 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
10517 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010518
10519 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
10520 pKeepAliveParams->bssId,
10521 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010522
10523 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
10524 {
10525 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
10526 pKeepAliveParams->hostIpv4Addr,
10527 SIR_IPV4_ADDR_LEN);
10528 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
10529 pKeepAliveParams->destIpv4Addr,
10530 SIR_IPV4_ADDR_LEN);
10531 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
10532 pKeepAliveParams->destMacAddr,
10533 SIR_MAC_ADDR_LEN);
10534 }
10535 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
10536 {
10537 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
10538 SIR_IPV4_ADDR_LEN,
10539 0);
10540 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
10541 SIR_IPV4_ADDR_LEN,
10542 0);
10543 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
10544 SIR_MAC_ADDR_LEN,
10545 0);
10546 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010547 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
10548 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010549
Jeff Johnson295189b2012-06-20 16:38:30 -070010550 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010551 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010552 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010553 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
10554 pWdaParams->pWdaContext = pWDA;
10555
Jeff Johnson295189b2012-06-20 16:38:30 -070010556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
10557 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
10558 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
10559 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
10560 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
10561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
10562 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
10563 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
10564 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
10565 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
10566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10567 "WDA DMAC : %d:%d:%d:%d:%d:%d",
10568 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
10569 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
10570 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
10571 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
10572 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
10573 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
10574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10575 "TimePeriod %d PacketType %d",
10576 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
10577 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -070010578 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010579 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010580
Jeff Johnson43971f52012-07-17 12:26:56 -070010581 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010582 {
10583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10584 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010585 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010586 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10587 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070010588 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010589 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010590 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010591
10592}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010593/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010594 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010595 *
10596 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010597void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010598 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
10599 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010600{
10601 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010603 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010604 if(NULL == pWdaParams)
10605 {
10606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010607 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010608 VOS_ASSERT(0) ;
10609 return ;
10610 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010611 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10612 vos_mem_free(pWdaParams->wdaMsgParam);
10613 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010614 return ;
10615}
Jeff Johnson295189b2012-06-20 16:38:30 -070010616/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010617 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
10618 * Free memory.
10619 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
10620 */
10621void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
10622{
10623 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10624
10625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10626 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10627
10628 if(NULL == pWdaParams)
10629 {
10630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10631 "%s: pWdaParams received NULL", __func__);
10632 VOS_ASSERT(0);
10633 return;
10634 }
10635
10636 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10637 {
10638 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10639 vos_mem_free(pWdaParams->wdaMsgParam);
10640 vos_mem_free(pWdaParams);
10641 }
10642
10643 return;
10644}
10645
10646/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010647 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
10648 * Request to WDI to add WOWL Bcast pattern
10649 */
10650VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
10651 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
10652{
10653 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010654 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010655 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
10656 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
10657 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
10658 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010660 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010661 if(NULL == wdiWowlAddBcPtrnInfo)
10662 {
10663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010664 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010665 VOS_ASSERT(0);
10666 return VOS_STATUS_E_NOMEM;
10667 }
10668 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10669 if(NULL == pWdaParams)
10670 {
10671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010672 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010673 VOS_ASSERT(0);
10674 vos_mem_free(wdiWowlAddBcPtrnInfo);
10675 return VOS_STATUS_E_NOMEM;
10676 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010677 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
10678 pWowlAddBcPtrnParams->ucPatternId;
10679 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
10680 pWowlAddBcPtrnParams->ucPatternByteOffset;
10681 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
10682 pWowlAddBcPtrnParams->ucPatternMaskSize;
10683 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
10684 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -070010685 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
10686 {
10687 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
10688 pWowlAddBcPtrnParams->ucPattern,
10689 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
10690 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
10691 pWowlAddBcPtrnParams->ucPatternMask,
10692 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
10693 }
10694 else
10695 {
10696 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
10697 pWowlAddBcPtrnParams->ucPattern,
10698 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10699 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
10700 pWowlAddBcPtrnParams->ucPatternMask,
10701 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10702
10703 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
10704 pWowlAddBcPtrnParams->ucPatternExt,
10705 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10706 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
10707 pWowlAddBcPtrnParams->ucPatternMaskExt,
10708 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10709 }
10710
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010711 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
10712 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
10713
Yue Ma7f44bbe2013-04-12 11:47:39 -070010714 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
10715 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010716 /* Store param pointer as passed in by caller */
10717 /* store Params pass it to WDI */
10718 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
10719 pWdaParams->pWdaContext = pWDA;
10720 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010721 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010722 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010723 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010724 {
10725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10726 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010727 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010728 vos_mem_free(pWdaParams->wdaMsgParam) ;
10729 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10730 vos_mem_free(pWdaParams) ;
10731 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010732 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010733
10734}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010735/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010736 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010737 *
10738 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010739void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010740 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
10741 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010742{
10743 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010745 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010746 if(NULL == pWdaParams)
10747 {
10748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010749 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010750 VOS_ASSERT(0) ;
10751 return ;
10752 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010753 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10754 vos_mem_free(pWdaParams->wdaMsgParam);
10755 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010756 return ;
10757}
Jeff Johnson295189b2012-06-20 16:38:30 -070010758/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010759 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
10760 * Free memory.
10761 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
10762 */
10763void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
10764{
10765 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10766
10767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10768 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10769
10770 if(NULL == pWdaParams)
10771 {
10772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10773 "%s: pWdaParams received NULL", __func__);
10774 VOS_ASSERT(0);
10775 return;
10776 }
10777
10778 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10779 {
10780 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10781 vos_mem_free(pWdaParams->wdaMsgParam);
10782 vos_mem_free(pWdaParams);
10783 }
10784
10785 return;
10786}
10787/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010788 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
10789 * Request to WDI to delete WOWL Bcast pattern
10790 */
10791VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
10792 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
10793{
10794 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010795 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010796 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
10797 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
10798 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
10799 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010800 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010801 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010802 if(NULL == wdiWowlDelBcPtrnInfo)
10803 {
10804 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010805 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010806 VOS_ASSERT(0);
10807 return VOS_STATUS_E_NOMEM;
10808 }
10809 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10810 if(NULL == pWdaParams)
10811 {
10812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010813 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010814 VOS_ASSERT(0);
10815 vos_mem_free(wdiWowlDelBcPtrnInfo);
10816 return VOS_STATUS_E_NOMEM;
10817 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010818 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
10819 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010820
10821 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
10822 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
10823
Yue Ma7f44bbe2013-04-12 11:47:39 -070010824 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
10825 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010826 /* Store param pointer as passed in by caller */
10827 /* store Params pass it to WDI */
10828 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
10829 pWdaParams->pWdaContext = pWDA;
10830 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010831 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010832 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010833 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010834 {
10835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10836 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010837 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010838 vos_mem_free(pWdaParams->wdaMsgParam) ;
10839 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10840 vos_mem_free(pWdaParams) ;
10841 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010842 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010843
10844}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010845/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010846 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010847 *
10848 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010849void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010850{
10851 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010852 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010853 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010855 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010856 if(NULL == pWdaParams)
10857 {
10858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010859 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010860 VOS_ASSERT(0) ;
10861 return ;
10862 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010863 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010864 if (NULL == pWDA)
10865 {
10866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10867 "%s:pWDA is NULL", __func__);
10868 VOS_ASSERT(0);
10869 return ;
10870 }
10871
Jeff Johnson295189b2012-06-20 16:38:30 -070010872 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
10873
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010874 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
10875
Jeff Johnson295189b2012-06-20 16:38:30 -070010876 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10877 vos_mem_free(pWdaParams) ;
10878
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010879 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010880 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -070010881 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010882 return ;
10883}
Jeff Johnson295189b2012-06-20 16:38:30 -070010884/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010885 * FUNCTION: WDA_WowlEnterReqCallback
10886 * Free memory and send WOWL Enter RSP back to PE.
10887 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
10888 */
10889void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
10890{
10891 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010892 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010893 tSirHalWowlEnterParams *pWowlEnterParams;
10894
10895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10896 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10897
10898 if(NULL == pWdaParams)
10899 {
10900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10901 "%s: pWdaParams received NULL", __func__);
10902 VOS_ASSERT(0);
10903 return;
10904 }
10905
10906 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010907 if (NULL == pWDA)
10908 {
10909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10910 "%s:pWDA is NULL", __func__);
10911 VOS_ASSERT(0);
10912 return ;
10913 }
10914
Yue Ma7f44bbe2013-04-12 11:47:39 -070010915 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
10916 pWowlEnterParams->status = wdiStatus;
10917
10918 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10919 {
10920 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10921 vos_mem_free(pWdaParams);
10922 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
10923 }
10924
10925 return;
10926}
10927/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010928 * FUNCTION: WDA_ProcessWowlEnterReq
10929 * Request to WDI to enter WOWL
10930 */
10931VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
10932 tSirHalWowlEnterParams *pWowlEnterParams)
10933{
10934 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010935 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010936 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
10937 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
10938 sizeof(WDI_WowlEnterReqParamsType)) ;
10939 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010941 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010942 if(NULL == wdiWowlEnterInfo)
10943 {
10944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010945 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010946 VOS_ASSERT(0);
10947 return VOS_STATUS_E_NOMEM;
10948 }
10949 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10950 if(NULL == pWdaParams)
10951 {
10952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010953 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010954 VOS_ASSERT(0);
10955 vos_mem_free(wdiWowlEnterInfo);
10956 return VOS_STATUS_E_NOMEM;
10957 }
Kumar Anandaca924e2013-07-22 14:35:34 -070010958
10959 vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
10960
Jeff Johnson295189b2012-06-20 16:38:30 -070010961 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
10962 pWowlEnterParams->magicPtrn,
10963 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010964 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
10965 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070010966 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
10967 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070010968 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
10969 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070010970 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
10971 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070010972 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
10973 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070010974 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
10975 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070010976 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
10977 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -070010978 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
10979 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -070010980#ifdef WLAN_WAKEUP_EVENTS
10981 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
10982 pWowlEnterParams->ucWoWEAPIDRequestEnable;
10983
10984 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
10985 pWowlEnterParams->ucWoWEAPOL4WayEnable;
10986
10987 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
10988 pWowlEnterParams->ucWowNetScanOffloadMatch;
10989
10990 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
10991 pWowlEnterParams->ucWowGTKRekeyError;
10992
10993 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
10994 pWowlEnterParams->ucWoWBSSConnLoss;
10995#endif // WLAN_WAKEUP_EVENTS
10996
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010997 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
10998 pWowlEnterParams->bssIdx;
10999
Yue Ma7f44bbe2013-04-12 11:47:39 -070011000 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
11001 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011002 /* Store param pointer as passed in by caller */
11003 /* store Params pass it to WDI */
11004 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
11005 pWdaParams->pWdaContext = pWDA;
11006 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070011007 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011008 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011009 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011010 {
11011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11012 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011013 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011014 vos_mem_free(pWdaParams->wdaMsgParam) ;
11015 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11016 vos_mem_free(pWdaParams) ;
11017 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011018 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011019
11020}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011021/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011022 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011023 *
11024 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011025void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011026{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011027 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011028 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011029 tSirHalWowlExitParams *pWowlExitParams;
11030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011031 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011032 if(NULL == pWdaParams)
11033 {
11034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011035 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011036 VOS_ASSERT(0) ;
11037 return ;
11038 }
11039 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011040 if (NULL == pWDA)
11041 {
11042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11043 "%s:pWDA is NULL", __func__);
11044 VOS_ASSERT(0);
11045 return ;
11046 }
11047
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011048 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
11049
11050 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070011051 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011052
11053 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11054 vos_mem_free(pWdaParams) ;
11055
Jeff Johnson295189b2012-06-20 16:38:30 -070011056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011057 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011058 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011059 return ;
11060}
Jeff Johnson295189b2012-06-20 16:38:30 -070011061/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011062 * FUNCTION: WDA_WowlExitReqCallback
11063 * Free memory and send WOWL Exit RSP back to PE.
11064 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
11065 */
11066void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
11067{
11068 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011069 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011070 tSirHalWowlExitParams *pWowlExitParams;
11071
11072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11073 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11074
11075 if(NULL == pWdaParams)
11076 {
11077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11078 "%s: pWdaParams received NULL", __func__);
11079 VOS_ASSERT(0);
11080 return;
11081 }
11082
11083 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011084 if (NULL == pWDA)
11085 {
11086 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11087 "%s:pWDA is NULL", __func__);
11088 VOS_ASSERT(0);
11089 return ;
11090 }
11091
Yue Ma7f44bbe2013-04-12 11:47:39 -070011092 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
11093 pWowlExitParams->status = wdiStatus;
11094
11095 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11096 {
11097 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11098 vos_mem_free(pWdaParams);
11099 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
11100 }
11101
11102 return;
11103}
11104/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011105 * FUNCTION: WDA_ProcessWowlExitReq
11106 * Request to WDI to add WOWL Bcast pattern
11107 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011108VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
11109 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070011110{
11111 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011112 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011113 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
11114 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
11115 sizeof(WDI_WowlExitReqParamsType)) ;
11116 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011117 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011118 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011119 if(NULL == wdiWowlExitInfo)
11120 {
11121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011122 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011123 VOS_ASSERT(0);
11124 return VOS_STATUS_E_NOMEM;
11125 }
11126 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11127 if(NULL == pWdaParams)
11128 {
11129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011130 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011131 VOS_ASSERT(0);
11132 vos_mem_free(wdiWowlExitInfo);
11133 return VOS_STATUS_E_NOMEM;
11134 }
11135
11136 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
11137 pWowlExitParams->bssIdx;
11138
Yue Ma7f44bbe2013-04-12 11:47:39 -070011139 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
11140 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011141
11142 /* Store param pointer as passed in by caller */
11143 /* store Params pass it to WDI */
11144 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
11145 pWdaParams->pWdaContext = pWDA;
11146 pWdaParams->wdaMsgParam = pWowlExitParams;
11147
11148 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011149 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011150
Jeff Johnson43971f52012-07-17 12:26:56 -070011151 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011152 {
11153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11154 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011155 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011156 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11157 vos_mem_free(pWdaParams->wdaMsgParam);
11158 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011159 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011160 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011161}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011162/*
11163 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
11164 * Request to WDI to determine whether a given station is capable of
11165 * using HW-based frame translation
11166 */
11167v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
11168 tANI_U8 staIdx)
11169{
11170 return WDI_IsHwFrameTxTranslationCapable(staIdx);
11171}
Katya Nigam6201c3e2014-05-27 17:51:42 +053011172
11173/*
11174 * FUNCTION: WDA_IsSelfSTA
11175 * Request to WDI to determine whether a given STAID is self station
11176 * index.
11177 */
11178v_BOOL_t WDA_IsSelfSTA(v_PVOID_t pVosContext, tANI_U8 ucSTAIdx)
11179{
11180
11181 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
11182
Girish Gowli05cf44e2014-06-12 21:53:37 +053011183 if (NULL != pWDA)
11184 return WDI_IsSelfSTA(pWDA->pWdiContext,ucSTAIdx);
11185 else
11186 return VOS_TRUE;
Katya Nigam6201c3e2014-05-27 17:51:42 +053011187}
Jeff Johnson295189b2012-06-20 16:38:30 -070011188/*
11189 * FUNCTION: WDA_NvDownloadReqCallback
11190 * send NV Download RSP back to PE
11191 */
11192void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
11193 void* pUserData)
11194{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011195
11196 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011197 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011198
Jeff Johnson295189b2012-06-20 16:38:30 -070011199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011200 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011201
11202 if(NULL == pWdaParams)
11203 {
11204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011205 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011206 VOS_ASSERT(0) ;
11207 return ;
11208 }
11209
11210 pWDA = pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011211 if (NULL == pWDA)
11212 {
11213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11214 "%s:pWDA is NULL", __func__);
11215 VOS_ASSERT(0);
11216 return ;
11217 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011218
Jeff Johnson295189b2012-06-20 16:38:30 -070011219 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011220 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11221 vos_mem_free(pWdaParams);
11222
Jeff Johnson295189b2012-06-20 16:38:30 -070011223 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070011224 return ;
11225}
Jeff Johnson295189b2012-06-20 16:38:30 -070011226/*
11227 * FUNCTION: WDA_ProcessNvDownloadReq
11228 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
11229 */
11230VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
11231{
11232 /* Initialize the local Variables*/
11233 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
11234 v_VOID_t *pNvBuffer=NULL;
11235 v_SIZE_t bufferSize = 0;
11236 WDI_Status status = WDI_STATUS_E_FAILURE;
11237 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011238 tWDA_ReqParams *pWdaParams ;
11239
Jeff Johnson295189b2012-06-20 16:38:30 -070011240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011241 "------> %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011242 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070011243 {
11244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011245 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011246 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070011247 return VOS_STATUS_E_FAILURE;
11248 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011249
Jeff Johnson295189b2012-06-20 16:38:30 -070011250 /* Get the NV structure base address and size from VOS */
Prasanna Kumarf6c94ae2013-04-11 20:05:21 -070011251 vos_nv_getNVEncodedBuffer(&pNvBuffer,&bufferSize);
11252
Jeff Johnson295189b2012-06-20 16:38:30 -070011253 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
11254 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011255 if(NULL == wdiNvDownloadReqParam)
11256 {
11257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011258 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011259 VOS_ASSERT(0);
11260 return VOS_STATUS_E_NOMEM;
11261 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011262 /* Copy Params to wdiNvDownloadReqParam*/
11263 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
11264 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011265
11266 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11267 if(NULL == pWdaParams)
11268 {
11269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011270 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011271 VOS_ASSERT(0);
11272 vos_mem_free(wdiNvDownloadReqParam);
11273 return VOS_STATUS_E_NOMEM;
11274 }
11275
Jeff Johnson295189b2012-06-20 16:38:30 -070011276 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011277 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
11278 pWdaParams->wdaMsgParam = NULL;
11279 pWdaParams->pWdaContext = pWDA;
11280
11281
Jeff Johnson295189b2012-06-20 16:38:30 -070011282 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011283
Jeff Johnson295189b2012-06-20 16:38:30 -070011284 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011285 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
11286
Jeff Johnson295189b2012-06-20 16:38:30 -070011287 if(IS_WDI_STATUS_FAILURE(status))
11288 {
11289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11290 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011291 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11292 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011293 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011294 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011295}
11296/*
11297 * FUNCTION: WDA_FlushAcReqCallback
11298 * send Flush AC RSP back to TL
11299 */
11300void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
11301{
11302 vos_msg_t wdaMsg = {0} ;
11303 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11304 tFlushACReq *pFlushACReqParams;
11305 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011307 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011308 if(NULL == pWdaParams)
11309 {
11310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011311 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011312 VOS_ASSERT(0) ;
11313 return ;
11314 }
11315
11316 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
11317 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
11318 if(NULL == pFlushACRspParams)
11319 {
11320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011321 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011322 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070011323 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011324 return ;
11325 }
11326 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
11327 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
11328 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
11329 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
11330 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070011331 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011332 vos_mem_free(pWdaParams->wdaMsgParam) ;
11333 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11334 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011335 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
11336 wdaMsg.bodyptr = (void *)pFlushACRspParams;
11337 // POST message to TL
11338 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
11339
Jeff Johnson295189b2012-06-20 16:38:30 -070011340 return ;
11341}
Jeff Johnson295189b2012-06-20 16:38:30 -070011342/*
11343 * FUNCTION: WDA_ProcessFlushAcReq
11344 * Request to WDI to Update the DELBA REQ params.
11345 */
11346VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
11347 tFlushACReq *pFlushAcReqParams)
11348{
11349 WDI_Status status = WDI_STATUS_SUCCESS ;
11350 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
11351 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
11352 sizeof(WDI_FlushAcReqParamsType)) ;
11353 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011354 if(NULL == wdiFlushAcReqParam)
11355 {
11356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011357 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011358 VOS_ASSERT(0);
11359 return VOS_STATUS_E_NOMEM;
11360 }
11361 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11362 if(NULL == pWdaParams)
11363 {
11364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011365 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011366 VOS_ASSERT(0);
11367 vos_mem_free(wdiFlushAcReqParam);
11368 return VOS_STATUS_E_NOMEM;
11369 }
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 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
11373 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
11374 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
11375 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -070011376 /* Store Flush AC pointer, as this will be used for response */
11377 /* store Params pass it to WDI */
11378 pWdaParams->pWdaContext = pWDA;
11379 pWdaParams->wdaMsgParam = pFlushAcReqParams;
11380 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011381 status = WDI_FlushAcReq(wdiFlushAcReqParam,
11382 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011383 if(IS_WDI_STATUS_FAILURE(status))
11384 {
11385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11386 "Failure in Flush AC REQ Params WDI API, free all the memory " );
11387 vos_mem_free(pWdaParams->wdaMsgParam) ;
11388 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11389 vos_mem_free(pWdaParams) ;
11390 //TODO: respond to TL with failure
11391 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011392 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011393}
Jeff Johnson295189b2012-06-20 16:38:30 -070011394/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011395 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011396 *
11397 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011398void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011399{
11400 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011401 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070011402 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011403
11404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011405 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011406 if(NULL == pWdaParams)
11407 {
11408 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011409 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011410 VOS_ASSERT(0) ;
11411 return ;
11412 }
11413 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011414 if (NULL == pWDA)
11415 {
11416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11417 "%s:pWDA is NULL", __func__);
Hema Aparna Medicharla749399f2015-03-10 13:02:04 +053011418 vos_mem_free(pWdaParams->wdaMsgParam) ;
11419 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11420 vos_mem_free(pWdaParams) ;
11421
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011422 VOS_ASSERT(0);
11423 return ;
11424 }
11425
Jeff Johnson295189b2012-06-20 16:38:30 -070011426 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
11427 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
11428 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
11429 {
11430 pWDA->wdaAmpSessionOn = VOS_FALSE;
11431 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011432 vos_mem_free(pWdaParams->wdaMsgParam) ;
11433 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11434 vos_mem_free(pWdaParams) ;
11435 /*
11436 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
11437 * param here
11438 */
Jeff Johnson295189b2012-06-20 16:38:30 -070011439 return ;
11440}
Yue Ma7f44bbe2013-04-12 11:47:39 -070011441/*
11442 * FUNCTION: WDA_BtAmpEventReqCallback
11443 * Free memory.
11444 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
11445 */
11446void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
11447{
11448 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011449 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011450 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011451
Yue Ma7f44bbe2013-04-12 11:47:39 -070011452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11453 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11454
11455 if(NULL == pWdaParams)
11456 {
11457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11458 "%s: pWdaParams received NULL", __func__);
11459 VOS_ASSERT(0);
11460 return;
11461 }
11462
11463 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011464 if (NULL == pWDA)
11465 {
11466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11467 "%s:pWDA is NULL", __func__);
11468 VOS_ASSERT(0);
11469 return ;
11470 }
11471
Yue Ma7f44bbe2013-04-12 11:47:39 -070011472 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
11473
11474 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
11475 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
11476 {
11477 pWDA->wdaAmpSessionOn = VOS_FALSE;
11478 }
11479
11480 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11481 {
11482 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11483 vos_mem_free(pWdaParams->wdaMsgParam);
11484 vos_mem_free(pWdaParams);
11485 }
11486
11487 return;
11488}
Jeff Johnson295189b2012-06-20 16:38:30 -070011489/*
11490 * FUNCTION: WDA_ProcessBtAmpEventReq
11491 * Request to WDI to Update with BT AMP events.
11492 */
11493VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
11494 tSmeBtAmpEvent *pBtAmpEventParams)
11495{
11496 WDI_Status status = WDI_STATUS_SUCCESS ;
11497 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
11498 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
11499 sizeof(WDI_BtAmpEventParamsType)) ;
11500 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011502 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011503 if(NULL == wdiBtAmpEventParam)
11504 {
11505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011506 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011507 VOS_ASSERT(0);
11508 return VOS_STATUS_E_NOMEM;
11509 }
11510 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11511 if(NULL == pWdaParams)
11512 {
11513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011514 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011515 VOS_ASSERT(0);
11516 vos_mem_free(wdiBtAmpEventParam);
11517 return VOS_STATUS_E_NOMEM;
11518 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011519 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
11520 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011521 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
11522 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011523 /* Store BT AMP event pointer, as this will be used for response */
11524 /* store Params pass it to WDI */
11525 pWdaParams->pWdaContext = pWDA;
11526 pWdaParams->wdaMsgParam = pBtAmpEventParams;
11527 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011528 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011529 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011530 if(IS_WDI_STATUS_FAILURE(status))
11531 {
11532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11533 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
11534 vos_mem_free(pWdaParams->wdaMsgParam) ;
11535 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11536 vos_mem_free(pWdaParams) ;
11537 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011538 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
11539 {
11540 pWDA->wdaAmpSessionOn = VOS_TRUE;
11541 }
11542 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011543}
11544
Jeff Johnson295189b2012-06-20 16:38:30 -070011545/*
11546 * FUNCTION: WDA_FTMCommandReqCallback
11547 * Handle FTM CMD response came from HAL
11548 * Route responce to HDD FTM
11549 */
11550void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
11551 void *usrData)
11552{
11553 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011554 if((NULL == pWDA) || (NULL == ftmCmdRspData))
11555 {
11556 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053011557 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070011558 return;
11559 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011560 /* Release Current FTM Command Request */
11561 vos_mem_free(pWDA->wdaFTMCmdReq);
11562 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011563 /* Post FTM Responce to HDD FTM */
11564 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070011565 return;
11566}
Jeff Johnson295189b2012-06-20 16:38:30 -070011567/*
11568 * FUNCTION: WDA_ProcessFTMCommand
11569 * Send FTM command to WDI
11570 */
11571VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
11572 tPttMsgbuffer *pPTTFtmCmd)
11573{
11574 WDI_Status status = WDI_STATUS_SUCCESS;
11575 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011576 ftmCMDReq = (WDI_FTMCommandReqType *)
11577 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
11578 if(NULL == ftmCMDReq)
11579 {
11580 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11581 "WDA FTM Command buffer alloc fail");
11582 return VOS_STATUS_E_NOMEM;
11583 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011584 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
11585 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -070011586 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -070011587 /* Send command to WDI */
11588 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070011589 return status;
11590}
Jeff Johnsone7245742012-09-05 17:12:55 -070011591#ifdef FEATURE_OEM_DATA_SUPPORT
11592/*
11593 * FUNCTION: WDA_StartOemDataReqCallback
11594 *
11595 */
11596void WDA_StartOemDataReqCallback(
11597 WDI_oemDataRspParamsType *wdiOemDataRspParams,
11598 void* pUserData)
11599{
11600 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011601 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011602 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070011603 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011604
Jeff Johnsone7245742012-09-05 17:12:55 -070011605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011606 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011607
11608 if(NULL == pWdaParams)
11609 {
11610 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011611 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011612 VOS_ASSERT(0) ;
11613 return ;
11614 }
11615 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
11616
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011617 if (NULL == pWDA)
Jeff Johnsone7245742012-09-05 17:12:55 -070011618 {
11619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011620 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011621 VOS_ASSERT(0);
11622 return ;
11623 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011624
Jeff Johnsone7245742012-09-05 17:12:55 -070011625 /*
11626 * Allocate memory for response params sent to PE
11627 */
11628 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
11629
11630 // Check if memory is allocated for OemdataMeasRsp Params.
11631 if(NULL == pOemDataRspParams)
11632 {
11633 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11634 "OEM DATA WDA callback alloc fail");
11635 VOS_ASSERT(0) ;
11636 return;
11637 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011638
Jeff Johnsone7245742012-09-05 17:12:55 -070011639 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011640 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11641 vos_mem_free(pWdaParams->wdaMsgParam);
11642 vos_mem_free(pWdaParams) ;
11643
Jeff Johnsone7245742012-09-05 17:12:55 -070011644 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080011645 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -070011646 * Also, here success always means that we have atleast one BSSID.
11647 */
11648 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
11649
11650 //enable Tx
11651 status = WDA_ResumeDataTx(pWDA);
11652 if(status != VOS_STATUS_SUCCESS)
11653 {
11654 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
11655 }
11656 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
11657 return ;
11658}
11659/*
11660 * FUNCTION: WDA_ProcessStartOemDataReq
11661 * Send Start Oem Data Req to WDI
11662 */
11663VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
11664 tStartOemDataReq *pOemDataReqParams)
11665{
11666 WDI_Status status = WDI_STATUS_SUCCESS;
11667 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011668 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -070011669
11670 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
11671
11672 if(NULL == wdiOemDataReqParams)
11673 {
11674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011675 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011676 VOS_ASSERT(0);
11677 return VOS_STATUS_E_NOMEM;
11678 }
11679
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011680 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
11681 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
11682 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
11683 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -070011684
11685 wdiOemDataReqParams->wdiReqStatusCB = NULL;
11686
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011687 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11688 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -070011689 {
11690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011691 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011692 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011693 vos_mem_free(pOemDataReqParams);
11694 VOS_ASSERT(0);
11695 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -070011696 }
Jeff Johnsone7245742012-09-05 17:12:55 -070011697
Bernald44a1ae2013-01-09 08:30:39 -080011698 pWdaParams->pWdaContext = (void*)pWDA;
11699 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
11700 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011701
11702 status = WDI_StartOemDataReq(wdiOemDataReqParams,
11703 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070011704
11705 if(IS_WDI_STATUS_FAILURE(status))
11706 {
11707 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11708 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011709 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11710 vos_mem_free(pWdaParams->wdaMsgParam);
11711 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070011712 }
11713 return CONVERT_WDI2VOS_STATUS(status) ;
11714}
11715#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070011716/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011717 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011718 *
11719 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011720void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011721{
11722 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011724 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011725 if(NULL == pWdaParams)
11726 {
11727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011728 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011729 VOS_ASSERT(0) ;
11730 return ;
11731 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011732
11733 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11734 vos_mem_free(pWdaParams->wdaMsgParam);
11735 vos_mem_free(pWdaParams);
11736
11737 return ;
11738}
11739/*
11740 * FUNCTION: WDA_SetTxPerTrackingReqCallback
11741 * Free memory.
11742 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
11743 */
11744void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
11745{
11746 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11747
11748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11749 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11750
11751 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070011752 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070011753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11754 "%s: pWdaParams received NULL", __func__);
11755 VOS_ASSERT(0);
11756 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070011757 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011758
11759 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011760 {
11761 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -070011762 vos_mem_free(pWdaParams->wdaMsgParam);
11763 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011764 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011765
11766 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070011767}
Jeff Johnson295189b2012-06-20 16:38:30 -070011768#ifdef WLAN_FEATURE_GTK_OFFLOAD
11769/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011770 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011771 *
11772 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011773void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011774 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011775{
11776 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11777
11778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011779 "<------ %s " ,__func__);
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080011780 if(NULL == pWdaParams)
11781 {
11782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11783 "%s: pWdaParams received NULL", __func__);
11784 VOS_ASSERT(0);
11785 return;
11786 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011787
Jeff Johnson295189b2012-06-20 16:38:30 -070011788 vos_mem_free(pWdaParams->wdaMsgParam) ;
11789 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11790 vos_mem_free(pWdaParams) ;
11791
11792 //print a msg, nothing else to do
11793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011794 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011795
11796 return ;
11797}
Yue Ma7f44bbe2013-04-12 11:47:39 -070011798/*
11799 * FUNCTION: WDA_GTKOffloadReqCallback
11800 * Free memory.
11801 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
11802 */
11803void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
11804{
11805 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011806
Yue Ma7f44bbe2013-04-12 11:47:39 -070011807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11808 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11809
11810 if(NULL == pWdaParams)
11811 {
11812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11813 "%s: pWdaParams received NULL", __func__);
11814 VOS_ASSERT(0);
11815 return;
11816 }
11817
11818 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11819 {
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053011820 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
11821 sizeof(WDI_GtkOffloadReqMsg));
11822 vos_mem_zero(pWdaParams->wdaMsgParam,
11823 sizeof(tSirGtkOffloadParams));
Yue Ma7f44bbe2013-04-12 11:47:39 -070011824 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11825 vos_mem_free(pWdaParams->wdaMsgParam);
11826 vos_mem_free(pWdaParams);
11827 }
11828
11829 return;
11830}
Jeff Johnson295189b2012-06-20 16:38:30 -070011831/*
11832 * FUNCTION: WDA_ProcessGTKOffloadReq
11833 * Request to WDI to set the filter to minimize unnecessary host wakeup due
11834 * to broadcast traffic (sta mode).
11835 */
11836VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
11837 tpSirGtkOffloadParams pGtkOffloadParams)
11838{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011839 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011840 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
11841 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
11842 sizeof(WDI_GtkOffloadReqMsg)) ;
11843 tWDA_ReqParams *pWdaParams ;
11844
11845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011846 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011847
11848 if(NULL == wdiGtkOffloadReqMsg)
11849 {
11850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011851 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011852 VOS_ASSERT(0);
11853 return VOS_STATUS_E_NOMEM;
11854 }
11855
11856 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11857 if(NULL == pWdaParams)
11858 {
11859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011860 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011861 VOS_ASSERT(0);
11862 vos_mem_free(wdiGtkOffloadReqMsg);
11863 return VOS_STATUS_E_NOMEM;
11864 }
11865
11866 //
11867 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
11868 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011869
11870 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011871 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011872
Jeff Johnson295189b2012-06-20 16:38:30 -070011873 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
11874 // Copy KCK
11875 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
11876 // Copy KEK
11877 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
11878 // Copy KeyReplayCounter
11879 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
11880 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
11881
Yue Ma7f44bbe2013-04-12 11:47:39 -070011882 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
11883 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011884
Jeff Johnson295189b2012-06-20 16:38:30 -070011885
11886 /* Store Params pass it to WDI */
11887 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
11888 pWdaParams->pWdaContext = pWDA;
11889 /* Store param pointer as passed in by caller */
11890 pWdaParams->wdaMsgParam = pGtkOffloadParams;
11891
Yue Ma7f44bbe2013-04-12 11:47:39 -070011892 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011893
11894 if(IS_WDI_STATUS_FAILURE(status))
11895 {
11896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11897 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053011898 vos_mem_zero(wdiGtkOffloadReqMsg, sizeof(WDI_GtkOffloadReqMsg));
11899 vos_mem_zero(pGtkOffloadParams, sizeof(tSirGtkOffloadParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070011900 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11901 vos_mem_free(pWdaParams->wdaMsgParam);
11902 vos_mem_free(pWdaParams);
11903 }
11904
11905 return CONVERT_WDI2VOS_STATUS(status) ;
11906}
11907
11908/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011909 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011910 *
11911 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011912void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011913 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011914{
11915 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11916 tWDA_CbContext *pWDA;
11917 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Nirav Shah374de6e2014-02-13 16:40:01 +053011918 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070011919 vos_msg_t vosMsg;
11920
11921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011922 "<------ %s " ,__func__);
Nirav Shah374de6e2014-02-13 16:40:01 +053011923
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080011924 if(NULL == pWdaParams)
11925 {
11926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11927 "%s: pWdaParams received NULL", __func__);
11928 VOS_ASSERT(0);
11929 return;
11930 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011931
Nirav Shah374de6e2014-02-13 16:40:01 +053011932 pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams));
11933 if(NULL == pGtkOffloadGetInfoRsp)
11934 {
11935 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11936 "%s: vos_mem_malloc failed ", __func__);
11937 VOS_ASSERT(0);
11938 return;
11939 }
11940
Jeff Johnson295189b2012-06-20 16:38:30 -070011941 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
11942 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
11943
11944 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
11945 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
11946
11947 /* Message Header */
11948 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
Kiran Kumar Lokerefdf42412013-07-17 17:40:58 -070011949 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011950
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011951 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
11952 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
11953 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
11954 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
11955 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070011956
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011957 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
11958 pwdiGtkOffloadGetInfoRsparams->bssId,
11959 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011960 /* VOS message wrapper */
11961 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
11962 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
11963 vosMsg.bodyval = 0;
11964
11965 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11966 {
11967 /* free the mem and return */
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053011968 vos_mem_zero(pGtkOffloadGetInfoRsp,
11969 sizeof(tSirGtkOffloadGetInfoRspParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070011970 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
11971 }
11972
11973 vos_mem_free(pWdaParams->wdaMsgParam) ;
11974 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11975 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011976
11977 return;
11978}
11979/*
11980 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
11981 * Free memory and send RSP back to SME.
11982 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
11983 */
11984void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
11985{
11986 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11987 vos_msg_t vosMsg;
11988
11989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11990 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11991
11992 if(NULL == pWdaParams)
11993 {
11994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11995 "%s: pWdaParams received NULL", __func__);
11996 VOS_ASSERT(0);
11997 return;
11998 }
11999
12000 /* VOS message wrapper */
12001 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
12002 vosMsg.bodyptr = NULL;
12003 vosMsg.bodyval = 0;
12004
12005 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12006 {
12007 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12008 vos_mem_free(pWdaParams->wdaMsgParam);
12009 vos_mem_free(pWdaParams);
12010 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
12011 }
12012
12013 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070012014}
12015#endif
12016
12017/*
12018 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
12019 * Request to WDI to set Tx Per Tracking configurations
12020 */
12021VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
12022{
12023 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070012024 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012025 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
12026 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
12027 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
12028 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012030 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012031 if(NULL == pwdiSetTxPerTrackingReqParams)
12032 {
12033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012034 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012035 vos_mem_free(pTxPerTrackingParams);
12036 VOS_ASSERT(0);
12037 return VOS_STATUS_E_NOMEM;
12038 }
12039 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12040 if(NULL == pWdaParams)
12041 {
12042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012043 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012044 vos_mem_free(pwdiSetTxPerTrackingReqParams);
12045 vos_mem_free(pTxPerTrackingParams);
12046 VOS_ASSERT(0);
12047 return VOS_STATUS_E_NOMEM;
12048 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012049 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
12050 pTxPerTrackingParams->ucTxPerTrackingEnable;
12051 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
12052 pTxPerTrackingParams->ucTxPerTrackingPeriod;
12053 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
12054 pTxPerTrackingParams->ucTxPerTrackingRatio;
12055 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
12056 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012057 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
12058 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012059 /* Store param pointer as passed in by caller */
12060 /* store Params pass it to WDI
12061 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
12062 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
12063 pWdaParams->pWdaContext = pWDA;
12064 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070012065 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012066 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070012067 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070012068 {
12069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12070 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070012071 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070012072 vos_mem_free(pWdaParams->wdaMsgParam) ;
12073 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12074 vos_mem_free(pWdaParams) ;
12075 }
Jeff Johnson43971f52012-07-17 12:26:56 -070012076 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012077
12078}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012079/*
12080 * FUNCTION: WDA_HALDumpCmdCallback
12081 * Send the VOS complete .
12082 */
12083void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
12084 void* pUserData)
12085{
12086 tANI_U8 *buffer = NULL;
12087 tWDA_CbContext *pWDA = NULL;
Siddharth Bhal68115602015-01-18 20:44:55 +053012088 tWDA_HalDumpReqParams *pWdaParams = (tWDA_HalDumpReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012089 if(NULL == pWdaParams)
12090 {
12091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012092 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012093 VOS_ASSERT(0) ;
12094 return ;
12095 }
12096
12097 pWDA = pWdaParams->pWdaContext;
12098 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012099 if(wdiRspParams->usBufferLen > 0)
12100 {
12101 /*Copy the Resp data to UMAC supplied buffer*/
12102 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
12103 }
Siddharth Bhal68115602015-01-18 20:44:55 +053012104
12105 if (!pWdaParams->wdaHALDumpAsync)
12106 {/* Indicate VOSS about the start complete */
12107 vos_WDAComplete_cback(pWDA->pVosContext);
12108 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012109 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12110 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012111 return ;
12112}
12113
Jeff Johnson295189b2012-06-20 16:38:30 -070012114/*
12115 * FUNCTION: WDA_ProcessHALDumpCmdReq
12116 * Send Dump command to WDI
12117 */
12118VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
12119 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
Siddharth Bhal68115602015-01-18 20:44:55 +053012120 tANI_U32 arg4, tANI_U8 *pBuffer, wpt_boolean async)
Jeff Johnson295189b2012-06-20 16:38:30 -070012121{
12122 WDI_Status status = WDI_STATUS_SUCCESS;
12123 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
12124 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
Siddharth Bhal68115602015-01-18 20:44:55 +053012125 tWDA_HalDumpReqParams *pWdaParams ;
12126
Jeff Johnson295189b2012-06-20 16:38:30 -070012127 pVosContextType pVosContext = NULL;
12128 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070012129 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
12130 (void *)pMac);
Katya Nigame4bafe02014-02-28 15:37:57 +053012131 if(pVosContext)
12132 {
12133 if (pVosContext->isLogpInProgress)
12134 {
12135 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
12136 "%s:LOGP in Progress. Ignore!!!", __func__);
12137 return VOS_STATUS_E_BUSY;
12138 }
12139 }
12140 else
12141 {
12142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12143 "%s: VOS Context Null", __func__);
12144 return VOS_STATUS_E_RESOURCES;
12145 }
12146
Siddharth Bhal68115602015-01-18 20:44:55 +053012147 if (NULL == pVosContext->pWDAContext)
12148 {
12149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12150 "%s: WDA Context Null", __func__);
12151 return VOS_STATUS_E_RESOURCES;
12152 }
12153 pWdaParams = (tWDA_HalDumpReqParams *)vos_mem_malloc(sizeof(tWDA_HalDumpReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012154 if(NULL == pWdaParams)
12155 {
12156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012157 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012158 return VOS_STATUS_E_NOMEM;
12159 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012160 /* Allocate memory WDI request structure*/
12161 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
12162 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
12163 if(NULL == wdiHALDumpCmdReqParam)
12164 {
12165 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12166 "WDA HAL DUMP Command buffer alloc fail");
12167 vos_mem_free(pWdaParams);
12168 return WDI_STATUS_E_FAILURE;
12169 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012170 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070012171 /* Extract the arguments */
12172 wdiHalDumpCmdInfo->command = cmd;
12173 wdiHalDumpCmdInfo->argument1 = arg1;
12174 wdiHalDumpCmdInfo->argument2 = arg2;
12175 wdiHalDumpCmdInfo->argument3 = arg3;
12176 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070012177 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012178 pWdaParams->pWdaContext = pVosContext->pWDAContext;
Siddharth Bhal68115602015-01-18 20:44:55 +053012179 pWdaParams->wdaHALDumpAsync = async;
Jeff Johnson295189b2012-06-20 16:38:30 -070012180
12181 /* Response message will be passed through the buffer */
12182 pWdaParams->wdaMsgParam = (void *)pBuffer;
12183
12184 /* store Params pass it to WDI */
12185 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012186 /* Send command to WDI */
Siddharth Bhal68115602015-01-18 20:44:55 +053012187 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback,
12188 pWdaParams);
12189 /* For Sync event only wait for rsp until completion of wdaCompleteEvent*/
12190 if (!async)
Jeff Johnson295189b2012-06-20 16:38:30 -070012191 {
Siddharth Bhal68115602015-01-18 20:44:55 +053012192 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent),
12193 WDA_DUMPCMD_WAIT_TIMEOUT );
12194 if ( vStatus != VOS_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -070012195 {
Siddharth Bhal68115602015-01-18 20:44:55 +053012196 if ( vStatus == VOS_STATUS_E_TIMEOUT )
12197 {
12198 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
12199 "%s: Timeout occurred before WDA_HALDUMP complete",__func__);
12200 }
12201 else
12202 {
12203 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
12204 "%s: WDA_HALDUMP reporting other error",__func__);
12205 }
12206 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070012207 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012208 }
12209 return status;
12210}
Jeff Johnson295189b2012-06-20 16:38:30 -070012211#ifdef WLAN_FEATURE_GTK_OFFLOAD
12212/*
12213 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
12214 * Request to WDI to get GTK Offload Information
12215 */
12216VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
12217 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
12218{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053012219 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012220 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
12221 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
12222 tWDA_ReqParams *pWdaParams ;
12223
12224 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
12225 {
12226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012227 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012228 VOS_ASSERT(0);
12229 return VOS_STATUS_E_NOMEM;
12230 }
12231
12232 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12233 if(NULL == pWdaParams)
12234 {
12235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012236 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012237 VOS_ASSERT(0);
12238 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
12239 return VOS_STATUS_E_NOMEM;
12240 }
12241
Yue Ma7f44bbe2013-04-12 11:47:39 -070012242 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
12243 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012244
Jeff Johnson295189b2012-06-20 16:38:30 -070012245 /* Store Params pass it to WDI */
12246 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
12247 pWdaParams->pWdaContext = pWDA;
12248 /* Store param pointer as passed in by caller */
12249 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
12250
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012251 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053012252 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012253
Yue Ma7f44bbe2013-04-12 11:47:39 -070012254 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012255
12256 if(IS_WDI_STATUS_FAILURE(status))
12257 {
12258 /* failure returned by WDI API */
12259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12260 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
12261 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12262 vos_mem_free(pWdaParams) ;
12263 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
12264 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
12265 }
12266
12267 return CONVERT_WDI2VOS_STATUS(status) ;
12268}
12269#endif // WLAN_FEATURE_GTK_OFFLOAD
12270
12271/*
Yue Mab9c86f42013-08-14 15:59:08 -070012272 * FUNCTION: WDA_ProcessAddPeriodicTxPtrnInd
12273 *
12274 */
12275VOS_STATUS WDA_ProcessAddPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
12276 tSirAddPeriodicTxPtrn *pAddPeriodicTxPtrnParams)
12277{
12278 WDI_Status wdiStatus;
12279 WDI_AddPeriodicTxPtrnParamsType *addPeriodicTxPtrnParams;
12280
12281 addPeriodicTxPtrnParams =
12282 vos_mem_malloc(sizeof(WDI_AddPeriodicTxPtrnParamsType));
12283
12284 if (NULL == addPeriodicTxPtrnParams)
12285 {
12286 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12287 "%s: Not able to allocate memory for addPeriodicTxPtrnParams!",
12288 __func__);
12289
12290 return VOS_STATUS_E_NOMEM;
12291 }
12292
12293 vos_mem_copy(&(addPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams),
12294 pAddPeriodicTxPtrnParams, sizeof(tSirAddPeriodicTxPtrn));
12295
12296 addPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
12297 addPeriodicTxPtrnParams->pUserData = pWDA;
12298
12299 wdiStatus = WDI_AddPeriodicTxPtrnInd(addPeriodicTxPtrnParams);
12300
12301 if (WDI_STATUS_PENDING == wdiStatus)
12302 {
12303 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12304 "Pending received for %s:%d", __func__, __LINE__ );
12305 }
12306 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12307 {
12308 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12309 "Failure in %s:%d", __func__, __LINE__ );
12310 }
12311
12312 vos_mem_free(addPeriodicTxPtrnParams);
12313
12314 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12315}
12316
12317/*
12318 * FUNCTION: WDA_ProcessDelPeriodicTxPtrnInd
12319 *
12320 */
12321VOS_STATUS WDA_ProcessDelPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
12322 tSirDelPeriodicTxPtrn *pDelPeriodicTxPtrnParams)
12323{
12324 WDI_Status wdiStatus;
12325 WDI_DelPeriodicTxPtrnParamsType *delPeriodicTxPtrnParams;
12326
12327 delPeriodicTxPtrnParams =
12328 vos_mem_malloc(sizeof(WDI_DelPeriodicTxPtrnParamsType));
12329
12330 if (NULL == delPeriodicTxPtrnParams)
12331 {
12332 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12333 "%s: Not able to allocate memory for delPeriodicTxPtrnParams!",
12334 __func__);
12335
12336 return VOS_STATUS_E_NOMEM;
12337 }
12338
12339 vos_mem_copy(&(delPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams),
12340 pDelPeriodicTxPtrnParams, sizeof(tSirDelPeriodicTxPtrn));
12341
12342 delPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
12343 delPeriodicTxPtrnParams->pUserData = pWDA;
12344
12345 wdiStatus = WDI_DelPeriodicTxPtrnInd(delPeriodicTxPtrnParams);
12346
12347 if (WDI_STATUS_PENDING == wdiStatus)
12348 {
12349 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12350 "Pending received for %s:%d", __func__, __LINE__ );
12351 }
12352 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12353 {
12354 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12355 "Failure in %s:%d", __func__, __LINE__ );
12356 }
12357
12358 vos_mem_free(delPeriodicTxPtrnParams);
12359
12360 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12361}
12362
Rajeev79dbe4c2013-10-05 11:03:42 +053012363#ifdef FEATURE_WLAN_BATCH_SCAN
12364/*
12365 * FUNCTION: WDA_ProcessStopBatchScanInd
12366 *
12367 * DESCRIPTION: This function sends stop batch scan inidcation message to WDI
12368 *
12369 * PARAM:
12370 * pWDA: pointer to WDA context
12371 * pReq: pointer to stop batch scan request
12372 */
12373VOS_STATUS WDA_ProcessStopBatchScanInd(tWDA_CbContext *pWDA,
12374 tSirStopBatchScanInd *pReq)
12375{
12376 WDI_Status wdiStatus;
12377 WDI_StopBatchScanIndType wdiReq;
12378
12379 wdiReq.param = pReq->param;
12380
12381 wdiStatus = WDI_StopBatchScanInd(&wdiReq);
12382
12383 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12384 {
12385 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12386 "Stop batch scan ind failed %s:%d", __func__, wdiStatus);
12387 }
12388
12389 vos_mem_free(pReq);
12390
12391 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12392}
12393/*==========================================================================
12394 FUNCTION WDA_ProcessTriggerBatchScanResultInd
12395
12396 DESCRIPTION
12397 API to pull batch scan result from FW
12398
12399 PARAMETERS
12400 pWDA: Pointer to WDA context
12401 pGetBatchScanReq: Pointer to get batch scan result indication
12402
12403 RETURN VALUE
12404 NONE
12405
12406===========================================================================*/
12407VOS_STATUS WDA_ProcessTriggerBatchScanResultInd(tWDA_CbContext *pWDA,
12408 tSirTriggerBatchScanResultInd *pReq)
12409{
12410 WDI_Status wdiStatus;
12411 WDI_TriggerBatchScanResultIndType wdiReq;
12412
12413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12414 "------> %s " ,__func__);
12415
12416 wdiReq.param = pReq->param;
12417
12418 wdiStatus = WDI_TriggerBatchScanResultInd(&wdiReq);
12419
12420 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12421 {
12422 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12423 "Trigger batch scan result ind failed %s:%d",
12424 __func__, wdiStatus);
12425 }
12426
12427 vos_mem_free(pReq);
12428
12429 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12430}
12431
12432/*==========================================================================
12433 FUNCTION WDA_SetBatchScanRespCallback
12434
12435 DESCRIPTION
12436 API to process set batch scan response from FW
12437
12438 PARAMETERS
12439 pRsp: Pointer to set batch scan response
12440 pUserData: Pointer to user data
12441
12442 RETURN VALUE
12443 NONE
12444
12445===========================================================================*/
12446void WDA_SetBatchScanRespCallback
12447(
12448 WDI_SetBatchScanRspType *pRsp,
12449 void* pUserData
12450)
12451{
12452 tSirSetBatchScanRsp *pHddSetBatchScanRsp;
12453 tpAniSirGlobal pMac;
12454 void *pCallbackContext;
12455 tWDA_CbContext *pWDA = NULL ;
12456 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12457
12458
12459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12460 "<------ %s " ,__func__);
12461 if (NULL == pWdaParams)
12462 {
12463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12464 "%s: pWdaParams received NULL", __func__);
12465 VOS_ASSERT(0) ;
12466 return ;
12467 }
12468
12469 /*extract WDA context*/
12470 pWDA = pWdaParams->pWdaContext;
12471 if (NULL == pWDA)
12472 {
12473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12474 "%s:pWDA is NULL can't invole HDD callback",
12475 __func__);
12476 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12477 vos_mem_free(pWdaParams->wdaMsgParam);
12478 vos_mem_free(pWdaParams);
12479 VOS_ASSERT(0);
12480 return;
12481 }
12482
12483 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12484 vos_mem_free(pWdaParams->wdaMsgParam);
12485 vos_mem_free(pWdaParams);
12486
12487 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
12488 if (NULL == pMac)
12489 {
12490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12491 "%s:pMac is NULL", __func__);
12492 VOS_ASSERT(0);
12493 return;
12494 }
12495
12496 pHddSetBatchScanRsp =
12497 (tSirSetBatchScanRsp *)vos_mem_malloc(sizeof(tSirSetBatchScanRsp));
12498 if (NULL == pHddSetBatchScanRsp)
12499 {
12500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12501 "%s: VOS MEM Alloc Failure can't invoke HDD callback", __func__);
12502 VOS_ASSERT(0);
12503 return;
12504 }
12505
12506 pHddSetBatchScanRsp->nScansToBatch = pRsp->nScansToBatch;
12507
12508 pCallbackContext = pMac->pmc.setBatchScanReqCallbackContext;
12509 /*call hdd callback with set batch scan response data*/
12510 if(pMac->pmc.setBatchScanReqCallback)
12511 {
12512 pMac->pmc.setBatchScanReqCallback(pCallbackContext, pHddSetBatchScanRsp);
12513 }
12514 else
12515 {
12516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12517 "%s:HDD callback is null", __func__);
12518 VOS_ASSERT(0);
12519 }
12520
12521 vos_mem_free(pHddSetBatchScanRsp);
12522 return ;
12523}
12524
12525/*==========================================================================
12526 FUNCTION WDA_ProcessSetBatchScanReq
12527
12528 DESCRIPTION
12529 API to send set batch scan request to WDI
12530
12531 PARAMETERS
12532 pWDA: Pointer to WDA context
12533 pSetBatchScanReq: Pointer to set batch scan req
12534
12535 RETURN VALUE
12536 NONE
12537
12538===========================================================================*/
12539VOS_STATUS WDA_ProcessSetBatchScanReq(tWDA_CbContext *pWDA,
12540 tSirSetBatchScanReq *pSetBatchScanReq)
12541{
12542 WDI_Status status;
12543 tWDA_ReqParams *pWdaParams ;
12544 WDI_SetBatchScanReqType *pWdiSetBatchScanReq;
12545
12546 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12547 "------> %s " ,__func__);
12548
12549 pWdiSetBatchScanReq =
12550 (WDI_SetBatchScanReqType *)vos_mem_malloc(sizeof(WDI_SetBatchScanReqType));
12551 if (NULL == pWdiSetBatchScanReq)
12552 {
12553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12554 "%s: VOS MEM Alloc Failure", __func__);
12555 vos_mem_free(pSetBatchScanReq);
12556 VOS_ASSERT(0);
12557 return VOS_STATUS_E_NOMEM;
12558 }
12559
12560 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
12561 if (NULL == pWdaParams)
12562 {
12563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12564 "%s: VOS MEM Alloc Failure", __func__);
12565 VOS_ASSERT(0);
12566 vos_mem_free(pSetBatchScanReq);
12567 vos_mem_free(pWdiSetBatchScanReq);
12568 return VOS_STATUS_E_NOMEM;
12569 }
12570
12571 pWdiSetBatchScanReq->scanFrequency = pSetBatchScanReq->scanFrequency;
12572 pWdiSetBatchScanReq->numberOfScansToBatch =
12573 pSetBatchScanReq->numberOfScansToBatch;
12574 pWdiSetBatchScanReq->bestNetwork = pSetBatchScanReq->bestNetwork;
12575 pWdiSetBatchScanReq->rfBand = pSetBatchScanReq->rfBand;
12576 pWdiSetBatchScanReq->rtt = pSetBatchScanReq->rtt;
12577
12578 pWdaParams->wdaWdiApiMsgParam = pWdiSetBatchScanReq;
12579 pWdaParams->pWdaContext = pWDA;
12580 pWdaParams->wdaMsgParam = pSetBatchScanReq;
12581
12582 status = WDI_SetBatchScanReq(pWdiSetBatchScanReq, pWdaParams,
12583 (WDI_SetBatchScanCb)WDA_SetBatchScanRespCallback);
12584 if (IS_WDI_STATUS_FAILURE(status))
12585 {
12586 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12587 "Failure in Set Batch Scan REQ WDI API, free all the memory " );
12588 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12589 vos_mem_free(pWdaParams->wdaMsgParam);
12590 vos_mem_free(pWdaParams);
12591 }
12592 return CONVERT_WDI2VOS_STATUS(status);
12593}
12594
12595#endif
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053012596/*
12597 * FUNCTION: WDA_ProcessHT40OBSSScanInd
12598 *
12599 * DESCRIPTION: This function sends start/update OBSS scan
12600 * inidcation message to WDI
12601 *
12602 * PARAM:
12603 * pWDA: pointer to WDA context
12604 * pReq: pointer to start OBSS scan request
12605 */
12606VOS_STATUS WDA_ProcessHT40OBSSScanInd(tWDA_CbContext *pWDA,
12607 tSirHT40OBSSScanInd *pReq)
12608{
12609 WDI_Status status;
12610 WDI_HT40ObssScanParamsType wdiOBSSScanParams;
12611 WDI_HT40ObssScanIndType *pWdiOBSSScanInd;
Rajeev79dbe4c2013-10-05 11:03:42 +053012612
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053012613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12614 "------> %s " ,__func__);
12615 wdiOBSSScanParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
12616 wdiOBSSScanParams.pUserData = pWDA;
12617
12618 pWdiOBSSScanInd = &(wdiOBSSScanParams.wdiHT40ObssScanParam);
12619 pWdiOBSSScanInd->cmdType = pReq->cmdType;
12620 pWdiOBSSScanInd->scanType = pReq->scanType;
12621 pWdiOBSSScanInd->OBSSScanActiveDwellTime =
12622 pReq->OBSSScanActiveDwellTime;
12623 pWdiOBSSScanInd->OBSSScanPassiveDwellTime =
12624 pReq->OBSSScanPassiveDwellTime;
12625 pWdiOBSSScanInd->BSSChannelWidthTriggerScanInterval =
12626 pReq->BSSChannelWidthTriggerScanInterval;
12627 pWdiOBSSScanInd->BSSWidthChannelTransitionDelayFactor =
12628 pReq->BSSWidthChannelTransitionDelayFactor;
12629 pWdiOBSSScanInd->OBSSScanActiveTotalPerChannel =
12630 pReq->OBSSScanActiveTotalPerChannel;
12631 pWdiOBSSScanInd->OBSSScanPassiveTotalPerChannel =
12632 pReq->OBSSScanPassiveTotalPerChannel;
12633 pWdiOBSSScanInd->OBSSScanActivityThreshold =
12634 pReq->OBSSScanActivityThreshold;
12635 pWdiOBSSScanInd->channelCount = pReq->channelCount;
12636 vos_mem_copy(pWdiOBSSScanInd->channels,
12637 pReq->channels,
12638 pReq->channelCount);
12639 pWdiOBSSScanInd->selfStaIdx = pReq->selfStaIdx;
12640 pWdiOBSSScanInd->fortyMHZIntolerent = pReq->fortyMHZIntolerent;
12641 pWdiOBSSScanInd->bssIdx = pReq->bssIdx;
12642 pWdiOBSSScanInd->currentOperatingClass = pReq->currentOperatingClass;
12643 pWdiOBSSScanInd->ieFieldLen = pReq->ieFieldLen;
12644
12645 vos_mem_copy(pWdiOBSSScanInd->ieField,
12646 pReq->ieField,
12647 pReq->ieFieldLen);
12648
12649 status = WDI_HT40OBSSScanInd(&wdiOBSSScanParams);
12650 if (WDI_STATUS_PENDING == status)
12651 {
12652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12653 "Pending received for %s:%d ",__func__,__LINE__ );
12654 }
12655 else if (WDI_STATUS_SUCCESS_SYNC != status)
12656 {
12657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12658 "Failure in %s:%d ",__func__,__LINE__ );
12659 }
12660 return CONVERT_WDI2VOS_STATUS(status) ;
12661}
12662/*
12663 * FUNCTION: WDA_ProcessHT40OBSSStopScanInd
12664 *
12665 * DESCRIPTION: This function sends stop OBSS scan inidcation message to WDI
12666 *
12667 * PARAM:
12668 * pWDA: pointer to WDA context
12669 * pReq: pointer to stop batch scan request
12670 */
12671VOS_STATUS WDA_ProcessHT40OBSSStopScanInd(tWDA_CbContext *pWDA,
12672 tANI_U8 *bssIdx)
12673{
12674 WDI_Status status;
12675
12676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12677 "------> %s " ,__func__);
12678
12679 status = WDI_HT40OBSSStopScanInd(*bssIdx);
12680 if (WDI_STATUS_PENDING == status)
12681 {
12682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12683 "Pending received for %s:%d ",__func__,__LINE__ );
12684 }
12685 else if (WDI_STATUS_SUCCESS_SYNC != status)
12686 {
12687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12688 "Failure in %s:%d ",__func__,__LINE__ );
12689 }
12690 return CONVERT_WDI2VOS_STATUS(status) ;
12691}
Yue Mab9c86f42013-08-14 15:59:08 -070012692/*
Chittajit Mitraf5413a42013-10-18 14:20:08 -070012693 * FUNCTION: WDA_ProcessRateUpdateInd
12694 *
12695 */
12696VOS_STATUS WDA_ProcessRateUpdateInd(tWDA_CbContext *pWDA,
12697 tSirRateUpdateInd *pRateUpdateParams)
12698{
12699 WDI_Status wdiStatus;
12700 WDI_RateUpdateIndParams rateUpdateParams;
12701
12702 vos_mem_copy(rateUpdateParams.bssid,
12703 pRateUpdateParams->bssid, sizeof(tSirMacAddr));
12704
12705 rateUpdateParams.ucastDataRateTxFlag =
12706 pRateUpdateParams->ucastDataRateTxFlag;
12707 rateUpdateParams.reliableMcastDataRateTxFlag =
12708 pRateUpdateParams->reliableMcastDataRateTxFlag;
12709 rateUpdateParams.mcastDataRate24GHzTxFlag =
12710 pRateUpdateParams->mcastDataRate24GHzTxFlag;
12711 rateUpdateParams.mcastDataRate5GHzTxFlag =
12712 pRateUpdateParams->mcastDataRate5GHzTxFlag;
12713
12714 rateUpdateParams.ucastDataRate = pRateUpdateParams->ucastDataRate;
12715 rateUpdateParams.reliableMcastDataRate =
12716 pRateUpdateParams->reliableMcastDataRate;
12717 rateUpdateParams.mcastDataRate24GHz = pRateUpdateParams->mcastDataRate24GHz;
12718 rateUpdateParams.mcastDataRate5GHz = pRateUpdateParams->mcastDataRate5GHz;
12719
12720 rateUpdateParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
12721 rateUpdateParams.pUserData = pWDA;
12722
12723 wdiStatus = WDI_RateUpdateInd(&rateUpdateParams);
12724
12725 if (WDI_STATUS_PENDING == wdiStatus)
12726 {
12727 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12728 "Pending received for %s:%d", __func__, __LINE__ );
12729 }
12730 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12731 {
12732 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12733 "Failure in %s:%d", __func__, __LINE__ );
12734 }
12735
12736 vos_mem_free(pRateUpdateParams);
12737
12738 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12739}
12740
12741/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012742 * -------------------------------------------------------------------------
12743 * DATA interface with WDI for Mgmt Frames
12744 * -------------------------------------------------------------------------
12745 */
Jeff Johnson295189b2012-06-20 16:38:30 -070012746/*
12747 * FUNCTION: WDA_TxComplete
12748 * Callback function for the WDA_TxPacket
12749 */
12750VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
12751 VOS_STATUS status )
12752{
12753
12754 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
12755 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012756 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012757
Mihir Shete63341222015-03-24 15:39:18 +053012758 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Enter:%s", __func__);
12759
Jeff Johnson295189b2012-06-20 16:38:30 -070012760 if(NULL == wdaContext)
12761 {
12762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12763 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012764 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012765 VOS_ASSERT(0);
Sushant Kaushik8355d202014-12-17 16:48:10 +053012766 vos_pkt_return_packet(pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070012767 return VOS_STATUS_E_FAILURE;
12768 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012769
12770 /*Check if frame was timed out or not*/
12771 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
12772 (v_PVOID_t)&uUserData);
12773
12774 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
12775 {
12776 /*Discard frame - no further processing is needed*/
Mihir Shete63341222015-03-24 15:39:18 +053012777 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
12778 "%s: MGMT Frame Tx timed out",
12779 __func__);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012780 vos_pkt_return_packet(pData);
12781 return VOS_STATUS_SUCCESS;
12782 }
12783
Jeff Johnson295189b2012-06-20 16:38:30 -070012784 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
12785 if( NULL!=wdaContext->pTxCbFunc)
12786 {
12787 /*check if packet is freed already*/
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053012788 if(vos_atomic_set((uintptr_t*)&wdaContext->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED) == (uintptr_t)pData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012789 {
12790 wdaContext->pTxCbFunc(pMac, pData);
12791 }
12792 else
12793 {
12794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053012795 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012796 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070012797 //Return from here since we reaching here because the packet already timeout
12798 return status;
12799 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012800 }
12801
12802 /*
12803 * Trigger the event to bring the HAL TL Tx complete function to come
12804 * out of wait
12805 * Let the coe above to complete the packet first. When this event is set,
12806 * the thread waiting for the event may run and set Vospacket_freed causing the original
12807 * packet not being freed.
12808 */
12809 status = vos_event_set(&wdaContext->txFrameEvent);
12810 if(!VOS_IS_STATUS_SUCCESS(status))
12811 {
12812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012813 "NEW VOS Event Set failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012814 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012815 return status;
12816}
Jeff Johnson295189b2012-06-20 16:38:30 -070012817/*
12818 * FUNCTION: WDA_TxPacket
12819 * Forward TX management frame to WDI
12820 */
12821VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
12822 void *pFrmBuf,
12823 tANI_U16 frmLen,
12824 eFrameType frmType,
12825 eFrameTxDir txDir,
12826 tANI_U8 tid,
12827 pWDATxRxCompFunc pCompFunc,
12828 void *pData,
12829 pWDAAckFnTxComp pAckTxComp,
Kanchanapally, Vidyullathaf9426e52013-12-24 17:28:54 +053012830 tANI_U32 txFlag)
Jeff Johnson295189b2012-06-20 16:38:30 -070012831{
12832 VOS_STATUS status = VOS_STATUS_SUCCESS ;
12833 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
12834 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
12835 tANI_U8 eventIdx = 0;
12836 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
12837 tpAniSirGlobal pMac;
Jeff Johnson295189b2012-06-20 16:38:30 -070012838 if((NULL == pWDA)||(NULL == pFrmBuf))
12839 {
12840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053012841 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012842 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070012843 VOS_ASSERT(0);
12844 return VOS_STATUS_E_FAILURE;
12845 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012846
Jeff Johnson295189b2012-06-20 16:38:30 -070012847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012848 "Tx Mgmt Frame Subtype: %d alloc(%p)", pFc->subType, pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070012849 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
12850 if(NULL == pMac)
12851 {
12852 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012853 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012854 VOS_ASSERT(0);
12855 return VOS_STATUS_E_FAILURE;
12856 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012857
Jeff Johnson295189b2012-06-20 16:38:30 -070012858 /* store the call back function in WDA context */
12859 pWDA->pTxCbFunc = pCompFunc;
12860 /* store the call back for the function of ackTxComplete */
12861 if( pAckTxComp )
12862 {
Jeff Johnsone7245742012-09-05 17:12:55 -070012863 if( NULL != pWDA->pAckTxCbFunc )
12864 {
12865 /* Already TxComp is active no need to active again */
12866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012867 "There is already one request pending for tx complete");
Jeff Johnsone7245742012-09-05 17:12:55 -070012868 pWDA->pAckTxCbFunc( pMac, 0);
12869 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012870
Jeff Johnsone7245742012-09-05 17:12:55 -070012871 if( VOS_STATUS_SUCCESS !=
12872 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12873 {
12874 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12875 "Tx Complete timeout Timer Stop Failed ");
12876 }
12877 else
12878 {
12879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080012880 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070012881 }
12882 }
12883
12884 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
12885 pWDA->pAckTxCbFunc = pAckTxComp;
12886 if( VOS_STATUS_SUCCESS !=
12887 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
12888 {
12889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12890 "Tx Complete Timer Start Failed ");
12891 pWDA->pAckTxCbFunc = NULL;
12892 return eHAL_STATUS_FAILURE;
12893 }
12894 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012895 /* Reset the event to be not signalled */
12896 status = vos_event_reset(&pWDA->txFrameEvent);
12897 if(!VOS_IS_STATUS_SUCCESS(status))
12898 {
12899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012900 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012901 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
12902 if( pAckTxComp )
12903 {
12904 pWDA->pAckTxCbFunc = NULL;
12905 if( VOS_STATUS_SUCCESS !=
12906 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12907 {
12908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12909 "Tx Complete timeout Timer Stop Failed ");
12910 }
12911 }
12912 return VOS_STATUS_E_FAILURE;
12913 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080012914
12915 /* If Peer Sta mask is set don't overwrite to self sta */
12916 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070012917 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080012918 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070012919 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080012920 else
12921 {
Ganesh K08bce952012-12-13 15:04:41 -080012922 /* Get system role, use the self station if in unknown role or STA role */
12923 systemRole = wdaGetGlobalSystemRole(pMac);
12924 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
12925 (( eSYSTEM_STA_ROLE == systemRole )
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080012926#if defined FEATURE_WLAN_ESE || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080012927 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080012928#endif
Ganesh K08bce952012-12-13 15:04:41 -080012929 ))
12930 {
12931 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
12932 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080012933 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012934
Jeff Johnsone7245742012-09-05 17:12:55 -070012935 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
12936 disassoc frame reaches the HW, HAL has already deleted the peer station */
12937 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070012938 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080012939 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070012940 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070012941 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012942 /*Send Probe request frames on self sta idx*/
12943 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070012944 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012945 /* Since we donot want probe responses to be retried, send probe responses
12946 through the NO_ACK queues */
12947 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
12948 {
12949 //probe response is sent out using self station and no retries options.
12950 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
12951 }
12952 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
12953 {
12954 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
12955 }
12956 }
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053012957 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012958
12959 /*Set frame tag to 0
12960 We will use the WDA user data in order to tag a frame as expired*/
12961 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
12962 (v_PVOID_t)0);
12963
12964
12965 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
12966 frmLen, ucTypeSubType, tid,
12967 WDA_TxComplete, NULL, txFlag)) != VOS_STATUS_SUCCESS)
12968 {
12969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012970 "Sending Mgmt Frame failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012971 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053012972 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 -070012973 if( pAckTxComp )
12974 {
12975 pWDA->pAckTxCbFunc = NULL;
12976 if( VOS_STATUS_SUCCESS !=
12977 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12978 {
12979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12980 "Tx Complete timeout Timer Stop Failed ");
12981 }
12982 }
12983 return VOS_STATUS_E_FAILURE;
12984 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012985 /*
12986 * Wait for the event to be set by the TL, to get the response of TX
12987 * complete, this event should be set by the Callback function called by TL
12988 */
12989 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
12990 &eventIdx);
12991 if(!VOS_IS_STATUS_SUCCESS(status))
12992 {
12993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12994 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012995 __func__, status);
Sushant Kaushik8355d202014-12-17 16:48:10 +053012996
12997 /*Tag Frame as timed out for later deletion*/
12998 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
12999 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
Jeff Johnson295189b2012-06-20 16:38:30 -070013000 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
13001 after the packet gets completed(packet freed once)*/
13002
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070013003 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
Katya Nigam53677462014-08-04 11:37:28 +053013004 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070013005
Jeff Johnson295189b2012-06-20 16:38:30 -070013006 /* check whether the packet was freed already,so need not free again when
13007 * TL calls the WDA_Txcomplete routine
13008 */
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053013009 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED);
13010 /*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 -070013011 {
13012 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070013013 } */
13014
Jeff Johnson295189b2012-06-20 16:38:30 -070013015 if( pAckTxComp )
13016 {
13017 pWDA->pAckTxCbFunc = NULL;
13018 if( VOS_STATUS_SUCCESS !=
13019 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
13020 {
13021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13022 "Tx Complete timeout Timer Stop Failed ");
13023 }
13024 }
13025 status = VOS_STATUS_E_FAILURE;
13026 }
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +053013027#ifdef WLAN_DUMP_MGMTFRAMES
13028 if (VOS_IS_STATUS_SUCCESS(status))
13029 {
13030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13031 "%s() TX packet : SubType %d", __func__,pFc->subType);
13032 VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13033 pData, frmLen);
13034 }
13035#endif
13036
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080013037 if (VOS_IS_STATUS_SUCCESS(status))
13038 {
13039 if (pMac->fEnableDebugLog & 0x1)
13040 {
13041 if ((pFc->type == SIR_MAC_MGMT_FRAME) &&
13042 (pFc->subType != SIR_MAC_MGMT_PROBE_REQ) &&
13043 (pFc->subType != SIR_MAC_MGMT_PROBE_RSP))
13044 {
13045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "TX MGMT - Type %hu, SubType %hu",
13046 pFc->type, pFc->subType);
13047 }
13048 }
13049 }
13050
13051
Jeff Johnson295189b2012-06-20 16:38:30 -070013052 return status;
13053}
Jeff Johnson295189b2012-06-20 16:38:30 -070013054/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013055 * FUNCTION: WDA_ProcessDHCPStartInd
13056 * Forward DHCP Start to WDI
13057 */
13058static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
13059 tAniDHCPInd *dhcpStartInd)
13060{
13061 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053013062 WDI_DHCPInd wdiDHCPInd;
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013063
c_hpothu0b0cab72014-02-13 21:52:40 +053013064 wdiDHCPInd.device_mode = dhcpStartInd->device_mode;
13065 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStartInd->macAddr,
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013066 sizeof(tSirMacAddr));
13067
c_hpothu0b0cab72014-02-13 21:52:40 +053013068 status = WDI_dhcpStartInd(&wdiDHCPInd);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013069
c_hpothu0b0cab72014-02-13 21:52:40 +053013070 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013071 {
c_hpothu0b0cab72014-02-13 21:52:40 +053013072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13073 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013074 }
c_hpothu0b0cab72014-02-13 21:52:40 +053013075 else if (WDI_STATUS_SUCCESS_SYNC != status)
13076 {
13077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13078 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
13079 }
13080
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013081 vos_mem_free(dhcpStartInd);
13082 return CONVERT_WDI2VOS_STATUS(status) ;
13083}
13084
13085 /*
13086 * FUNCTION: WDA_ProcessDHCPStopInd
13087 * Forward DHCP Stop to WDI
13088 */
13089 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
13090 tAniDHCPInd *dhcpStopInd)
13091 {
13092 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053013093 WDI_DHCPInd wdiDHCPInd;
13094
13095 wdiDHCPInd.device_mode = dhcpStopInd->device_mode;
13096 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
13097
13098 status = WDI_dhcpStopInd(&wdiDHCPInd);
13099
13100 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013101 {
c_hpothu0b0cab72014-02-13 21:52:40 +053013102 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13103 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013104 }
c_hpothu0b0cab72014-02-13 21:52:40 +053013105 else if (WDI_STATUS_SUCCESS_SYNC != status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013106 {
c_hpothu0b0cab72014-02-13 21:52:40 +053013107 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13108 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013109 }
c_hpothu0b0cab72014-02-13 21:52:40 +053013110
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013111 vos_mem_free(dhcpStopInd);
c_hpothu0b0cab72014-02-13 21:52:40 +053013112
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013113 return CONVERT_WDI2VOS_STATUS(status) ;
13114 }
13115
13116/*
Siddharth Bhal171788a2014-09-29 21:02:40 +053013117 * FUNCTION: WDA_ProcessSetSpoofMacAddrReq
13118 *
13119 * DESCRIPTION: This function sends Spoof Mac Addr Req to WDI
13120 *
13121 * PARAM:
13122 * pWDA: pointer to WDA context
13123 * pReq: pointer to stop batch scan request
13124 */
13125VOS_STATUS WDA_ProcessSetSpoofMacAddrReq(tWDA_CbContext *pWDA,
13126 tpSpoofMacAddrReqParams pReq)
13127{
13128 WDI_Status wdiStatus;
13129 WDI_SpoofMacAddrInfoType *WDI_SpoofMacAddrInfoParams;
13130 tWDA_ReqParams *pWdaParams;
13131
13132 WDI_SpoofMacAddrInfoParams = (WDI_SpoofMacAddrInfoType *)vos_mem_malloc(
13133 sizeof(WDI_SpoofMacAddrInfoType));
13134 if(NULL == WDI_SpoofMacAddrInfoParams) {
13135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13136 "%s: VOS MEM Alloc Failure in Spoof Req", __func__);
13137 VOS_ASSERT(0);
13138 return VOS_STATUS_E_NOMEM;
13139 }
13140 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13141 if(NULL == pWdaParams) {
13142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13143 "%s: VOS MEM Alloc Failure", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +053013144 vos_mem_free(WDI_SpoofMacAddrInfoParams);
Siddharth Bhal171788a2014-09-29 21:02:40 +053013145 VOS_ASSERT(0);
13146 return VOS_STATUS_E_NOMEM;
13147 }
13148
13149 vos_mem_copy(WDI_SpoofMacAddrInfoParams->macAddr,
13150 pReq->macAddr, VOS_MAC_ADDRESS_LEN);
13151
13152 pWdaParams->pWdaContext = pWDA;
13153 /* Store Upper layer req pointer, as this will be used for response */
Siddharth Bhal029d6732014-10-09 21:31:23 +053013154 pWdaParams->wdaMsgParam = (void *)pReq;
13155
13156 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, WDA_MAC_ADDRESS_STR,
13157 WDA_MAC_ADDR_ARRAY(WDI_SpoofMacAddrInfoParams->macAddr));
13158
Siddharth Bhal171788a2014-09-29 21:02:40 +053013159 /* store Params pass it to WDI */
13160 pWdaParams->wdaWdiApiMsgParam = (void *)WDI_SpoofMacAddrInfoParams ;
13161
13162 wdiStatus = WDI_SetSpoofMacAddrReq(WDI_SpoofMacAddrInfoParams,
Siddharth Bhal029d6732014-10-09 21:31:23 +053013163 (WDI_SetSpoofMacAddrRspCb) WDA_SpoofMacAddrRspCallback,
13164 pWdaParams );
Siddharth Bhal171788a2014-09-29 21:02:40 +053013165
13166 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13167 {
13168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13169 "Failure in SetSpoofMacAddrReq Params WDI API, free all the memory " );
13170 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13171 vos_mem_free(pWdaParams->wdaMsgParam);
13172 vos_mem_free(pWdaParams);
13173 }
13174
13175 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
13176}
13177
13178/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013179 * FUNCTION: WDA_McProcessMsg
13180 * Trigger DAL-AL to start CFG download
13181 */
13182VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
13183{
13184 VOS_STATUS status = VOS_STATUS_SUCCESS;
13185 tWDA_CbContext *pWDA = NULL ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013186 if(NULL == pMsg)
Jeff Johnson295189b2012-06-20 16:38:30 -070013187 {
13188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013189 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013190 VOS_ASSERT(0);
13191 return VOS_STATUS_E_FAILURE;
13192 }
13193
13194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013195 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070013196
13197 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
13198 if(NULL == pWDA )
13199 {
13200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013201 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013202 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070013203 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070013204 return VOS_STATUS_E_FAILURE;
13205 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013206 /* Process all the WDA messages.. */
13207 switch( pMsg->type )
13208 {
13209 case WNI_CFG_DNLD_REQ:
13210 {
13211 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070013212 /* call WDA complete event if config download success */
13213 if( VOS_IS_STATUS_SUCCESS(status) )
13214 {
13215 vos_WDAComplete_cback(pVosContext);
13216 }
13217 else
13218 {
13219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13220 "WDA Config Download failure" );
13221 }
13222 break ;
13223 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013224 /*
13225 * Init SCAN request from PE, convert it into DAL format
13226 * and send it to DAL
13227 */
13228 case WDA_INIT_SCAN_REQ:
13229 {
13230 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
13231 break ;
13232 }
13233 /* start SCAN request from PE */
13234 case WDA_START_SCAN_REQ:
13235 {
13236 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
13237 break ;
13238 }
13239 /* end SCAN request from PE */
13240 case WDA_END_SCAN_REQ:
13241 {
13242 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
13243 break ;
13244 }
13245 /* end SCAN request from PE */
13246 case WDA_FINISH_SCAN_REQ:
13247 {
13248 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
13249 break ;
13250 }
13251 /* join request from PE */
13252 case WDA_CHNL_SWITCH_REQ:
13253 {
13254 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
13255 {
13256 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
13257 }
13258 else
13259 {
Kalikinkar dhara1e83b772014-02-06 12:59:22 -080013260 if (IS_FEATURE_SUPPORTED_BY_FW(CH_SWITCH_V1) &&
13261 eHAL_CHANNEL_SWITCH_SOURCE_CSA ==
13262 ((tSwitchChannelParams*)pMsg->bodyptr)->channelSwitchSrc )
13263 {
13264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13265 "call ProcessChannelSwitchReq_V1" );
13266 WDA_ProcessChannelSwitchReq_V1(pWDA,
13267 (tSwitchChannelParams*)pMsg->bodyptr) ;
13268 }
13269 else
13270 {
13271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13272 "call ProcessChannelSwitchReq" );
13273 WDA_ProcessChannelSwitchReq(pWDA,
13274 (tSwitchChannelParams*)pMsg->bodyptr) ;
13275 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013276 }
13277 break ;
13278 }
13279 /* ADD BSS request from PE */
13280 case WDA_ADD_BSS_REQ:
13281 {
13282 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
13283 break ;
13284 }
13285 case WDA_ADD_STA_REQ:
13286 {
13287 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
13288 break ;
13289 }
13290 case WDA_DELETE_BSS_REQ:
13291 {
Jeff Johnson295189b2012-06-20 16:38:30 -070013292 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
13293 break ;
13294 }
13295 case WDA_DELETE_STA_REQ:
13296 {
Jeff Johnson295189b2012-06-20 16:38:30 -070013297 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
13298 break ;
13299 }
13300 case WDA_CONFIG_PARAM_UPDATE_REQ:
13301 {
13302 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
13303 break ;
13304 }
13305 case WDA_SET_BSSKEY_REQ:
13306 {
13307 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
13308 break ;
13309 }
13310 case WDA_SET_STAKEY_REQ:
13311 {
13312 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
13313 break ;
13314 }
13315 case WDA_SET_STA_BCASTKEY_REQ:
13316 {
13317 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
13318 break ;
13319 }
13320 case WDA_REMOVE_BSSKEY_REQ:
13321 {
13322 WDA_ProcessRemoveBssKeyReq(pWDA,
13323 (tRemoveBssKeyParams *)pMsg->bodyptr);
13324 break ;
13325 }
13326 case WDA_REMOVE_STAKEY_REQ:
13327 {
13328 WDA_ProcessRemoveStaKeyReq(pWDA,
13329 (tRemoveStaKeyParams *)pMsg->bodyptr);
13330 break ;
13331 }
13332 case WDA_REMOVE_STA_BCASTKEY_REQ:
13333 {
13334 /* TODO: currently UMAC is not sending this request, Add the code for
13335 handling this request when UMAC supports */
13336 break;
13337 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080013338#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -070013339 case WDA_TSM_STATS_REQ:
13340 {
Srinivas Girigowda5cecb202013-10-08 09:13:25 -070013341 WDA_ProcessTsmStatsReq(pWDA, (tpAniGetTsmStatsReq)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070013342 break;
13343 }
13344#endif
13345 case WDA_UPDATE_EDCA_PROFILE_IND:
13346 {
13347 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
13348 break;
13349 }
13350 case WDA_ADD_TS_REQ:
13351 {
13352 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
13353 break;
13354 }
13355 case WDA_DEL_TS_REQ:
13356 {
13357 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
13358 break;
13359 }
13360 case WDA_ADDBA_REQ:
13361 {
13362 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
13363 break;
13364 }
13365 case WDA_DELBA_IND:
13366 {
13367 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
13368 break;
13369 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080013370 case WDA_UPDATE_CHAN_LIST_REQ:
13371 {
13372 WDA_ProcessUpdateChannelList(pWDA,
13373 (tSirUpdateChanList *)pMsg->bodyptr);
13374 break;
13375 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013376 case WDA_SET_LINK_STATE:
13377 {
13378 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
13379 break;
13380 }
13381 case WDA_GET_STATISTICS_REQ:
13382 {
13383 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
13384 break;
13385 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080013386#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080013387 case WDA_GET_ROAM_RSSI_REQ:
13388 {
13389 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
13390 break;
13391 }
13392#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070013393 case WDA_PWR_SAVE_CFG:
13394 {
13395 if(pWDA->wdaState == WDA_READY_STATE)
13396 {
13397 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
13398 }
13399 else
13400 {
13401 if(NULL != pMsg->bodyptr)
13402 {
13403 vos_mem_free(pMsg->bodyptr);
13404 }
13405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13406 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
13407 }
13408 break;
13409 }
13410 case WDA_ENTER_IMPS_REQ:
13411 {
13412 if(pWDA->wdaState == WDA_READY_STATE)
13413 {
13414 WDA_ProcessEnterImpsReq(pWDA);
13415 }
13416 else
13417 {
13418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13419 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
13420 }
13421 break;
13422 }
13423 case WDA_EXIT_IMPS_REQ:
13424 {
13425 if(pWDA->wdaState == WDA_READY_STATE)
13426 {
13427 WDA_ProcessExitImpsReq(pWDA);
13428 }
13429 else
13430 {
13431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13432 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
13433 }
13434 break;
13435 }
13436 case WDA_ENTER_BMPS_REQ:
13437 {
13438 if(pWDA->wdaState == WDA_READY_STATE)
13439 {
13440 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
13441 }
13442 else
13443 {
13444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13445 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
13446 }
13447 break;
13448 }
13449 case WDA_EXIT_BMPS_REQ:
13450 {
13451 if(pWDA->wdaState == WDA_READY_STATE)
13452 {
13453 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
13454 }
13455 else
13456 {
13457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13458 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
13459 }
13460 break;
13461 }
13462 case WDA_ENTER_UAPSD_REQ:
13463 {
13464 if(pWDA->wdaState == WDA_READY_STATE)
13465 {
13466 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
13467 }
13468 else
13469 {
13470 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13471 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
13472 }
13473 break;
13474 }
13475 case WDA_EXIT_UAPSD_REQ:
13476 {
13477 if(pWDA->wdaState == WDA_READY_STATE)
13478 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013479 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070013480 }
13481 else
13482 {
13483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13484 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
13485 }
13486 break;
13487 }
13488 case WDA_UPDATE_UAPSD_IND:
13489 {
13490 if(pWDA->wdaState == WDA_READY_STATE)
13491 {
13492 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
13493 }
13494 else
13495 {
13496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13497 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
13498 }
13499 break;
13500 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013501 case WDA_REGISTER_PE_CALLBACK :
13502 {
13503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13504 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
13505 /*TODO: store the PE callback */
13506 /* Do Nothing? MSG Body should be freed at here */
13507 if(NULL != pMsg->bodyptr)
13508 {
13509 vos_mem_free(pMsg->bodyptr);
13510 }
13511 break;
13512 }
13513 case WDA_SYS_READY_IND :
13514 {
13515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13516 "Handling msg type WDA_SYS_READY_IND " );
13517 pWDA->wdaState = WDA_READY_STATE;
13518 if(NULL != pMsg->bodyptr)
13519 {
13520 vos_mem_free(pMsg->bodyptr);
13521 }
13522 break;
13523 }
13524 case WDA_BEACON_FILTER_IND :
13525 {
13526 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
13527 break;
13528 }
13529 case WDA_BTC_SET_CFG:
13530 {
13531 /*TODO: handle this while dealing with BTC */
13532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13533 "Handling msg type WDA_BTC_SET_CFG " );
13534 /* Do Nothing? MSG Body should be freed at here */
13535 if(NULL != pMsg->bodyptr)
13536 {
13537 vos_mem_free(pMsg->bodyptr);
13538 }
13539 break;
13540 }
13541 case WDA_SIGNAL_BT_EVENT:
13542 {
13543 /*TODO: handle this while dealing with BTC */
13544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13545 "Handling msg type WDA_SIGNAL_BT_EVENT " );
13546 /* Do Nothing? MSG Body should be freed at here */
13547 if(NULL != pMsg->bodyptr)
13548 {
13549 vos_mem_free(pMsg->bodyptr);
13550 }
13551 break;
13552 }
13553 case WDA_CFG_RXP_FILTER_REQ:
13554 {
13555 WDA_ProcessConfigureRxpFilterReq(pWDA,
13556 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
13557 break;
13558 }
Siddharth Bhalb7c421c2015-02-27 00:26:09 +053013559 case WDA_MGMT_LOGGING_INIT_REQ:
13560 {
13561 WDA_ProcessMgmtLoggingInitReq(pWDA,
13562 (tSirMgmtLoggingInitParam *)pMsg->bodyptr);
13563 break;
13564 }
Siddharth Bhal64246172015-02-27 01:04:37 +053013565 case WDA_GET_FRAME_LOG_REQ:
13566 {
13567 WDA_ProcessGetFrameLogReq(pWDA,
13568 (tAniGetFrameLogReq *)pMsg->bodyptr);
13569 break;
13570 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013571 case WDA_SET_HOST_OFFLOAD:
13572 {
13573 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
13574 break;
13575 }
13576 case WDA_SET_KEEP_ALIVE:
13577 {
13578 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
13579 break;
13580 }
13581#ifdef WLAN_NS_OFFLOAD
13582 case WDA_SET_NS_OFFLOAD:
13583 {
13584 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
13585 break;
13586 }
13587#endif //WLAN_NS_OFFLOAD
13588 case WDA_ADD_STA_SELF_REQ:
13589 {
13590 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
13591 break;
13592 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013593 case WDA_DEL_STA_SELF_REQ:
13594 {
13595 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
13596 break;
13597 }
13598 case WDA_WOWL_ADD_BCAST_PTRN:
13599 {
13600 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
13601 break;
13602 }
13603 case WDA_WOWL_DEL_BCAST_PTRN:
13604 {
13605 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
13606 break;
13607 }
13608 case WDA_WOWL_ENTER_REQ:
13609 {
13610 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
13611 break;
13612 }
13613 case WDA_WOWL_EXIT_REQ:
13614 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013615 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070013616 break;
13617 }
13618 case WDA_TL_FLUSH_AC_REQ:
13619 {
13620 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
13621 break;
13622 }
13623 case WDA_SIGNAL_BTAMP_EVENT:
13624 {
13625 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
13626 break;
13627 }
Abhishek Singh85b74712014-10-08 11:38:19 +053013628 case WDA_FW_STATS_GET_REQ:
13629 {
13630 WDA_ProcessFWStatsGetReq(pWDA,
13631 (tSirFWStatsGetReq *)pMsg->bodyptr);
13632 break;
13633 }
Sunil Duttbd736ed2014-05-26 21:19:41 +053013634#ifdef WLAN_FEATURE_LINK_LAYER_STATS
13635 case WDA_LINK_LAYER_STATS_SET_REQ:
13636 {
13637 WDA_ProcessLLStatsSetReq(pWDA, (tSirLLStatsSetReq *)pMsg->bodyptr);
13638 break;
13639 }
13640 case WDA_LINK_LAYER_STATS_GET_REQ:
13641 {
13642 WDA_ProcessLLStatsGetReq(pWDA, (tSirLLStatsGetReq *)pMsg->bodyptr);
13643 break;
13644 }
13645 case WDA_LINK_LAYER_STATS_CLEAR_REQ:
13646 {
13647 WDA_ProcessLLStatsClearReq(pWDA, (tSirLLStatsClearReq *)pMsg->bodyptr);
13648 break;
13649 }
13650#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Dino Mycle41bdc942014-06-10 11:30:24 +053013651#ifdef WLAN_FEATURE_EXTSCAN
13652 case WDA_EXTSCAN_GET_CAPABILITIES_REQ:
13653 {
13654 WDA_ProcessEXTScanGetCapabilitiesReq(pWDA,
13655 (tSirGetEXTScanCapabilitiesReqParams *)pMsg->bodyptr);
13656 break;
13657 }
13658 case WDA_EXTSCAN_START_REQ:
13659 {
13660 WDA_ProcessEXTScanStartReq(pWDA,
13661 (tSirEXTScanStartReqParams *)pMsg->bodyptr);
13662 break;
13663 }
13664 case WDA_EXTSCAN_STOP_REQ:
13665 {
13666 WDA_ProcessEXTScanStopReq(pWDA,
13667 (tSirEXTScanStopReqParams *)pMsg->bodyptr);
13668 break;
13669 }
13670 case WDA_EXTSCAN_GET_CACHED_RESULTS_REQ:
13671 {
13672 WDA_ProcessEXTScanGetCachedResultsReq(pWDA,
13673 (tSirEXTScanGetCachedResultsReqParams *)pMsg->bodyptr);
13674 break;
13675 }
13676 case WDA_EXTSCAN_SET_BSSID_HOTLIST_REQ:
13677 {
13678 WDA_ProcessEXTScanSetBSSIDHotlistReq(pWDA,
13679 (tSirEXTScanSetBssidHotListReqParams *)pMsg->bodyptr);
13680 break;
13681 }
13682 case WDA_EXTSCAN_RESET_BSSID_HOTLIST_REQ:
13683 {
13684 WDA_ProcessEXTScanResetBSSIDHotlistReq(pWDA,
13685 (tSirEXTScanResetBssidHotlistReqParams *)pMsg->bodyptr);
13686 break;
13687 }
13688 case WDA_EXTSCAN_SET_SIGNF_RSSI_CHANGE_REQ:
13689 {
13690 WDA_ProcessEXTScanSetSignfRSSIChangeReq(pWDA,
13691 (tSirEXTScanSetSignificantChangeReqParams *)pMsg->bodyptr);
13692 break;
13693 }
13694 case WDA_EXTSCAN_RESET_SIGNF_RSSI_CHANGE_REQ:
13695 {
13696 WDA_ProcessEXTScanResetSignfRSSIChangeReq(pWDA,
13697 (tSirEXTScanResetSignificantChangeReqParams *)pMsg->bodyptr);
13698 break;
13699 }
13700#endif /* WLAN_FEATURE_EXTSCAN */
Jeff Johnson295189b2012-06-20 16:38:30 -070013701#ifdef WDA_UT
13702 case WDA_WDI_EVENT_MSG:
13703 {
13704 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
13705 break ;
13706 }
13707#endif
13708 case WDA_UPDATE_BEACON_IND:
13709 {
13710 WDA_ProcessUpdateBeaconParams(pWDA,
13711 (tUpdateBeaconParams *)pMsg->bodyptr);
13712 break;
13713 }
13714 case WDA_SEND_BEACON_REQ:
13715 {
13716 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
13717 break;
13718 }
13719 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
13720 {
13721 WDA_ProcessUpdateProbeRspTemplate(pWDA,
13722 (tSendProbeRespParams *)pMsg->bodyptr);
13723 break;
13724 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080013725#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -070013726 case WDA_SET_MAX_TX_POWER_REQ:
13727 {
13728 WDA_ProcessSetMaxTxPowerReq(pWDA,
13729 (tMaxTxPowerParams *)pMsg->bodyptr);
13730 break;
13731 }
13732#endif
Arif Hussaina5ebce02013-08-09 15:09:58 -070013733 case WDA_SET_MAX_TX_POWER_PER_BAND_REQ:
13734 {
13735 WDA_ProcessSetMaxTxPowerPerBandReq(pWDA, (tMaxTxPowerPerBandParams *)
13736 pMsg->bodyptr);
13737 break;
13738 }
schang86c22c42013-03-13 18:41:24 -070013739 case WDA_SET_TX_POWER_REQ:
13740 {
13741 WDA_ProcessSetTxPowerReq(pWDA,
13742 (tSirSetTxPowerReq *)pMsg->bodyptr);
13743 break;
13744 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013745 case WDA_SET_P2P_GO_NOA_REQ:
13746 {
13747 WDA_ProcessSetP2PGONOAReq(pWDA,
13748 (tP2pPsParams *)pMsg->bodyptr);
13749 break;
13750 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013751 /* timer related messages */
13752 case WDA_TIMER_BA_ACTIVITY_REQ:
13753 {
13754 WDA_BaCheckActivity(pWDA) ;
13755 break ;
13756 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013757
13758 /* timer related messages */
13759 case WDA_TIMER_TRAFFIC_STATS_IND:
13760 {
13761 WDA_TimerTrafficStatsInd(pWDA);
13762 break;
13763 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013764#ifdef WLAN_FEATURE_VOWIFI_11R
13765 case WDA_AGGR_QOS_REQ:
13766 {
13767 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
13768 break;
13769 }
13770#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070013771 case WDA_FTM_CMD_REQ:
13772 {
13773 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
13774 break ;
13775 }
Jeff Johnsone7245742012-09-05 17:12:55 -070013776#ifdef FEATURE_OEM_DATA_SUPPORT
13777 case WDA_START_OEM_DATA_REQ:
13778 {
13779 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
13780 break;
13781 }
13782#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070013783 /* Tx Complete Time out Indication */
13784 case WDA_TX_COMPLETE_TIMEOUT_IND:
13785 {
13786 WDA_ProcessTxCompleteTimeOutInd(pWDA);
13787 break;
13788 }
13789 case WDA_WLAN_SUSPEND_IND:
13790 {
13791 WDA_ProcessWlanSuspendInd(pWDA,
13792 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
13793 break;
13794 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013795 case WDA_WLAN_RESUME_REQ:
13796 {
13797 WDA_ProcessWlanResumeReq(pWDA,
13798 (tSirWlanResumeParam *)pMsg->bodyptr) ;
13799 break;
13800 }
13801
13802 case WDA_UPDATE_CF_IND:
13803 {
13804 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
13805 pMsg->bodyptr = NULL;
13806 break;
13807 }
13808#ifdef FEATURE_WLAN_SCAN_PNO
13809 case WDA_SET_PNO_REQ:
13810 {
13811 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
13812 break;
13813 }
13814 case WDA_UPDATE_SCAN_PARAMS_REQ:
13815 {
13816 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
13817 break;
13818 }
13819 case WDA_SET_RSSI_FILTER_REQ:
13820 {
13821 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
13822 break;
13823 }
13824#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013825#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013826 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013827 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013828 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013829 break;
13830 }
13831#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070013832 case WDA_SET_TX_PER_TRACKING_REQ:
13833 {
13834 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
13835 break;
13836 }
13837
13838#ifdef WLAN_FEATURE_PACKET_FILTERING
13839 case WDA_8023_MULTICAST_LIST_REQ:
13840 {
13841 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
13842 break;
13843 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013844 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
13845 {
13846 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
13847 break;
13848 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013849 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
13850 {
13851 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
13852 break;
13853 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013854 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
13855 {
13856 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
13857 break;
13858 }
13859#endif // WLAN_FEATURE_PACKET_FILTERING
13860
13861
13862 case WDA_TRANSMISSION_CONTROL_IND:
13863 {
13864 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
13865 break;
13866 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013867 case WDA_SET_POWER_PARAMS_REQ:
13868 {
13869 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
13870 break;
13871 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013872#ifdef WLAN_FEATURE_GTK_OFFLOAD
13873 case WDA_GTK_OFFLOAD_REQ:
13874 {
13875 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
13876 break;
13877 }
13878
13879 case WDA_GTK_OFFLOAD_GETINFO_REQ:
13880 {
13881 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
13882 break;
13883 }
13884#endif //WLAN_FEATURE_GTK_OFFLOAD
13885
13886 case WDA_SET_TM_LEVEL_REQ:
13887 {
13888 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
13889 break;
13890 }
Sandeep Puligilla60342762014-01-30 21:05:37 +053013891
Mohit Khanna4a70d262012-09-11 16:30:12 -070013892 case WDA_UPDATE_OP_MODE:
13893 {
Sandeep Puligilla60342762014-01-30 21:05:37 +053013894 if(WDA_getHostWlanFeatCaps(HT40_OBSS_SCAN) &&
13895 WDA_getFwWlanFeatCaps(HT40_OBSS_SCAN))
13896 {
13897 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
13898 }
13899 else if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
Mohit Khanna4a70d262012-09-11 16:30:12 -070013900 {
13901 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
13902 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
13903 else
13904 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013905 " VHT OpMode Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070013906 }
13907 else
13908 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013909 " 11AC Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070013910 break;
13911 }
Chet Lanctot186b5732013-03-18 10:26:30 -070013912#ifdef WLAN_FEATURE_11W
13913 case WDA_EXCLUDE_UNENCRYPTED_IND:
13914 {
13915 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
13916 break;
13917 }
13918#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053013919#ifdef FEATURE_WLAN_TDLS
13920 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
13921 {
13922 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
13923 break;
13924 }
13925#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013926 case WDA_DHCP_START_IND:
13927 {
13928 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
13929 break;
13930 }
13931 case WDA_DHCP_STOP_IND:
13932 {
13933 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
13934 break;
13935 }
Leo Chang9056f462013-08-01 19:21:11 -070013936#ifdef FEATURE_WLAN_LPHB
13937 case WDA_LPHB_CONF_REQ:
13938 {
13939 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
13940 break;
13941 }
13942#endif
Yue Mab9c86f42013-08-14 15:59:08 -070013943 case WDA_ADD_PERIODIC_TX_PTRN_IND:
13944 {
13945 WDA_ProcessAddPeriodicTxPtrnInd(pWDA,
13946 (tSirAddPeriodicTxPtrn *)pMsg->bodyptr);
13947 break;
13948 }
13949 case WDA_DEL_PERIODIC_TX_PTRN_IND:
13950 {
13951 WDA_ProcessDelPeriodicTxPtrnInd(pWDA,
13952 (tSirDelPeriodicTxPtrn *)pMsg->bodyptr);
13953 break;
13954 }
13955
Rajeev79dbe4c2013-10-05 11:03:42 +053013956#ifdef FEATURE_WLAN_BATCH_SCAN
13957 case WDA_SET_BATCH_SCAN_REQ:
13958 {
13959 WDA_ProcessSetBatchScanReq(pWDA,
13960 (tSirSetBatchScanReq *)pMsg->bodyptr);
13961 break;
13962 }
Chittajit Mitraf5413a42013-10-18 14:20:08 -070013963 case WDA_RATE_UPDATE_IND:
13964 {
13965 WDA_ProcessRateUpdateInd(pWDA, (tSirRateUpdateInd *)pMsg->bodyptr);
13966 break;
13967 }
Rajeev79dbe4c2013-10-05 11:03:42 +053013968 case WDA_TRIGGER_BATCH_SCAN_RESULT_IND:
13969 {
13970 WDA_ProcessTriggerBatchScanResultInd(pWDA,
13971 (tSirTriggerBatchScanResultInd *)pMsg->bodyptr);
13972 break;
13973 }
13974 case WDA_STOP_BATCH_SCAN_IND:
13975 {
13976 WDA_ProcessStopBatchScanInd(pWDA,
13977 (tSirStopBatchScanInd *)pMsg->bodyptr);
13978 break;
13979 }
c_hpothu92367912014-05-01 15:18:17 +053013980 case WDA_GET_BCN_MISS_RATE_REQ:
13981 WDA_ProcessGetBcnMissRateReq(pWDA,
13982 (tSirBcnMissRateReq *)pMsg->bodyptr);
13983 break;
Rajeev79dbe4c2013-10-05 11:03:42 +053013984#endif
13985
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053013986 case WDA_HT40_OBSS_SCAN_IND:
13987 {
13988 WDA_ProcessHT40OBSSScanInd(pWDA,
13989 (tSirHT40OBSSScanInd *)pMsg->bodyptr);
13990 break;
13991 }
13992 case WDA_HT40_OBSS_STOP_SCAN_IND:
13993 {
13994 WDA_ProcessHT40OBSSStopScanInd(pWDA,
13995 (tANI_U8*)pMsg->bodyptr);
13996 break;
13997 }
Atul Mittalc0f739f2014-07-31 13:47:47 +053013998// tdlsoffchan
13999#ifdef FEATURE_WLAN_TDLS
14000 case WDA_SET_TDLS_CHAN_SWITCH_REQ:
14001 {
14002 WDA_ProcessSetTdlsChanSwitchReq(pWDA, (tTdlsChanSwitchParams *)pMsg->bodyptr);
14003 break;
14004 }
14005#endif
Siddharth Bhal171788a2014-09-29 21:02:40 +053014006 case WDA_SPOOF_MAC_ADDR_REQ:
14007 {
14008 WDA_ProcessSetSpoofMacAddrReq(pWDA, (tpSpoofMacAddrReqParams)pMsg->bodyptr);
14009 break;
14010 }
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053014011 case WDA_ENCRYPT_MSG_REQ:
14012 {
14013 WDA_ProcessEncryptMsgReq(pWDA, (u8 *)pMsg->bodyptr);
14014 break;
14015 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014016 default:
14017 {
Agarwal Ashishbf98caf2014-03-25 13:29:11 +053014018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070014019 "No Handling for msg type %x in WDA "
14020 ,pMsg->type);
14021 /* Do Nothing? MSG Body should be freed at here */
14022 if(NULL != pMsg->bodyptr)
14023 {
14024 vos_mem_free(pMsg->bodyptr);
14025 }
14026 //WDA_VOS_ASSERT(0) ;
14027 }
14028 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014029 return status ;
14030}
14031
Jeff Johnson295189b2012-06-20 16:38:30 -070014032/*
14033 * FUNCTION: WDA_LowLevelIndCallback
14034 * IND API callback from WDI, send Ind to PE
14035 */
14036void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
14037 void* pUserData )
14038{
14039 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
14040#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
14041 tSirRSSINotification rssiNotification;
14042#endif
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014043 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070014044 {
14045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014046 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014047 VOS_ASSERT(0);
14048 return ;
14049 }
14050
14051 switch(wdiLowLevelInd->wdiIndicationType)
14052 {
14053 case WDI_RSSI_NOTIFICATION_IND:
14054 {
14055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14056 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070014057#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
14058 rssiNotification.bReserved =
14059 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
14060 rssiNotification.bRssiThres1NegCross =
14061 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
14062 rssiNotification.bRssiThres1PosCross =
14063 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
14064 rssiNotification.bRssiThres2NegCross =
14065 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
14066 rssiNotification.bRssiThres2PosCross =
14067 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
14068 rssiNotification.bRssiThres3NegCross =
14069 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
14070 rssiNotification.bRssiThres3PosCross =
14071 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080014072 rssiNotification.avgRssi = (v_S7_t)
14073 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070014074 WLANTL_BMPSRSSIRegionChangedNotification(
14075 pWDA->pVosContext,
14076 &rssiNotification);
14077#endif
14078 break ;
14079 }
14080 case WDI_MISSED_BEACON_IND:
14081 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080014082 tpSirSmeMissedBeaconInd pMissBeacInd =
14083 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070014084 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14085 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070014086 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080014087 if(NULL == pMissBeacInd)
14088 {
14089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14090 "%s: VOS MEM Alloc Failure", __func__);
14091 break;
14092 }
14093 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
14094 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
14095 pMissBeacInd->bssIdx =
14096 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
14097 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014098 break ;
14099 }
14100 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
14101 {
14102 /* TODO: Decode Ind and send Ind to PE */
14103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14104 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
14105 break ;
14106 }
14107
14108 case WDI_MIC_FAILURE_IND:
14109 {
14110 tpSirSmeMicFailureInd pMicInd =
14111 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
14112
14113 if(NULL == pMicInd)
14114 {
14115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014116 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014117 break;
14118 }
14119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14120 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070014121 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
14122 pMicInd->length = sizeof(tSirSmeMicFailureInd);
14123 vos_mem_copy(pMicInd->bssId,
14124 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
14125 sizeof(tSirMacAddr));
14126 vos_mem_copy(pMicInd->info.srcMacAddr,
14127 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
14128 sizeof(tSirMacAddr));
14129 vos_mem_copy(pMicInd->info.taMacAddr,
14130 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
14131 sizeof(tSirMacAddr));
14132 vos_mem_copy(pMicInd->info.dstMacAddr,
14133 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
14134 sizeof(tSirMacAddr));
14135 vos_mem_copy(pMicInd->info.rxMacAddr,
14136 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
14137 sizeof(tSirMacAddr));
14138 pMicInd->info.multicast =
14139 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
14140 pMicInd->info.keyId=
14141 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
14142 pMicInd->info.IV1=
14143 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
14144 vos_mem_copy(pMicInd->info.TSC,
14145 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070014146 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
14147 (void *)pMicInd , 0) ;
14148 break ;
14149 }
14150 case WDI_FATAL_ERROR_IND:
14151 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070014152 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070014153 /* TODO: Decode Ind and send Ind to PE */
14154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14155 "Received WDI_FATAL_ERROR_IND from WDI ");
14156 break ;
14157 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014158 case WDI_DEL_STA_IND:
14159 {
Jeff Johnson295189b2012-06-20 16:38:30 -070014160 tpDeleteStaContext pDelSTACtx =
14161 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
14162
14163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14164 "Received WDI_DEL_STA_IND from WDI ");
14165 if(NULL == pDelSTACtx)
14166 {
14167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014168 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014169 break;
14170 }
14171 vos_mem_copy(pDelSTACtx->addr2,
14172 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
14173 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070014174 vos_mem_copy(pDelSTACtx->bssId,
14175 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
14176 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070014177 pDelSTACtx->assocId =
14178 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
14179 pDelSTACtx->reasonCode =
14180 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
14181 pDelSTACtx->staId =
14182 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070014183 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
14184 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014185 break ;
14186 }
14187 case WDI_COEX_IND:
14188 {
14189 tANI_U32 index;
14190 vos_msg_t vosMsg;
c_hpothub3458992014-09-19 19:58:57 +053014191 tSirSmeCoexInd *pSmeCoexInd;
14192
14193 if (SIR_COEX_IND_TYPE_CXM_FEATURES_NOTIFICATION ==
14194 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType)
14195 {
14196 if(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData)
14197 {
14198 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14199 FL("Coex state: 0x%x coex feature: 0x%x"),
14200 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[0],
14201 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[1]);
14202
14203 if (wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2] << 16)
14204 {
14205 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, FL("power limit: 0x%x"),
14206 (tANI_U16)(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2]));
14207 }
14208 }
14209 break;
14210 }
14211
14212 pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070014213 if(NULL == pSmeCoexInd)
14214 {
14215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014216 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014217 break;
14218 }
14219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14220 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070014221 /* Message Header */
14222 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
14223 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070014224 /* Info from WDI Indication */
14225 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
14226 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
14227 {
14228 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
14229 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014230 /* VOS message wrapper */
14231 vosMsg.type = eWNI_SME_COEX_IND;
14232 vosMsg.bodyptr = (void *)pSmeCoexInd;
14233 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070014234 /* Send message to SME */
14235 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14236 {
14237 /* free the mem and return */
14238 vos_mem_free((v_VOID_t *)pSmeCoexInd);
14239 }
14240 else
14241 {
14242 /* DEBUG */
14243 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14244 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
14245 pSmeCoexInd->coexIndType,
14246 pSmeCoexInd->coexIndData[0],
14247 pSmeCoexInd->coexIndData[1],
14248 pSmeCoexInd->coexIndData[2],
14249 pSmeCoexInd->coexIndData[3]);
14250 }
14251 break;
14252 }
14253 case WDI_TX_COMPLETE_IND:
14254 {
14255 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
14256 /* Calling TxCompleteAck Indication from wda context*/
14257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14258 "Complete Indication received from HAL");
14259 if( pWDA->pAckTxCbFunc )
14260 {
14261 if( VOS_STATUS_SUCCESS !=
14262 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
14263 {
14264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14265 "Tx Complete timeout Timer Stop Failed ");
14266 }
Ganesh Kondabattini358fc9b2015-03-11 16:14:25 +053014267 pWDA->pAckTxCbFunc( pMac, &wdiLowLevelInd->wdiIndicationData.tx_complete_status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014268 pWDA->pAckTxCbFunc = NULL;
14269 }
14270 else
14271 {
14272 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14273 "Tx Complete Indication is received after timeout ");
14274 }
14275 break;
14276 }
Viral Modid86bde22012-12-10 13:09:21 -080014277 case WDI_P2P_NOA_START_IND :
14278 {
14279 tSirP2PNoaStart *pP2pNoaStart =
14280 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
14281
14282 if (NULL == pP2pNoaStart)
14283 {
14284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14285 "Memory allocation failure, "
14286 "WDI_P2P_NOA_START_IND not forwarded");
14287 break;
14288 }
14289 pP2pNoaStart->status =
14290 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
14291 pP2pNoaStart->bssIdx =
14292 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
14293 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
14294 (void *)pP2pNoaStart , 0) ;
14295 break;
14296 }
14297
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053014298#ifdef FEATURE_WLAN_TDLS
14299 case WDI_TDLS_IND :
14300 {
14301 tSirTdlsInd *pTdlsInd =
14302 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
14303
14304 if (NULL == pTdlsInd)
14305 {
14306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14307 "Memory allocation failure, "
14308 "WDI_TDLS_IND not forwarded");
14309 break;
14310 }
14311 pTdlsInd->status =
14312 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
14313 pTdlsInd->assocId =
14314 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
14315 pTdlsInd->staIdx =
14316 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
14317 pTdlsInd->reasonCode =
14318 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
14319 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
14320 (void *)pTdlsInd , 0) ;
14321 break;
14322 }
14323#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070014324 case WDI_P2P_NOA_ATTR_IND :
14325 {
14326 tSirP2PNoaAttr *pP2pNoaAttr =
14327 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070014328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14329 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070014330 if (NULL == pP2pNoaAttr)
14331 {
14332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14333 "Memory allocation failure, "
14334 "WDI_P2P_NOA_ATTR_IND not forwarded");
14335 break;
14336 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014337 pP2pNoaAttr->index =
14338 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
14339 pP2pNoaAttr->oppPsFlag =
14340 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
14341 pP2pNoaAttr->ctWin =
14342 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
14343
14344 pP2pNoaAttr->uNoa1IntervalCnt =
14345 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
14346 pP2pNoaAttr->uNoa1Duration =
14347 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
14348 pP2pNoaAttr->uNoa1Interval =
14349 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
14350 pP2pNoaAttr->uNoa1StartTime =
14351 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070014352 pP2pNoaAttr->uNoa2IntervalCnt =
14353 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
14354 pP2pNoaAttr->uNoa2Duration =
14355 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
14356 pP2pNoaAttr->uNoa2Interval =
14357 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
14358 pP2pNoaAttr->uNoa2StartTime =
14359 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070014360 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
14361 (void *)pP2pNoaAttr , 0) ;
14362 break;
14363 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014364#ifdef FEATURE_WLAN_SCAN_PNO
14365 case WDI_PREF_NETWORK_FOUND_IND:
14366 {
14367 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070014368 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
14369 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
14370 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
14371 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
14372
Jeff Johnson295189b2012-06-20 16:38:30 -070014373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14374 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070014375 if (NULL == pPrefNetworkFoundInd)
14376 {
14377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14378 "Memory allocation failure, "
14379 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
Kiet Lamb537cfb2013-11-07 12:56:49 +053014380 if (NULL !=
14381 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
14382 {
14383 wpalMemoryFree(
14384 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData
14385 );
14386 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
14387 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014388 break;
14389 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014390 /* Message Header */
14391 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070014392 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070014393
14394 /* Info from WDI Indication */
14395 pPrefNetworkFoundInd->ssId.length =
14396 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070014397 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070014398 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
14399 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
14400 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070014401 if (NULL !=
14402 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
14403 {
14404 pPrefNetworkFoundInd->frameLength =
14405 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
14406 vos_mem_copy( pPrefNetworkFoundInd->data,
14407 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
14408 pPrefNetworkFoundInd->frameLength);
14409 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
14410 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
14411 }
14412 else
14413 {
14414 pPrefNetworkFoundInd->frameLength = 0;
14415 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014416 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070014417 /* VOS message wrapper */
14418 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
14419 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
14420 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070014421 /* Send message to SME */
14422 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14423 {
14424 /* free the mem and return */
14425 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
14426 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014427 break;
14428 }
14429#endif // FEATURE_WLAN_SCAN_PNO
14430
14431#ifdef WLAN_WAKEUP_EVENTS
14432 case WDI_WAKE_REASON_IND:
14433 {
14434 vos_msg_t vosMsg;
14435 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
14436 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
14437 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
14438
14439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Sushant Kaushik1b645382014-10-13 16:39:36 +053014440 "[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 -070014441 wdiLowLevelInd->wdiIndicationType,
14442 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
14443 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
14444 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
14445
14446 if (NULL == pWakeReasonInd)
14447 {
14448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14449 "Memory allocation failure, "
14450 "WDI_WAKE_REASON_IND not forwarded");
14451 break;
14452 }
14453
14454 vos_mem_zero(pWakeReasonInd, allocSize);
14455
14456 /* Message Header */
14457 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
14458 pWakeReasonInd->mesgLen = allocSize;
14459
14460 /* Info from WDI Indication */
14461 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
14462 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
14463 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
14464 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
14465 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
14466 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
14467 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
14468 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
14469
14470 /* VOS message wrapper */
14471 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
14472 vosMsg.bodyptr = (void *) pWakeReasonInd;
14473 vosMsg.bodyval = 0;
14474
14475 /* Send message to SME */
14476 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14477 {
14478 /* free the mem and return */
14479 vos_mem_free((v_VOID_t *) pWakeReasonInd);
14480 }
14481
14482 break;
14483 }
14484#endif // WLAN_WAKEUP_EVENTS
14485
14486 case WDI_TX_PER_HIT_IND:
14487 {
14488 vos_msg_t vosMsg;
14489 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
14490 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
14491 /* VOS message wrapper */
14492 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
14493 vosMsg.bodyptr = NULL;
14494 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070014495 /* Send message to SME */
14496 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14497 {
14498 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
14499 }
14500 break;
14501 }
14502
Leo Chang9056f462013-08-01 19:21:11 -070014503#ifdef FEATURE_WLAN_LPHB
Leo Changd9df8aa2013-09-26 13:32:26 -070014504 case WDI_LPHB_IND:
Leo Chang9056f462013-08-01 19:21:11 -070014505 {
Leo Changd9df8aa2013-09-26 13:32:26 -070014506 vos_msg_t vosMsg;
14507 tSirLPHBInd *lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070014508
Leo Changd9df8aa2013-09-26 13:32:26 -070014509 lphbInd =
14510 (tSirLPHBInd *)vos_mem_malloc(sizeof(tSirLPHBInd));
14511 if (NULL == lphbInd)
Leo Chang9056f462013-08-01 19:21:11 -070014512 {
14513 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14514 "%s: LPHB IND buffer alloc Fail", __func__);
14515 return ;
14516 }
14517
Leo Changd9df8aa2013-09-26 13:32:26 -070014518 lphbInd->sessionIdx =
Leo Chang9056f462013-08-01 19:21:11 -070014519 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
Leo Changd9df8aa2013-09-26 13:32:26 -070014520 lphbInd->protocolType =
Leo Chang9056f462013-08-01 19:21:11 -070014521 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
Leo Changd9df8aa2013-09-26 13:32:26 -070014522 lphbInd->eventReason =
Leo Chang9056f462013-08-01 19:21:11 -070014523 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
14524
14525 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Leo Changd9df8aa2013-09-26 13:32:26 -070014526 "Get WDI_LPHB_IND bssIdx %d",
Leo Chang9056f462013-08-01 19:21:11 -070014527 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
14528
Leo Changd9df8aa2013-09-26 13:32:26 -070014529 vosMsg.type = eWNI_SME_LPHB_IND;
14530 vosMsg.bodyptr = lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070014531 vosMsg.bodyval = 0;
14532 /* Send message to SME */
14533 if (VOS_STATUS_SUCCESS !=
14534 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14535 {
14536 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
14537 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
Leo Changd9df8aa2013-09-26 13:32:26 -070014538 vos_mem_free(lphbInd);
Leo Chang9056f462013-08-01 19:21:11 -070014539 }
14540 break;
14541 }
14542#endif /* FEATURE_WLAN_LPHB */
Yue Mab9c86f42013-08-14 15:59:08 -070014543 case WDI_PERIODIC_TX_PTRN_FW_IND:
14544 {
14545 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14546 "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, "
14547 "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__,
14548 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx,
14549 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx,
14550 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status,
14551 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap);
14552
14553 break;
14554 }
Leo Chang9056f462013-08-01 19:21:11 -070014555
Ravi Joshid2ca7c42013-07-23 08:37:49 -070014556 case WDI_IBSS_PEER_INACTIVITY_IND:
14557 {
14558 tSirIbssPeerInactivityInd *pIbssInd =
14559 (tSirIbssPeerInactivityInd *)
14560 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
14561
14562 if (NULL == pIbssInd)
14563 {
14564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14565 "Memory allocation failure, "
14566 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
14567 break;
14568 }
14569
14570 pIbssInd->bssIdx =
14571 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
14572 pIbssInd->staIdx =
14573 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
14574 vos_mem_copy(pIbssInd->peerAddr,
14575 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
14576 sizeof(tSirMacAddr));
14577 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
14578 break;
14579 }
14580
Rajeev79dbe4c2013-10-05 11:03:42 +053014581#ifdef FEATURE_WLAN_BATCH_SCAN
14582 case WDI_BATCH_SCAN_RESULT_IND:
14583 {
14584 void *pBatchScanResult;
14585 void *pCallbackContext;
14586 tpAniSirGlobal pMac;
14587
14588 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
14589 "Received WDI_BATCHSCAN_RESULT_IND from FW");
14590
14591 /*sanity check*/
Sunil Duttbd736ed2014-05-26 21:19:41 +053014592 if (NULL == pWDA)
Rajeev79dbe4c2013-10-05 11:03:42 +053014593 {
14594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14595 "%s:pWDA is NULL", __func__);
14596 VOS_ASSERT(0);
14597 return;
14598 }
14599
14600 pBatchScanResult =
14601 (void *)wdiLowLevelInd->wdiIndicationData.pBatchScanResult;
14602 if (NULL == pBatchScanResult)
14603 {
14604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14605 "%s:Batch scan result from FW is null can't invoke HDD callback",
14606 __func__);
14607 VOS_ASSERT(0);
14608 return;
14609 }
14610
14611 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14612 if (NULL == pMac)
14613 {
14614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14615 "%s:pMac is NULL", __func__);
14616 VOS_ASSERT(0);
14617 return;
14618 }
14619
14620 pCallbackContext = pMac->pmc.batchScanResultCallbackContext;
14621 /*call hdd callback with set batch scan response data*/
14622 if(pMac->pmc.batchScanResultCallback)
14623 {
14624 pMac->pmc.batchScanResultCallback(pCallbackContext,
14625 pBatchScanResult);
14626 }
14627 else
14628 {
14629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14630 "%s:HDD callback is null", __func__);
14631 VOS_ASSERT(0);
14632 }
14633 break;
14634 }
14635#endif
14636
Leo Chang0b0e45a2013-12-15 15:18:55 -080014637#ifdef FEATURE_WLAN_CH_AVOID
14638 case WDI_CH_AVOID_IND:
14639 {
14640 vos_msg_t vosMsg;
14641 tSirChAvoidIndType *chAvoidInd;
14642
14643 chAvoidInd =
14644 (tSirChAvoidIndType *)vos_mem_malloc(sizeof(tSirChAvoidIndType));
14645 if (NULL == chAvoidInd)
14646 {
14647 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14648 "%s: CH_AVOID IND buffer alloc Fail", __func__);
14649 return ;
14650 }
14651
14652 chAvoidInd->avoidRangeCount =
14653 wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidRangeCount;
14654 wpalMemoryCopy((void *)chAvoidInd->avoidFreqRange,
14655 (void *)wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidFreqRange,
14656 chAvoidInd->avoidRangeCount * sizeof(tSirChAvoidFreqType));
14657
14658 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14659 "%s : WDA CH avoid notification", __func__);
14660
14661 vosMsg.type = eWNI_SME_CH_AVOID_IND;
14662 vosMsg.bodyptr = chAvoidInd;
14663 vosMsg.bodyval = 0;
14664 /* Send message to SME */
14665 if (VOS_STATUS_SUCCESS !=
14666 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14667 {
14668 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14669 "post eWNI_SME_CH_AVOID_IND to SME Failed");
14670 vos_mem_free(chAvoidInd);
14671 }
14672 break;
14673 }
14674#endif /* FEATURE_WLAN_CH_AVOID */
14675
Sunil Duttbd736ed2014-05-26 21:19:41 +053014676#ifdef WLAN_FEATURE_LINK_LAYER_STATS
14677 case WDI_LL_STATS_RESULTS_IND:
14678 {
14679 void *pLinkLayerStatsInd;
Sunil Duttbd736ed2014-05-26 21:19:41 +053014680 tpAniSirGlobal pMac;
14681
14682 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14683 "Received WDI_LL_STATS_RESULTS_IND from FW");
14684
14685 /*sanity check*/
14686 if (NULL == pWDA)
14687 {
14688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14689 "%s:pWDA is NULL", __func__);
14690 VOS_ASSERT(0);
14691 return;
14692 }
14693
14694 pLinkLayerStatsInd =
Dino Mycled3d50022014-07-07 12:58:25 +053014695 (void *)wdiLowLevelInd->
14696 wdiIndicationData.wdiLinkLayerStatsResults.pLinkLayerStatsResults;
Sunil Duttbd736ed2014-05-26 21:19:41 +053014697 if (NULL == pLinkLayerStatsInd)
14698 {
14699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14700 "%s:Link Layer Statistics from FW is null can't invoke HDD callback",
14701 __func__);
14702 VOS_ASSERT(0);
14703 return;
14704 }
14705
14706 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14707 if (NULL == pMac)
14708 {
14709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14710 "%s:pMac is NULL", __func__);
14711 VOS_ASSERT(0);
14712 return;
14713 }
14714
Dino Mycled3d50022014-07-07 12:58:25 +053014715 /* call hdd callback with Link Layer Statistics.
14716 * vdev_id/ifacId in link_stats_results will be
14717 * used to retrieve the correct HDD context
14718 */
Sunil Duttbd736ed2014-05-26 21:19:41 +053014719 if (pMac->sme.pLinkLayerStatsIndCallback)
14720 {
Dino Mycled3d50022014-07-07 12:58:25 +053014721 pMac->sme.pLinkLayerStatsIndCallback(pMac->pAdapter,
Sunil Duttbd736ed2014-05-26 21:19:41 +053014722 WDA_LINK_LAYER_STATS_RESULTS_RSP,
Dino Mycled3d50022014-07-07 12:58:25 +053014723 pLinkLayerStatsInd,
14724 wdiLowLevelInd->
14725 wdiIndicationData.wdiLinkLayerStatsResults.macAddr);
Sunil Duttbd736ed2014-05-26 21:19:41 +053014726 }
14727 else
14728 {
14729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14730 "%s:HDD callback is null", __func__);
14731 }
14732 break;
14733 }
14734#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
14735
Dino Mycle41bdc942014-06-10 11:30:24 +053014736#ifdef WLAN_FEATURE_EXTSCAN
14737 case WDI_EXTSCAN_PROGRESS_IND:
14738 case WDI_EXTSCAN_SCAN_AVAILABLE_IND:
14739 case WDI_EXTSCAN_SCAN_RESULT_IND:
14740 case WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND:
14741 case WDI_EXTSCAN_SIGN_RSSI_RESULT_IND:
14742 {
14743 void *pEXTScanData;
14744 void *pCallbackContext;
14745 tpAniSirGlobal pMac;
14746 tANI_U16 indType;
14747
14748 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14749 "Received WDI_EXTSCAN Indications from FW");
14750 /*sanity check*/
14751 if (NULL == pWDA)
14752 {
14753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14754 "%s:pWDA is NULL", __func__);
14755 VOS_ASSERT(0);
14756 return;
14757 }
14758 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_PROGRESS_IND)
14759 {
14760 indType = WDA_EXTSCAN_PROGRESS_IND;
14761
14762 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14763 "WDI_EXTSCAN Indication is WDI_EXTSCAN_PROGRESS_IND");
14764 }
14765 if (wdiLowLevelInd->wdiIndicationType ==
14766 WDI_EXTSCAN_SCAN_AVAILABLE_IND)
14767 {
14768 indType = WDA_EXTSCAN_SCAN_AVAILABLE_IND;
14769
14770 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14771 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_AVAILABLE_IND");
14772 }
14773 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_SCAN_RESULT_IND)
14774 {
14775 indType = WDA_EXTSCAN_SCAN_RESULT_IND;
14776
14777 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14778 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_RESULT_IND");
14779 }
14780 if (wdiLowLevelInd->wdiIndicationType ==
14781 WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND)
14782 {
14783 indType = WDA_EXTSCAN_BSSID_HOTLIST_RESULT_IND;
14784
14785 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14786 "WDI_EXTSCAN Indication is WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND");
14787 }
14788 if (wdiLowLevelInd->wdiIndicationType ==
14789 WDI_EXTSCAN_SIGN_RSSI_RESULT_IND)
14790 {
14791 indType = WDA_EXTSCAN_SIGNF_RSSI_RESULT_IND;
14792
14793 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14794 "WDI_EXTSCAN Indication is WDA_EXTSCAN_SIGNF_RSSI_RESULT_IND");
14795 }
14796
14797 pEXTScanData =
14798 (void *)wdiLowLevelInd->wdiIndicationData.pEXTScanIndData;
14799 if (NULL == pEXTScanData)
14800 {
14801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14802 "%s: EXTSCAN Indication Data is null, can't invoke HDD callback",
14803 __func__);
14804 VOS_ASSERT(0);
14805 return;
14806 }
14807
14808 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14809 if (NULL == pMac)
14810 {
14811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14812 "%s:pMac is NULL", __func__);
14813 VOS_ASSERT(0);
14814 return;
14815 }
14816
14817 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
14818
14819 if(pMac->sme.pEXTScanIndCb)
14820 {
14821 pMac->sme.pEXTScanIndCb(pCallbackContext,
14822 indType,
14823 pEXTScanData);
14824 }
14825 else
14826 {
14827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14828 "%s:HDD callback is null", __func__);
14829 }
14830 break;
14831 }
14832#endif /* WLAN_FEATURE_EXTSCAN */
Abhishek Singh66c16762014-08-14 19:13:19 +053014833 case WDI_DEL_BA_IND:
14834 {
14835 tpBADeleteParams pDelBAInd =
14836 (tpBADeleteParams)vos_mem_malloc(sizeof(tpBADeleteParams));
14837
14838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14839 "Received WDI_DEL_BA_IND from WDI ");
14840 if(NULL == pDelBAInd)
14841 {
14842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14843 "%s: VOS MEM Alloc Failure", __func__);
14844 break;
14845 }
14846 vos_mem_copy(pDelBAInd->peerMacAddr,
14847 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.peerMacAddr,
14848 sizeof(tSirMacAddr));
14849 vos_mem_copy(pDelBAInd->bssId,
14850 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.bssId,
14851 sizeof(tSirMacAddr));
14852 pDelBAInd->staIdx =
14853 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.staIdx;
14854 pDelBAInd->baTID =
14855 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baTID;
14856 pDelBAInd->baDirection =
14857 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baDirection;
14858 pDelBAInd->reasonCode =
14859 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.reasonCode;
14860
14861 WDA_SendMsg(pWDA, SIR_LIM_DEL_BA_IND,
14862 (void *)pDelBAInd , 0) ;
14863 break;
14864 }
Dino Mycle41bdc942014-06-10 11:30:24 +053014865
Jeff Johnson295189b2012-06-20 16:38:30 -070014866 default:
14867 {
14868 /* TODO error */
14869 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14870 "Received UNKNOWN Indication from WDI ");
14871 }
14872 }
14873 return ;
14874}
14875
Jeff Johnson295189b2012-06-20 16:38:30 -070014876/*
14877 * BA related processing in WDA.
14878 */
Jeff Johnson295189b2012-06-20 16:38:30 -070014879void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
14880 void* pUserData)
14881{
14882 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14883 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070014884 if(NULL == pWdaParams)
14885 {
14886 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014887 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014888 VOS_ASSERT(0) ;
14889 return ;
14890 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014891 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070014892 vos_mem_free(pWdaParams->wdaMsgParam) ;
14893 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14894 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014896 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014897 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
14898 {
14899 tANI_U8 i = 0 ;
14900 tBaActivityInd *baActivityInd = NULL ;
14901 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
14902 tANI_U8 allocSize = sizeof(tBaActivityInd)
14903 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
14904 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
14905 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014906 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014907 if(NULL == baActivityInd)
14908 {
14909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014910 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014911 VOS_ASSERT(0) ;
14912 return;
14913 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014914 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
14915 sizeof(tSirMacAddr)) ;
14916 baActivityInd->baCandidateCnt = baCandidateCount ;
14917
14918 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
14919 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
14920
14921 for(i = 0 ; i < baCandidateCount ; i++)
14922 {
14923 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014924 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
14925 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014926 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
14927 {
14928 baCandidate->baInfo[tid].fBaEnable =
14929 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
14930 baCandidate->baInfo[tid].startingSeqNum =
14931 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
14932 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070014933 wdiBaCandidate++ ;
14934 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014935 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014936 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
14937 }
14938 else
14939 {
14940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14941 "BA Trigger RSP with Failure received ");
14942 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014943 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014944}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014945
14946
14947/*
14948 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
14949 * during MCC
14950 */
14951void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
14952{
14953 wpt_uint32 enabled;
14954 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
14955 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
14956 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
14957
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053014958 if (NULL == pMac )
14959 {
14960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14961 "%s: Invoked with invalid MAC context ", __func__ );
14962 VOS_ASSERT(0);
14963 return;
14964 }
14965
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014966 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
14967 != eSIR_SUCCESS)
14968 {
14969 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14970 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
14971 return;
14972 }
14973
14974 if(!enabled)
14975 {
14976 return;
14977 }
14978
14979 if(NULL == pWDA)
14980 {
14981 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14982 "%s:WDA context is NULL", __func__);
14983 VOS_ASSERT(0);
14984 return;
14985 }
14986
14987 if(activate)
14988 {
14989 if( VOS_STATUS_SUCCESS !=
14990 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
14991 {
14992 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14993 "Traffic Stats Timer Start Failed ");
14994 return;
14995 }
14996 WDI_DS_ActivateTrafficStats();
14997 }
14998 else
14999 {
15000 WDI_DS_DeactivateTrafficStats();
15001 WDI_DS_ClearTrafficStats();
15002
15003 if( VOS_STATUS_SUCCESS !=
15004 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
15005 {
15006 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15007 "Traffic Stats Timer Stop Failed ");
15008 return;
15009 }
15010 }
15011}
15012
15013/*
15014 * Traffic Stats Timer handler
15015 */
15016void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
15017{
15018 WDI_Status wdiStatus;
15019 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
15020 WDI_TrafficStatsIndType trafficStatsIndParams;
15021 wpt_uint32 length, enabled;
15022 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
15023
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053015024 if (NULL == pMac )
15025 {
15026 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15027 "%s: Invoked with invalid MAC context ", __func__ );
15028 VOS_ASSERT(0);
15029 return;
15030 }
15031
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015032 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
15033 != eSIR_SUCCESS)
15034 {
15035 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15036 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
15037 return;
15038 }
15039
15040 if(!enabled)
15041 {
15042 WDI_DS_DeactivateTrafficStats();
15043 return;
15044 }
15045
15046 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
15047
15048 if(pWdiTrafficStats != NULL)
15049 {
15050 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
15051 trafficStatsIndParams.length = length;
15052 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080015053 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015054 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
15055 trafficStatsIndParams.pUserData = pWDA;
15056
15057 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
15058
15059 if(WDI_STATUS_PENDING == wdiStatus)
15060 {
15061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15062 "Pending received for %s:%d ",__func__,__LINE__ );
15063 }
15064 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
15065 {
15066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15067 "Failure in %s:%d ",__func__,__LINE__ );
15068 }
15069
15070 WDI_DS_ClearTrafficStats();
15071 }
15072 else
15073 {
15074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
15075 "pWdiTrafficStats is Null");
15076 }
15077
15078 if( VOS_STATUS_SUCCESS !=
15079 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
15080 {
15081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
15082 "Traffic Stats Timer Start Failed ");
15083 return;
15084 }
15085}
15086
Jeff Johnson295189b2012-06-20 16:38:30 -070015087/*
15088 * BA Activity check timer handler
15089 */
15090void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
15091{
15092 tANI_U8 curSta = 0 ;
15093 tANI_U8 tid = 0 ;
15094 tANI_U8 size = 0 ;
15095 tANI_U8 baCandidateCount = 0 ;
15096 tANI_U8 newBaCandidate = 0 ;
Abhishek Singh0644e482014-10-06 18:38:23 +053015097 tANI_U32 val;
Jeff Johnson295189b2012-06-20 16:38:30 -070015098 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
Abhishek Singh0644e482014-10-06 18:38:23 +053015099 tpAniSirGlobal pMac;
15100
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053015101 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070015102 {
15103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053015104 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015105 VOS_ASSERT(0);
15106 return ;
15107 }
15108 if(WDA_MAX_STA < pWDA->wdaMaxSta)
15109 {
15110 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15111 "Inconsistent STA entries in WDA");
15112 VOS_ASSERT(0) ;
Abhishek Singh0644e482014-10-06 18:38:23 +053015113 }
15114 if(NULL == pWDA->pVosContext)
15115 {
15116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15117 "%s: pVosContext is NULL",__func__);
15118 VOS_ASSERT(0);
15119 return ;
15120 }
15121 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Abhishek Singh68883952014-10-14 11:59:05 +053015122 if(NULL == pMac)
15123 {
15124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15125 "%s: pMac is NULL",__func__);
15126 VOS_ASSERT(0);
15127 return ;
15128 }
15129
Abhishek Singh0644e482014-10-06 18:38:23 +053015130 if (wlan_cfgGetInt(pMac,
15131 WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC, &val) !=
15132 eSIR_SUCCESS)
15133 {
15134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15135 "Unable to get WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC");
15136 val = 0;
15137 }
15138
Jeff Johnson295189b2012-06-20 16:38:30 -070015139 /* walk through all STA entries and find out TX packet count */
15140 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
15141 {
Abhishek Singh0644e482014-10-06 18:38:23 +053015142 tANI_U32 currentOperChan = pWDA->wdaStaInfo[curSta].currentOperChan;
Gopichand Nakkala976e3252013-01-03 15:45:56 -080015143#ifdef WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053015144 // We can only do BA on "hard" STAs.
15145 if (!(IS_HWSTA_IDX(curSta)))
15146 {
15147 continue;
15148 }
Gopichand Nakkala976e3252013-01-03 15:45:56 -080015149#endif //WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053015150 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
15151 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070015152 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015153 tANI_U32 txPktCount = 0 ;
15154 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015155 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070015156 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
15157 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070015158 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
15159 curSta, tid, &txPktCount)))
15160 {
15161#if 0
15162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
15163 "************* %d:%d, %d ",curSta, txPktCount,
15164 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
15165#endif
Abhishek Singh0644e482014-10-06 18:38:23 +053015166 if(val && ( (currentOperChan >= SIR_11B_CHANNEL_BEGIN) &&
15167 (currentOperChan <= SIR_11B_CHANNEL_END)))
15168 {
15169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15170 "%s: BTC disabled aggregation - dont start "
15171 "TX ADDBA req",__func__);
15172 }
15173 else if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070015174 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Abhishek Singh424ae432014-12-05 11:54:54 +053015175 && (((eSYSTEM_STA_IN_IBSS_ROLE ==
15176 pWDA->wdaGlobalSystemRole) && txPktCount )
15177 || (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
15178 curSta, tid))))
Jeff Johnson295189b2012-06-20 16:38:30 -070015179 {
15180 /* get prepare for sending message to HAL */
15181 //baCandidate[baCandidateCount].staIdx = curSta ;
15182 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
15183 newBaCandidate = WDA_ENABLE_BA ;
15184 }
15185 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
15186 }
15187 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015188 /* fill the entry for all the sta with given TID's */
15189 if(WDA_ENABLE_BA == newBaCandidate)
15190 {
15191 /* move to next BA candidate */
15192 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
15193 size += sizeof(WDI_TriggerBAReqCandidateType) ;
15194 baCandidateCount++ ;
15195 newBaCandidate = WDA_DISABLE_BA ;
15196 }
15197 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015198 /* prepare and send message to hal */
15199 if( 0 < baCandidateCount)
15200 {
15201 WDI_Status status = WDI_STATUS_SUCCESS ;
15202 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
15203 tWDA_ReqParams *pWdaParams =
15204 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015205 if(NULL == pWdaParams)
15206 {
15207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015208 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015209 VOS_ASSERT(0) ;
15210 return;
15211 }
15212 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
15213 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
15214 if(NULL == wdiTriggerBaReq)
15215 {
15216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015217 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015218 VOS_ASSERT(0) ;
15219 vos_mem_free(pWdaParams);
15220 return;
15221 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015222 do
15223 {
15224 WDI_TriggerBAReqinfoType *triggerBaInfo =
15225 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
15226 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
15227 /* TEMP_FIX: Need to see if WDI need check for assoc session for
15228 * for each request */
15229 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
15230 triggerBaInfo->ucBASessionID = 0;
15231 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
15232 } while(0) ;
15233 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
15234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015235 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015236 pWdaParams->pWdaContext = pWDA;
15237 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
15238 pWdaParams->wdaMsgParam = NULL;
15239 status = WDI_TriggerBAReq(wdiTriggerBaReq,
15240 WDA_TriggerBaReqCallback, pWdaParams) ;
15241 if(IS_WDI_STATUS_FAILURE(status))
15242 {
15243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15244 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
15245 vos_mem_free(pWdaParams->wdaMsgParam) ;
15246 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15247 vos_mem_free(pWdaParams) ;
15248 }
15249 }
15250 else
15251 {
15252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
15253 "There is no TID for initiating BA");
15254 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015255 if( VOS_STATUS_SUCCESS !=
15256 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
15257 {
15258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15259 "BA Activity Timer Stop Failed ");
15260 return ;
15261 }
15262 if( VOS_STATUS_SUCCESS !=
15263 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
15264 {
15265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15266 "BA Activity Timer Start Failed ");
15267 return;
15268 }
15269 return ;
15270}
Jeff Johnson295189b2012-06-20 16:38:30 -070015271/*
15272 * WDA common routine to create timer used by WDA.
15273 */
15274static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
15275{
Jeff Johnson295189b2012-06-20 16:38:30 -070015276 VOS_STATUS status = VOS_STATUS_SUCCESS ;
15277 tANI_U32 val = 0 ;
15278 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
15279
15280 if(NULL == pMac)
15281 {
15282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015283 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015284 VOS_ASSERT(0);
15285 return VOS_STATUS_E_FAILURE;
15286 }
15287 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
15288 != eSIR_SUCCESS)
15289 {
15290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15291 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
15292 return VOS_STATUS_E_FAILURE;
15293 }
15294 val = SYS_MS_TO_TICKS(val) ;
15295
15296 /* BA activity check timer */
15297 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
15298 "BA Activity Check timer", WDA_TimerHandler,
15299 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
15300 if(status != TX_SUCCESS)
15301 {
15302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15303 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015304 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015305 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015306 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015307 /* Tx Complete Timeout timer */
15308 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
15309 "Tx Complete Check timer", WDA_TimerHandler,
15310 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015311 if(status != TX_SUCCESS)
15312 {
15313 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15314 "Unable to create Tx Complete Timeout timer");
15315 /* Destroy timer of BA activity check timer */
15316 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
15317 if(status != TX_SUCCESS)
15318 {
15319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15320 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015321 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015322 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015323 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015324 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015325
15326 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
15327
15328 /* Traffic Stats timer */
15329 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
15330 "Traffic Stats timer", WDA_TimerHandler,
15331 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
15332 if(status != TX_SUCCESS)
15333 {
15334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15335 "Unable to create traffic stats timer");
15336 /* Destroy timer of BA activity check timer */
15337 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
15338 if(status != TX_SUCCESS)
15339 {
15340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15341 "Unable to Destroy BA activity timer");
15342 }
15343 /* Destroy timer of tx complete timer */
15344 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
15345 if(status != TX_SUCCESS)
15346 {
15347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15348 "Unable to Tx complete timer");
15349 }
15350 return VOS_STATUS_E_FAILURE ;
15351 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015352 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015353}
Jeff Johnson295189b2012-06-20 16:38:30 -070015354/*
15355 * WDA common routine to destroy timer used by WDA.
15356 */
15357static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
15358{
15359 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015360 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
15361 if(status != TX_SUCCESS)
15362 {
15363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15364 "Unable to Destroy Tx Complete Timeout timer");
15365 return eSIR_FAILURE ;
15366 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015367 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
15368 if(status != TX_SUCCESS)
15369 {
15370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15371 "Unable to Destroy BA activity timer");
15372 return eSIR_FAILURE ;
15373 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015374 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
15375 if(status != TX_SUCCESS)
15376 {
15377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15378 "Unable to Destroy traffic stats timer");
15379 return eSIR_FAILURE ;
15380 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015381 return eSIR_SUCCESS ;
15382}
Jeff Johnson295189b2012-06-20 16:38:30 -070015383/*
15384 * WDA timer handler.
15385 */
15386void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
15387{
15388 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
15389 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015390 /*
15391 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
15392 */
15393 wdaMsg.type = timerInfo ;
15394 wdaMsg.bodyptr = NULL;
15395 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070015396 /* post the message.. */
15397 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
15398 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
15399 {
15400 vosStatus = VOS_STATUS_E_BADMSG;
15401 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015402}
Jeff Johnson295189b2012-06-20 16:38:30 -070015403/*
15404 * WDA Tx Complete timeout Indication.
15405 */
15406void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
15407{
15408 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015409 if( pWDA->pAckTxCbFunc )
15410 {
15411 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015412 "TxComplete timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070015413 pWDA->pAckTxCbFunc( pMac, 0);
15414 pWDA->pAckTxCbFunc = NULL;
15415 }
15416 else
15417 {
15418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015419 "There is no request pending for TxComplete and wait timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070015420 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015421}
Jeff Johnson295189b2012-06-20 16:38:30 -070015422/*
15423 * WDA Set REG Domain to VOS NV
15424 */
Abhishek Singha306a442013-11-07 18:39:01 +053015425eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId,
15426 tAniBool sendRegHint)
Jeff Johnson295189b2012-06-20 16:38:30 -070015427{
Abhishek Singha306a442013-11-07 18:39:01 +053015428 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId, sendRegHint))
Jeff Johnson295189b2012-06-20 16:38:30 -070015429 {
15430 return eHAL_STATUS_INVALID_PARAMETER;
15431 }
15432 return eHAL_STATUS_SUCCESS;
15433}
Jeff Johnson295189b2012-06-20 16:38:30 -070015434
Jeff Johnson295189b2012-06-20 16:38:30 -070015435#ifdef FEATURE_WLAN_SCAN_PNO
15436/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015437 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015438 *
15439 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015440void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015441{
15442 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015443 tSirPNOScanReq *pPNOScanReqParams;
15444
Jeff Johnson295189b2012-06-20 16:38:30 -070015445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015446 "<------ %s, wdiStatus: %d",__func__, status);
Yue Ma7f44bbe2013-04-12 11:47:39 -070015447 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070015448 {
15449 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015450 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015451 VOS_ASSERT(0) ;
15452 return ;
15453 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015454
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015455 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
15456 if(pPNOScanReqParams->statusCallback)
15457 {
15458 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
15459 (status == WDI_STATUS_SUCCESS) ?
15460 VOS_STATUS_SUCCESS : VOS_STATUS_E_FAILURE);
15461 }
15462
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053015463 if (pPNOScanReqParams->enable == 1)
15464 {
15465 if (pPNOScanReqParams->aNetworks)
15466 vos_mem_free(pPNOScanReqParams->aNetworks);
15467 if (pPNOScanReqParams->p24GProbeTemplate)
15468 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
15469 if (pPNOScanReqParams->p5GProbeTemplate)
15470 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
15471 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015472 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15473 vos_mem_free(pWdaParams->wdaMsgParam);
15474 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015475
15476 return ;
15477}
Jeff Johnson295189b2012-06-20 16:38:30 -070015478/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015479 * FUNCTION: WDA_PNOScanReqCallback
15480 * Free memory.
15481 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
15482 */
15483void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015484{
Yue Ma7f44bbe2013-04-12 11:47:39 -070015485 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015486 tSirPNOScanReq *pPNOScanReqParams;
Yue Ma7f44bbe2013-04-12 11:47:39 -070015487
15488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15489 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15490
15491 if(NULL == pWdaParams)
15492 {
15493 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15494 "%s: pWdaParams received NULL", __func__);
15495 VOS_ASSERT(0);
15496 return;
15497 }
15498
15499 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15500 {
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015501 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
15502 if(pPNOScanReqParams->statusCallback)
15503 {
15504 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
15505 VOS_STATUS_E_FAILURE);
15506 }
15507
Hanumantha Reddy Pothula06e87b22015-03-02 18:02:23 +053015508 if (pPNOScanReqParams->enable == 1)
15509 {
15510 if (pPNOScanReqParams->aNetworks)
15511 vos_mem_free(pPNOScanReqParams->aNetworks);
15512 if (pPNOScanReqParams->p24GProbeTemplate)
15513 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
15514 if (pPNOScanReqParams->p5GProbeTemplate)
15515 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
15516 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015517 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15518 vos_mem_free(pWdaParams->wdaMsgParam);
15519 vos_mem_free(pWdaParams);
15520 }
15521
15522 return;
15523}
15524/*
15525 * FUNCTION: WDA_UpdateScanParamsRespCallback
15526 *
15527 */
15528void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
15529{
15530 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070015531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015532 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070015533 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070015534 {
15535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015536 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015537 VOS_ASSERT(0) ;
15538 return ;
15539 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015540
15541 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15542 vos_mem_free(pWdaParams->wdaMsgParam);
15543 vos_mem_free(pWdaParams);
15544
Jeff Johnson295189b2012-06-20 16:38:30 -070015545 return ;
15546}
Jeff Johnson295189b2012-06-20 16:38:30 -070015547/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015548 * FUNCTION: WDA_UpdateScanParamsReqCallback
15549 * Free memory.
15550 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
15551 */
15552void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
15553{
15554 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15555
15556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15557 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15558
15559 if(NULL == pWdaParams)
15560 {
15561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15562 "%s: pWdaParams received NULL", __func__);
15563 VOS_ASSERT(0);
15564 return;
15565 }
15566
15567 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15568 {
15569 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15570 vos_mem_free(pWdaParams->wdaMsgParam);
15571 vos_mem_free(pWdaParams);
15572 }
15573
15574 return;
15575}
15576/*
Jeff Johnson295189b2012-06-20 16:38:30 -070015577 * FUNCTION: WDA_ProcessSetPreferredNetworkList
15578 * Request to WDI to set Preferred Network List.Offload
15579 */
15580VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
15581 tSirPNOScanReq *pPNOScanReqParams)
15582{
Jeff Johnson43971f52012-07-17 12:26:56 -070015583 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015584 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
15585 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
15586 tWDA_ReqParams *pWdaParams ;
15587 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070015588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015589 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015590 if(NULL == pwdiPNOScanReqInfo)
15591 {
15592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015593 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015594 VOS_ASSERT(0);
15595 return VOS_STATUS_E_NOMEM;
15596 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015597 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15598 if(NULL == pWdaParams)
15599 {
15600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015601 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015602 VOS_ASSERT(0);
15603 vos_mem_free(pwdiPNOScanReqInfo);
15604 return VOS_STATUS_E_NOMEM;
15605 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015606 //
15607 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
15608 //
15609 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
15610 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070015611 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
15612 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
15613 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015614 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
15615 {
15616 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
15617 &pPNOScanReqParams->aNetworks[i],
15618 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
15619 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015620 /*Scan timer intervals*/
15621 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
15622 &pPNOScanReqParams->scanTimers,
15623 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070015624 /*Probe template for 2.4GHz band*/
15625 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
15626 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
15627 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070015628 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
15629 pPNOScanReqParams->p24GProbeTemplate,
15630 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070015631 /*Probe template for 5GHz band*/
15632 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
15633 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
15634 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070015635 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
15636 pPNOScanReqParams->p5GProbeTemplate,
15637 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070015638 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
15639 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015640
Jeff Johnson295189b2012-06-20 16:38:30 -070015641 /* Store Params pass it to WDI */
15642 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
15643 pWdaParams->pWdaContext = pWDA;
15644 /* Store param pointer as passed in by caller */
15645 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015646 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015647 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015648 if(IS_WDI_STATUS_FAILURE(status))
15649 {
15650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15651 "Failure in Set PNO REQ WDI API, free all the memory " );
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015652 if(pPNOScanReqParams->statusCallback)
15653 {
15654 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
15655 VOS_STATUS_E_FAILURE);
15656 }
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053015657 if (pPNOScanReqParams->enable == 1)
15658 {
15659 if (pPNOScanReqParams->aNetworks)
15660 vos_mem_free(pPNOScanReqParams->aNetworks);
15661 if (pPNOScanReqParams->p24GProbeTemplate)
15662 vos_mem_free(pPNOScanReqParams->p24GProbeTemplate);
15663 if (pPNOScanReqParams->p5GProbeTemplate)
15664 vos_mem_free(pPNOScanReqParams->p5GProbeTemplate);
15665 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015666 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15667 vos_mem_free(pWdaParams->wdaMsgParam);
Hanumantha Reddy Pothulad769f3e2015-02-19 17:00:02 +053015668
Jeff Johnson295189b2012-06-20 16:38:30 -070015669 pWdaParams->wdaWdiApiMsgParam = NULL;
15670 pWdaParams->wdaMsgParam = NULL;
15671 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015672 return CONVERT_WDI2VOS_STATUS(status) ;
15673}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015674
15675#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
15676
15677void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
15678{
15679 /*Convert the CSR Auth types to WDI Auth types */
15680 switch (csrAuthType)
15681 {
15682 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
15683 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
15684 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015685#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015686 case eCSR_AUTH_TYPE_CCKM_WPA:
15687 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
15688 break;
15689#endif
15690 case eCSR_AUTH_TYPE_WPA:
15691 *AuthType = eWDA_AUTH_TYPE_WPA;
15692 break;
15693 case eCSR_AUTH_TYPE_WPA_PSK:
15694 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
15695 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015696#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015697 case eCSR_AUTH_TYPE_CCKM_RSN:
15698 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
15699 break;
15700#endif
15701 case eCSR_AUTH_TYPE_RSN:
15702 *AuthType = eWDA_AUTH_TYPE_RSN;
15703 break;
15704 case eCSR_AUTH_TYPE_RSN_PSK:
15705 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
15706 break;
15707#if defined WLAN_FEATURE_VOWIFI_11R
15708 case eCSR_AUTH_TYPE_FT_RSN:
15709 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
15710 break;
15711 case eCSR_AUTH_TYPE_FT_RSN_PSK:
15712 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
15713 break;
15714#endif
15715#ifdef FEATURE_WLAN_WAPI
15716 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
15717 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
15718 break;
15719 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
15720 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
15721 break;
15722#endif /* FEATURE_WLAN_WAPI */
15723 case eCSR_AUTH_TYPE_SHARED_KEY:
15724 case eCSR_AUTH_TYPE_AUTOSWITCH:
15725 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
15726 break;
15727#if 0
15728 case eCSR_AUTH_TYPE_SHARED_KEY:
15729 *AuthType = eWDA_AUTH_TYPE_SHARED_KEY;
15730 break;
15731 case eCSR_AUTH_TYPE_AUTOSWITCH:
15732 *AuthType = eWDA_AUTH_TYPE_AUTOSWITCH;
15733#endif
15734 default:
Deepthi Gowribfd17132014-11-14 17:59:04 +053015735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015736 "%s: Unknown Auth Type", __func__);
15737 break;
15738 }
15739}
15740void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
15741{
15742 switch (csrEncrType)
15743 {
15744 case eCSR_ENCRYPT_TYPE_NONE:
15745 *EncrType = WDI_ED_NONE;
15746 break;
15747 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
15748 case eCSR_ENCRYPT_TYPE_WEP40:
15749 *EncrType = WDI_ED_WEP40;
15750 break;
15751 case eCSR_ENCRYPT_TYPE_WEP104:
15752 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
15753 *EncrType = WDI_ED_WEP104;
15754 break;
15755 case eCSR_ENCRYPT_TYPE_TKIP:
15756 *EncrType = WDI_ED_TKIP;
15757 break;
15758 case eCSR_ENCRYPT_TYPE_AES:
15759 *EncrType = WDI_ED_CCMP;
15760 break;
15761#ifdef WLAN_FEATURE_11W
15762 case eCSR_ENCRYPT_TYPE_AES_CMAC:
15763 *EncrType = WDI_ED_AES_128_CMAC;
15764 break;
15765#endif
15766#ifdef FEATURE_WLAN_WAPI
15767 case eCSR_ENCRYPT_TYPE_WPI:
15768 *EncrType = WDI_ED_WPI;
15769 break;
15770#endif
15771 case eCSR_ENCRYPT_TYPE_ANY:
15772 *EncrType = WDI_ED_ANY;
15773 break;
15774
15775 default:
15776 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15777 "%s: Unknown Encryption Type", __func__);
15778 break;
15779 }
15780}
15781
15782/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015783 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015784 * Request to WDI to set Roam Offload Scan
15785 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015786VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015787 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
15788{
15789 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015790 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
15791 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015792 tWDA_ReqParams *pWdaParams ;
15793 v_U8_t csrAuthType;
15794 WDI_RoamNetworkType *pwdiRoamNetworkType;
15795 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
15796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15797 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015798 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015799 {
15800 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15801 "%s: VOS MEM Alloc Failure", __func__);
15802 VOS_ASSERT(0);
15803 return VOS_STATUS_E_NOMEM;
15804 }
15805 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15806 if (NULL == pWdaParams)
15807 {
15808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15809 "%s: VOS MEM Alloc Failure", __func__);
15810 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015811 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015812 return VOS_STATUS_E_NOMEM;
15813 }
15814
15815 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015816 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015817 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015818 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
15819 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015820 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
15821 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
15822 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
15823 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
15824 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
15825 sizeof(pwdiRoamNetworkType->currAPbssid));
15826 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
15827 csrAuthType);
15828 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
15829 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
15830 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
15831 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
15832 pwdiRoamOffloadScanInfo->LookupThreshold =
15833 pRoamOffloadScanReqParams->LookupThreshold ;
Varun Reddy Yeturu6c5e25c2014-01-09 21:55:37 -080015834 pwdiRoamOffloadScanInfo->RxSensitivityThreshold =
15835 pRoamOffloadScanReqParams->RxSensitivityThreshold;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015836 pwdiRoamOffloadScanInfo->RoamRssiDiff =
15837 pRoamOffloadScanReqParams->RoamRssiDiff ;
Sameer Thalappil4ae66ec2013-11-05 14:17:35 -080015838 pwdiRoamOffloadScanInfo->MAWCEnabled =
15839 pRoamOffloadScanReqParams->MAWCEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015840 pwdiRoamOffloadScanInfo->Command =
15841 pRoamOffloadScanReqParams->Command ;
15842 pwdiRoamOffloadScanInfo->StartScanReason =
15843 pRoamOffloadScanReqParams->StartScanReason ;
15844 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
15845 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
15846 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
15847 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
15848 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
15849 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
15850 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
15851 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
15852 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
15853 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015854 pwdiRoamOffloadScanInfo->IsESEEnabled =
15855 pRoamOffloadScanReqParams->IsESEEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015856 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
15857 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
15858 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
15859 pwdiRoamNetworkType->ssId.ucLength =
15860 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
15861 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
15862 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
15863 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
15864 pwdiRoamNetworkType->ChannelCount =
15865 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
15866 pwdiRoamOffloadScanInfo->ChannelCacheType =
15867 pRoamOffloadScanReqParams->ChannelCacheType;
15868 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
15869 pRoamOffloadScanReqParams->ValidChannelList,
15870 pRoamOffloadScanReqParams->ValidChannelCount);
15871 pwdiRoamOffloadScanInfo->ValidChannelCount =
15872 pRoamOffloadScanReqParams->ValidChannelCount;
15873 pwdiRoamOffloadScanInfo->us24GProbeSize =
15874 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
15875 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
15876 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
15877 pRoamOffloadScanReqParams->p24GProbeTemplate,
15878 pwdiRoamOffloadScanInfo->us24GProbeSize);
15879 pwdiRoamOffloadScanInfo->us5GProbeSize =
15880 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
15881 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
15882 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
15883 pRoamOffloadScanReqParams->p5GProbeTemplate,
15884 pwdiRoamOffloadScanInfo->us5GProbeSize);
15885 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
15886 pRoamOffloadScanReqParams->MDID.mdiePresent;
15887 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
15888 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015889 pwdiRoamOffloadScanInfo->nProbes =
15890 pRoamOffloadScanReqParams->nProbes;
15891 pwdiRoamOffloadScanInfo->HomeAwayTime =
15892 pRoamOffloadScanReqParams->HomeAwayTime;
15893 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015894 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015895 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015896 pWdaParams->pWdaContext = pWDA;
15897 /* Store param pointer as passed in by caller */
15898 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015899 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015900 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
15901 if(IS_WDI_STATUS_FAILURE(status))
15902 {
15903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15904 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
15905 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15906 vos_mem_free(pWdaParams->wdaMsgParam);
15907 pWdaParams->wdaWdiApiMsgParam = NULL;
15908 pWdaParams->wdaMsgParam = NULL;
15909 }
15910 return CONVERT_WDI2VOS_STATUS(status) ;
15911}
15912#endif
15913
Jeff Johnson295189b2012-06-20 16:38:30 -070015914/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015915 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015916 *
15917 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015918void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015919{
15920 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15921
15922 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015923 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015924
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053015925 if(NULL == pWdaParams)
15926 {
15927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015928 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053015929 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070015930 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053015931 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015932
Jeff Johnson295189b2012-06-20 16:38:30 -070015933 vos_mem_free(pWdaParams->wdaMsgParam) ;
15934 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15935 vos_mem_free(pWdaParams) ;
15936
15937 return ;
15938}
15939/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015940 * FUNCTION: WDA_RssiFilterReqCallback
15941 * Free memory.
15942 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
15943 */
15944void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
15945{
15946 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15947
15948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15949 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15950
15951 if(NULL == pWdaParams)
15952 {
15953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15954 "%s: pWdaParams received NULL", __func__);
15955 VOS_ASSERT(0);
15956 return;
15957 }
15958
15959 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15960 {
15961 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15962 vos_mem_free(pWdaParams->wdaMsgParam);
15963 vos_mem_free(pWdaParams);
15964 }
15965
15966 return;
15967}
15968/*
Hanumantha Reddy Pothula1e687da2015-03-31 13:44:31 +053015969 * FUNCTION: WDA_ProcessSetRssiFilterReq
Jeff Johnson295189b2012-06-20 16:38:30 -070015970 * Request to WDI to set Preferred Network List.Offload
15971 */
15972VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
15973 tSirSetRSSIFilterReq* pRssiFilterParams)
15974{
Jeff Johnson43971f52012-07-17 12:26:56 -070015975 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015976 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
15977 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
15978 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015980 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015981 if(NULL == pwdiSetRssiFilterReqInfo)
15982 {
15983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015984 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015985 VOS_ASSERT(0);
15986 return VOS_STATUS_E_NOMEM;
15987 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015988 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15989 if(NULL == pWdaParams)
15990 {
15991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015992 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015993 VOS_ASSERT(0);
15994 vos_mem_free(pwdiSetRssiFilterReqInfo);
15995 return VOS_STATUS_E_NOMEM;
15996 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015997 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070015998 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
15999 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016000
Jeff Johnson295189b2012-06-20 16:38:30 -070016001 /* Store Params pass it to WDI */
16002 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
16003 pWdaParams->pWdaContext = pWDA;
16004 /* Store param pointer as passed in by caller */
16005 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016006 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016007 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016008 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016009 if(IS_WDI_STATUS_FAILURE(status))
16010 {
16011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16012 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
16013 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16014 vos_mem_free(pWdaParams->wdaMsgParam);
16015 pWdaParams->wdaWdiApiMsgParam = NULL;
16016 pWdaParams->wdaMsgParam = NULL;
16017 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016018 return CONVERT_WDI2VOS_STATUS(status) ;
16019}
16020
Jeff Johnson295189b2012-06-20 16:38:30 -070016021/*
16022 * FUNCTION: WDA_ProcessUpdateScanParams
16023 * Request to WDI to update Scan Parameters
16024 */
16025VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
16026 tSirUpdateScanParams *pUpdateScanParams)
16027{
Jeff Johnson43971f52012-07-17 12:26:56 -070016028 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016029 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
16030 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
16031 sizeof(WDI_UpdateScanParamsInfoType)) ;
16032 tWDA_ReqParams *pWdaParams ;
16033 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070016034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016035 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016036 if(NULL == wdiUpdateScanParamsInfoType)
16037 {
16038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016039 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016040 VOS_ASSERT(0);
16041 return VOS_STATUS_E_NOMEM;
16042 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016043 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16044 if ( NULL == pWdaParams )
16045 {
16046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016047 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016048 VOS_ASSERT(0);
16049 vos_mem_free(wdiUpdateScanParamsInfoType);
16050 return VOS_STATUS_E_NOMEM;
16051 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016052 //
16053 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
16054 //
Jeff Johnson295189b2012-06-20 16:38:30 -070016055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16056 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
16057 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
16058 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
Jeff Johnson9a9ed0d2013-11-26 13:36:52 -080016059 "sir struct %zu wdi struct %zu",
Jeff Johnson295189b2012-06-20 16:38:30 -070016060 pUpdateScanParams->b11dEnabled,
16061 pUpdateScanParams->b11dResolved,
16062 pUpdateScanParams->ucChannelCount,
16063 pUpdateScanParams->usPassiveMinChTime,
16064 pUpdateScanParams->usPassiveMaxChTime,
16065 pUpdateScanParams->usActiveMinChTime,
16066 pUpdateScanParams->usActiveMaxChTime,
16067 sizeof(tSirUpdateScanParams),
16068 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
16069
Jeff Johnson295189b2012-06-20 16:38:30 -070016070 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
16071 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070016072 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
16073 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070016074 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
16075 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070016076 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
16077 pUpdateScanParams->usActiveMaxChTime;
16078 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
16079 pUpdateScanParams->usActiveMinChTime;
16080 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
16081 pUpdateScanParams->usPassiveMaxChTime;
16082 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
16083 pUpdateScanParams->usPassiveMinChTime;
16084
Jeff Johnson295189b2012-06-20 16:38:30 -070016085 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053016086 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
16087 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070016088
Jeff Johnson295189b2012-06-20 16:38:30 -070016089 for ( i = 0; i <
16090 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
16091 i++)
16092 {
16093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16094 "Update Scan Parameters channel: %d",
16095 pUpdateScanParams->aChannels[i]);
16096
16097 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
16098 pUpdateScanParams->aChannels[i];
16099 }
16100
Yue Ma7f44bbe2013-04-12 11:47:39 -070016101 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
16102 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016103
Jeff Johnson295189b2012-06-20 16:38:30 -070016104 /* Store Params pass it to WDI */
16105 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
16106 pWdaParams->pWdaContext = pWDA;
16107 /* Store param pointer as passed in by caller */
16108 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070016109
Jeff Johnson295189b2012-06-20 16:38:30 -070016110
16111
16112 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016113 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016114 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016115 if(IS_WDI_STATUS_FAILURE(status))
16116 {
16117 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16118 "Failure in Update Scan Params EQ WDI API, free all the memory " );
16119 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16120 vos_mem_free(pWdaParams->wdaMsgParam);
16121 vos_mem_free(pWdaParams);
16122 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016123 return CONVERT_WDI2VOS_STATUS(status) ;
16124}
16125#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016126
16127#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
16128/*
16129 * FUNCTION: WDA_RoamOffloadScanReqCallback
16130 *
16131 */
16132void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
16133{
16134 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070016135 vos_msg_t vosMsg;
16136 wpt_uint8 reason = 0;
16137
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070016138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016139 "<------ %s " ,__func__);
16140 if (NULL == pWdaParams)
16141 {
16142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16143 "%s: pWdaParams received NULL", __func__);
16144 VOS_ASSERT(0) ;
16145 return ;
16146 }
16147 if ( pWdaParams != NULL )
16148 {
16149 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
16150 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070016151 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016152 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16153 }
16154 if ( pWdaParams->wdaMsgParam != NULL)
16155 {
16156 vos_mem_free(pWdaParams->wdaMsgParam);
16157 }
16158
16159 vos_mem_free(pWdaParams) ;
16160 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070016161 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
16162 vosMsg.bodyptr = NULL;
16163 if (WDI_STATUS_SUCCESS != status)
16164 {
16165 reason = 0;
16166 }
16167 vosMsg.bodyval = reason;
16168 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16169 {
16170 /* free the mem and return */
16171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsone384c822013-10-30 12:21:17 -070016172 "%s: Failed to post the rsp to UMAC", __func__);
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070016173 }
16174
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070016175 return ;
16176}
16177#endif
16178
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080016179/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016180 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080016181 *
16182 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070016183void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080016184{
16185 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16186
16187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16188 "<------ %s " ,__func__);
16189
16190 if(NULL == pWdaParams)
16191 {
16192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16193 "%s: pWdaParams received NULL", __func__);
16194 VOS_ASSERT(0);
16195 return;
16196 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070016197
16198 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16199 vos_mem_free(pWdaParams->wdaMsgParam);
16200 vos_mem_free(pWdaParams);
16201
16202 return;
16203}
16204/*
16205 * FUNCTION: WDA_SetPowerParamsReqCallback
16206 * Free memory.
16207 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
16208 */
16209void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
16210{
16211 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16212
16213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16214 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16215
16216 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080016217 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070016218 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16219 "%s: pWdaParams received NULL", __func__);
16220 VOS_ASSERT(0);
16221 return;
16222 }
16223
16224 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16225 {
16226 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16227 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080016228 vos_mem_free(pWdaParams);
16229 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070016230
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080016231 return;
16232}
16233
Jeff Johnson295189b2012-06-20 16:38:30 -070016234#ifdef WLAN_FEATURE_PACKET_FILTERING
16235/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016236 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070016237 *
16238 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070016239void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016240 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
16241 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016242{
16243 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070016244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016245 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016246 if(NULL == pWdaParams)
16247 {
16248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016249 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016250 VOS_ASSERT(0) ;
16251 return ;
16252 }
16253
16254 vos_mem_free(pWdaParams->wdaMsgParam) ;
16255 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16256 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016257 //print a msg, nothing else to do
16258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016259 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070016260 return ;
16261}
Jeff Johnson295189b2012-06-20 16:38:30 -070016262/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016263 * FUNCTION: WDA_8023MulticastListReqCallback
16264 * Free memory.
16265 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
16266 */
16267void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
16268{
16269 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16270
16271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16272 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16273
16274 if(NULL == pWdaParams)
16275 {
16276 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16277 "%s: pWdaParams received NULL", __func__);
16278 VOS_ASSERT(0);
16279 return;
16280 }
16281
16282 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16283 {
16284 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16285 vos_mem_free(pWdaParams->wdaMsgParam);
16286 vos_mem_free(pWdaParams);
16287 }
16288
16289 return;
16290}
16291/*
Jeff Johnson295189b2012-06-20 16:38:30 -070016292 * FUNCTION: WDA_Process8023MulticastListReq
16293 * Request to WDI to add 8023 Multicast List
16294 */
16295VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
16296 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
16297{
Jeff Johnson43971f52012-07-17 12:26:56 -070016298 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016299 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
16300 tWDA_ReqParams *pWdaParams ;
16301 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070016302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016303 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016304 pwdiFltPktSetMcListReqParamsType =
16305 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
16306 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
16307 ) ;
16308 if(NULL == pwdiFltPktSetMcListReqParamsType)
16309 {
16310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016311 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016312 return VOS_STATUS_E_NOMEM;
16313 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016314 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16315 if(NULL == pWdaParams)
16316 {
16317 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016318 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016319 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
16320 return VOS_STATUS_E_NOMEM;
16321 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016322
Jeff Johnson295189b2012-06-20 16:38:30 -070016323 //
16324 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
16325 //
16326 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070016327 pRcvFltMcAddrList->ulMulticastAddrCnt;
16328
16329 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
16330 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
16331 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
16332 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
16333
Jeff Johnson295189b2012-06-20 16:38:30 -070016334 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
16335 {
16336 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
16337 &(pRcvFltMcAddrList->multicastAddr[i]),
16338 sizeof(tSirMacAddr));
16339 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070016340 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
16341 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016342
Jeff Johnson295189b2012-06-20 16:38:30 -070016343 /* Store Params pass it to WDI */
16344 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
16345 pWdaParams->pWdaContext = pWDA;
16346 /* Store param pointer as passed in by caller */
16347 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070016348 status = WDI_8023MulticastListReq(
16349 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016350 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016351 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016352 if(IS_WDI_STATUS_FAILURE(status))
16353 {
16354 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16355 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
16356 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16357 vos_mem_free(pWdaParams->wdaMsgParam);
16358 vos_mem_free(pWdaParams);
16359 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016360 return CONVERT_WDI2VOS_STATUS(status) ;
16361}
Jeff Johnson295189b2012-06-20 16:38:30 -070016362/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016363 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070016364 *
16365 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016366void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016367 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
16368 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016369{
16370 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070016371 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016372 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016373 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070016374 if(NULL == pWdaParams)
16375 {
16376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016377 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016378 VOS_ASSERT(0) ;
16379 return ;
16380 }
16381
16382 vos_mem_free(pWdaParams->wdaMsgParam) ;
16383 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16384 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016385 //print a msg, nothing else to do
16386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016387 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070016388 return ;
16389}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016390
16391/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016392 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
16393 * Free memory.
16394 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016395 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070016396void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016397 void* pUserData)
16398{
16399 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16400
16401 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16402 "<------ %s, wdiStatus: %d",
16403 __func__, wdiStatus);
16404
16405 if (NULL == pWdaParams)
16406 {
16407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16408 "%s: Invalid pWdaParams pointer", __func__);
16409 VOS_ASSERT(0);
16410 return;
16411 }
16412
16413 if (IS_WDI_STATUS_FAILURE(wdiStatus))
16414 {
16415 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16416 vos_mem_free(pWdaParams->wdaMsgParam);
16417 vos_mem_free(pWdaParams);
16418 }
16419
16420 return;
16421}
16422
Jeff Johnson295189b2012-06-20 16:38:30 -070016423/*
16424 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
16425 * Request to WDI to set Receive Filters
16426 */
16427VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
16428 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
16429{
Jeff Johnson43971f52012-07-17 12:26:56 -070016430 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016431 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
16432 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
16433 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
16434 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
16435 tWDA_ReqParams *pWdaParams ;
16436 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070016437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016438 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016439 if(NULL == pwdiSetRcvPktFilterReqParamsType)
16440 {
16441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016442 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016443 VOS_ASSERT(0);
16444 return VOS_STATUS_E_NOMEM;
16445 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016446 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16447 if(NULL == pWdaParams)
16448 {
16449 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016450 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016451 VOS_ASSERT(0);
16452 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
16453 return VOS_STATUS_E_NOMEM;
16454 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016455 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
16456 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
16457 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
16458 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070016459 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
16460 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
16461
16462 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
16463 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070016464
16465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16466 "FID %d FT %d NParams %d CT %d",
16467 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
16468 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
16469 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
16470 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070016471 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
16472 {
16473 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
16474 &pRcvPktFilterCfg->paramsData[i],
16475 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070016476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016477 "Proto %d Comp Flag %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070016478 pwdiSetRcvPktFilterReqParamsType->
16479 wdiPktFilterCfg.paramsData[i].protocolLayer,
16480 pwdiSetRcvPktFilterReqParamsType->
16481 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070016482 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016483 "Data Offset %d Data Len %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070016484 pwdiSetRcvPktFilterReqParamsType->
16485 wdiPktFilterCfg.paramsData[i].dataOffset,
16486 pwdiSetRcvPktFilterReqParamsType->
16487 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070016488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016489 "CData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070016490 pwdiSetRcvPktFilterReqParamsType->
16491 wdiPktFilterCfg.paramsData[i].compareData[0],
16492 pwdiSetRcvPktFilterReqParamsType->
16493 wdiPktFilterCfg.paramsData[i].compareData[1],
16494 pwdiSetRcvPktFilterReqParamsType->
16495 wdiPktFilterCfg.paramsData[i].compareData[2],
16496 pwdiSetRcvPktFilterReqParamsType->
16497 wdiPktFilterCfg.paramsData[i].compareData[3],
16498 pwdiSetRcvPktFilterReqParamsType->
16499 wdiPktFilterCfg.paramsData[i].compareData[4],
16500 pwdiSetRcvPktFilterReqParamsType->
16501 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070016502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016503 "MData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070016504 pwdiSetRcvPktFilterReqParamsType->
16505 wdiPktFilterCfg.paramsData[i].dataMask[0],
16506 pwdiSetRcvPktFilterReqParamsType->
16507 wdiPktFilterCfg.paramsData[i].dataMask[1],
16508 pwdiSetRcvPktFilterReqParamsType->
16509 wdiPktFilterCfg.paramsData[i].dataMask[2],
16510 pwdiSetRcvPktFilterReqParamsType->
16511 wdiPktFilterCfg.paramsData[i].dataMask[3],
16512 pwdiSetRcvPktFilterReqParamsType->
16513 wdiPktFilterCfg.paramsData[i].dataMask[4],
16514 pwdiSetRcvPktFilterReqParamsType->
16515 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070016516 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070016517 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016518 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016519 /* Store Params pass it to WDI */
16520 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
16521 pWdaParams->pWdaContext = pWDA;
16522 /* Store param pointer as passed in by caller */
16523 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070016524 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016525 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016526 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016527 if(IS_WDI_STATUS_FAILURE(status))
16528 {
16529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16530 "Failure in SetFilter(),free all the memory,status %d ",status);
16531 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16532 vos_mem_free(pWdaParams->wdaMsgParam);
16533 vos_mem_free(pWdaParams);
16534 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016535 return CONVERT_WDI2VOS_STATUS(status) ;
16536}
Jeff Johnson295189b2012-06-20 16:38:30 -070016537/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016538 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070016539 *
16540 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070016541void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016542 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
16543 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016544{
16545 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16546 tWDA_CbContext *pWDA;
16547 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
16548 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
16549 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
16550 tANI_U8 i;
16551 vos_msg_t vosMsg;
16552
16553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016554 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016555 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
16556
Jeff Johnsone7245742012-09-05 17:12:55 -070016557 if(NULL == pRcvFltPktMatchCntRsp)
16558 {
16559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016560 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070016561 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016562 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070016563 return ;
16564 }
16565
Jeff Johnson295189b2012-06-20 16:38:30 -070016566 if(NULL == pWdaParams)
16567 {
16568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016569 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016570 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016571 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070016572 return ;
16573 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016574 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
16575 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070016576 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
16577 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
16578
16579 /* Message Header */
16580 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
16581 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
16582
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016583 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070016584
16585 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
16586 {
16587 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
16588 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
16589 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016590 /* VOS message wrapper */
16591 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
16592 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
16593 vosMsg.bodyval = 0;
16594 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16595 {
16596 /* free the mem and return */
16597 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
16598 }
16599
16600 vos_mem_free(pWdaParams->wdaMsgParam) ;
16601 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16602 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070016603
16604 return;
16605}
16606/*
16607 * FUNCTION: WDA_FilterMatchCountReqCallback
16608 * Free memory and send RSP back to SME.
16609 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
16610 */
16611void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
16612{
16613 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16614 vos_msg_t vosMsg;
16615
16616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16617 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16618
16619 if(NULL == pWdaParams)
16620 {
16621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16622 "%s: pWdaParams received NULL", __func__);
16623 VOS_ASSERT(0);
16624 return;
16625 }
16626
16627 /* VOS message wrapper */
16628 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
16629 vosMsg.bodyptr = NULL;
16630 vosMsg.bodyval = 0;
16631
16632 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16633 {
16634 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16635 vos_mem_free(pWdaParams->wdaMsgParam);
16636 vos_mem_free(pWdaParams);
16637 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
16638 }
16639
16640 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070016641}
Jeff Johnson295189b2012-06-20 16:38:30 -070016642/*
16643 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
16644 * Request to WDI to get PC Filter Match Count
16645 */
16646VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
16647{
Jeff Johnson43971f52012-07-17 12:26:56 -070016648 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016649 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
16650 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
16651 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016653 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016654 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
16655 {
16656 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016657 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016658 VOS_ASSERT(0);
16659 return VOS_STATUS_E_NOMEM;
16660 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016661 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16662 if(NULL == pWdaParams)
16663 {
16664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016665 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016666 VOS_ASSERT(0);
16667 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
16668 return VOS_STATUS_E_NOMEM;
16669 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016670
Yue Ma7f44bbe2013-04-12 11:47:39 -070016671 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
16672 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016673
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016674 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
16675 pRcvFltPktMatchRsp->bssId,
16676 sizeof(wpt_macAddr));
16677
Jeff Johnson295189b2012-06-20 16:38:30 -070016678 /* Store Params pass it to WDI */
16679 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
16680 pWdaParams->pWdaContext = pWDA;
16681 /* Store param pointer as passed in by caller */
16682 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070016683 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016684 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016685 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016686 if(IS_WDI_STATUS_FAILURE(status))
16687 {
16688 /* failure returned by WDI API */
16689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16690 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
16691 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16692 vos_mem_free(pWdaParams) ;
16693 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
16694 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
16695 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016696 return CONVERT_WDI2VOS_STATUS(status) ;
16697}
Jeff Johnson295189b2012-06-20 16:38:30 -070016698/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016699 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070016700 *
16701 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016702void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016703 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
16704 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016705{
16706 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070016707 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016708 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016709/* WDA_VOS_ASSERT(NULL != pWdaParams); */
16710 if(NULL == pWdaParams)
16711 {
16712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016713 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016714 VOS_ASSERT(0) ;
16715 return ;
16716 }
16717
16718 vos_mem_free(pWdaParams->wdaMsgParam) ;
16719 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16720 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016721 //print a msg, nothing else to do
16722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016723 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070016724 return ;
16725}
Jeff Johnson295189b2012-06-20 16:38:30 -070016726/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016727 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
16728 * Free memory.
16729 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
16730 */
16731void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
16732{
16733 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16734
16735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16736 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16737
16738 if(NULL == pWdaParams)
16739 {
16740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16741 "%s: Invalid pWdaParams pointer", __func__);
16742 VOS_ASSERT(0);
16743 return;
16744 }
16745
16746 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16747 {
16748 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16749 vos_mem_free(pWdaParams->wdaMsgParam);
16750 vos_mem_free(pWdaParams);
16751 }
16752
16753 return;
16754}
16755/*
Jeff Johnson295189b2012-06-20 16:38:30 -070016756 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
16757 * Request to WDI to clear Receive Filters
16758 */
16759VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
16760 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
16761{
Jeff Johnson43971f52012-07-17 12:26:56 -070016762 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016763 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
16764 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
16765 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016767 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016768 if(NULL == pwdiRcvFltPktClearReqParamsType)
16769 {
16770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016771 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016772 VOS_ASSERT(0);
16773 return VOS_STATUS_E_NOMEM;
16774 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016775 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16776 if(NULL == pWdaParams)
16777 {
16778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016779 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016780 VOS_ASSERT(0);
16781 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
16782 return VOS_STATUS_E_NOMEM;
16783 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016784 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
16785 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070016786 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
16787 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
16788 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
16789 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070016790
Yue Ma7f44bbe2013-04-12 11:47:39 -070016791 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016792 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016793 /* Store Params pass it to WDI */
16794 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
16795 pWdaParams->pWdaContext = pWDA;
16796 /* Store param pointer as passed in by caller */
16797 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070016798 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016799 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016800 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016801 if(IS_WDI_STATUS_FAILURE(status))
16802 {
16803 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16804 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
16805 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080016806 vos_mem_free(pWdaParams->wdaMsgParam);
16807 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016808 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016809 return CONVERT_WDI2VOS_STATUS(status) ;
16810}
16811#endif // WLAN_FEATURE_PACKET_FILTERING
16812
Jeff Johnson295189b2012-06-20 16:38:30 -070016813/*
16814 * FUNCTION: WDA_ProcessSetPowerParamsReq
16815 * Request to WDI to set power params
16816 */
16817VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
16818 tSirSetPowerParamsReq *pPowerParams)
16819{
Jeff Johnson43971f52012-07-17 12:26:56 -070016820 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016821 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
16822 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016823 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016825 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016826 if(NULL == pwdiSetPowerParamsReqInfo)
16827 {
16828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016829 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016830 VOS_ASSERT(0);
16831 return VOS_STATUS_E_NOMEM;
16832 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016833 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16834 if(NULL == pWdaParams)
16835 {
16836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016837 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016838 VOS_ASSERT(0);
16839 vos_mem_free(pwdiSetPowerParamsReqInfo);
16840 return VOS_STATUS_E_NOMEM;
16841 }
Jeff Johnsone7245742012-09-05 17:12:55 -070016842
Jeff Johnson295189b2012-06-20 16:38:30 -070016843
16844 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
16845 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070016846 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
16847 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070016848 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
16849 pPowerParams->uListenInterval;
16850 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
16851 pPowerParams->uBcastMcastFilter;
16852 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
16853 pPowerParams->uEnableBET;
16854 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
16855 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070016856 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
16857 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070016858 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
16859 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016860
Jeff Johnson295189b2012-06-20 16:38:30 -070016861 /* Store Params pass it to WDI */
16862 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
16863 pWdaParams->pWdaContext = pWDA;
16864 /* Store param pointer as passed in by caller */
16865 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016866 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016867 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016868 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016869 if(IS_WDI_STATUS_FAILURE(status))
16870 {
16871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16872 "Failure in Set power params REQ WDI API, free all the memory " );
16873 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16874 vos_mem_free(pWdaParams->wdaMsgParam);
16875 pWdaParams->wdaWdiApiMsgParam = NULL;
16876 pWdaParams->wdaMsgParam = NULL;
16877 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016878 return CONVERT_WDI2VOS_STATUS(status) ;
16879}
16880
16881/*
16882 * FUNCTION: WDA_SetTmLevelRspCallback
16883 * Set TM Level response
16884 */
16885void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
16886{
16887 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16888
16889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016890 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016891
16892 if(NULL == pWdaParams)
16893 {
16894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016895 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016896 VOS_ASSERT(0) ;
16897 return ;
16898 }
16899
16900 /* Dose not need to send notification to upper layer
16901 * Just free allocated resources */
16902 if( pWdaParams != NULL )
16903 {
16904 if( pWdaParams->wdaWdiApiMsgParam != NULL )
16905 {
16906 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16907 }
16908 vos_mem_free(pWdaParams->wdaMsgParam) ;
16909 vos_mem_free(pWdaParams) ;
16910 }
16911}
16912
16913/*
16914 * FUNCTION: WDA_ProcessSetTmLevelReq
16915 * Set TM Level request
16916 */
16917VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
16918 tAniSetTmLevelReq *setTmLevelReq)
16919{
16920 WDI_Status status = WDI_STATUS_SUCCESS ;
16921 tWDA_ReqParams *pWdaParams ;
16922 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
16923 (WDI_SetTmLevelReqType *)vos_mem_malloc(
16924 sizeof(WDI_SetTmLevelReqType)) ;
16925 if(NULL == wdiSetTmLevelReq)
16926 {
16927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016928 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016929 VOS_ASSERT(0);
16930 return VOS_STATUS_E_NOMEM;
16931 }
16932
16933 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16934 if(NULL == pWdaParams)
16935 {
16936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016937 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016938 VOS_ASSERT(0);
16939 vos_mem_free(wdiSetTmLevelReq);
16940 return VOS_STATUS_E_NOMEM;
16941 }
16942
16943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016944 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016945
16946 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
16947 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
16948
16949 pWdaParams->pWdaContext = pWDA;
16950 pWdaParams->wdaMsgParam = setTmLevelReq;
16951 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
16952
16953 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
16954 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
16955
16956 if(IS_WDI_STATUS_FAILURE(status))
16957 {
16958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080016959 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070016960 vos_mem_free(pWdaParams->wdaMsgParam) ;
16961 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16962 vos_mem_free(pWdaParams) ;
16963 }
16964
16965 return CONVERT_WDI2VOS_STATUS(status) ;
16966}
16967
16968VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
16969 tpTxControlParams pTxCtrlParam)
16970{
16971 VOS_STATUS wdaStatus;
16972
16973 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016974 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016975 if( pTxCtrlParam == NULL )
16976 {
16977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016978 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016979 return VOS_STATUS_E_FAILURE;
16980 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016981 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
16982 {
16983 wdaStatus = WDA_SuspendDataTx(pWDA);
16984 }
16985 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
16986 {
16987 wdaStatus = WDA_ResumeDataTx(pWDA);
16988 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016989 return wdaStatus;
16990}
16991
16992 /* FUNCTION WDA_featureCapsExchange
16993 * WDA API to invoke capability exchange between host and FW.
16994 */
16995void WDA_featureCapsExchange(v_PVOID_t pVosContext)
16996{
16997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016998 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070016999 WDI_featureCapsExchangeReq( NULL, pVosContext);
17000}
17001
Yathish9f22e662012-12-10 14:21:35 -080017002/* FUNCTION WDA_disableCapablityFeature
17003 * WDA API to diable Active mode offload in host.
17004 */
17005void WDA_disableCapablityFeature(tANI_U8 feature_index)
17006{
17007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17008 "%s:enter", __func__ );
17009 WDI_disableCapablityFeature(feature_index);
17010}
17011
Jeff Johnson295189b2012-06-20 16:38:30 -070017012 /* FUNCTION WDA_getHostWlanFeatCaps
17013 * Wrapper for WDI API, that will return if the feature (enum value).passed
17014 * to this API is supported or not in Host
17015 * return value
17016 * 0 - implies feature is NOT Supported
17017 * any non zero value - implies feature is SUPPORTED
17018 */
17019tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
17020{
17021 return WDI_getHostWlanFeatCaps(featEnumValue);
17022}
17023
17024 /* FUNCTION WDA_getFwWlanFeatCaps
17025 * Wrapper for WDI API, that will return if the feature (enum value).passed
17026 * to this API is supported or not in FW
17027 * return value
17028 * 0 - implies feature is NOT Supported
17029 * any non zero value - implies feature is SUPPORTED
17030 */
17031tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
17032{
17033 return WDI_getFwWlanFeatCaps(featEnumValue);
17034}
17035
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053017036
Jeff Johnson295189b2012-06-20 16:38:30 -070017037/*
17038 * FUNCTION: WDA_shutdown
17039 * Shutdown WDA/WDI without handshaking with Riva.
17040 * Synchronous function.
17041 */
17042VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
17043{
17044 WDI_Status wdiStatus;
17045 //tANI_U8 eventIdx = 0;
17046 VOS_STATUS status = VOS_STATUS_SUCCESS;
17047 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070017048 if (NULL == pWDA)
17049 {
17050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017051 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070017052 VOS_ASSERT(0);
17053 return VOS_STATUS_E_FAILURE;
17054 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017055 /* FTM mode stay START_STATE */
17056 if( (WDA_READY_STATE != pWDA->wdaState) &&
17057 (WDA_INIT_STATE != pWDA->wdaState) &&
17058 (WDA_START_STATE != pWDA->wdaState) )
17059 {
17060 VOS_ASSERT(0);
17061 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070017062
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080017063 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
17064 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -070017065 {
17066 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080017067 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070017068 }
Leo Chang9d76f622013-08-23 16:34:52 -070017069 else
17070 {
17071 vos_event_destroy(&pWDA->ftmStopDoneEvent);
17072 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070017073
Jeff Johnson295189b2012-06-20 16:38:30 -070017074 /* call WDI shutdown */
17075 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070017076 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
17077 {
17078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17079 "error in WDA Stop" );
17080 status = VOS_STATUS_E_FAILURE;
17081 }
17082 /* WDI stop is synchrnous, shutdown is complete when it returns */
17083 pWDA->wdaState = WDA_STOP_STATE;
17084
Jeff Johnson295189b2012-06-20 16:38:30 -070017085 /* shutdown should perform the stop & close actions. */
17086 /* Destroy the event */
17087 status = vos_event_destroy(&pWDA->txFrameEvent);
17088 if(!VOS_IS_STATUS_SUCCESS(status))
17089 {
17090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017091 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070017092 status = VOS_STATUS_E_FAILURE;
17093 }
17094 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
17095 if(!VOS_IS_STATUS_SUCCESS(status))
17096 {
17097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017098 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070017099 status = VOS_STATUS_E_FAILURE;
17100 }
17101 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
17102 if(!VOS_IS_STATUS_SUCCESS(status))
17103 {
17104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080017105 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070017106 status = VOS_STATUS_E_FAILURE;
17107 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017108 /* free WDA context */
17109 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
17110 if ( !VOS_IS_STATUS_SUCCESS(status) )
17111 {
17112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17113 "error in WDA close " );
17114 status = VOS_STATUS_E_FAILURE;
17115 }
Jeff Johnson295189b2012-06-20 16:38:30 -070017116 return status;
17117}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080017118
Jeff Johnsone7245742012-09-05 17:12:55 -070017119/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080017120 * FUNCTION: WDA_setNeedShutdown
17121 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070017122 */
17123
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080017124void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070017125{
17126 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070017127 if(pWDA == NULL)
17128 {
17129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17130 "Could not get the WDA Context pointer" );
17131 return;
17132 }
Jeff Johnsone7245742012-09-05 17:12:55 -070017133 pWDA->needShutdown = TRUE;
17134}
17135/*
17136 * FUNCTION: WDA_needShutdown
17137 * WDA needs a shutdown
17138 */
17139
17140v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
17141{
17142 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070017143 if(pWDA == NULL)
17144 {
17145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17146 "Could not get the WDA Context pointer" );
17147 return 0;
17148 }
17149 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070017150}
17151
Mohit Khanna4a70d262012-09-11 16:30:12 -070017152#ifdef WLAN_FEATURE_11AC
17153/*
17154 * FUNCTION: WDA_SetBeaconFilterReqCallback
17155 *
17156 */
17157void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
17158{
17159 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17160 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017161 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070017162 if(NULL == pWdaParams)
17163 {
17164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017165 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070017166 VOS_ASSERT(0) ;
17167 return ;
17168 }
Jeff Johnsone7245742012-09-05 17:12:55 -070017169
Mohit Khanna4a70d262012-09-11 16:30:12 -070017170 vos_mem_free(pWdaParams->wdaMsgParam) ;
17171 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17172 vos_mem_free(pWdaParams) ;
17173 /*
17174 * No respone required for SetBeaconFilter req so just free the request
17175 * param here
17176 */
17177
17178 return ;
17179}
17180
17181VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
17182 tUpdateVHTOpMode *pData)
17183{
17184 WDI_Status status = WDI_STATUS_SUCCESS ;
17185 tWDA_ReqParams *pWdaParams ;
17186 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
17187 sizeof(WDI_UpdateVHTOpMode)) ;
17188 if(NULL == wdiTemp)
17189 {
17190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017191 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070017192 VOS_ASSERT(0);
17193 return VOS_STATUS_E_NOMEM;
17194 }
17195 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17196 if(NULL == pWdaParams)
17197 {
17198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070017199 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070017200 VOS_ASSERT(0);
17201 vos_mem_free(wdiTemp);
17202 return VOS_STATUS_E_NOMEM;
17203 }
Abhishek Singhdf8eb312014-11-15 00:49:28 +053017204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17205 "------> %s Opmode = %d and staid = %d" ,
17206 __func__, pData->opMode, pData->staId);
Mohit Khanna4a70d262012-09-11 16:30:12 -070017207 wdiTemp->opMode = pData->opMode;
17208 wdiTemp->staId = pData->staId;
17209
17210 pWdaParams->pWdaContext = pWDA;
17211 /* Store Req pointer, as this will be used for response */
17212 pWdaParams->wdaMsgParam = (void *)pData;
17213 /* store Params pass it to WDI */
17214 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
17215
17216 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
17217
17218 if(IS_WDI_STATUS_FAILURE(status))
17219 {
17220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17221 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
17222 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
17223 vos_mem_free(pWdaParams->wdaMsgParam);
17224 vos_mem_free(pWdaParams);
17225 }
17226 return CONVERT_WDI2VOS_STATUS(status) ;
17227}
17228#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070017229
17230/*==========================================================================
17231 FUNCTION WDA_TransportChannelDebug
17232
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070017233 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070017234 Display Transport Channel debugging information
17235 User may request to display DXE channel snapshot
17236 Or if host driver detects any abnormal stcuk may display
17237
17238 PARAMETERS
schang6295e542013-03-12 15:31:23 -070017239 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080017240 displaySnapshot : Display DXE snapshot option
Mihir Shete40a55652014-03-02 14:14:47 +053017241 debugFlags : Enable stall detect features
17242 defined by WPAL_DeviceDebugFlags
17243 These features may effect
17244 data performance.
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070017245
17246 RETURN VALUE
17247 NONE
17248
17249===========================================================================*/
17250void WDA_TransportChannelDebug
17251(
schang6295e542013-03-12 15:31:23 -070017252 tpAniSirGlobal pMac,
17253 v_BOOL_t displaySnapshot,
Mihir Shete40a55652014-03-02 14:14:47 +053017254 v_U8_t debugFlags
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070017255)
17256{
Mihir Shete40a55652014-03-02 14:14:47 +053017257 WDI_TransportChannelDebug(displaySnapshot, debugFlags);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070017258 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070017259}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070017260
17261/*==========================================================================
17262 FUNCTION WDA_SetEnableSSR
17263
17264 DESCRIPTION
17265 API to enable/disable SSR on WDI timeout
17266
17267 PARAMETERS
17268 enableSSR : enable/disable SSR
17269
17270 RETURN VALUE
17271 NONE
17272
17273===========================================================================*/
17274void WDA_SetEnableSSR(v_BOOL_t enableSSR)
17275{
17276 WDI_SetEnableSSR(enableSSR);
17277}
Leo Chang9056f462013-08-01 19:21:11 -070017278
17279#ifdef FEATURE_WLAN_LPHB
17280/*
17281 * FUNCTION: WDA_LPHBconfRspCallback
17282 *
17283 */
17284void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
17285{
17286 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17287
17288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17289 "<------ %s " ,__func__);
17290 if (NULL == pWdaParams)
17291 {
17292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17293 "%s: pWdaParams received NULL", __func__);
17294 VOS_ASSERT(0) ;
17295 return ;
17296 }
17297
17298 /* Do not need to send notification to upper layer
17299 * Just free allocated resources */
17300 if (pWdaParams != NULL)
17301 {
17302 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17303 {
17304 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17305 }
17306 vos_mem_free(pWdaParams->wdaMsgParam) ;
17307 vos_mem_free(pWdaParams) ;
17308 }
17309
17310 return;
17311}
17312
17313/*
17314 * FUNCTION: WDA_ProcessLPHBConfReq
17315 *
17316 */
17317VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
17318 tSirLPHBReq *pData)
17319{
17320 WDI_Status wdiStatus;
17321 tWDA_ReqParams *pWdaParams ;
17322
17323 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17324 "------> %s " , __func__);
17325
17326 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
17327 if (NULL == pWdaParams)
17328 {
17329 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17330 "%s: VOS MEM Alloc Failure", __func__);
17331 VOS_ASSERT(0);
17332 vos_mem_free(pData);
17333 return VOS_STATUS_E_NOMEM;
17334 }
17335
17336 pWdaParams->pWdaContext = pWDA;
17337 pWdaParams->wdaMsgParam = (void *)pData;
17338 pWdaParams->wdaWdiApiMsgParam = NULL;
17339
17340 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
17341 if (WDI_STATUS_PENDING == wdiStatus)
17342 {
17343 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17344 "Pending received for %s:%d ", __func__, __LINE__);
17345 }
17346 else if (WDI_STATUS_SUCCESS != wdiStatus)
17347 {
17348 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17349 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
17350 vos_mem_free(pWdaParams->wdaMsgParam);
17351 vos_mem_free(pWdaParams);
17352 }
17353
17354 return CONVERT_WDI2VOS_STATUS(wdiStatus);
17355}
17356#endif /* FEATURE_WLAN_LPHB */
17357
c_hpothu92367912014-05-01 15:18:17 +053017358void WDA_GetBcnMissRateCallback(tANI_U8 status, tANI_U32 bcnMissRate,
17359 void* pUserData)
17360{
17361 tSirBcnMissRateInfo *pBcnMissRateInfo = (tSirBcnMissRateInfo *)pUserData;
17362
17363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17364 "<------ %s " ,__func__);
17365 if (NULL == pBcnMissRateInfo)
17366 {
17367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17368 "%s: pWdaParams received NULL", __func__);
17369 VOS_ASSERT(0) ;
17370 return ;
17371 }
17372 if (pBcnMissRateInfo->callback)
17373 {
17374 pBcnMissRateInfo->callback(status, bcnMissRate,
17375 pBcnMissRateInfo->data);
17376 }
17377 vos_mem_free(pUserData);
17378
17379 return;
17380}
17381
17382v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
17383 tSirBcnMissRateReq *pData)
17384{
17385 WDI_Status wdiStatus;
17386 tSirBcnMissRateInfo *pBcnMissRateInfo;
17387
17388 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17389 "------> %s " , __func__);
17390
17391 pBcnMissRateInfo =
17392 (tSirBcnMissRateInfo *)vos_mem_malloc(sizeof(tSirBcnMissRateInfo));
17393 if (NULL == pBcnMissRateInfo)
17394 {
17395 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17396 "%s: VOS MEM Alloc Failure", __func__);
17397 VOS_ASSERT(0);
17398 vos_mem_free(pData);
17399 return;
17400 }
17401
17402 pBcnMissRateInfo->callback = (pGetBcnMissRateCB)(pData->callback);
17403 pBcnMissRateInfo->data = pData->data;
17404
17405 wdiStatus = WDI_GetBcnMissRate(pBcnMissRateInfo,
17406 WDA_GetBcnMissRateCallback,
17407 pData->bssid);
17408 if (WDI_STATUS_PENDING == wdiStatus)
17409 {
17410 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17411 "Pending received for %s:%d ", __func__, __LINE__);
17412 }
17413 else if (WDI_STATUS_SUCCESS != wdiStatus)
17414 {
17415 if (pBcnMissRateInfo->callback)
17416 {
17417 pBcnMissRateInfo->callback(VOS_STATUS_E_FAILURE,
17418 -1, pBcnMissRateInfo->data);
17419 }
17420 }
17421 vos_mem_free(pData);
17422}
Dino Mycle41bdc942014-06-10 11:30:24 +053017423
17424#ifdef WLAN_FEATURE_EXTSCAN
17425
17426/*==========================================================================
17427 FUNCTION WDA_EXTScanStartRspCallback
17428
17429 DESCRIPTION
17430 API to send EXTScan Start Response to HDD
17431
17432 PARAMETERS
17433 pEventData: Response from FW
17434 pUserData:
17435===========================================================================*/
17436void WDA_EXTScanStartRspCallback(void *pEventData, void* pUserData)
17437{
17438 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17439 tWDA_CbContext *pWDA = NULL;
17440 void *pCallbackContext;
17441 tpAniSirGlobal pMac;
17442
17443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17444 "%s:", __func__);
17445 if (NULL == pWdaParams)
17446 {
17447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17448 "%s: pWdaParams received NULL", __func__);
17449 VOS_ASSERT(0);
17450 return;
17451 }
17452
17453 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17454
17455 if (NULL == pWDA)
17456 {
17457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17458 "%s: pWDA received NULL", __func__);
17459 VOS_ASSERT(0);
17460 goto error;
17461 }
17462
17463 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17464 if (NULL == pMac)
17465 {
17466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17467 "%s:pMac is NULL", __func__);
17468 VOS_ASSERT(0);
17469 goto error;
17470 }
17471
17472 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17473
17474 if (pMac->sme.pEXTScanIndCb)
17475 {
17476 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_START_RSP,
17477 pEventData);
17478 }
17479 else
17480 {
17481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17482 "%s:HDD callback is null", __func__);
17483 VOS_ASSERT(0);
17484 }
17485
17486error:
17487
17488 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17489 {
17490 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17491 }
17492 if (pWdaParams->wdaMsgParam != NULL)
17493 {
17494 vos_mem_free(pWdaParams->wdaMsgParam);
17495 }
17496 vos_mem_free(pWdaParams) ;
17497
17498 return;
17499}
17500
17501/*==========================================================================
17502 FUNCTION WDA_EXTScanStopRspCallback
17503
17504 DESCRIPTION
17505 API to send EXTScan Stop Response to HDD
17506
17507 PARAMETERS
17508 pEventData: Response from FW
17509 pUserData:
17510===========================================================================*/
17511void WDA_EXTScanStopRspCallback(void *pEventData, void* pUserData)
17512{
17513 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17514 tWDA_CbContext *pWDA = NULL;
17515 void *pCallbackContext;
17516 tpAniSirGlobal pMac;
17517
17518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17519 "%s:", __func__);
17520 if (NULL == pWdaParams)
17521 {
17522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17523 "%s: pWdaParams received NULL", __func__);
17524 VOS_ASSERT(0);
17525 return;
17526 }
17527
17528 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17529
17530 if (NULL == pWDA)
17531 {
17532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17533 "%s: pWDA received NULL", __func__);
17534 VOS_ASSERT(0);
17535 goto error;
17536 }
17537
17538 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17539 if (NULL == pMac)
17540 {
17541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17542 "%s:pMac is NULL", __func__);
17543 VOS_ASSERT(0);
17544 goto error;
17545 }
17546 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17547
17548 if (pMac->sme.pEXTScanIndCb)
17549 {
17550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17551 "%s:HDD call back function called", __func__);
17552 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_STOP_RSP,
17553 pEventData);
17554 }
17555 else
17556 {
17557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17558 "%s:HDD callback is null", __func__);
17559 VOS_ASSERT(0);
17560 }
17561
17562error:
17563
17564 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17565 {
17566 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17567 }
17568 if (pWdaParams->wdaMsgParam != NULL)
17569 {
17570 vos_mem_free(pWdaParams->wdaMsgParam);
17571 }
17572 vos_mem_free(pWdaParams) ;
17573
17574
17575 return;
17576}
17577
17578/*==========================================================================
17579 FUNCTION WDA_EXTScanGetCachedResultsRspCallback
17580
17581 DESCRIPTION
17582 API to send EXTScan Get Cached Results Response to HDD
17583
17584 PARAMETERS
17585 pEventData: Response from FW
17586 pUserData:
17587===========================================================================*/
17588void WDA_EXTScanGetCachedResultsRspCallback(void *pEventData, void* pUserData)
17589{
17590 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17591 tWDA_CbContext *pWDA = NULL;
17592 void *pCallbackContext;
17593 tpAniSirGlobal pMac;
17594
17595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17596 "%s: ", __func__);
17597 if (NULL == pWdaParams)
17598 {
17599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17600 "%s: pWdaParams received NULL", __func__);
17601 VOS_ASSERT(0);
17602 return;
17603 }
17604
17605 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17606
17607 if (NULL == pWDA)
17608 {
17609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17610 "%s: pWDA received NULL", __func__);
17611 VOS_ASSERT(0);
17612 goto error;
17613 }
17614
17615 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17616 if (NULL == pMac)
17617 {
17618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17619 "%s:pMac is NULL", __func__);
17620 VOS_ASSERT(0);
17621 goto error;
17622 }
17623
17624 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17625
17626 if (pMac->sme.pEXTScanIndCb)
17627 {
17628 pMac->sme.pEXTScanIndCb(pCallbackContext,
17629 WDA_EXTSCAN_GET_CACHED_RESULTS_RSP,
17630 pEventData);
17631 }
17632 else
17633 {
17634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17635 "%s:HDD callback is null", __func__);
17636 VOS_ASSERT(0);
17637 }
17638
17639
17640error:
17641
17642 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17643 {
17644 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17645 }
17646 if (pWdaParams->wdaMsgParam != NULL)
17647 {
17648 vos_mem_free(pWdaParams->wdaMsgParam);
17649 }
17650 vos_mem_free(pWdaParams) ;
17651
17652 return;
17653}
17654
17655/*==========================================================================
17656 FUNCTION WDA_EXTScanGetCapabilitiesRspCallback
17657
17658 DESCRIPTION
17659 API to send EXTScan Get Capabilities Response to HDD
17660
17661 PARAMETERS
17662 pEventData: Response from FW
17663 pUserData:
17664===========================================================================*/
17665void WDA_EXTScanGetCapabilitiesRspCallback(void *pEventData, void* pUserData)
17666{
17667 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17668 tWDA_CbContext *pWDA = NULL;
17669 void *pCallbackContext;
17670 tpAniSirGlobal pMac;
17671
17672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17673 "%s:", __func__);
17674 if (NULL == pWdaParams)
17675 {
17676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17677 "%s: pWdaParams received NULL", __func__);
17678 VOS_ASSERT(0);
17679 return;
17680 }
17681
17682 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17683
17684 if (NULL == pWDA)
17685 {
17686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17687 "%s: pWDA received NULL", __func__);
17688 VOS_ASSERT(0);
17689 goto error;
17690 }
17691
17692 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17693 if (NULL == pMac)
17694 {
17695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17696 "%s:pMac is NULL", __func__);
17697 VOS_ASSERT(0);
17698 goto error;
17699 }
17700
17701 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17702
17703 if (pMac->sme.pEXTScanIndCb)
17704 {
17705 pMac->sme.pEXTScanIndCb(pCallbackContext,
17706 WDA_EXTSCAN_GET_CAPABILITIES_RSP,
17707 pEventData);
17708 }
17709 else
17710 {
17711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17712 "%s:HDD callback is null", __func__);
17713 VOS_ASSERT(0);
17714 }
17715
17716
17717error:
17718
17719 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17720 {
17721 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17722 }
17723 if (pWdaParams->wdaMsgParam != NULL)
17724 {
17725 vos_mem_free(pWdaParams->wdaMsgParam);
17726 }
17727 vos_mem_free(pWdaParams) ;
17728
17729 return;
17730}
17731
17732/*==========================================================================
17733 FUNCTION WDA_EXTScanSetBSSIDHotlistRspCallback
17734
17735 DESCRIPTION
17736 API to send EXTScan Set BSSID Hotlist Response to HDD
17737
17738 PARAMETERS
17739 pEventData: Response from FW
17740 pUserData:
17741===========================================================================*/
17742void WDA_EXTScanSetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
17743{
17744 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17745 tWDA_CbContext *pWDA = NULL;
17746 void *pCallbackContext;
17747 tpAniSirGlobal pMac;
17748
17749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17750 "%s: ", __func__);
17751 if (NULL == pWdaParams)
17752 {
17753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17754 "%s: pWdaParams received NULL", __func__);
17755 VOS_ASSERT(0) ;
17756 return;
17757 }
17758
17759 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17760
17761 if (NULL == pWDA)
17762 {
17763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17764 "%s: pWDA received NULL", __func__);
17765 VOS_ASSERT(0);
17766 goto error;
17767 }
17768
17769 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17770 if (NULL == pMac)
17771 {
17772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17773 "%s:pMac is NULL", __func__);
17774 VOS_ASSERT(0);
17775 goto error;
17776 }
17777
17778 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17779
17780 if (pMac->sme.pEXTScanIndCb)
17781 {
17782 pMac->sme.pEXTScanIndCb(pCallbackContext,
17783 WDA_EXTSCAN_SET_BSSID_HOTLIST_RSP,
17784 pEventData);
17785 }
17786 else
17787 {
17788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17789 "%s:HDD callback is null", __func__);
17790 VOS_ASSERT(0);
17791 }
17792
17793
17794error:
17795
17796 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17797 {
17798 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17799 }
17800 if (pWdaParams->wdaMsgParam != NULL)
17801 {
17802 vos_mem_free(pWdaParams->wdaMsgParam);
17803 }
17804 vos_mem_free(pWdaParams) ;
17805
17806 return;
17807}
17808
17809/*==========================================================================
17810 FUNCTION WDA_EXTScanResetBSSIDHotlistRspCallback
17811
17812 DESCRIPTION
17813 API to send EXTScan ReSet BSSID Hotlist Response to HDD
17814
17815 PARAMETERS
17816 pEventData: Response from FW
17817 pUserData:
17818===========================================================================*/
17819void WDA_EXTScanResetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
17820{
17821 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17822 tWDA_CbContext *pWDA = NULL;
17823 void *pCallbackContext;
17824 tpAniSirGlobal pMac;
17825
17826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17827 "%s:", __func__);
17828 if (NULL == pWdaParams)
17829 {
17830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17831 "%s: pWdaParams received NULL", __func__);
17832 VOS_ASSERT(0) ;
17833 return;
17834 }
17835
17836 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17837
17838 if (NULL == pWDA)
17839 {
17840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17841 "%s: pWDA received NULL", __func__);
17842 VOS_ASSERT(0);
17843 goto error;
17844 }
17845
17846 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17847 if (NULL == pMac)
17848 {
17849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17850 "%s:pMac is NULL", __func__);
17851 VOS_ASSERT(0);
17852 goto error;
17853 }
17854
17855 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17856
17857 if (pMac->sme.pEXTScanIndCb)
17858 {
17859 pMac->sme.pEXTScanIndCb(pCallbackContext,
17860 WDA_EXTSCAN_RESET_BSSID_HOTLIST_RSP,
17861 pEventData);
17862 }
17863 else
17864 {
17865 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17866 "%s:HDD callback is null", __func__);
17867 VOS_ASSERT(0);
17868 }
17869
17870
17871error:
17872
17873 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17874 {
17875 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17876 }
17877 if (pWdaParams->wdaMsgParam != NULL)
17878 {
17879 vos_mem_free(pWdaParams->wdaMsgParam);
17880 }
17881 vos_mem_free(pWdaParams) ;
17882
17883 return;
17884}
17885
17886/*==========================================================================
17887 FUNCTION WDA_EXTScanSetSignfRSSIChangeRspCallback
17888
17889 DESCRIPTION
17890 API to send EXTScan Set Significant RSSI Change RSP to HDD
17891
17892 PARAMETERS
17893 pEventData: Response from FW
17894 pUserData:
17895===========================================================================*/
17896void WDA_EXTScanSetSignfRSSIChangeRspCallback(void *pEventData, void* pUserData)
17897{
17898 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17899 tWDA_CbContext *pWDA = NULL;
17900 void *pCallbackContext;
17901 tpAniSirGlobal pMac;
17902
17903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17904 "%s:", __func__);
17905 if (NULL == pWdaParams)
17906 {
17907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17908 "%s: pWdaParams received NULL", __func__);
17909 VOS_ASSERT(0) ;
17910 return;
17911 }
17912
17913 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17914
17915 if (NULL == pWDA)
17916 {
17917 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17918 "%s: pWDA received NULL", __func__);
17919 VOS_ASSERT(0);
17920 goto error;
17921 }
17922
17923 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17924 if (NULL == pMac)
17925 {
17926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17927 "%s:pMac is NULL", __func__);
17928 VOS_ASSERT(0);
17929 goto error;
17930 }
17931
17932 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17933
17934 if (pMac->sme.pEXTScanIndCb)
17935 {
17936 pMac->sme.pEXTScanIndCb(pCallbackContext,
17937 WDA_EXTSCAN_SET_SIGNF_RSSI_CHANGE_RSP,
17938 pEventData);
17939 }
17940 else
17941 {
17942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17943 "%s:HDD callback is null", __func__);
17944 VOS_ASSERT(0);
17945 }
17946
17947
17948error:
17949
17950 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17951 {
17952 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17953 }
17954 if (pWdaParams->wdaMsgParam != NULL)
17955 {
17956 vos_mem_free(pWdaParams->wdaMsgParam);
17957 }
17958 vos_mem_free(pWdaParams) ;
17959
17960 return;
17961}
17962
17963/*==========================================================================
17964 FUNCTION WDA_EXTScanResetSignfRSSIChangeRspCallback
17965
17966 DESCRIPTION
17967 API to send EXTScan Set Significant RSSI Change RSP to HDD
17968
17969 PARAMETERS
17970 pEventData: Response from FW
17971 pUserData:
17972===========================================================================*/
17973void WDA_EXTScanResetSignfRSSIChangeRspCallback(void *pEventData,
17974 void* pUserData)
17975{
17976 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17977 tWDA_CbContext *pWDA = NULL;
17978 void *pCallbackContext;
17979 tpAniSirGlobal pMac;
17980
17981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17982 "%s:", __func__);
17983 if (NULL == pWdaParams)
17984 {
17985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17986 "%s: pWdaParams received NULL", __func__);
17987 VOS_ASSERT(0) ;
17988 return;
17989 }
17990
17991 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17992
17993 if (NULL == pWDA)
17994 {
17995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17996 "%s: pWDA received NULL", __func__);
17997 VOS_ASSERT(0);
17998 goto error;
17999 }
18000
18001 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18002 if (NULL == pMac)
18003 {
18004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18005 "%s:pMac is NULL", __func__);
18006 VOS_ASSERT(0);
18007 goto error;
18008 }
18009
18010 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
18011
18012 if (pMac->sme.pEXTScanIndCb)
18013 {
18014 pMac->sme.pEXTScanIndCb(pCallbackContext,
18015 WDA_EXTSCAN_RESET_SIGNF_RSSI_CHANGE_RSP,
18016 pEventData);
18017 }
18018 else
18019 {
18020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18021 "%s:HDD callback is null", __func__);
18022 VOS_ASSERT(0);
18023 }
18024
18025
18026error:
18027
18028 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18029 {
18030 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18031 }
18032 if (pWdaParams->wdaMsgParam != NULL)
18033 {
18034 vos_mem_free(pWdaParams->wdaMsgParam);
18035 }
18036 vos_mem_free(pWdaParams) ;
18037
18038 return;
18039}
18040
18041/*==========================================================================
18042 FUNCTION WDA_ProcessEXTScanStartReq
18043
18044 DESCRIPTION
18045 API to send EXTScan Start Request to WDI
18046
18047 PARAMETERS
18048 pWDA: Pointer to WDA context
18049 wdaRequest: Pointer to EXTScan req parameters
18050===========================================================================*/
18051VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
18052 tSirEXTScanStartReqParams *wdaRequest)
18053{
18054 WDI_Status status = WDI_STATUS_SUCCESS;
18055 tWDA_ReqParams *pWdaParams;
18056
18057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18058 "%s: ", __func__);
18059 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18060 if (NULL == pWdaParams)
18061 {
18062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18063 "%s: VOS MEM Alloc Failure", __func__);
18064 VOS_ASSERT(0);
18065 return VOS_STATUS_E_NOMEM;
18066 }
18067 pWdaParams->pWdaContext = pWDA;
18068 pWdaParams->wdaMsgParam = wdaRequest;
18069 pWdaParams->wdaWdiApiMsgParam = NULL;
18070
18071 status = WDI_EXTScanStartReq((void *)wdaRequest,
18072 (WDI_EXTScanStartRspCb)WDA_EXTScanStartRspCallback,
18073 (void *)pWdaParams);
18074 if (IS_WDI_STATUS_FAILURE(status))
18075 {
18076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18077 "Failure to request. Free all the memory " );
18078 vos_mem_free(pWdaParams->wdaMsgParam);
18079 vos_mem_free(pWdaParams);
18080 }
18081 return CONVERT_WDI2VOS_STATUS(status);
18082}
18083
18084/*==========================================================================
18085 FUNCTION WDA_ProcessEXTScanStopReq
18086
18087 DESCRIPTION
18088 API to send EXTScan Start Request to WDI
18089
18090 PARAMETERS
18091 pWDA: Pointer to WDA context
18092 wdaRequest: Pointer to EXTScan req parameters
18093===========================================================================*/
18094VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
18095 tSirEXTScanStopReqParams *wdaRequest)
18096{
18097 WDI_Status status = WDI_STATUS_SUCCESS;
18098 tWDA_ReqParams *pWdaParams;
18099
18100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18101 "%s:", __func__);
18102 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18103 if (NULL == pWdaParams)
18104 {
18105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18106 "%s: VOS MEM Alloc Failure", __func__);
18107 VOS_ASSERT(0);
18108 return VOS_STATUS_E_NOMEM;
18109 }
18110 pWdaParams->pWdaContext = pWDA;
18111 pWdaParams->wdaMsgParam = wdaRequest;
18112 pWdaParams->wdaWdiApiMsgParam = NULL;
18113
18114 status = WDI_EXTScanStopReq((void *)wdaRequest,
18115 (WDI_EXTScanStopRspCb)WDA_EXTScanStopRspCallback,
18116 (void *)pWdaParams);
18117 if (IS_WDI_STATUS_FAILURE(status))
18118 {
18119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18120 "Failure to request. Free all the memory " );
18121 vos_mem_free(pWdaParams->wdaMsgParam);
18122 vos_mem_free(pWdaParams);
18123 }
18124 return CONVERT_WDI2VOS_STATUS(status);
18125}
18126
18127/*==========================================================================
18128 FUNCTION WDA_ProcessEXTScanGetCachedResultsReq
18129
18130 DESCRIPTION
18131 API to send EXTScan Get Cached Results Request to WDI
18132
18133 PARAMETERS
18134 pWDA: Pointer to WDA context
18135 wdaRequest: Pointer to EXTScan req parameters
18136===========================================================================*/
18137VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
18138 tSirEXTScanGetCachedResultsReqParams *wdaRequest)
18139{
18140 WDI_Status status = WDI_STATUS_SUCCESS;
18141 tWDA_ReqParams *pWdaParams;
18142
18143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18144 "%s: ", __func__);
18145 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18146 if (NULL == pWdaParams)
18147 {
18148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18149 "%s: VOS MEM Alloc Failure", __func__);
18150 VOS_ASSERT(0);
18151 return VOS_STATUS_E_NOMEM;
18152 }
18153 pWdaParams->pWdaContext = pWDA;
18154 pWdaParams->wdaMsgParam = wdaRequest;
18155 pWdaParams->wdaWdiApiMsgParam = NULL;
18156
18157 status = WDI_EXTScanGetCachedResultsReq((void *)wdaRequest,
18158 (WDI_EXTScanGetCachedResultsRspCb)WDA_EXTScanGetCachedResultsRspCallback,
18159 (void *)pWdaParams);
18160 if (IS_WDI_STATUS_FAILURE(status))
18161 {
18162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18163 "Failure to request. Free all the memory " );
18164 vos_mem_free(pWdaParams->wdaMsgParam);
18165 vos_mem_free(pWdaParams);
18166 }
18167 return CONVERT_WDI2VOS_STATUS(status);
18168}
18169
18170/*==========================================================================
18171 FUNCTION WDA_ProcessEXTScanGetCapabilitiesReq
18172
18173 DESCRIPTION
18174 API to send EXTScan Get Capabilities Request to WDI
18175
18176 PARAMETERS
18177 pWDA: Pointer to WDA context
18178 wdaRequest: Pointer to EXTScan req parameters
18179===========================================================================*/
18180VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
18181 tSirGetEXTScanCapabilitiesReqParams *wdaRequest)
18182{
18183 WDI_Status status = WDI_STATUS_SUCCESS;
18184 tWDA_ReqParams *pWdaParams;
18185
18186 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18187 "%s:", __func__);
18188 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18189 if (NULL == pWdaParams)
18190 {
18191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18192 "%s: VOS MEM Alloc Failure", __func__);
18193 VOS_ASSERT(0);
18194 return VOS_STATUS_E_NOMEM;
18195 }
18196 pWdaParams->pWdaContext = pWDA;
18197 pWdaParams->wdaMsgParam = wdaRequest;
18198 pWdaParams->wdaWdiApiMsgParam = NULL;
18199
18200 status = WDI_EXTScanGetCapabilitiesReq((void *)wdaRequest,
18201 (WDI_EXTScanGetCapabilitiesRspCb)WDA_EXTScanGetCapabilitiesRspCallback,
18202 (void *)pWdaParams);
18203 if (IS_WDI_STATUS_FAILURE(status))
18204 {
18205 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18206 "Failure to request. Free all the memory " );
18207 vos_mem_free(pWdaParams->wdaMsgParam);
18208 vos_mem_free(pWdaParams);
18209 }
18210 return CONVERT_WDI2VOS_STATUS(status);
18211}
18212
18213/*==========================================================================
18214 FUNCTION WDA_ProcessEXTScanSetBSSIDHotlistReq
18215
18216 DESCRIPTION
18217 API to send Set BSSID Hotlist Request to WDI
18218
18219 PARAMETERS
18220 pWDA: Pointer to WDA context
18221 wdaRequest: Pointer to EXTScan req parameters
18222===========================================================================*/
18223VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
18224 tSirEXTScanSetBssidHotListReqParams *wdaRequest)
18225{
18226 WDI_Status status = WDI_STATUS_SUCCESS;
18227 tWDA_ReqParams *pWdaParams;
18228
18229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18230 "%s: ", __func__);
18231 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18232 if (NULL == pWdaParams)
18233 {
18234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18235 "%s: VOS MEM Alloc Failure", __func__);
18236 VOS_ASSERT(0);
18237 return VOS_STATUS_E_NOMEM;
18238 }
18239 pWdaParams->pWdaContext = pWDA;
18240 pWdaParams->wdaMsgParam = wdaRequest;
18241 pWdaParams->wdaWdiApiMsgParam = NULL;
18242
18243 status = WDI_EXTScanSetBSSIDHotlistReq((void *)wdaRequest,
18244 (WDI_EXTScanSetBSSIDHotlistRspCb)WDA_EXTScanSetBSSIDHotlistRspCallback,
18245 (void *)pWdaParams);
18246 if (IS_WDI_STATUS_FAILURE(status))
18247 {
18248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18249 "Failure to request. Free all the memory " );
18250 vos_mem_free(pWdaParams->wdaMsgParam);
18251 vos_mem_free(pWdaParams);
18252 }
18253 return CONVERT_WDI2VOS_STATUS(status);
18254}
18255
18256/*==========================================================================
18257 FUNCTION WDA_ProcessEXTScanReSetBSSIDHotlistReq
18258
18259 DESCRIPTION
18260 API to send Reset BSSID Hotlist Request to WDI
18261
18262 PARAMETERS
18263 pWDA: Pointer to WDA context
18264 wdaRequest: Pointer to EXTScan req parameters
18265===========================================================================*/
18266VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
18267 tSirEXTScanResetBssidHotlistReqParams *wdaRequest)
18268{
18269 WDI_Status status = WDI_STATUS_SUCCESS;
18270 tWDA_ReqParams *pWdaParams;
18271
18272 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18273 "%s:", __func__);
18274 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18275 if (NULL == pWdaParams)
18276 {
18277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18278 "%s: VOS MEM Alloc Failure", __func__);
18279 VOS_ASSERT(0);
18280 return VOS_STATUS_E_NOMEM;
18281 }
18282 pWdaParams->pWdaContext = pWDA;
18283 pWdaParams->wdaMsgParam = wdaRequest;
18284 pWdaParams->wdaWdiApiMsgParam = NULL;
18285
18286 status = WDI_EXTScanResetBSSIDHotlistReq((void *)wdaRequest,
18287 (WDI_EXTScanResetBSSIDHotlistRspCb)WDA_EXTScanResetBSSIDHotlistRspCallback,
18288 (void *)pWdaParams);
18289 if (IS_WDI_STATUS_FAILURE(status))
18290 {
18291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18292 "Failure to request. Free all the memory " );
18293 vos_mem_free(pWdaParams->wdaMsgParam);
18294 vos_mem_free(pWdaParams);
18295 }
18296 return CONVERT_WDI2VOS_STATUS(status);
18297}
18298
18299/*==========================================================================
18300 FUNCTION WDA_ProcessEXTScanSetSignfRSSIChangeReq
18301
18302 DESCRIPTION
18303 API to send Set Significant RSSI Change Request to WDI
18304
18305 PARAMETERS
18306 pWDA: Pointer to WDA context
18307 wdaRequest: Pointer to EXTScan req parameters
18308===========================================================================*/
18309VOS_STATUS WDA_ProcessEXTScanSetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
18310 tSirEXTScanSetSignificantChangeReqParams *wdaRequest)
18311{
18312 WDI_Status status = WDI_STATUS_SUCCESS;
18313 tWDA_ReqParams *pWdaParams;
18314
18315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18316 "%s: ", __func__);
18317 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18318 if (NULL == pWdaParams)
18319 {
18320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18321 "%s: VOS MEM Alloc Failure", __func__);
18322 VOS_ASSERT(0);
18323 return VOS_STATUS_E_NOMEM;
18324 }
18325 pWdaParams->pWdaContext = pWDA;
18326 pWdaParams->wdaMsgParam = wdaRequest;
18327 pWdaParams->wdaWdiApiMsgParam = NULL;
18328
18329 status = WDI_EXTScanSetSignfRSSIChangeReq((void *)wdaRequest,
18330 (WDI_EXTScanSetSignfRSSIChangeRspCb)WDA_EXTScanSetSignfRSSIChangeRspCallback,
18331 (void *)pWdaParams);
18332 if (IS_WDI_STATUS_FAILURE(status))
18333 {
18334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18335 "Failure to request. Free all the memory " );
18336 vos_mem_free(pWdaParams->wdaMsgParam);
18337 vos_mem_free(pWdaParams);
18338 }
18339 return CONVERT_WDI2VOS_STATUS(status);
18340}
18341
18342/*==========================================================================
18343 FUNCTION WDA_ProcessEXTScanResetSignfRSSIChangeReq
18344
18345 DESCRIPTION
18346 API to send Reset Significant RSSI Change Request to WDI
18347
18348 PARAMETERS
18349 pWDA: Pointer to WDA context
18350 wdaRequest: Pointer to EXTScan req parameters
18351===========================================================================*/
18352VOS_STATUS WDA_ProcessEXTScanResetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
18353 tSirEXTScanResetSignificantChangeReqParams *wdaRequest)
18354{
18355 WDI_Status status = WDI_STATUS_SUCCESS;
18356 tWDA_ReqParams *pWdaParams;
18357
18358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18359 "%s:", __func__);
18360 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18361 if (NULL == pWdaParams)
18362 {
18363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18364 "%s: VOS MEM Alloc Failure", __func__);
18365 VOS_ASSERT(0);
18366 return VOS_STATUS_E_NOMEM;
18367 }
18368 pWdaParams->pWdaContext = pWDA;
18369 pWdaParams->wdaMsgParam = wdaRequest;
18370 pWdaParams->wdaWdiApiMsgParam = NULL;
18371
18372 status = WDI_EXTScanResetSignfRSSIChangeReq((void *)wdaRequest,
18373 (WDI_EXTScanResetSignfRSSIChangeRspCb)
18374 WDA_EXTScanResetSignfRSSIChangeRspCallback,
18375 (void *)pWdaParams);
18376 if (IS_WDI_STATUS_FAILURE(status))
18377 {
18378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18379 "Failure to request. Free all the memory " );
18380 vos_mem_free(pWdaParams->wdaMsgParam);
18381 vos_mem_free(pWdaParams);
18382 }
18383 return CONVERT_WDI2VOS_STATUS(status);
18384}
18385#endif /* WLAN_FEATURE_EXTSCAN */
18386
Sunil Duttbd736ed2014-05-26 21:19:41 +053018387#ifdef WLAN_FEATURE_LINK_LAYER_STATS
18388
18389/*==========================================================================
18390 FUNCTION WDA_LLStatsSetRspCallback
18391
18392 DESCRIPTION
18393 API to process set link layer statistics response from FW
18394
18395 PARAMETERS
18396 pRsp: Pointer to set link layer statistics response
18397 pUserData: Pointer to user data
18398
18399 RETURN VALUE
18400 NONE
18401
18402===========================================================================*/
18403void WDA_LLStatsSetRspCallback(void *pEventData, void* pUserData)
18404{
18405 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18406
18407
18408 if (NULL == pWdaParams)
18409 {
18410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18411 "%s: pWdaParams received NULL", __func__);
18412 VOS_ASSERT(0) ;
18413 return ;
18414 }
18415
18416 /* Do not need to send notification to upper layer
18417 * Just free allocated resources */
18418 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18419 {
18420 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18421 }
18422 if (pWdaParams->wdaMsgParam != NULL)
18423 {
18424 vos_mem_free(pWdaParams->wdaMsgParam);
18425 }
18426 vos_mem_free(pWdaParams) ;
18427
18428 return;
18429}
18430
18431/*==========================================================================
18432 FUNCTION WDA_ProcessLLStatsSetReq
18433
18434 DESCRIPTION
18435 API to send Set Link Layer Stats request to WDI
18436
18437 PARAMETERS
18438 pWDA: Pointer to WDA context
18439 wdaRequest: Pointer to set Link Layer Stats req parameters
18440===========================================================================*/
18441VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
18442 tSirLLStatsSetReq *wdaRequest)
18443{
18444 WDI_Status status = WDI_STATUS_SUCCESS;
18445 tWDA_ReqParams *pWdaParams;
18446
18447 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18448 if (NULL == pWdaParams)
18449 {
18450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18451 "%s: VOS MEM Alloc Failure", __func__);
18452 VOS_ASSERT(0);
18453 return VOS_STATUS_E_NOMEM;
18454 }
18455 pWdaParams->pWdaContext = pWDA;
18456 pWdaParams->wdaMsgParam = wdaRequest;
18457 pWdaParams->wdaWdiApiMsgParam = NULL;
18458
18459 status = WDI_LLStatsSetReq((void *)wdaRequest,
18460 (WDI_LLStatsSetRspCb)WDA_LLStatsSetRspCallback,
18461 (void *)pWdaParams);
18462 if (IS_WDI_STATUS_FAILURE(status))
18463 {
18464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18465 "Failure to request. Free all the memory " );
18466 vos_mem_free(pWdaParams->wdaMsgParam);
18467 vos_mem_free(pWdaParams);
18468 }
18469 return CONVERT_WDI2VOS_STATUS(status);
18470}
18471
18472/*==========================================================================
18473 FUNCTION WDA_LLStatsGetRspCallback
18474
18475 DESCRIPTION
18476 API to process get link layer statistics response from FW
18477
18478 PARAMETERS
18479 pRsp: Pointer to get link layer statistics response
18480 pUserData: Pointer to user data
18481
18482 RETURN VALUE
18483 NONE
18484
18485===========================================================================*/
18486void WDA_LLStatsGetRspCallback(void *pEventData, void* pUserData)
18487{
18488 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18489
18490 if (NULL == pWdaParams)
18491 {
18492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18493 "%s: pWdaParams received NULL", __func__);
18494 VOS_ASSERT(0) ;
18495 return ;
18496 }
18497
18498 /* Do not need to send notification to upper layer
18499 * Just free allocated resources */
18500 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18501 {
18502 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18503 }
18504 if (pWdaParams->wdaMsgParam != NULL)
18505 {
18506 vos_mem_free(pWdaParams->wdaMsgParam);
18507 }
18508 vos_mem_free(pWdaParams) ;
18509
18510 return;
18511}
18512
18513/*==========================================================================
18514 FUNCTION WDA_ProcessLLStatsGetReq
18515
18516 DESCRIPTION
18517 API to send Get Link Layer Stats request to WDI
18518
18519 PARAMETERS
18520 pWDA: Pointer to WDA context
18521 wdaRequest: Pointer to get Link Layer Stats req parameters
18522===========================================================================*/
18523VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
18524 tSirLLStatsGetReq *wdaRequest)
18525{
18526 WDI_Status status = WDI_STATUS_SUCCESS;
18527 tWDA_ReqParams *pWdaParams;
18528
18529 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18530 if (NULL == pWdaParams)
18531 {
18532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18533 "%s: VOS MEM Alloc Failure", __func__);
18534 VOS_ASSERT(0);
18535 return VOS_STATUS_E_NOMEM;
18536 }
18537 pWdaParams->pWdaContext = pWDA;
18538 pWdaParams->wdaMsgParam = wdaRequest;
18539 pWdaParams->wdaWdiApiMsgParam = NULL;
18540
18541 status = WDI_LLStatsGetReq((void *) wdaRequest,
18542 (WDI_LLStatsGetRspCb)WDA_LLStatsGetRspCallback,
18543 (void *)pWdaParams);
18544 if (IS_WDI_STATUS_FAILURE(status))
18545 {
18546 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18547 "Failure to request. Free all the memory " );
18548 vos_mem_free(pWdaParams->wdaMsgParam);
18549 vos_mem_free(pWdaParams);
18550 }
18551 return CONVERT_WDI2VOS_STATUS(status);
18552}
18553
18554/*==========================================================================
18555 FUNCTION WDA_LLStatsClearRspCallback
18556
18557 DESCRIPTION
18558 API to process clear link layer statistics response from FW
18559
18560 PARAMETERS
18561 pRsp: Pointer to clear link layer statistics response
18562 pUserData: Pointer to user data
18563
18564 RETURN VALUE
18565 NONE
18566
18567===========================================================================*/
18568void WDA_LLStatsClearRspCallback(void *pEventData, void* pUserData)
18569{
18570 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18571
18572
18573 if (NULL == pWdaParams)
18574 {
18575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18576 "%s: pWdaParams received NULL", __func__);
18577 VOS_ASSERT(0) ;
18578 return ;
18579 }
18580 /* Do not need to send notification to upper layer
18581 * Just free allocated resources */
18582 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18583 {
18584 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18585 }
18586 if (pWdaParams->wdaMsgParam != NULL)
18587 {
18588 vos_mem_free(pWdaParams->wdaMsgParam);
18589 }
18590 vos_mem_free(pWdaParams) ;
18591 return;
18592}
18593
18594/*==========================================================================
18595 FUNCTION WDA_ProcessLLStatsClearReq
18596
18597 DESCRIPTION
18598 API to send Clear Link Layer Stats request to WDI
18599
18600 PARAMETERS
18601 pWDA: Pointer to WDA context
18602 wdaRequest: Pointer to earLink Layer Stats req
18603===========================================================================*/
18604VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
18605 tSirLLStatsClearReq *wdaRequest)
18606{
18607 WDI_Status status = WDI_STATUS_SUCCESS;
18608 tWDA_ReqParams *pWdaParams;
18609
18610 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18611 if (NULL == pWdaParams)
18612 {
18613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18614 "%s: VOS MEM Alloc Failure", __func__);
18615 VOS_ASSERT(0);
18616 return VOS_STATUS_E_NOMEM;
18617 }
18618 pWdaParams->pWdaContext = pWDA;
18619 pWdaParams->wdaMsgParam = wdaRequest;
18620 pWdaParams->wdaWdiApiMsgParam = NULL;
18621
18622 status = WDI_LLStatsClearReq((void *) wdaRequest,
18623 (WDI_LLStatsClearRspCb)WDA_LLStatsClearRspCallback,
18624 (void *)pWdaParams);
18625 if (IS_WDI_STATUS_FAILURE(status))
18626 {
18627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18628 "Failure to request. Free all the memory " );
18629 vos_mem_free(pWdaParams->wdaMsgParam);
18630 vos_mem_free(pWdaParams);
18631 }
18632 return CONVERT_WDI2VOS_STATUS(status);
18633}
18634
18635#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Abhishek Singh85b74712014-10-08 11:38:19 +053018636
Abhishek Singh85b74712014-10-08 11:38:19 +053018637void WDA_FWStatsGetRspCallback(WDI_Status status,void *fwStatsResp,void *pUserData)
18638{
18639 tSirFWStatsInfo *fwStatsinfo = (tSirFWStatsInfo *)pUserData;
18640
18641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18642 "<------ %s " ,__func__);
18643 if (NULL == fwStatsinfo)
18644 {
18645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18646 "%s: pWdaParams received NULL", __func__);
18647 VOS_ASSERT(0);
18648 return;
18649 }
18650
18651 if(fwStatsinfo->callback)
18652 fwStatsinfo->callback(status, fwStatsResp, fwStatsinfo->data);
18653
18654 vos_mem_free(pUserData);
18655 return;
18656}
18657
18658
18659v_VOID_t WDA_ProcessFWStatsGetReq(tWDA_CbContext *pWDA,
18660 tSirFWStatsGetReq *pData)
18661{
18662
18663 WDI_Status wdiStatus;
18664 tSirFWStatsInfo *fwStatsinfo;
18665
18666 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18667 "------> %s" , __func__);
18668
18669 fwStatsinfo =
18670 (tSirFWStatsInfo *)vos_mem_malloc(sizeof(tSirFWStatsInfo));
18671 if (NULL == fwStatsinfo)
18672 {
18673 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18674 "%s: VOS MEM Alloc Failure", __func__);
18675 VOS_ASSERT(0);
18676 vos_mem_free(pData);
18677 return;
18678 }
18679
18680 fwStatsinfo->callback = (tSirFWStatsCallback)(pData->callback);
18681 fwStatsinfo->data = pData->data;
18682
18683 wdiStatus = WDI_FWStatsGetReq(fwStatsinfo,
18684 WDA_FWStatsGetRspCallback,
18685 pData->stats);
18686 if (WDI_STATUS_PENDING == wdiStatus)
18687 {
18688 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18689 "Pending received for %s:%d ", __func__, __LINE__);
18690 }
18691 else if (WDI_STATUS_SUCCESS != wdiStatus)
18692 {
18693 if (fwStatsinfo->callback)
18694 {
18695 fwStatsinfo->callback(WDI_STATUS_E_FAILURE, NULL ,fwStatsinfo->data);
18696 }
18697 vos_mem_free(fwStatsinfo);
18698 }
18699 vos_mem_free(pData);
18700}
18701
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053018702/*==========================================================================
18703 FUNCTION WDA_EncryptMsgRspCallback
18704
18705 DESCRIPTION
18706 API to send Encrypt message response to HDD
18707
18708 PARAMETERS
18709 pEventData: Response from FW
18710 pUserData: Data sent to firmware as part of request
18711===========================================================================*/
18712void WDA_EncryptMsgRspCallback(WDI_Status status, void *pEventData,
18713 void* pUserData)
18714{
18715 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18716 tWDA_CbContext *pWDA = NULL;
18717 tpAniSirGlobal pMac;
18718 vos_msg_t vosMsg;
18719 tpSirEncryptedDataRspParams pEncRspParams;
18720 tpSetEncryptedDataRspParams pEncryptedDataRsp;
18721
18722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18723 FL("%s:"), __func__);
18724 if (NULL == pWdaParams)
18725 {
18726 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18727 FL("%s: pWdaParams received NULL"), __func__);
18728 VOS_ASSERT(0);
18729 return;
18730 }
18731
18732 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
18733
18734 if (NULL == pWDA)
18735 {
18736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18737 FL("%s: pWDA received NULL"), __func__);
18738 VOS_ASSERT(0);
18739 goto error;
18740 }
18741
18742 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18743 if (NULL == pMac)
18744 {
18745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18746 FL("%s:pMac is NULL"), __func__);
18747 VOS_ASSERT(0);
18748 goto error;
18749 }
18750
18751 pEncryptedDataRsp = (tpSetEncryptedDataRspParams) pEventData;
18752
18753 pEncRspParams = vos_mem_malloc(sizeof(tSirEncryptedDataRspParams));
18754 if (NULL == pEncRspParams)
18755 {
18756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18757 FL("%s: VOS MEM Alloc Failure"), __func__);
18758 VOS_ASSERT(0);
18759 goto error;
18760 }
18761
18762 /* Message Header */
18763 pEncRspParams->mesgType = eWNI_SME_ENCRYPT_MSG_RSP;
18764 pEncRspParams->mesgLen = sizeof(tSirEncryptedDataRspParams);
18765 pEncRspParams->encryptedDataRsp.encryptedPayload.length =
18766 pEncryptedDataRsp->encryptedPayload.length;
18767 vos_mem_copy(pEncRspParams->encryptedDataRsp.encryptedPayload.data,
18768 pEncryptedDataRsp->encryptedPayload.data,
18769 pEncryptedDataRsp->encryptedPayload.length);
18770
18771 /* VOS message wrapper */
18772 vosMsg.type = eWNI_SME_ENCRYPT_MSG_RSP;
18773 vosMsg.bodyptr = (void *)pEncRspParams;
18774 vosMsg.bodyval = 0;
18775
18776 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
18777 {
18778 /* free the mem */
18779 vos_mem_free((v_VOID_t *) pEncRspParams);
18780 }
18781
18782error:
18783
18784 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18785 {
18786 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18787 }
18788 if (pWdaParams->wdaMsgParam != NULL)
18789 {
18790 vos_mem_free(pWdaParams->wdaMsgParam);
18791 }
18792 vos_mem_free(pWdaParams) ;
18793
18794 return;
18795}
18796/*==========================================================================
18797 FUNCTION WDA_ProcessEncryptMsgReq
18798
18799 DESCRIPTION
18800 API to send Encrypt message Request to WDI
18801
18802 PARAMETERS
18803 pWDA: Pointer to WDA context
18804 wdaRequest: Pointer to Encrypt_msg req parameters
18805===========================================================================*/
18806VOS_STATUS WDA_ProcessEncryptMsgReq(tWDA_CbContext *pWDA,
18807 u8 *wdaRequest)
18808{
18809 WDI_Status status = WDI_STATUS_SUCCESS;
18810 tWDA_ReqParams *pWdaParams;
18811
18812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18813 FL("%s: "), __func__);
18814 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18815 if (NULL == pWdaParams)
18816 {
18817 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18818 FL("%s: VOS MEM Alloc Failure"), __func__);
18819 VOS_ASSERT(0);
18820 return VOS_STATUS_E_NOMEM;
18821 }
18822 pWdaParams->pWdaContext = pWDA;
18823 pWdaParams->wdaMsgParam = wdaRequest;
18824 pWdaParams->wdaWdiApiMsgParam = NULL;
18825
18826 status = WDI_EncryptMsgReq((void *)wdaRequest,
18827 (WDI_EncryptMsgRspCb)WDA_EncryptMsgRspCallback,
18828 (void *)pWdaParams);
18829 if (IS_WDI_STATUS_FAILURE(status))
18830 {
18831 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18832 FL("Failure to request. Free all the memory " ));
18833 vos_mem_free(pWdaParams->wdaMsgParam);
18834 vos_mem_free(pWdaParams);
18835 }
18836 return CONVERT_WDI2VOS_STATUS(status);
18837}