blob: e1c2305bebef291033f39b9e08665d7a429980b4 [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Kiet Lam1ed83fc2014-02-19 01:15:45 -08002 * Copyright (c) 2012-2014 The Linux Foundation. All rights reserved.
3 *
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/*
23 * Copyright (c) 2012-2014 Qualcomm Atheros, Inc.
24 * All Rights Reserved.
25 * Qualcomm Atheros Confidential and Proprietary.
26 *
27 */
28
Jeff Johnson295189b2012-06-20 16:38:30 -070029
30/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070031 W L A N _ Q C T _ WDA . C
Jeff Johnson295189b2012-06-20 16:38:30 -070032 OVERVIEW:
Jeff Johnson295189b2012-06-20 16:38:30 -070033 This software unit holds the implementation of the WLAN Transport Layer.
Jeff Johnson295189b2012-06-20 16:38:30 -070034 The functions externalized by this module are to be called ONLY by other
35 WLAN modules that properly register with the Transport Layer initially.
Jeff Johnson295189b2012-06-20 16:38:30 -070036 DEPENDENCIES:
Jeff Johnson295189b2012-06-20 16:38:30 -070037 Are listed for each API below.
38
Jeff Johnson295189b2012-06-20 16:38:30 -070039 Copyright (c) 2010-2011 QUALCOMM Incorporated.
40 All Rights Reserved.
41 Qualcomm Confidential and Proprietary
42===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070043/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070044 EDIT HISTORY FOR FILE
45
Jeff Johnson295189b2012-06-20 16:38:30 -070046 This section contains comments describing changes made to the module.
47 Notice that changes are listed in reverse chronological order.
48
Jeff Johnson295189b2012-06-20 16:38:30 -070049 $Header$$DateTime$$Author$
50
Jeff Johnson295189b2012-06-20 16:38:30 -070051 when who what, where, why
52---------- --- -------------------------------------------------
5310/05/2011 haparna Adding support for Keep Alive Feature
542010-12-30 smiryala UMAC convergence changes
552010-08-19 adwivedi WLAN DAL AL(WDA) layer for Prima
56===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070057#include "vos_mq.h"
58#include "vos_api.h"
59#include "vos_packet.h"
60#include "vos_nvitem.h"
61#include "sirApi.h"
62#include "wlan_qct_pal_packet.h"
Mihir Shete40a55652014-03-02 14:14:47 +053063#include "wlan_qct_pal_device.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070064#include "wlan_qct_wda.h"
65#include "wlan_qct_wda_msg.h"
66#include "wlan_qct_wdi_cfg.h"
67#include "wlan_qct_wdi.h"
68#include "wlan_qct_wdi_ds.h"
69#include "wlan_hal_cfg.h"
70/**********************/
71#include "wniApi.h"
72#include "cfgApi.h"
73#include "limApi.h"
74#include "wlan_qct_tl.h"
75#include "wlan_qct_tli_ba.h"
76#include "limUtils.h"
77#include "btcApi.h"
78#include "vos_sched.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070079#include "pttMsgApi.h"
80#include "wlan_qct_sys.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070081/* Used MACRO's */
82/* Get WDA context from vOSS module */
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080083#define WDA_2_4_GHZ_MAX_FREQ 3000
Jeff Johnson295189b2012-06-20 16:38:30 -070084#define VOS_GET_WDA_CTXT(a) vos_get_context(VOS_MODULE_ID_WDA, a)
85#define VOS_GET_MAC_CTXT(a) vos_get_context(VOS_MODULE_ID_PE, a)
Jeff Johnson295189b2012-06-20 16:38:30 -070086#define WDA_BA_TX_FRM_THRESHOLD (5)
Jeff Johnson295189b2012-06-20 16:38:30 -070087#define CONVERT_WDI2SIR_STATUS(x) \
88 ((WDI_STATUS_SUCCESS != (x)) ? eSIR_FAILURE : eSIR_SUCCESS)
89
90#define IS_WDI_STATUS_FAILURE(status) \
91 ((WDI_STATUS_SUCCESS != (status)) && (WDI_STATUS_PENDING != (status)))
Jeff Johnson295189b2012-06-20 16:38:30 -070092#define CONVERT_WDI2VOS_STATUS(x) \
93 ((IS_WDI_STATUS_FAILURE(x)) ? VOS_STATUS_E_FAILURE : VOS_STATUS_SUCCESS)
94
95/* macro's for acessing TL API/data structures */
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070096#define WDA_TL_GET_STA_STATE(a, b, c) WLANTL_GetSTAState(a, b, c)
Jeff Johnson295189b2012-06-20 16:38:30 -070097#define WDA_TL_GET_TX_PKTCOUNT(a, b, c, d) WLANTL_GetTxPktCount(a, b, c, d)
Jeff Johnson295189b2012-06-20 16:38:30 -070098#define WDA_GET_BA_TXFLAG(a, b, c) \
99 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) & (1 << (c)))
100
101#define WDA_SET_BA_TXFLAG(a, b, c) \
102 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) |= (1 << (c)))
103
104#define WDA_CLEAR_BA_TXFLAG(a, b, c) \
105 (((a)->wdaStaInfo[b].ucUseBaBitmap) &= ~(1 << c))
Jeff Johnson295189b2012-06-20 16:38:30 -0700106#define WDA_TL_BA_SESSION_ADD(a, b, c, d, e, f, g) \
107 WLANTL_BaSessionAdd(a, b, c, d, e, f, g)
Jeff Johnson295189b2012-06-20 16:38:30 -0700108/* timer related Macros */
109#define WDA_CREATE_TIMER(a, b, c, d, e, f, g) \
110 tx_timer_create(a, b, c, d, e, f, g)
111#define WDA_START_TIMER(a) tx_timer_activate(a)
112#define WDA_STOP_TIMER(a) tx_timer_deactivate(a)
113#define WDA_DESTROY_TIMER(a) tx_timer_delete(a)
Jeff Johnson32d95a32012-09-10 13:15:23 -0700114#define WDA_WDI_START_TIMEOUT (WDI_RESPONSE_TIMEOUT + 5000)
Jeff Johnson295189b2012-06-20 16:38:30 -0700115
116#define WDA_LAST_POLLED_THRESHOLD(a, curSta, tid) \
117 ((a)->wdaStaInfo[curSta].framesTxed[tid] + WDA_BA_TX_FRM_THRESHOLD)
Jeff Johnson295189b2012-06-20 16:38:30 -0700118#define WDA_BA_MAX_WINSIZE (64)
Jeff Johnson295189b2012-06-20 16:38:30 -0700119#define WDA_INVALID_KEY_INDEX 0xFF
Jeff Johnson295189b2012-06-20 16:38:30 -0700120#define WDA_NUM_PWR_SAVE_CFG 11
Jeff Johnson295189b2012-06-20 16:38:30 -0700121#define WDA_TX_COMPLETE_TIME_OUT_VALUE 1000
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800122#define WDA_TRAFFIC_STATS_TIME_OUT_VALUE 1000
Jeff Johnson295189b2012-06-20 16:38:30 -0700123
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700124#define WDA_MAX_RETRIES_TILL_RING_EMPTY 1000 /* MAX 10000 msec = 10 seconds wait */
Jeff Johnson295189b2012-06-20 16:38:30 -0700125
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700126#define WDA_WAIT_MSEC_TILL_RING_EMPTY 10 /* 10 msec wait per cycle */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -0700127#define WDA_IS_NULL_MAC_ADDRESS(mac_addr) \
128 ((mac_addr[0] == 0x00) && (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) &&\
129 (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) && (mac_addr[3] == 0x00))
130
131#define WDA_MAC_ADDR_ARRAY(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
132#define WDA_MAC_ADDRESS_STR "%02x:%02x:%02x:%02x:%02x:%02x"
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -0800133#define WDA_DUMPCMD_WAIT_TIMEOUT 10000
134
Jeff Johnson295189b2012-06-20 16:38:30 -0700135/* extern declarations */
136extern void vos_WDAComplete_cback(v_PVOID_t pVosContext);
Hoonki Lee9af07cf2013-04-24 01:21:58 -0700137extern wpt_uint8 WDI_GetActiveSessionsCount (void *pWDICtx, wpt_macAddr macBSSID, wpt_boolean skipBSSID);
138
Jeff Johnson295189b2012-06-20 16:38:30 -0700139/* forward declarations */
140void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
141 void *pBodyptr, tANI_U32 bodyVal) ;
142VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
143 WDI_StartReqParamsType *wdiStartParams ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700144VOS_STATUS WDA_wdiCompleteCB(v_PVOID_t pVosContext) ;
145VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams);
146
147extern v_BOOL_t sys_validateStaConfig( void *pImage, unsigned long cbFile,
148 void **ppStaConfig, v_SIZE_t *pcbStaConfig ) ;
149void processCfgDownloadReq(tpAniSirGlobal pMac, tANI_U16 length,
150 tANI_U32 *pConfig) ;
151void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
152 WDI_ConfigBSSReqInfoType *wdiBssParams, tAddBssParams *wdaBssParams) ;
153void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
154 WDI_ConfigStaReqInfoType *wdiStaParams, tAddStaParams *wdaStaParams) ;
155void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
156 void* pUserData ) ;
157static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA) ;
158static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA);
159void WDA_BaCheckActivity(tWDA_CbContext *pWDA) ;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800160void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700161void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams, void* pUserData);
Jeff Johnson295189b2012-06-20 16:38:30 -0700162#ifdef WLAN_FEATURE_VOWIFI_11R
163VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA, tAggrAddTsParams *pAggrAddTsReqParams);
164#endif /* WLAN_FEATURE_VOWIFI_11R */
165
Jeff Johnson295189b2012-06-20 16:38:30 -0700166void WDA_TimerHandler(v_VOID_t *pWDA, tANI_U32 timerInfo) ;
167void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pContext) ;
168VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700169#ifdef FEATURE_WLAN_SCAN_PNO
170static VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA, tSirPNOScanReq *pPNOScanReqParams);
171static VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA, tSirSetRSSIFilterReq* pRssiFilterParams);
172static VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA, tSirUpdateScanParams *pUpdateScanParams);
173#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700174#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -0700175VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,tSirRoamOffloadScanReq *pRoamOffloadScanReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700176void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData);
177void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType);
178void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType);
179#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700180#ifdef WLAN_FEATURE_PACKET_FILTERING
181static VOS_STATUS WDA_Process8023MulticastListReq (
182 tWDA_CbContext *pWDA,
183 tSirRcvFltMcAddrList *pRcvFltMcAddrLis
184 );
185static VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (
186 tWDA_CbContext *pWDA,
187 tSirRcvPktFilterCfgType *pRcvPktFilterCfg
188 );
189static VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (
190 tWDA_CbContext *pWDA,
191 tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp
192 );
193static VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (
194 tWDA_CbContext *pWDA,
195 tSirRcvFltPktClearParam *pRcvFltPktClearParam
196 );
197#endif // WLAN_FEATURE_PACKET_FILTERING
Jeff Johnson295189b2012-06-20 16:38:30 -0700198VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA, tSirSetPowerParamsReq *pPowerParams);
Jeff Johnson295189b2012-06-20 16:38:30 -0700199static VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
200 tpTxControlParams pTxCtrlParam);
Jeff Johnson295189b2012-06-20 16:38:30 -0700201VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
202 v_U8_t *pDefaultKeyId,
203 v_U8_t *pNumKeys,
204 WDI_KeysType *pWdiKeys );
205
206#ifdef WLAN_FEATURE_GTK_OFFLOAD
207static VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA, tpSirGtkOffloadParams pGtkOffloadParams);
208static VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA, tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp);
209#endif // WLAN_FEATURE_GTK_OFFLOAD
210
211VOS_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 */
Jeff Johnson295189b2012-06-20 16:38:30 -0700222/*
223 * FUNCTION: WDA_open
224 * Allocate the WDA context
225 */
226VOS_STATUS WDA_open(v_PVOID_t pVosContext, v_PVOID_t pOSContext,
227 tMacOpenParameters *pMacParams )
228{
229 tWDA_CbContext *wdaContext;
230 VOS_STATUS status;
231 WDI_DeviceCapabilityType wdiDevCapability = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700232 /* Allocate WDA context */
233 status = vos_alloc_context(pVosContext, VOS_MODULE_ID_WDA,
234 (v_VOID_t **)&wdaContext, sizeof(tWDA_CbContext)) ;
235 if(!VOS_IS_STATUS_SUCCESS(status))
236 {
237 return VOS_STATUS_E_NOMEM;
238 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700239 /*__asm int 3;*/
240 vos_mem_zero(wdaContext,sizeof(tWDA_CbContext));
241
242 /* Initialize data structures */
243 wdaContext->pVosContext = pVosContext;
244 wdaContext->wdaState = WDA_INIT_STATE;
245 wdaContext->uTxFlowMask = WDA_TXFLOWMASK;
246
247 /* Initialize WDA-WDI synchronization event */
248 status = vos_event_init(&wdaContext->wdaWdiEvent);
249 if(!VOS_IS_STATUS_SUCCESS(status))
250 {
251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800252 "WDI Sync Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800253 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700254 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700255 /* Init Frame transfer event */
256 status = vos_event_init(&wdaContext->txFrameEvent);
257 if(!VOS_IS_STATUS_SUCCESS(status))
258 {
259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800260 "VOS Mgmt Frame Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800261 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700262 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700263 status = vos_event_init(&wdaContext->suspendDataTxEvent);
264 if(!VOS_IS_STATUS_SUCCESS(status))
265 {
266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800267 "VOS suspend data tx Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800268 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700269 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700270 status = vos_event_init(&wdaContext->waitOnWdiIndicationCallBack);
271 if(!VOS_IS_STATUS_SUCCESS(status))
272 {
273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800274 "VOS wait On Wdi Ind Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800275 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700276 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700277 vos_trace_setLevel(VOS_MODULE_ID_WDA,VOS_TRACE_LEVEL_ERROR);
Jeff Johnson295189b2012-06-20 16:38:30 -0700278 wdaContext->driverMode = pMacParams->driverType;
279 if(WDI_STATUS_SUCCESS != WDI_Init(pOSContext, &wdaContext->pWdiContext,
280 &wdiDevCapability, pMacParams->driverType))
281 {
282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
283 "WDI Init failed" );
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800284 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700285 }
286 else
287 {
288 pMacParams->maxStation = wdiDevCapability.ucMaxSTASupported ;
289 pMacParams->maxBssId = wdiDevCapability.ucMaxBSSSupported;
290 pMacParams->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
Jeff Johnson295189b2012-06-20 16:38:30 -0700291 /* update max STA in WDA used for BA */
292 wdaContext->wdaMaxSta = pMacParams->maxStation;
293 /* store the frameTransRequired flag in wdaContext, to send this to HAL
294 * in WDA_Start
295 */
296 wdaContext->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
297 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700298 return status;
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800299
300error:
301 vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
302 return VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -0700303}
304
Jeff Johnson295189b2012-06-20 16:38:30 -0700305/*
306 * FUNCTION: WDA_preStart
307 * Trigger DAL-AL to start CFG download
308 */
309VOS_STATUS WDA_preStart(v_PVOID_t pVosContext)
310{
311 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
312 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700313 /*
314 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
315 */
316 wdaMsg.type = WNI_CFG_DNLD_REQ ;
317 wdaMsg.bodyptr = NULL;
318 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700319 /* post the message.. */
320 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
321 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
322 {
323 vosStatus = VOS_STATUS_E_BADMSG;
324 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700325 return( vosStatus );
326}
Jeff Johnson295189b2012-06-20 16:38:30 -0700327/*
328 * FUNCTION: WDA_wdiStartCallback
329 * Once WDI_Start is finished, WDI start callback will be called by WDI
330 * to indicate completion of WDI_Start.
331 */
332void WDA_wdiStartCallback(WDI_StartRspParamsType *wdiRspParams,
333 void *pVosContext)
334{
335 tWDA_CbContext *wdaContext;
336 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700337 if (NULL == pVosContext)
338 {
339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700340 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700341 return;
342 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700343 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
344 if (NULL == wdaContext)
345 {
346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700347 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700348 return;
349 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700350 if (WDI_STATUS_SUCCESS != wdiRspParams->wdiStatus)
351 {
352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700353 "%s: WDI_Start() failure reported", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700354 }
355 else
356 {
357 wdaContext->wdaState = WDA_START_STATE;
358 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700359 /* extract and save version information from the Start Response */
360 wdaContext->wcnssWlanCompiledVersion.major =
361 wdiRspParams->wlanCompiledVersion.major;
362 wdaContext->wcnssWlanCompiledVersion.minor =
363 wdiRspParams->wlanCompiledVersion.minor;
364 wdaContext->wcnssWlanCompiledVersion.version =
365 wdiRspParams->wlanCompiledVersion.version;
366 wdaContext->wcnssWlanCompiledVersion.revision =
367 wdiRspParams->wlanCompiledVersion.revision;
368 wdaContext->wcnssWlanReportedVersion.major =
369 wdiRspParams->wlanReportedVersion.major;
370 wdaContext->wcnssWlanReportedVersion.minor =
371 wdiRspParams->wlanReportedVersion.minor;
372 wdaContext->wcnssWlanReportedVersion.version =
373 wdiRspParams->wlanReportedVersion.version;
374 wdaContext->wcnssWlanReportedVersion.revision =
375 wdiRspParams->wlanReportedVersion.revision;
376 wpalMemoryCopy(wdaContext->wcnssSoftwareVersionString,
377 wdiRspParams->wcnssSoftwareVersion,
378 sizeof(wdaContext->wcnssSoftwareVersionString));
379 wpalMemoryCopy(wdaContext->wcnssHardwareVersionString,
380 wdiRspParams->wcnssHardwareVersion,
381 sizeof(wdaContext->wcnssHardwareVersionString));
Jeff Johnson295189b2012-06-20 16:38:30 -0700382 /* Notify WDA_start that WDI_Start has completed */
383 status = vos_event_set(&wdaContext->wdaWdiEvent);
Jeff Johnson43971f52012-07-17 12:26:56 -0700384 if (VOS_STATUS_SUCCESS != status)
Jeff Johnson295189b2012-06-20 16:38:30 -0700385 {
386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700387 "%s: Unable to unblock WDA_start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700388 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700389 return;
390}
391
Jeff Johnson295189b2012-06-20 16:38:30 -0700392/*
393 * FUNCTION: WDA_start
394 * Prepare TLV configuration and call WDI_Start.
395 */
Jeff Johnson295189b2012-06-20 16:38:30 -0700396VOS_STATUS WDA_start(v_PVOID_t pVosContext)
397{
398 tWDA_CbContext *wdaContext;
399 VOS_STATUS status;
400 WDI_Status wdiStatus;
401 WDI_StartReqParamsType wdiStartParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700402 if (NULL == pVosContext)
403 {
404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700405 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700406 return VOS_STATUS_E_FAILURE;
407 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700408 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
409 if (NULL == wdaContext)
410 {
411 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700412 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700413 return VOS_STATUS_E_FAILURE;
414 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700415 /* Non-FTM mode, WDA status for START must be INIT
416 * FTM mode, WDA Status for START can be INIT or STOP */
417 if ( (WDA_INIT_STATE != wdaContext->wdaState) &&
418 (WDA_STOP_STATE != wdaContext->wdaState) )
419 {
420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
421 "%s: Invoked from wrong state %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700422 __func__, wdaContext->wdaState );
Jeff Johnson295189b2012-06-20 16:38:30 -0700423 return VOS_STATUS_E_FAILURE;
424 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700425 /* initialize the wdiStartParam. Note that we can create this on
426 the stack since we won't exit until WDI_Start() completes or
427 times out */
428 vos_mem_set(&wdiStartParam, sizeof(wdiStartParam), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700429 wdiStartParam.wdiDriverType = wdaContext->driverMode;
Jeff Johnson295189b2012-06-20 16:38:30 -0700430 /* prepare the config TLV for the WDI */
431 status = WDA_prepareConfigTLV(pVosContext, &wdiStartParam);
432 if ( !VOS_IS_STATUS_SUCCESS(status) )
433 {
434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700435 "%s: Unable to prepare Config TLV", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700436 return VOS_STATUS_E_FAILURE;
437 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700438 /* note from here onwards if an error occurs we must
439 reclaim the config TLV buffer */
Jeff Johnson295189b2012-06-20 16:38:30 -0700440 wdiStartParam.wdiLowLevelIndCB = WDA_lowLevelIndCallback;
441 wdiStartParam.pIndUserData = (v_PVOID_t *)wdaContext;
442 wdiStartParam.wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700443 /* initialize the WDA-WDI synchronization event */
444 vos_event_reset(&wdaContext->wdaWdiEvent);
Jeff Johnson295189b2012-06-20 16:38:30 -0700445 /* call WDI start */
446 wdiStatus = WDI_Start(&wdiStartParam,
447 (WDI_StartRspCb)WDA_wdiStartCallback,
448 (v_VOID_t *)pVosContext);
449 if ( IS_WDI_STATUS_FAILURE(wdiStatus) )
450 {
451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700452 "%s: WDI Start failed", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700453 vos_mem_free(wdiStartParam.pConfigBuffer);
454 return VOS_STATUS_E_FAILURE;
455 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700456 /* wait for WDI start to invoke our callback */
457 status = vos_wait_single_event( &wdaContext->wdaWdiEvent,
458 WDA_WDI_START_TIMEOUT );
459 if ( !VOS_IS_STATUS_SUCCESS(status) )
460 {
461 if ( VOS_STATUS_E_TIMEOUT == status )
462 {
463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700464 "%s: Timeout occurred during WDI_Start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700465 }
466 else
467 {
468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
469 "%s: Error %d while waiting for WDI_Start",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700470 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700471 }
472 vos_mem_free(wdiStartParam.pConfigBuffer);
473 return VOS_STATUS_E_FAILURE;
474 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700475 /* WDI_Start() has completed so we can resume our work */
Jeff Johnson295189b2012-06-20 16:38:30 -0700476 /* we no longer need the config TLV */
477 vos_mem_free(wdiStartParam.pConfigBuffer);
Jeff Johnson295189b2012-06-20 16:38:30 -0700478 /* if we are not in the START state then WDI_Start() failed */
479 if (WDA_START_STATE != wdaContext->wdaState)
480 {
481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700482 "%s: WDI_Start() failure detected", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700483 return VOS_STATUS_E_FAILURE;
484 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700485 /* FTM mode does not need to monitor BA activity */
486 if ( eDRIVER_TYPE_MFG != wdaContext->driverMode )
487 {
488 status = wdaCreateTimers(wdaContext) ;
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -0800489 if(VOS_STATUS_SUCCESS == status)
490 {
491 wdaContext->wdaTimersCreated = VOS_TRUE;
492 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700493 }
Leo Chang9d76f622013-08-23 16:34:52 -0700494 else
495 {
496 vos_event_init(&wdaContext->ftmStopDoneEvent);
497 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700498 return status;
499}
500
Jeff Johnson295189b2012-06-20 16:38:30 -0700501/*
502 * FUNCTION: WDA_prepareConfigTLV
503 * Function to prepare CFG for DAL(WDA)
504 */
505VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
506 WDI_StartReqParamsType *wdiStartParams )
507{
508 /* get pMac to acess CFG data base */
509 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
510 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
511 tHalCfg *tlvStruct = NULL ;
512 tANI_U8 *tlvStructStart = NULL ;
513 tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
514 v_PVOID_t *configParam;
515 tANI_U32 configParamSize;
516 tANI_U32 *configDataValue;
517 WDI_WlanVersionType wcnssCompiledApiVersion;
Wilson Tsaof8b37942013-09-06 10:49:00 -0700518 tANI_U8 i;
519
Jeff Johnson295189b2012-06-20 16:38:30 -0700520 if ((NULL == pMac)||(NULL == wdaContext))
521 {
522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700523 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700524 VOS_ASSERT(0);
525 return VOS_STATUS_E_FAILURE;
526 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700527 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
528 WNI_CFG_STA_ID_LEN +
529 WNI_CFG_EDCA_WME_ACBK_LEN +
530 WNI_CFG_EDCA_WME_ACBE_LEN +
531 WNI_CFG_EDCA_WME_ACVI_LEN +
532 WNI_CFG_EDCA_WME_ACVO_LEN +
533 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700534 /* malloc memory for all configs in one shot */
535 configParam = vos_mem_malloc(configParamSize);
536
537 if(NULL == configParam )
538 {
539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700540 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700541 VOS_ASSERT(0) ;
542 return VOS_STATUS_E_NOMEM;
543 }
544 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700545 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700546 tlvStruct = (tHalCfg *)configParam;
547 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700548 /* TODO: Remove Later */
549 /* QWLAN_HAL_CFG_STA_ID */
550 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
551 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
552 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
553 eSIR_SUCCESS)
554 {
555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
556 "Failed to get value for WNI_CFG_STA_ID");
557 goto handle_failure;
558 }
559 tlvStruct->length = strLength ;
560 /* calculate the pad bytes to have the CFG in aligned format */
561 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
562 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700563 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
564 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700565 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
566 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
567 tlvStruct->length = sizeof(tANI_U32);
568 configDataValue = (tANI_U32 *)(tlvStruct + 1);
569 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
570 != eSIR_SUCCESS)
571 {
572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
573 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
574 goto handle_failure;
575 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700576 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
577 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700578 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
579 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
580 tlvStruct->length = sizeof(tANI_U32);
581 configDataValue = (tANI_U32 *)(tlvStruct + 1);
582 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
583 eSIR_SUCCESS)
584 {
585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
586 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
587 goto handle_failure;
588 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700589 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
590 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700591 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
592 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
593 tlvStruct->length = sizeof(tANI_U32);
594 configDataValue = (tANI_U32 *)(tlvStruct + 1);
595 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
596 != eSIR_SUCCESS)
597 {
598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
599 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
600 goto handle_failure;
601 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700602 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
603 + sizeof(tHalCfg) + tlvStruct->length)) ;
604
605 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
606 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
607 tlvStruct->length = sizeof(tANI_U32);
608 configDataValue = (tANI_U32 *)(tlvStruct + 1);
609 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
610 configDataValue ) != eSIR_SUCCESS)
611 {
612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
613 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
614 goto handle_failure;
615 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700616 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
617 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700618 /* QWLAN_HAL_CFG_CAL_PERIOD */
619 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
620 tlvStruct->length = sizeof(tANI_U32);
621 configDataValue = (tANI_U32 *)(tlvStruct + 1);
622 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
623 != eSIR_SUCCESS)
624 {
625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
626 "Failed to get value for WNI_CFG_CAL_PERIOD");
627 goto handle_failure;
628 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700629 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
630 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700631 /* QWLAN_HAL_CFG_CAL_CONTROL */
632 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
633 tlvStruct->length = sizeof(tANI_U32);
634 configDataValue = (tANI_U32 *)(tlvStruct + 1);
635 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
636 != eSIR_SUCCESS)
637 {
638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
639 "Failed to get value for WNI_CFG_CAL_CONTROL");
640 goto handle_failure;
641 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700642 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
643 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700644 /* QWLAN_HAL_CFG_PROXIMITY */
645 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
646 tlvStruct->length = sizeof(tANI_U32);
647 configDataValue = (tANI_U32 *)(tlvStruct + 1);
648 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
649 != eSIR_SUCCESS)
650 {
651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
652 "Failed to get value for WNI_CFG_PROXIMITY");
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_NETWORK_DENSITY */
658 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
659 tlvStruct->length = sizeof(tANI_U32);
660 configDataValue = (tANI_U32 *)(tlvStruct + 1);
661 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
662 != eSIR_SUCCESS)
663 {
664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
665 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
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_MAX_MEDIUM_TIME */
671 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
672 tlvStruct->length = sizeof(tANI_U32);
673 configDataValue = (tANI_U32 *)(tlvStruct + 1);
674 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
675 eSIR_SUCCESS)
676 {
677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
678 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
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_MAX_MPDUS_IN_AMPDU */
684 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
685 tlvStruct->length = sizeof(tANI_U32);
686 configDataValue = (tANI_U32 *)(tlvStruct + 1);
687 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
688 configDataValue ) != eSIR_SUCCESS)
689 {
690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
691 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
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_RTS_THRESHOLD */
697 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
698 tlvStruct->length = sizeof(tANI_U32);
699 configDataValue = (tANI_U32 *)(tlvStruct + 1);
700 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
701 eSIR_SUCCESS)
702 {
703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
704 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
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_SHORT_RETRY_LIMIT */
710 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
711 tlvStruct->length = sizeof(tANI_U32);
712 configDataValue = (tANI_U32 *)(tlvStruct + 1);
713 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
714 eSIR_SUCCESS)
715 {
716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
717 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
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_LONG_RETRY_LIMIT */
723 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
724 tlvStruct->length = sizeof(tANI_U32);
725 configDataValue = (tANI_U32 *)(tlvStruct + 1);
726 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
727 eSIR_SUCCESS)
728 {
729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
730 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
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_FRAGMENTATION_THRESHOLD */
736 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
737 tlvStruct->length = sizeof(tANI_U32);
738 configDataValue = (tANI_U32 *)(tlvStruct + 1);
739 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
740 configDataValue ) != eSIR_SUCCESS)
741 {
742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
743 "Failed to get value for WNI_CFG_FRAGMENTATION_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_DYNAMIC_THRESHOLD_ZERO */
749 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
750 tlvStruct->length = sizeof(tANI_U32);
751 configDataValue = (tANI_U32 *)(tlvStruct + 1);
752 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
753 configDataValue ) != eSIR_SUCCESS)
754 {
755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
756 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
757 goto handle_failure;
758 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700759 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
760 + sizeof(tHalCfg) + tlvStruct->length));
761
762 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
763 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
764 tlvStruct->length = sizeof(tANI_U32);
765 configDataValue = (tANI_U32 *)(tlvStruct + 1);
766 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
767 configDataValue ) != eSIR_SUCCESS)
768 {
769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
770 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
771 goto handle_failure;
772 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700773 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
774 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700775 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
776 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
777 tlvStruct->length = sizeof(tANI_U32);
778 configDataValue = (tANI_U32 *)(tlvStruct + 1);
779 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
780 configDataValue ) != eSIR_SUCCESS)
781 {
782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
783 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
784 goto handle_failure;
785 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700786 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
787 + sizeof(tHalCfg) + tlvStruct->length));
788
789 /* QWLAN_HAL_CFG_FIXED_RATE */
790 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
791 tlvStruct->length = sizeof(tANI_U32);
792 configDataValue = (tANI_U32 *)(tlvStruct + 1);
793 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
794 != eSIR_SUCCESS)
795 {
796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
797 "Failed to get value for WNI_CFG_FIXED_RATE");
798 goto handle_failure;
799 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700800 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
801 + sizeof(tHalCfg) + tlvStruct->length));
802
803 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
804 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
805 tlvStruct->length = sizeof(tANI_U32);
806 configDataValue = (tANI_U32 *)(tlvStruct + 1);
807 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
808 != eSIR_SUCCESS)
809 {
810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
811 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
812 goto handle_failure;
813 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700814 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
815 + sizeof(tHalCfg) + tlvStruct->length));
816
817 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
818 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
819 tlvStruct->length = sizeof(tANI_U32);
820 configDataValue = (tANI_U32 *)(tlvStruct + 1);
821 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
822 configDataValue ) != eSIR_SUCCESS)
823 {
824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
825 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
826 goto handle_failure;
827 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700828 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
829 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700830 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
831 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
832 tlvStruct->length = sizeof(tANI_U32);
833 configDataValue = (tANI_U32 *)(tlvStruct + 1);
834 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
835 configDataValue ) != eSIR_SUCCESS)
836 {
837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
838 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
839 goto handle_failure;
840 }
841 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
842 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700843 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
844 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
845 tlvStruct->length = sizeof(tANI_U32);
846 configDataValue = (tANI_U32 *)(tlvStruct + 1);
847 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
848 configDataValue ) != eSIR_SUCCESS)
849 {
850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
851 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
852 goto handle_failure;
853 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700854 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
855 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700856 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
857 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
858 tlvStruct->length = sizeof(tANI_U32);
859 configDataValue = (tANI_U32 *)(tlvStruct + 1);
860 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
861 configDataValue ) != eSIR_SUCCESS)
862 {
863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
864 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
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_FIXED_RATE_MULTICAST_5GHZ */
870 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
871 tlvStruct->length = sizeof(tANI_U32);
872 configDataValue = (tANI_U32 *)(tlvStruct + 1);
873 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
874 configDataValue ) != eSIR_SUCCESS)
875 {
876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
877 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
878 goto handle_failure;
879 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700880 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
881 + sizeof(tHalCfg) + tlvStruct->length);
882
Jeff Johnson295189b2012-06-20 16:38:30 -0700883 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
884 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
885 tlvStruct->length = sizeof(tANI_U32);
886 configDataValue = (tANI_U32 *)(tlvStruct + 1);
887 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
888 configDataValue ) != eSIR_SUCCESS)
889 {
890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
891 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
892 goto handle_failure;
893 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700894 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
895 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700896 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
897 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
898 tlvStruct->length = sizeof(tANI_U32);
899 configDataValue = (tANI_U32 *)(tlvStruct + 1);
900 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
901 configDataValue ) != eSIR_SUCCESS)
902 {
903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
904 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
905 goto handle_failure;
906 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700907 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
908 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700909 /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
910 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
911 tlvStruct->length = sizeof(tANI_U32);
912 configDataValue = (tANI_U32 *)(tlvStruct + 1);
913 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
914 eSIR_SUCCESS)
915 {
916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
917 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
918 goto handle_failure;
919 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700920 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
921 + sizeof(tHalCfg) + tlvStruct->length);
922
923 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
924 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
925 tlvStruct->length = sizeof(tANI_U32);
926 configDataValue = (tANI_U32 *)(tlvStruct + 1);
927 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
928 configDataValue ) != eSIR_SUCCESS)
929 {
930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
931 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
932 goto handle_failure;
933 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700934 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
935 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700936 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
937 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
938 tlvStruct->length = sizeof(tANI_U32);
939 configDataValue = (tANI_U32 *)(tlvStruct + 1);
940 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
941 configDataValue ) != eSIR_SUCCESS)
942 {
943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
944 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
945 goto handle_failure;
946 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700947 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
948 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700949 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
950 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
951 tlvStruct->length = sizeof(tANI_U32);
952 configDataValue = (tANI_U32 *)(tlvStruct + 1);
953 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
954 configDataValue ) != eSIR_SUCCESS)
955 {
956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
957 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
958 goto handle_failure;
959 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700960 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
961 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700962 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
963 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
964 tlvStruct->length = sizeof(tANI_U32);
965 configDataValue = (tANI_U32 *)(tlvStruct + 1);
966 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
967 configDataValue ) != eSIR_SUCCESS)
968 {
969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
970 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
971 goto handle_failure;
972 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700973 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
974 + sizeof(tHalCfg) + tlvStruct->length);
975
976 /* QWLAN_HAL_CFG_STATS_PERIOD */
977 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
978 tlvStruct->length = sizeof(tANI_U32);
979 configDataValue = (tANI_U32 *)(tlvStruct + 1);
980 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
981 eSIR_SUCCESS)
982 {
983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
984 "Failed to get value for WNI_CFG_STATS_PERIOD");
985 goto handle_failure;
986 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700987 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
988 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700989 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
990 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
991 tlvStruct->length = sizeof(tANI_U32);
992 configDataValue = (tANI_U32 *)(tlvStruct + 1);
993 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
994 eSIR_SUCCESS)
995 {
996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
997 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
998 goto handle_failure;
999 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001000 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1001 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001002 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
1003 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
1004 tlvStruct->length = sizeof(tANI_U32);
1005 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1006 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
1007 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -07001008 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1009 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001010 /* QWLAN_HAL_CFG_DTIM_PERIOD */
1011 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
1012 tlvStruct->length = sizeof(tANI_U32);
1013 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1014 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
1015 != eSIR_SUCCESS)
1016 {
1017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1018 "Failed to get value for WNI_CFG_DTIM_PERIOD");
1019 goto handle_failure;
1020 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001021 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1022 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001023 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
1024 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
1025 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
1026 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1027 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
1028 &strLength) != eSIR_SUCCESS)
1029 {
1030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1031 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1032 goto handle_failure;
1033 }
1034 tlvStruct->length = strLength;
1035 /* calculate the pad bytes to have the CFG in aligned format */
1036 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1037 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001038 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1039 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001040 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1041 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1042 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1043 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1044 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1045 &strLength) != eSIR_SUCCESS)
1046 {
1047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1048 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1049 goto handle_failure;
1050 }
1051 tlvStruct->length = strLength;
1052 /* calculate the pad bytes to have the CFG in aligned format */
1053 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1054 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001055 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1056 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001057 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1058 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1059 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1060 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1061 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1062 &strLength) != eSIR_SUCCESS)
1063 {
1064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1065 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1066 goto handle_failure;
1067 }
1068 tlvStruct->length = strLength;
1069 /* calculate the pad bytes to have the CFG in aligned format */
1070 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1071 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001072 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1073 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001074 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1075 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1076 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1077 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1078 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1079 &strLength) != eSIR_SUCCESS)
1080 {
1081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1082 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1083 goto handle_failure;
1084 }
1085 tlvStruct->length = strLength;
1086 /* calculate the pad bytes to have the CFG in aligned format */
1087 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1088 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001089 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1090 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001091 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1092 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1093 tlvStruct->length = sizeof(tANI_U32);
1094 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1095 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1096 != eSIR_SUCCESS)
1097 {
1098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1099 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1100 goto handle_failure;
1101 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001102 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1103 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001104 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1105 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1106 tlvStruct->length = sizeof(tANI_U32);
1107 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1108 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1109 != eSIR_SUCCESS)
1110 {
1111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1112 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1113 goto handle_failure;
1114 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001115 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1116 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001117 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1118 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1119 tlvStruct->length = sizeof(tANI_U32);
1120 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1121 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1122 != eSIR_SUCCESS)
1123 {
1124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1125 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1126 goto handle_failure;
1127 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001128 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1129 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001130 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1131 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1132 tlvStruct->length = sizeof(tANI_U32);
1133 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1134 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1135 != eSIR_SUCCESS)
1136 {
1137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1138 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1139 goto handle_failure;
1140 }
1141 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1142 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001143 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1144 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1145 tlvStruct->length = sizeof(tANI_U32);
1146 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1147 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1148 != eSIR_SUCCESS)
1149 {
1150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1151 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1152 goto handle_failure;
1153 }
1154 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1155 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001156 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1157 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1158 tlvStruct->length = sizeof(tANI_U32);
1159 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1160 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1161 != eSIR_SUCCESS)
1162 {
1163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1164 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1165 goto handle_failure;
1166 }
1167 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1168 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001169 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1170 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1171 tlvStruct->length = sizeof(tANI_U32);
1172 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1173 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, 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_MAX_LI_IDLE_BCNS");
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_WAKEUP_EN */
1183 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1184 tlvStruct->length = sizeof(tANI_U32);
1185 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1186 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, 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_WAKEUP_EN");
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_INFRA_STA_KEEP_ALIVE_PERIOD */
1196 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1197 tlvStruct->length = sizeof(tANI_U32);
1198 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1199 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1200 != eSIR_SUCCESS)
1201 {
1202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1203 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1204 goto handle_failure;
1205 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001206 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1207 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001208 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1209 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1210 tlvStruct->length = sizeof(tANI_U32);
1211 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1212 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1213 != eSIR_SUCCESS)
1214 {
1215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1216 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1217 goto handle_failure;
1218 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001219 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1220 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001221 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1222 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1223 tlvStruct->length = sizeof(tANI_U32);
1224 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1225 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1226 != eSIR_SUCCESS)
1227 {
1228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1229 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1230 goto handle_failure;
1231 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001232 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1233 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001234 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1235 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1236 * into FW, so the parameters are added here.
1237 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001238 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1239 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1240 tlvStruct->length = sizeof(tANI_U32);
1241 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1242 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1243 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1244 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001245 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1246 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1247 tlvStruct->length = sizeof(tANI_U32);
1248 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1249 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1250 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1251 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001252 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1253 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1254 tlvStruct->length = sizeof(tANI_U32);
1255 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1256 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1257 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1258 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001259 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1260 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1261 tlvStruct->length = sizeof(tANI_U32);
1262 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1263 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1264 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1265 + sizeof(tHalCfg) + tlvStruct->length) ;
1266
1267 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1268 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1269 tlvStruct->length = sizeof(tANI_U32);
1270 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1271 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1272 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1273 + sizeof(tHalCfg) + tlvStruct->length) ;
1274
1275 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1276 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1277 tlvStruct->length = sizeof(tANI_U32);
1278 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1279 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1280 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1281 + sizeof(tHalCfg) + tlvStruct->length) ;
1282
1283 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1284 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1285 tlvStruct->length = sizeof(tANI_U32);
1286 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1287 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1288 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1289 + sizeof(tHalCfg) + tlvStruct->length) ;
1290
1291 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1292 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1293 tlvStruct->length = sizeof(tANI_U32);
1294 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1295 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1296 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1297 + sizeof(tHalCfg) + tlvStruct->length) ;
1298
1299 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1300 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1301 tlvStruct->length = sizeof(tANI_U32);
1302 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1303 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1304 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1305 + sizeof(tHalCfg) + tlvStruct->length) ;
1306
1307 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1308 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1309 tlvStruct->length = sizeof(tANI_U32);
1310 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1311 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1312 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1313 + sizeof(tHalCfg) + tlvStruct->length) ;
1314
1315 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1316 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1317 tlvStruct->length = sizeof(tANI_U32);
1318 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1319 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1320 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1321 + sizeof(tHalCfg) + tlvStruct->length) ;
1322
1323 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1324 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1325 tlvStruct->length = sizeof(tANI_U32);
1326 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1327 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1328 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1329 + sizeof(tHalCfg) + tlvStruct->length) ;
1330
1331 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1332 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1333 tlvStruct->length = sizeof(tANI_U32);
1334 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1335 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1336 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1337 + sizeof(tHalCfg) + tlvStruct->length) ;
1338
1339 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1340 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1341 tlvStruct->length = sizeof(tANI_U32);
1342 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1343 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1344 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1345 + sizeof(tHalCfg) + tlvStruct->length) ;
1346
1347 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1348 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1349 tlvStruct->length = sizeof(tANI_U32);
1350 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1351 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1352 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1353 + sizeof(tHalCfg) + tlvStruct->length) ;
1354
1355 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1356 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1357 tlvStruct->length = sizeof(tANI_U32);
1358 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1359 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1360 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1361 + sizeof(tHalCfg) + tlvStruct->length) ;
1362
Wilson Tsaof8b37942013-09-06 10:49:00 -07001363 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_VICTIM; i++)
1364 {
1365 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WAN_FREQ */
1366 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WAN_FREQ + i*4;
1367 tlvStruct->length = sizeof(tANI_U32);
1368 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1369 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWANFreq[i];
1370 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1371 + sizeof(tHalCfg) + tlvStruct->length) ;
1372
1373 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WLAN_FREQ */
1374 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WLAN_FREQ + i*4;
1375 tlvStruct->length = sizeof(tANI_U32);
1376 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1377 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWLANFreq[i];
1378 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1379 + sizeof(tHalCfg) + tlvStruct->length) ;
1380
1381 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG */
1382 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG + i*4;
1383 tlvStruct->length = sizeof(tANI_U32);
1384 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1385 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig[i];
1386 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1387 + sizeof(tHalCfg) + tlvStruct->length) ;
1388
1389 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG2 */
1390 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG2 + i*4;
1391 tlvStruct->length = sizeof(tANI_U32);
1392 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1393 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig2[i];
1394 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1395 + sizeof(tHalCfg) + tlvStruct->length) ;
1396 }
1397
1398 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF */
1399 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF ;
1400 tlvStruct->length = sizeof(tANI_U32);
1401 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1402 *configDataValue = pMac->btc.btcConfig.mwsCoexModemBackoff;
1403 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1404 + sizeof(tHalCfg) + tlvStruct->length) ;
1405
1406 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_CONFIG; i++)
1407 {
1408 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_CONFIGX */
1409 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_CONFIG1 + i;
1410 tlvStruct->length = sizeof(tANI_U32);
1411 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1412 *configDataValue = pMac->btc.btcConfig.mwsCoexConfig[i];
1413 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1414 + sizeof(tHalCfg) + tlvStruct->length) ;
1415 }
1416
1417 /* [COEX] QWLAN_HAL_CFG_SAR_POWER_BACKOFF */
1418 tlvStruct->type = QWLAN_HAL_CFG_SAR_POWER_BACKOFF ;
1419 tlvStruct->length = sizeof(tANI_U32);
1420 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1421 *configDataValue = pMac->btc.btcConfig.SARPowerBackoff;
1422 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1423 + sizeof(tHalCfg) + tlvStruct->length) ;
1424
Jeff Johnson32d95a32012-09-10 13:15:23 -07001425 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001426 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1427 tlvStruct->length = sizeof(tANI_U32);
1428 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1429 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1430 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1431 wcnssCompiledApiVersion.minor,
1432 wcnssCompiledApiVersion.version,
1433 wcnssCompiledApiVersion.revision);
1434 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1435 + sizeof(tHalCfg) + tlvStruct->length) ;
1436
Jeff Johnsond13512a2012-07-17 11:42:19 -07001437 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1438 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1439 tlvStruct->length = sizeof(tANI_U32);
1440 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1441 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1442 configDataValue ) != eSIR_SUCCESS)
1443 {
1444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1445 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1446 goto handle_failure;
1447 }
1448
1449 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1450 + sizeof(tHalCfg) + tlvStruct->length) ;
1451 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1452 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1453 tlvStruct->length = sizeof(tANI_U32);
1454 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1455 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1456 configDataValue ) != eSIR_SUCCESS)
1457 {
1458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1459 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1460 goto handle_failure;
1461 }
1462
1463 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1464 + sizeof(tHalCfg) + tlvStruct->length) ;
1465
1466 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1467 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1468 tlvStruct->length = sizeof(tANI_U32);
1469 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1470 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1471 != eSIR_SUCCESS)
1472 {
1473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1474 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1475 goto handle_failure;
1476 }
1477
1478 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1479 + sizeof(tHalCfg) + tlvStruct->length) ;
1480
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08001481 /* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */
1482 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION ;
1483 tlvStruct->length = sizeof(tANI_U32);
1484 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1485 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION, configDataValue)
1486 != eSIR_SUCCESS)
1487 {
1488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1489 "Failed to get value for WNI_CFG_ENABLE_LPWR_IMG_TRANSITION");
1490 goto handle_failure;
1491 }
1492
1493 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1494 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala976e3252013-01-03 15:45:56 -08001495#ifdef WLAN_SOFTAP_VSTA_FEATURE
1496 tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
1497 tlvStruct->length = sizeof(tANI_U32);
1498 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1499 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
1500 != eSIR_SUCCESS)
1501 {
1502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1503 "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
1504 goto handle_failure;
1505 }
1506
1507 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1508 + sizeof(tHalCfg) + tlvStruct->length) ;
1509#endif
1510
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08001511 /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
1512 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
1513 tlvStruct->length = sizeof(tANI_U32);
1514 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1515
1516 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
1517 != eSIR_SUCCESS)
1518 {
1519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1520 "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
1521 goto handle_failure;
1522 }
1523
1524 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1525 + sizeof(tHalCfg) + tlvStruct->length) ;
1526
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301527/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */
1528 tlvStruct->type = QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT ;
1529 tlvStruct->length = sizeof(tANI_U32);
1530 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1531 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
1532 configDataValue ) != eSIR_SUCCESS)
1533 {
1534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1535 "Failed to get value for WNI_CFG_AP_LINK_MONITOR_TIMEOUT");
1536 goto handle_failure;
1537 }
1538
1539 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1540 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301541#ifdef FEATURE_WLAN_TDLS
1542 /* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */
1543 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_MASK;
1544 tlvStruct->length = sizeof(tANI_U32);
1545 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1546 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK,
1547 configDataValue ) != eSIR_SUCCESS)
1548 {
1549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1550 "Failed to get value for WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK");
1551 goto handle_failure;
1552 }
1553 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1554 + sizeof(tHalCfg) + tlvStruct->length) ;
1555
1556 /* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */
1557 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE;
1558 tlvStruct->length = sizeof(tANI_U32);
1559 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1560 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_BUF_STA_ENABLED,
1561 configDataValue ) != eSIR_SUCCESS)
1562 {
1563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1564 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1565 goto handle_failure;
1566 }
1567 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1568 + sizeof(tHalCfg) + tlvStruct->length) ;
1569 /* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */
1570 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME;
1571 tlvStruct->length = sizeof(tANI_U32);
1572 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1573 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_PUAPSD_INACT_TIME,
1574 configDataValue ) != eSIR_SUCCESS)
1575 {
1576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1577 "Failed to get value for WNI_CFG_TDLS_PUAPSD_INACT_TIME");
1578 goto handle_failure;
1579 }
1580 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1581 + sizeof(tHalCfg) + tlvStruct->length) ;
1582 /* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */
1583 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP;
1584 tlvStruct->length = sizeof(tANI_U32);
1585 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1586 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_RX_FRAME_THRESHOLD,
1587 configDataValue ) != eSIR_SUCCESS)
1588 {
1589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1590 "Failed to get value for WNI_CFG_TDLS_RX_FRAME_THRESHOLD");
1591 goto handle_failure;
1592 }
1593 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1594 + sizeof(tHalCfg) + tlvStruct->length) ;
Naresh Jayaramf73f3762014-02-04 16:13:20 +05301595 /* QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE */
1596 tlvStruct->type = QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE;
1597 tlvStruct->length = sizeof(tANI_U32);
1598 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1599 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_OFF_CHANNEL_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
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301609#endif
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301610
Sudhir Sattayappa Kohallida1be202013-07-11 12:04:30 -07001611 /* QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN */
1612 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE ;
1613 tlvStruct->length = sizeof(tANI_U32);
1614 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1615 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_ADAPT_RX_DRAIN,
1616 configDataValue ) != eSIR_SUCCESS)
1617 {
1618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1619 "Failed to get value for WNI_CFG_ENABLE_ADAPT_RX_DRAIN");
1620 goto handle_failure;
1621 }
1622
1623 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1624 + sizeof(tHalCfg) + tlvStruct->length) ;
Yue Ma0fd23872013-08-01 15:56:47 -07001625
1626 /* QWLAN_HAL_CFG_FLEX_CONNECT_POWER_FACTOR */
1627 tlvStruct->type = QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR;
1628 tlvStruct->length = sizeof(tANI_U32);
1629 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1630 if(wlan_cfgGetInt(pMac, WNI_CFG_FLEX_CONNECT_POWER_FACTOR, configDataValue)
1631 != eSIR_SUCCESS)
1632 {
1633 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1634 "Failed to get value for WNI_CFG_FLEX_CONNECT_POWER_FACTOR");
1635 goto handle_failure;
1636 }
1637 tlvStruct = (tHalCfg *)(((tANI_U8 *) tlvStruct
1638 + sizeof(tHalCfg) + tlvStruct->length));
1639
Madan Mohan Koyyalamudica454572013-08-07 19:57:03 +05301640 /* QWLAN_HAL_CFG_ANTENNA_DIVERSITY */
1641 tlvStruct->type = QWLAN_HAL_CFG_ANTENNA_DIVERSITY;
1642 tlvStruct->length = sizeof(tANI_U32);
1643 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1644 if (wlan_cfgGetInt(pMac, WNI_CFG_ANTENNA_DIVESITY,
1645 configDataValue ) != eSIR_SUCCESS)
1646 {
1647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1648 "Failed to get value for WNI_CFG_ANTENNA_DIVESITY");
1649 goto handle_failure;
1650 }
1651
1652 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1653 + sizeof(tHalCfg) + tlvStruct->length) ;
1654
Madan Mohan Koyyalamudi2558bc92013-08-24 16:54:31 +05301655 /* QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT */
1656 tlvStruct->type = QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT ;
1657 tlvStruct->length = sizeof(tANI_U32);
1658 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1659 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_LINK_MONITOR_TIMEOUT,
1660 configDataValue ) != eSIR_SUCCESS)
1661 {
1662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1663 "Failed to get value for WNI_CFG_GO_LINK_MONITOR_TIMEOUT");
1664 goto handle_failure;
1665 }
1666 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1667 + sizeof(tHalCfg) + tlvStruct->length) ;
1668
Kiet Lam4bbd3cb2013-11-07 20:03:49 +05301669 /* QWLAN_HAL_CFG_ATH_DISABLE */
1670 tlvStruct->type = QWLAN_HAL_CFG_ATH_DISABLE ;
1671 tlvStruct->length = sizeof(tANI_U32);
1672 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1673 if(wlan_cfgGetInt(pMac, WNI_CFG_ATH_DISABLE,
1674 configDataValue ) != eSIR_SUCCESS)
1675 {
1676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1677 "Failed to get value for WNI_CFG_ATH_DISABLE");
1678 goto handle_failure;
1679 }
1680 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1681 + sizeof(tHalCfg) + tlvStruct->length) ;
1682
c_hpothu6d7dc922013-12-02 12:36:41 +05301683 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_WLAN_LEN */
1684 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1685 tlvStruct->length = sizeof(tANI_U32);
1686 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1687 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_WLAN_LEN,
1688 configDataValue ) != eSIR_SUCCESS)
1689 {
1690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1691 "Failed to get value for WNI_CFG_BTC_ACTIVE_WLAN_LEN");
1692 goto handle_failure;
1693 }
1694 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1695 + sizeof(tHalCfg) + tlvStruct->length) ;
1696
1697 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1698 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1699 tlvStruct->length = sizeof(tANI_U32);
1700 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1701 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_BT_LEN,
1702 configDataValue ) != eSIR_SUCCESS)
1703 {
1704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1705 "Failed to get value for WNI_CFG_BTC_ACTIVE_BT_LEN");
1706 goto handle_failure;
1707 }
1708 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1709 + sizeof(tHalCfg) + tlvStruct->length) ;
1710
1711 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN */
1712 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1713 tlvStruct->length = sizeof(tANI_U32);
1714 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1715 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN,
1716 configDataValue ) != eSIR_SUCCESS)
1717 {
1718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1719 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN");
1720 goto handle_failure;
1721 }
1722 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1723 + sizeof(tHalCfg) + tlvStruct->length) ;
1724
1725 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1726 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1727 tlvStruct->length = sizeof(tANI_U32);
1728 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1729 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_BT_LEN,
1730 configDataValue ) != eSIR_SUCCESS)
1731 {
1732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1733 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_BT_LEN");
1734 goto handle_failure;
1735 }
1736 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1737 + sizeof(tHalCfg) + tlvStruct->length) ;
1738
AnjaneeDevi Kapparapu50239e32014-01-07 18:09:33 +05301739 /* QWLAN_HAL_CFG_ASD_PROBE_INTERVAL */
1740 tlvStruct->type = QWLAN_HAL_CFG_ASD_PROBE_INTERVAL ;
1741 tlvStruct->length = sizeof(tANI_U32);
1742 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1743 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_PROBE_INTERVAL,
1744 configDataValue ) != eSIR_SUCCESS)
1745 {
1746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1747 "Failed to get value for WNI_CFG_ASD_PROBE_INTERVAL");
1748 goto handle_failure;
1749 }
1750 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1751 + sizeof(tHalCfg) + tlvStruct->length) ;
1752
1753 /* QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD */
1754 tlvStruct->type = QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD ;
1755 tlvStruct->length = sizeof(tANI_U32);
1756 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1757 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_TRIGGER_THRESHOLD,
1758 configDataValue ) != eSIR_SUCCESS)
1759 {
1760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1761 "Failed to get value for WNI_CFG_ASD_TRIGGER_THRESHOLD");
1762 goto handle_failure;
1763 }
1764 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1765 + sizeof(tHalCfg) + tlvStruct->length) ;
1766
1767 /* QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD */
1768 tlvStruct->type = QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD ;
1769 tlvStruct->length = sizeof(tANI_U32);
1770 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1771 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD,
1772 configDataValue ) != eSIR_SUCCESS)
1773 {
1774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1775 "Failed to get value for WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD");
1776 goto handle_failure;
1777 }
1778 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1779 + sizeof(tHalCfg) + tlvStruct->length) ;
1780
Leela Venkata Kiran Kumar Reddy Chirala22c159b2013-12-23 18:19:13 -08001781 /* QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO */
1782 tlvStruct->type = QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO ;
1783 tlvStruct->length = sizeof(tANI_U32);
1784 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1785 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CTS2S_DURING_SCO,
1786 configDataValue ) != eSIR_SUCCESS)
1787 {
1788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1789 "Failed to get value for WNI_CFG_BTC_CTS2S_DURING_SCO");
1790 goto handle_failure;
1791 }
1792 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1793 + sizeof(tHalCfg) + tlvStruct->length) ;
1794
c_hpothu5bd1ae42014-03-07 20:28:22 +05301795 /* QWLAN_HAL_CFG_RA_FILTER_ENABLE */
1796 tlvStruct->type = QWLAN_HAL_CFG_RA_FILTER_ENABLE ;
1797 tlvStruct->length = sizeof(tANI_U32);
1798 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1799
1800 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_FILTER_ENABLE,
1801 configDataValue ) != eSIR_SUCCESS)
1802 {
1803 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1804 "Failed to get value for WNI_CFG_RA_FILTER_ENABLE");
1805 goto handle_failure;
1806 }
1807
1808 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1809 + sizeof(tHalCfg) + tlvStruct->length) ;
1810
1811 /* QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL */
1812 tlvStruct->type = QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL ;
1813 tlvStruct->length = sizeof(tANI_U32);
1814 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1815
1816 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_RATE_LIMIT_INTERVAL,
1817 configDataValue ) != eSIR_SUCCESS)
1818 {
1819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1820 "Failed to get value for WNI_CFG_RA_RATE_LIMIT_INTERVAL");
1821 goto handle_failure;
1822 }
1823
1824 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1825 + sizeof(tHalCfg) + tlvStruct->length) ;
1826
Jeff Johnson295189b2012-06-20 16:38:30 -07001827 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001828#ifdef WLAN_DEBUG
1829 {
1830 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07001831 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1832 "****** Dumping CFG TLV ***** ");
1833 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
1834 {
1835 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1836 "%02x %02x %02x %02x %02x %02x %02x %02x",
1837 tlvStructStart[i],
1838 tlvStructStart[i+1],
1839 tlvStructStart[i+2],
1840 tlvStructStart[i+3],
1841 tlvStructStart[i+4],
1842 tlvStructStart[i+5],
1843 tlvStructStart[i+6],
1844 tlvStructStart[i+7]);
1845 }
1846 /* Dump the bytes in the last line*/
1847 for (; i < wdiStartParams->usConfigBufferLen; i++)
1848 {
1849 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1850 "%02x ",tlvStructStart[i]);
1851 }
1852 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1853 "**************************** ");
1854 }
1855#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001856 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001857handle_failure:
1858 vos_mem_free(configParam);
1859 return VOS_STATUS_E_FAILURE;
1860}
Jeff Johnson295189b2012-06-20 16:38:30 -07001861/*
1862 * FUNCTION: WDA_wdiCompleteCB
1863 * call the voss call back function
1864 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001865void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07001866{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001867 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
1868 tWDA_CbContext *wdaContext;
1869
1870 if(NULL == pWdaParams)
1871 {
1872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001873 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001874 VOS_ASSERT(0) ;
1875 return ;
1876 }
1877
1878 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
1879
Jeff Johnson295189b2012-06-20 16:38:30 -07001880 if (NULL == wdaContext)
1881 {
1882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001883 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001884 return ;
1885 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001886
Jeff Johnson295189b2012-06-20 16:38:30 -07001887 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001888 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07001889 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001890 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07001891 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001892 vos_mem_free(pWdaParams);
1893
Jeff Johnson295189b2012-06-20 16:38:30 -07001894 if(WDI_STATUS_SUCCESS != status)
1895 {
1896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1897 "WDI stop callback returned failure" );
1898 VOS_ASSERT(0) ;
1899 }
1900 else
1901 {
1902 wdaContext->wdaState = WDA_STOP_STATE;
1903 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001904
Leo Chang9d76f622013-08-23 16:34:52 -07001905 /* FTM Driver stop procedure should be synced.
1906 * Stop and Close will happen on same context */
1907 if (eDRIVER_TYPE_MFG == wdaContext->driverMode)
1908 {
1909 if (VOS_STATUS_SUCCESS != vos_event_set(&wdaContext->ftmStopDoneEvent))
1910 {
1911 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
1912 "%s: FTM Stop Event Set Fail", __func__);
1913 VOS_ASSERT(0);
1914 }
1915 }
1916
Jeff Johnson295189b2012-06-20 16:38:30 -07001917 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001918 vos_WDAComplete_cback(wdaContext->pVosContext);
1919
Jeff Johnson295189b2012-06-20 16:38:30 -07001920 return ;
1921}
Jeff Johnson295189b2012-06-20 16:38:30 -07001922/*
1923 * FUNCTION: WDA_stop
1924 * call WDI_stop
1925 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001926VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
1927{
1928 WDI_Status wdiStatus;
1929 VOS_STATUS status = VOS_STATUS_SUCCESS;
1930 WDI_StopReqParamsType *wdiStopReq;
1931 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001932 tWDA_ReqParams *pWdaParams ;
1933
Jeff Johnson295189b2012-06-20 16:38:30 -07001934 if (NULL == pWDA)
1935 {
1936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001937 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001938 VOS_ASSERT(0);
1939 return VOS_STATUS_E_FAILURE;
1940 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001941 if (pWDA->wdiFailed == true)
1942 {
1943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001944 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001945 return VOS_STATUS_E_ALREADY;
1946 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001947
Jeff Johnson295189b2012-06-20 16:38:30 -07001948 /* FTM mode stay START_STATE */
1949 if( (WDA_READY_STATE != pWDA->wdaState) &&
1950 (WDA_INIT_STATE != pWDA->wdaState) &&
1951 (WDA_START_STATE != pWDA->wdaState) )
1952 {
1953 VOS_ASSERT(0);
1954 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001955 wdiStopReq = (WDI_StopReqParamsType *)
1956 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
1957 if(NULL == wdiStopReq)
1958 {
1959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001960 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001961 VOS_ASSERT(0);
1962 return VOS_STATUS_E_NOMEM;
1963 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001964
Jeff Johnson295189b2012-06-20 16:38:30 -07001965 wdiStopReq->wdiStopReason = reason;
1966 wdiStopReq->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001967
1968 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
1969 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07001970 {
1971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001972 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001973 VOS_ASSERT(0);
1974 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001975 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07001976 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001977
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001978 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
1979 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07001980 {
1981 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001982 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001983 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001984
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001985 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
1986 pWdaParams->wdaMsgParam = NULL;
1987 pWdaParams->pWdaContext = pWDA;
1988
Jeff Johnson295189b2012-06-20 16:38:30 -07001989 /* call WDI stop */
1990 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001991 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
1992
Jeff Johnson295189b2012-06-20 16:38:30 -07001993 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
1994 {
1995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1996 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001997 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
1998 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07001999 status = VOS_STATUS_E_FAILURE;
2000 }
Leo Chang9d76f622013-08-23 16:34:52 -07002001
2002 /* FTM Driver stop procedure should be synced.
2003 * Stop and Close will happen on same context */
2004 if (eDRIVER_TYPE_MFG == pWDA->driverMode)
2005 {
2006 status = vos_wait_single_event(&pWDA->ftmStopDoneEvent,
2007 WDI_RESPONSE_TIMEOUT);
2008 if (status != VOS_STATUS_SUCCESS)
2009 {
2010 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2011 "%s: FTM Stop Timepoout", __func__);
2012 VOS_ASSERT(0);
2013 vos_event_reset(&pWDA->ftmStopDoneEvent);
2014 }
2015 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002016 return status;
2017}
Jeff Johnson295189b2012-06-20 16:38:30 -07002018/*
2019 * FUNCTION: WDA_close
2020 * call WDI_close and free the WDA context
2021 */
2022VOS_STATUS WDA_close(v_PVOID_t pVosContext)
2023{
Jeff Johnson43971f52012-07-17 12:26:56 -07002024 VOS_STATUS status = VOS_STATUS_SUCCESS;
2025 WDI_Status wstatus;
2026 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07002027 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07002028 if (NULL == wdaContext)
2029 {
2030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002031 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002032 return VOS_STATUS_E_FAILURE;
2033 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002034 if((WDA_INIT_STATE != wdaContext->wdaState) &&
2035 (WDA_STOP_STATE != wdaContext->wdaState))
2036 {
2037 VOS_ASSERT(0);
2038 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002039 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07002040 wstatus = WDI_Close();
2041 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07002042 {
2043 status = VOS_STATUS_E_FAILURE;
2044 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002045 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002046 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07002047 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
2048 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002049 {
2050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002051 "WDI Sync Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002052 status = VOS_STATUS_E_FAILURE;
2053 }
2054
Jeff Johnson43971f52012-07-17 12:26:56 -07002055 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002056 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002057 {
2058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002059 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002060 status = VOS_STATUS_E_FAILURE;
2061 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002062 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002063 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002064 {
2065 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002066 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002067 status = VOS_STATUS_E_FAILURE;
2068 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002069 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07002070 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002071 {
2072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002073 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002074 status = VOS_STATUS_E_FAILURE;
2075 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002076 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07002077 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07002078 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07002079 {
2080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2081 "error in WDA close " );
2082 status = VOS_STATUS_E_FAILURE;
2083 }
2084 return status;
2085}
Jeff Johnson295189b2012-06-20 16:38:30 -07002086/*
2087 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
2088 * returns 1 if the compiled version is greater than or equal to the input version
2089 */
2090
2091uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2092{
2093 VOS_STATUS status = VOS_STATUS_SUCCESS;
2094 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2095 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002096 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002097 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
2098 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
2099 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
2100 (compiledVersion.revision >= revision)))
2101 return 1;
2102 else
2103 return 0;
2104}
Jeff Johnson295189b2012-06-20 16:38:30 -07002105/*
2106 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
2107 * returns 1 if the compiled version is greater than or equal to the input version
2108 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002109uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2110{
2111 VOS_STATUS status = VOS_STATUS_SUCCESS;
2112 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2113 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002114 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002115 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
2116 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
2117 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
2118 (reportedVersion.revision >= revision)))
2119 return 1;
2120 else
2121 return 0;
2122}
Jeff Johnson295189b2012-06-20 16:38:30 -07002123/*
2124 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
2125 * Returns the version of the WCNSS WLAN API with which the HOST
2126 * device driver was compiled
2127 */
2128VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
2129 tSirVersionType *pVersion)
2130{
2131 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002132 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002133 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002134 if ((NULL == pvosGCtx) || (NULL == pVersion))
2135 {
2136 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002137 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002138 VOS_ASSERT(0);
2139 return VOS_STATUS_E_FAILURE;
2140 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002141 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2142 if (NULL == pWDA )
2143 {
2144 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002145 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002146 VOS_ASSERT(0);
2147 return VOS_STATUS_E_FAILURE;
2148 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002149 *pVersion = pWDA->wcnssWlanCompiledVersion;
2150 return VOS_STATUS_SUCCESS;
2151}
Jeff Johnson295189b2012-06-20 16:38:30 -07002152/*
2153 * FUNCTION: WDA_GetWcnssWlanReportedVersion
2154 * Returns the version of the WCNSS WLAN API with which the WCNSS
2155 * device driver was compiled
2156 */
2157VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
2158 tSirVersionType *pVersion)
2159{
2160 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002161 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002162 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002163 if ((NULL == pvosGCtx) || (NULL == pVersion))
2164 {
2165 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002166 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002167 VOS_ASSERT(0);
2168 return VOS_STATUS_E_FAILURE;
2169 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002170 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2171 if (NULL == pWDA )
2172 {
2173 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002174 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002175 VOS_ASSERT(0);
2176 return VOS_STATUS_E_FAILURE;
2177 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002178 *pVersion = pWDA->wcnssWlanReportedVersion;
2179 return VOS_STATUS_SUCCESS;
2180}
Jeff Johnson295189b2012-06-20 16:38:30 -07002181/*
2182 * FUNCTION: WDA_GetWcnssSoftwareVersion
2183 * Returns the WCNSS Software version string
2184 */
2185VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
2186 tANI_U8 *pVersion,
2187 tANI_U32 versionBufferSize)
2188{
2189 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002190 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002191 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002192 if ((NULL == pvosGCtx) || (NULL == pVersion))
2193 {
2194 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002195 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002196 VOS_ASSERT(0);
2197 return VOS_STATUS_E_FAILURE;
2198 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002199 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2200 if (NULL == pWDA )
2201 {
2202 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002203 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002204 VOS_ASSERT(0);
2205 return VOS_STATUS_E_FAILURE;
2206 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002207 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
2208 return VOS_STATUS_SUCCESS;
2209}
Jeff Johnson295189b2012-06-20 16:38:30 -07002210/*
2211 * FUNCTION: WDA_GetWcnssHardwareVersion
2212 * Returns the WCNSS Hardware version string
2213 */
2214VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
2215 tANI_U8 *pVersion,
2216 tANI_U32 versionBufferSize)
2217{
2218 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002219 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002220 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002221 if ((NULL == pvosGCtx) || (NULL == pVersion))
2222 {
2223 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002224 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002225 VOS_ASSERT(0);
2226 return VOS_STATUS_E_FAILURE;
2227 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002228 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2229 if (NULL == pWDA )
2230 {
2231 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002232 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002233 VOS_ASSERT(0);
2234 return VOS_STATUS_E_FAILURE;
2235 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002236 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
2237 return VOS_STATUS_SUCCESS;
2238}
Jeff Johnson295189b2012-06-20 16:38:30 -07002239/*
2240 * FUNCTION: WDA_WniCfgDnld
2241 * Trigger CFG Download
2242 */
2243VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
2244{
2245 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07002246 VOS_STATUS vosStatus = VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002247 v_VOID_t *pFileImage = NULL;
2248 v_SIZE_t cbFileImageSize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002249 v_VOID_t *pCfgBinary = NULL;
2250 v_SIZE_t cbCfgBinarySize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002251 v_BOOL_t bStatus = VOS_FALSE;
Jeff Johnsonab81a082013-04-03 16:00:31 -07002252
Jeff Johnson295189b2012-06-20 16:38:30 -07002253 if (NULL == pMac )
2254 {
2255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002256 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002257 VOS_ASSERT(0);
2258 return VOS_STATUS_E_FAILURE;
2259 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002260 /* get the number of bytes in the CFG Binary... */
2261 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, NULL,
2262 &cbFileImageSize );
2263 if ( VOS_STATUS_E_NOMEM != vosStatus )
2264 {
2265 VOS_TRACE( VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR,
2266 "Error obtaining binary size" );
2267 goto fail;
2268 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002269 // malloc a buffer to read in the Configuration binary file.
2270 pFileImage = vos_mem_malloc( cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07002271 if ( NULL == pFileImage )
2272 {
2273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2274 "Unable to allocate memory for the CFG binary [size= %d bytes]",
2275 cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07002276 vosStatus = VOS_STATUS_E_NOMEM;
2277 goto fail;
2278 }
2279
2280 /* Get the entire CFG file image... */
2281 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, pFileImage,
2282 &cbFileImageSize );
2283 if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) )
2284 {
2285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2286 "Error: Cannot retrieve CFG file image from vOSS. [size= %d bytes]",
2287 cbFileImageSize );
2288 goto fail;
2289 }
2290
2291 /*
2292 * Validate the binary image. This function will return a pointer
2293 * and length where the CFG binary is located within the binary image file.
2294 */
2295 bStatus = sys_validateStaConfig( pFileImage, cbFileImageSize,
2296 &pCfgBinary, &cbCfgBinarySize );
2297 if ( VOS_FALSE == bStatus )
2298 {
2299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2300 "Error: Cannot find STA CFG in binary image file" );
2301 vosStatus = VOS_STATUS_E_FAILURE;
2302 goto fail;
2303 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002304 /*
2305 * TODO: call the config download function
2306 * for now calling the existing cfg download API
2307 */
2308 processCfgDownloadReq(pMac,cbCfgBinarySize,pCfgBinary);
Jeff Johnsonab81a082013-04-03 16:00:31 -07002309 vosStatus = VOS_STATUS_SUCCESS;
2310
2311 /* fall through to clean up and return success */
Jeff Johnson295189b2012-06-20 16:38:30 -07002312
2313fail:
Jeff Johnsonab81a082013-04-03 16:00:31 -07002314 vos_mem_free( pFileImage );
Jeff Johnson295189b2012-06-20 16:38:30 -07002315 return vosStatus;
2316}
Jeff Johnson295189b2012-06-20 16:38:30 -07002317/* -----------------------------------------------------------------
2318 * WDI interface
2319 * -----------------------------------------------------------------
2320 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002321/*
2322 * FUNCTION: WDA_suspendDataTxCallback
2323 * call back function called from TL after suspend Transmission
2324 */
2325VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
2326 v_U8_t* ucSTAId,
2327 VOS_STATUS vosStatus)
2328{
2329 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07002330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002331 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002332 if (NULL == pWDA )
2333 {
2334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002335 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002336 VOS_ASSERT(0);
2337 return VOS_STATUS_E_FAILURE;
2338 }
2339 if(VOS_IS_STATUS_SUCCESS(vosStatus))
2340 {
2341 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
2342 }
2343 else
2344 {
2345 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
2346 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002347 /* Trigger the event to bring the WDA TL suspend function to come
2348 * out of wait*/
2349 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
2350 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
2351 {
2352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002353 "NEW VOS Event Set failed - status = %d", vosStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07002354 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002355 /* If TL suspended had timedout before this callback was called, resume back
2356 * TL.*/
2357 if (pWDA->txSuspendTimedOut)
2358 {
2359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002360 "Late TLSuspendCallback, resuming TL back again");
Jeff Johnson295189b2012-06-20 16:38:30 -07002361 WDA_ResumeDataTx(pWDA);
2362 pWDA->txSuspendTimedOut = FALSE;
2363 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002364 return VOS_STATUS_SUCCESS;
2365}
Jeff Johnson295189b2012-06-20 16:38:30 -07002366/*
2367 * FUNCTION: WDA_suspendDataTx
2368 * Update TL to suspend the data Transmission
2369 */
2370VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
2371{
2372 VOS_STATUS status = VOS_STATUS_E_FAILURE;
2373 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002374
2375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002376 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002377 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002378 if (pWDA->txSuspendTimedOut)
2379 {
2380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002381 "TL suspend timedout previously, CB not called yet");
Jeff Johnson295189b2012-06-20 16:38:30 -07002382 return status;
2383 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002384 /* Reset the event to be not signalled */
2385 status = vos_event_reset(&pWDA->suspendDataTxEvent);
2386 if(!VOS_IS_STATUS_SUCCESS(status))
2387 {
2388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002389 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002390 return VOS_STATUS_E_FAILURE;
2391 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002392 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07002393 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07002394 WDA_SuspendDataTxCallback);
2395 if(status != VOS_STATUS_SUCCESS)
2396 {
2397 return status;
2398 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002399 /* Wait for the event to be set by the TL, to get the response of
2400 * suspending the TX queues, this event should be set by the Callback
2401 * function called by TL*/
2402 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2403 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2404 if(!VOS_IS_STATUS_SUCCESS(status))
2405 {
2406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2407 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002408 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002409 /* Set this flag to true when TL suspend times out, so that when TL
2410 * suspend eventually happens and calls the callback, TL can be resumed
2411 * right away by looking at this flag when true.*/
2412 pWDA->txSuspendTimedOut = TRUE;
2413 }
2414 else
2415 {
2416 pWDA->txSuspendTimedOut = FALSE;
2417 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002418 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2419 {
2420 status = VOS_STATUS_SUCCESS;
2421 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002422 return status;
2423}
Jeff Johnson295189b2012-06-20 16:38:30 -07002424/*
2425 * FUNCTION: WDA_resumeDataTx
2426 * Update TL to resume the data Transmission
2427 */
2428VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
2429{
2430 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07002431
2432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002433 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07002434
2435 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07002436 return status;
2437}
Jeff Johnson295189b2012-06-20 16:38:30 -07002438/*
2439 * FUNCTION: WDA_InitScanReqCallback
2440 * Trigger Init SCAN callback
2441 */
2442void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2443{
2444 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2445 tWDA_CbContext *pWDA;
2446 tInitScanParams *pWDA_ScanParam ;
2447 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002449 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002450 if(NULL == pWdaParams)
2451 {
2452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002453 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002454 VOS_ASSERT(0) ;
2455 return ;
2456 }
2457 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2458 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002459 if(NULL == pWDA_ScanParam)
2460 {
2461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002462 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002463 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002464 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2465 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002466 return ;
2467 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002468 if(WDI_STATUS_SUCCESS != wdiStatus)
2469 {
2470 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002471 if(VOS_STATUS_SUCCESS != status)
2472 {
2473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002474 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002475 }
2476 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002477 /* free WDI command buffer */
2478 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002479 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002480
Jeff Johnson295189b2012-06-20 16:38:30 -07002481
2482 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002483 /* without converting the Status to Failure or Success Just
2484 pass the same status to lim */
2485 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002486 /* send SCAN RSP message back to PE */
2487 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002488 return ;
2489}
2490
2491/*
2492 * FUNCTION: WDA_ProcessInitScanReq
2493 * Trigger Init SCAN in DAL
2494 */
2495VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2496 tInitScanParams *initScanParams)
2497{
2498 WDI_Status status = WDI_STATUS_SUCCESS ;
2499 WDI_InitScanReqParamsType *wdiInitScanParam =
2500 (WDI_InitScanReqParamsType *)vos_mem_malloc(
2501 sizeof(WDI_InitScanReqParamsType)) ;
2502 tWDA_ReqParams *pWdaParams;
2503 tANI_U8 i = 0;
2504
2505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002506 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002507 if(NULL == wdiInitScanParam)
2508 {
2509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002510 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002511 VOS_ASSERT(0);
2512 return VOS_STATUS_E_NOMEM;
2513 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002514 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2515 if(NULL == pWdaParams)
2516 {
2517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002518 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002519 VOS_ASSERT(0);
2520 vos_mem_free(wdiInitScanParam);
2521 return VOS_STATUS_E_NOMEM;
2522 }
2523
2524 /* Copy init Scan params to WDI structure */
2525 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
2526 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
2527 sizeof(tSirMacAddr)) ;
2528 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
2529 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
2530 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002531 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
2532 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07002533 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
2534 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002535 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
2536 {
2537 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2538 initScanParams->scanEntry.bssIdx[i] ;
2539 }
2540
2541 /* if Frame length, copy macMgmtHdr or WDI structure */
2542 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
2543 {
2544 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
2545 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
2546 }
2547 wdiInitScanParam->wdiReqStatusCB = NULL ;
2548
Jeff Johnson295189b2012-06-20 16:38:30 -07002549 /* Store Init Req pointer, as this will be used for response */
2550 pWdaParams->pWdaContext = pWDA;
2551 pWdaParams->wdaMsgParam = initScanParams;
2552 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002553 /* first try to suspend TX */
2554 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002555 if(WDI_STATUS_SUCCESS != status)
2556 {
2557 goto handleWdiFailure;
2558 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002559 /* call DAL API to pass init scan request to DAL */
2560 status = WDI_InitScanReq(wdiInitScanParam,
2561 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002562 if(IS_WDI_STATUS_FAILURE(status))
2563 {
2564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2565 "error in WDA Init Scan, Resume Tx " );
2566 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002567 VOS_ASSERT(0) ;
2568
2569 goto handleWdiFailure;
2570 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002571 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002572handleWdiFailure:
2573 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2574 "Failure in WDI Api, free all the memory " );
2575 /* free WDI command buffer */
2576 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2577 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002578 /* send Failure to PE */
2579 initScanParams->status = eSIR_FAILURE ;
2580 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002581 return CONVERT_WDI2VOS_STATUS(status) ;
2582}
2583
Jeff Johnson295189b2012-06-20 16:38:30 -07002584/*
2585 * FUNCTION: WDA_StartScanReqCallback
2586 * send Start SCAN RSP back to PE
2587 */
2588void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
2589 void* pUserData)
2590{
2591 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2592 tWDA_CbContext *pWDA;
2593 tStartScanParams *pWDA_ScanParam;
2594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002595 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002596 if(NULL == pWdaParams)
2597 {
2598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002599 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002600 VOS_ASSERT(0) ;
2601 return ;
2602 }
2603 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2604 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002605 if(NULL == pWDA_ScanParam)
2606 {
2607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002608 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002609 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002610 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002611 return ;
2612 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002613 if(NULL == pWdaParams->wdaWdiApiMsgParam)
2614 {
2615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002616 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002617 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002618 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002619 return ;
2620 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002621 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2622 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002623
Jeff Johnson295189b2012-06-20 16:38:30 -07002624
2625 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002626 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002627 /* send SCAN RSP message back to PE */
2628 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002629 return ;
2630}
2631
Jeff Johnson295189b2012-06-20 16:38:30 -07002632/*
2633 * FUNCTION: WDA_ProcessStartScanReq
2634 * Trigger start SCAN in WDI
2635 */
2636VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
2637 tStartScanParams *startScanParams)
2638{
2639 WDI_Status status = WDI_STATUS_SUCCESS;
2640 WDI_StartScanReqParamsType *wdiStartScanParams =
2641 (WDI_StartScanReqParamsType *)vos_mem_malloc(
2642 sizeof(WDI_StartScanReqParamsType)) ;
2643 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002645 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002646 if(NULL == wdiStartScanParams)
2647 {
2648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002649 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002650 VOS_ASSERT(0);
2651 return VOS_STATUS_E_NOMEM;
2652 }
2653 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2654 if(NULL == pWdaParams)
2655 {
2656 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002657 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002658 VOS_ASSERT(0);
2659 vos_mem_free(wdiStartScanParams);
2660 return VOS_STATUS_E_NOMEM;
2661 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002662 /* Copy init Scan params to WDI structure */
2663 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
2664 wdiStartScanParams->wdiReqStatusCB = NULL ;
2665
Jeff Johnson295189b2012-06-20 16:38:30 -07002666 /* Store Init Req pointer, as this will be used for response */
2667 /* store Params pass it to WDI */
2668 pWdaParams->pWdaContext = pWDA;
2669 pWdaParams->wdaMsgParam = startScanParams;
2670 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002671 /* call DAL API to pass init scan request to DAL */
2672 status = WDI_StartScanReq(wdiStartScanParams,
2673 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002674 /* failure returned by WDI API */
2675 if(IS_WDI_STATUS_FAILURE(status))
2676 {
2677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2678 "Failure in Start Scan WDI API, free all the memory "
2679 "It should be due to previous abort scan." );
2680 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2681 vos_mem_free(pWdaParams) ;
2682 startScanParams->status = eSIR_FAILURE ;
2683 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
2684 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002685 return CONVERT_WDI2VOS_STATUS(status) ;
2686}
Jeff Johnson295189b2012-06-20 16:38:30 -07002687/*
2688 * FUNCTION: WDA_EndScanReqCallback
2689 * END SCAN callback
2690 */
2691void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
2692{
2693 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2694 tWDA_CbContext *pWDA;
2695 tEndScanParams *endScanParam;
2696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002697 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002698 if(NULL == pWdaParams)
2699 {
2700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002701 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002702 VOS_ASSERT(0) ;
2703 return ;
2704 }
2705 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2706 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002707 if(NULL == endScanParam)
2708 {
2709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002710 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002711 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002712 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2713 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002714 return ;
2715 }
2716
2717 /* Free WDI command buffer */
2718 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2719 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002720 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002721 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002722 /* send response back to PE */
2723 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
2724 return ;
2725}
2726
Jeff Johnson295189b2012-06-20 16:38:30 -07002727/*
2728 * FUNCTION: WDA_ProcessEndScanReq
2729 * Trigger END SCAN in WDI
2730 */
2731VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
2732 tEndScanParams *endScanParams)
2733{
2734 WDI_Status status = WDI_STATUS_SUCCESS;
2735 WDI_EndScanReqParamsType *wdiEndScanParams =
2736 (WDI_EndScanReqParamsType *)vos_mem_malloc(
2737 sizeof(WDI_EndScanReqParamsType)) ;
2738 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002740 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002741 if(NULL == wdiEndScanParams)
2742 {
2743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002744 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002745 VOS_ASSERT(0);
2746 return VOS_STATUS_E_NOMEM;
2747 }
2748 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2749 if(NULL == pWdaParams)
2750 {
2751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002752 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002753 VOS_ASSERT(0);
2754 vos_mem_free(wdiEndScanParams);
2755 return VOS_STATUS_E_NOMEM;
2756 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002757 /* Copy init Scan params to WDI structure */
2758 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
2759 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002760 /* Store Init Req pointer, as this will be used for response */
2761 /* store Params pass it to WDI */
2762 pWdaParams->pWdaContext = pWDA;
2763 pWdaParams->wdaMsgParam = endScanParams;
2764 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002765 /* call DAL API to pass init scan request to DAL */
2766 status = WDI_EndScanReq(wdiEndScanParams,
2767 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002768 if(IS_WDI_STATUS_FAILURE(status))
2769 {
2770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2771 "Failure in End Scan WDI API, free all the memory "
2772 "It should be due to previous abort scan." );
2773 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2774 vos_mem_free(pWdaParams) ;
2775 endScanParams->status = eSIR_FAILURE ;
2776 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
2777 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002778 return CONVERT_WDI2VOS_STATUS(status) ;
2779}
Jeff Johnson295189b2012-06-20 16:38:30 -07002780/*
2781 * FUNCTION: WDA_FinishScanReqCallback
2782 * Trigger Finish SCAN callback
2783 */
2784void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2785{
2786 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2787 tWDA_CbContext *pWDA;
2788 tFinishScanParams *finishScanParam;
2789 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002791 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002792 if(NULL == pWdaParams)
2793 {
2794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002795 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002796 VOS_ASSERT(0) ;
2797 return ;
2798 }
2799
2800 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2801 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002802 if(NULL == finishScanParam)
2803 {
2804 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002805 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002806 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002807 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2808 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002809 return ;
2810 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002811 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2812 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002813 /*
2814 * Now Resume TX, if we reached here means, TX is already suspended, we
2815 * have to resume it unconditionaly
2816 */
2817 status = WDA_ResumeDataTx(pWDA) ;
2818
2819 if(VOS_STATUS_SUCCESS != status)
2820 {
2821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002822 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002823 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002824 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002825 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
2826 return ;
2827}
Jeff Johnson295189b2012-06-20 16:38:30 -07002828/*
2829 * FUNCTION: WDA_ProcessFinshScanReq
2830 * Trigger Finish SCAN in WDI
2831 */
2832VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
2833 tFinishScanParams *finishScanParams)
2834{
2835 WDI_Status status = WDI_STATUS_SUCCESS;
2836 WDI_FinishScanReqParamsType *wdiFinishScanParams =
2837 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
2838 sizeof(WDI_FinishScanReqParamsType)) ;
2839 tWDA_ReqParams *pWdaParams ;
2840 tANI_U8 i = 0;
2841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002842 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002843 if(NULL == wdiFinishScanParams)
2844 {
2845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002846 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002847 VOS_ASSERT(0);
2848 return VOS_STATUS_E_NOMEM;
2849 }
2850 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2851 if(NULL == pWdaParams)
2852 {
2853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002854 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002855 VOS_ASSERT(0);
2856 vos_mem_free(wdiFinishScanParams);
2857 return VOS_STATUS_E_NOMEM;
2858 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002859 /* Copy init Scan params to WDI structure */
2860 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
2861 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
2862 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002863 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
2864 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
2865 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
2866 finishScanParams->frameLength ;
2867 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
2868 finishScanParams->currentOperChannel ;
2869 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
2870 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
2871 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002872 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
2873 {
2874 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2875 finishScanParams->scanEntry.bssIdx[i] ;
2876 }
2877
2878
Jeff Johnson295189b2012-06-20 16:38:30 -07002879 /* if Frame length, copy macMgmtHdr ro WDI structure */
2880 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
2881 {
2882 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
2883 &finishScanParams->macMgmtHdr,
2884 sizeof(WDI_MacMgmtHdr)) ;
2885 }
2886 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002887 /* Store Init Req pointer, as this will be used for response */
2888 /* store Params pass it to WDI */
2889 pWdaParams->pWdaContext = pWDA;
2890 pWdaParams->wdaMsgParam = finishScanParams;
2891 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002892 /* call DAL API to pass init scan request to DAL */
2893 status = WDI_FinishScanReq(wdiFinishScanParams,
2894 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002895
Jeff Johnson295189b2012-06-20 16:38:30 -07002896
2897 /*
2898 * WDI API returns failure..
2899 */
2900 if(IS_WDI_STATUS_FAILURE( status))
2901 {
2902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2903 "Failure in Finish Scan WDI API, free all the memory " );
2904 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2905 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002906 finishScanParams->status = eSIR_FAILURE ;
2907 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
2908 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002909 return CONVERT_WDI2VOS_STATUS(status) ;
2910}
Jeff Johnson295189b2012-06-20 16:38:30 -07002911/*---------------------------------------------------------------------
2912 * ASSOC API's
2913 *---------------------------------------------------------------------
2914 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002915/*
2916 * FUNCTION: WDA_JoinReqCallback
2917 * Trigger Init SCAN callback
2918 */
2919void WDA_JoinReqCallback(WDI_Status status, void* pUserData)
2920{
2921 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2922 tWDA_CbContext *pWDA;
2923 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002925 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002926 if(NULL == pWdaParams)
2927 {
2928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002929 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002930 VOS_ASSERT(0) ;
2931 return ;
2932 }
2933 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2934 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002935 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
2936 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002937 /* reset macBSSID */
2938 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07002939 /* reset macSTASelf */
2940 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002941 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002942 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002943 return ;
2944}
Jeff Johnson295189b2012-06-20 16:38:30 -07002945/*
2946 * FUNCTION: WDA_ProcessJoinReq
2947 * Trigger Join REQ in WDI
2948 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002949VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
2950 tSwitchChannelParams* joinReqParam)
2951{
2952 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002953 WDI_JoinReqParamsType *wdiJoinReqParam =
2954 (WDI_JoinReqParamsType *)vos_mem_malloc(
2955 sizeof(WDI_JoinReqParamsType)) ;
2956 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002958 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002959 if(NULL == wdiJoinReqParam)
2960 {
2961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002962 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002963 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002964 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002965 return VOS_STATUS_E_NOMEM;
2966 }
2967 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2968 if(NULL == pWdaParams)
2969 {
2970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002971 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002972 VOS_ASSERT(0);
2973 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002974 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002975 return VOS_STATUS_E_NOMEM;
2976 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002977
2978 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
2979 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
2980 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
2981 {
2982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
2983 "%s: received join request when BSSID or self-STA is NULL "
2984 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002985 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002986 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
2987 VOS_ASSERT(0);
2988 vos_mem_free(wdiJoinReqParam);
2989 vos_mem_free(pWdaParams);
2990 joinReqParam->status = eSIR_FAILURE ;
2991 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2992 return VOS_STATUS_E_INVAL;
2993 }
2994
Jeff Johnson295189b2012-06-20 16:38:30 -07002995 /* copy the BSSID for pWDA */
2996 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
2997 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002998 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
2999 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003000 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
3001 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07003002#ifdef WLAN_FEATURE_VOWIFI
3003 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
3004 joinReqParam->maxTxPower ;
3005#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003006 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
3007 joinReqParam->localPowerConstraint ;
3008#endif
3009 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
3010 joinReqParam->secondaryChannelOffset ;
3011 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
3012
3013 wdiJoinReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003014 /* Store Init Req pointer, as this will be used for response */
3015 /* store Params pass it to WDI */
3016 pWdaParams->pWdaContext = pWDA;
3017 pWdaParams->wdaMsgParam = joinReqParam;
3018 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003019 status = WDI_JoinReq(wdiJoinReqParam,
3020 (WDI_JoinRspCb )WDA_JoinReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003021 if(IS_WDI_STATUS_FAILURE(status))
3022 {
3023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3024 "Failure in Join WDI API, free all the memory " );
3025 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3026 vos_mem_free(pWdaParams) ;
3027 joinReqParam->status = eSIR_FAILURE ;
3028 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3029 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003030 return CONVERT_WDI2VOS_STATUS(status) ;
3031}
Jeff Johnson295189b2012-06-20 16:38:30 -07003032/*
3033 * FUNCTION: WDA_SwitchChannelReqCallback
3034 * send Switch channel RSP back to PE
3035 */
3036void WDA_SwitchChannelReqCallback(
3037 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
3038{
3039 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3040 tWDA_CbContext *pWDA;
3041 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003043 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003044 if(NULL == pWdaParams)
3045 {
3046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003047 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003048 VOS_ASSERT(0) ;
3049 return ;
3050 }
3051 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3052 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3053
3054#ifdef WLAN_FEATURE_VOWIFI
3055 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
3056#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003057 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3058 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003059 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003060 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003061 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003062 return ;
3063}
Jeff Johnson295189b2012-06-20 16:38:30 -07003064/*
3065 * FUNCTION: WDA_ProcessChannelSwitchReq
3066 * Request to WDI to switch channel REQ params.
3067 */
3068VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
3069 tSwitchChannelParams *pSwitchChanParams)
3070{
3071 WDI_Status status = WDI_STATUS_SUCCESS ;
3072 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
3073 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
3074 sizeof(WDI_SwitchChReqParamsType)) ;
3075 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003077 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003078 if(NULL == wdiSwitchChanParam)
3079 {
3080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003081 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003082 VOS_ASSERT(0);
3083 return VOS_STATUS_E_NOMEM;
3084 }
3085 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3086 if(NULL == pWdaParams)
3087 {
3088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003089 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003090 VOS_ASSERT(0);
3091 vos_mem_free(wdiSwitchChanParam);
3092 return VOS_STATUS_E_NOMEM;
3093 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003094 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
3095#ifndef WLAN_FEATURE_VOWIFI
3096 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3097 pSwitchChanParams->localPowerConstraint;
3098#endif
3099 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3100 pSwitchChanParams->secondaryChannelOffset;
3101 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003102 /* Store req pointer, as this will be used for response */
3103 /* store Params pass it to WDI */
3104 pWdaParams->pWdaContext = pWDA;
3105 pWdaParams->wdaMsgParam = pSwitchChanParams;
3106 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003107#ifdef WLAN_FEATURE_VOWIFI
3108 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
3109 = pSwitchChanParams->maxTxPower;
3110 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3111 pSwitchChanParams ->selfStaMacAddr,
3112 sizeof(tSirMacAddr));
3113#endif
3114 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3115 pSwitchChanParams->bssId,
3116 sizeof(tSirMacAddr));
3117
3118 status = WDI_SwitchChReq(wdiSwitchChanParam,
3119 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003120 if(IS_WDI_STATUS_FAILURE(status))
3121 {
3122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3123 "Failure in process channel switch Req WDI API, free all the memory " );
3124 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3125 vos_mem_free(pWdaParams) ;
3126 pSwitchChanParams->status = eSIR_FAILURE ;
3127 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
3128 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003129 return CONVERT_WDI2VOS_STATUS(status) ;
3130}
Kalikinkar dhara1e83b772014-02-06 12:59:22 -08003131
3132/*
3133 * FUNCTION: WDA_SwitchChannelReqCallback_V1
3134 * send Switch channel RSP back to PE
3135 */
3136void WDA_SwitchChannelReqCallback_V1(
3137 WDI_SwitchChRspParamsType_V1 *wdiSwitchChanRsp,
3138 void* pUserData)
3139{
3140 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3141 tWDA_CbContext *pWDA;
3142 tSwitchChannelParams *pSwitchChanParams;
3143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3144 "<------ %s " ,__func__);
3145
3146 if (NULL == pWdaParams)
3147 {
3148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3149 "%s: pWdaParams received NULL", __func__);
3150 VOS_ASSERT(0);
3151 return ;
3152 }
3153 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3154 pSwitchChanParams =
3155 (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3156 pSwitchChanParams->channelSwitchSrc =
3157 wdiSwitchChanRsp->channelSwitchSrc;
3158#ifdef WLAN_FEATURE_VOWIFI
3159 pSwitchChanParams->txMgmtPower =
3160 wdiSwitchChanRsp->ucTxMgmtPower;
3161#endif
3162 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3163 vos_mem_free(pWdaParams);
3164 pSwitchChanParams->status =
3165 wdiSwitchChanRsp->wdiStatus ;
3166 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3167 (void *)pSwitchChanParams , 0);
3168 return;
3169}
3170
3171/*
3172 * FUNCTION: WDA_ProcessChannelSwitchReq_V1
3173 * Request to WDI to switch channel REQ params.
3174 */
3175VOS_STATUS WDA_ProcessChannelSwitchReq_V1(tWDA_CbContext *pWDA,
3176 tSwitchChannelParams *pSwitchChanParams)
3177{
3178 WDI_Status status = WDI_STATUS_SUCCESS ;
3179 WDI_SwitchChReqParamsType_V1 *wdiSwitchChanParam =
3180 (WDI_SwitchChReqParamsType_V1 *)vos_mem_malloc(
3181 sizeof(WDI_SwitchChReqParamsType_V1)) ;
3182 tWDA_ReqParams *pWdaParams ;
3183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3184 "------> %s " ,__func__);
3185 if (NULL == wdiSwitchChanParam)
3186 {
3187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3188 "%s: VOS MEM Alloc Failure", __func__);
3189 VOS_ASSERT(0);
3190 return VOS_STATUS_E_NOMEM;
3191 }
3192 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3193 if (NULL == pWdaParams)
3194 {
3195 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3196 "%s: VOS MEM Alloc Failure", __func__);
3197 VOS_ASSERT(0);
3198 vos_mem_free(wdiSwitchChanParam);
3199 return VOS_STATUS_E_NOMEM;
3200 }
3201 wdiSwitchChanParam->wdiChInfo.channelSwitchSrc =
3202 pSwitchChanParams->channelSwitchSrc;
3203
3204 wdiSwitchChanParam->wdiChInfo.ucChannel =
3205 pSwitchChanParams->channelNumber;
3206#ifndef WLAN_FEATURE_VOWIFI
3207 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3208 pSwitchChanParams->localPowerConstraint;
3209#endif
3210 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3211 pSwitchChanParams->secondaryChannelOffset;
3212 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
3213 /* Store req pointer, as this will be used for response */
3214 /* store Params pass it to WDI */
3215 pWdaParams->pWdaContext = pWDA;
3216 pWdaParams->wdaMsgParam = pSwitchChanParams;
3217 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
3218#ifdef WLAN_FEATURE_VOWIFI
3219 wdiSwitchChanParam->wdiChInfo.cMaxTxPower =
3220 pSwitchChanParams->maxTxPower;
3221 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3222 pSwitchChanParams ->selfStaMacAddr,
3223 sizeof(tSirMacAddr));
3224#endif
3225 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3226 pSwitchChanParams->bssId,
3227 sizeof(tSirMacAddr));
3228
3229 status = WDI_SwitchChReq_V1(wdiSwitchChanParam,
3230 (WDI_SwitchChRspCb_V1)WDA_SwitchChannelReqCallback_V1,
3231 pWdaParams);
3232 if (IS_WDI_STATUS_FAILURE(status))
3233 {
3234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3235 "Failure in process channel switch Req WDI "
3236 "API, free all the memory " );
3237 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3238 vos_mem_free(pWdaParams) ;
3239 pSwitchChanParams->status = eSIR_FAILURE ;
3240 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3241 (void *)pSwitchChanParams, 0) ;
3242 }
3243 return CONVERT_WDI2VOS_STATUS(status) ;
3244}
3245
Jeff Johnson295189b2012-06-20 16:38:30 -07003246/*
3247 * FUNCTION: WDA_ConfigBssReqCallback
3248 * config BSS Req Callback, called by WDI
3249 */
3250void WDA_ConfigBssReqCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
3251 ,void* pUserData)
3252{
3253 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3254 tWDA_CbContext *pWDA;
3255 tAddBssParams *configBssReqParam;
3256 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003258 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003259 if(NULL == pWdaParams)
3260 {
3261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003262 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003263 VOS_ASSERT(0) ;
3264 return ;
3265 }
3266 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3267 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
3268 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003269 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003270 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003271 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
3272 {
3273 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
3274 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003275 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
3276 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
3277 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
3278
3279 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
3280 {
3281 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
3282 {
3283 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
3284 staConfigBssParam->staType = STA_ENTRY_BSSID;
3285 }
3286 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
3287 (staConfigBssParam->staType == STA_ENTRY_SELF))
3288 {
3289 /* This is the 1st add BSS Req for the BTAMP STA */
3290 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3291 staConfigBssParam->staType = STA_ENTRY_BSSID;
3292 }
3293 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3294 (staConfigBssParam->staType == STA_ENTRY_PEER))
3295 {
3296 /* This is the 2nd ADD BSS Request that is sent
3297 * on the BTAMP STA side. The Sta type is
3298 * set to STA_ENTRY_PEER here.*/
3299 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3300 }
3301 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3302 (staConfigBssParam->staType == STA_ENTRY_SELF))
3303 {
3304 /* statype is already set by PE.
3305 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
3306 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
3307 staConfigBssParam->staType = STA_ENTRY_BSSID;
3308 }
3309 else
3310 {
3311 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
3312 staConfigBssParam->staType = STA_ENTRY_PEER;
3313 }
3314 }
3315 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
3316 {
3317 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
3318 staConfigBssParam->staType = STA_ENTRY_SELF;
3319 }
3320 else
3321 {
3322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3323 "Invalid operation mode specified");
3324 VOS_ASSERT(0);
3325 }
3326
3327 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003328 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003329 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003330 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003331 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
3332 sizeof(tSirMacAddr));
3333 staConfigBssParam->txChannelWidthSet =
3334 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07003335 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
3336 staConfigBssParam->htCapable)
3337 {
3338 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
3339 wdiConfigBssRsp->ucBSSIdx;
3340 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
3341 WDA_VALID_STA_INDEX ;
3342 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003343 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
3344 wdiConfigBssRsp->ucBSSIdx,
3345 wdiConfigBssRsp->ucSTAIdx))
3346 {
3347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003348 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003349 VOS_ASSERT(0) ;
3350 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003351 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
3352 {
3353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003354 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003355 VOS_ASSERT(0) ;
3356 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003357#ifdef WLAN_FEATURE_VOWIFI
3358 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
3359#endif
3360 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003361 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3362 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003363 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003364 return ;
3365}
Jeff Johnson295189b2012-06-20 16:38:30 -07003366/*
3367 * FUNCTION: WDA_UpdateEdcaParamsForAC
3368 * Update WDI EDCA params with PE edca params
3369 */
3370void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
3371 WDI_EdcaParamRecord *wdiEdcaParam,
3372 tSirMacEdcaParamRecord *macEdcaParam)
3373{
3374 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
3375 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
3376 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
3377 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
3378 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
3379 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
3380}
Jeff Johnson295189b2012-06-20 16:38:30 -07003381/*
3382 * FUNCTION: WDA_ProcessConfigBssReq
3383 * Configure BSS before starting Assoc with AP
3384 */
3385VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
3386 tAddBssParams* configBssReqParam)
3387{
3388 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303389 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003390 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003392 "------> %s " ,__func__);
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303393 if (NULL == configBssReqParam)
3394 {
3395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3396 "%s: configBssReqParam is NULL", __func__);
3397 return VOS_STATUS_E_INVAL;
3398 }
3399
3400 wdiConfigBssReqParam = (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
3401 sizeof(WDI_ConfigBSSReqParamsType)) ;
3402
Jeff Johnson295189b2012-06-20 16:38:30 -07003403 if(NULL == wdiConfigBssReqParam)
3404 {
3405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003406 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003407 VOS_ASSERT(0);
3408 return VOS_STATUS_E_NOMEM;
3409 }
3410 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3411 if(NULL == pWdaParams)
3412 {
3413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003414 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003415 VOS_ASSERT(0);
3416 vos_mem_free(wdiConfigBssReqParam);
3417 return VOS_STATUS_E_NOMEM;
3418 }
Kiran4a17ebe2013-01-31 10:43:43 -08003419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3420 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07003421 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003422 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
3423 configBssReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003424 /* Store Init Req pointer, as this will be used for response */
3425 /* store Params pass it to WDI */
3426 pWdaParams->pWdaContext = pWDA;
3427 pWdaParams->wdaMsgParam = configBssReqParam;
3428 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003429 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
3430 (WDI_ConfigBSSRspCb )WDA_ConfigBssReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003431 if(IS_WDI_STATUS_FAILURE(status))
3432 {
3433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3434 "Failure in Config BSS WDI API, free all the memory " );
3435 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3436 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003437 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003438 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
3439 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003440 return CONVERT_WDI2VOS_STATUS(status) ;
3441}
Jeff Johnson295189b2012-06-20 16:38:30 -07003442#ifdef ENABLE_HAL_COMBINED_MESSAGES
3443/*
3444 * FUNCTION: WDA_PostAssocReqCallback
3445 * Post ASSOC req callback, send RSP back to PE
3446 */
3447void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
3448 void* pUserData)
3449{
3450 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
3451 tPostAssocParams *postAssocReqParam =
3452 (tPostAssocParams *)pWDA->wdaMsgParam ;
3453 /*STA context within the BSS Params*/
3454 tAddStaParams *staPostAssocParam =
3455 &postAssocReqParam->addBssParams.staContext ;
3456 /*STA Params for self STA*/
3457 tAddStaParams *selfStaPostAssocParam =
3458 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003460 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003461 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003462 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003463 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
3464 {
3465 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
3466 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
3467 sizeof(tSirMacAddr)) ;
3468 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
3469 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
3470 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003471 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
3472 }
3473 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3474 pWDA->wdaWdiApiMsgParam = NULL;
3475 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003476 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003477 return ;
3478}
Jeff Johnson295189b2012-06-20 16:38:30 -07003479/*
3480 * FUNCTION: WDA_ProcessPostAssocReq
3481 * Trigger POST ASSOC processing in WDI
3482 */
3483VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
3484 tPostAssocParams *postAssocReqParam)
3485{
Jeff Johnson295189b2012-06-20 16:38:30 -07003486 WDI_Status status = WDI_STATUS_SUCCESS ;
3487
3488 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
3489 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
3490 sizeof(WDI_PostAssocReqParamsType)) ;
3491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003492 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003493
Jeff Johnson295189b2012-06-20 16:38:30 -07003494 if(NULL == wdiPostAssocReqParam)
3495 {
3496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003497 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003498 VOS_ASSERT(0);
3499 return VOS_STATUS_E_NOMEM;
3500 }
3501
3502 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
3503 {
3504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003505 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003506 VOS_ASSERT(0);
3507 return VOS_STATUS_E_FAILURE;
3508 }
3509
Jeff Johnson295189b2012-06-20 16:38:30 -07003510 /* update BSS params into WDI structure */
3511 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
3512 &postAssocReqParam->addBssParams) ;
3513 /* update STA params into WDI structure */
3514 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
3515 &postAssocReqParam->addStaParams) ;
3516
3517 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
3518 postAssocReqParam->addBssParams.highPerformance;
3519 WDA_UpdateEdcaParamsForAC(pWDA,
3520 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
3521 &postAssocReqParam->addBssParams.acbe);
3522 WDA_UpdateEdcaParamsForAC(pWDA,
3523 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
3524 &postAssocReqParam->addBssParams.acbk);
3525 WDA_UpdateEdcaParamsForAC(pWDA,
3526 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
3527 &postAssocReqParam->addBssParams.acvi);
3528 WDA_UpdateEdcaParamsForAC(pWDA,
3529 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
3530 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07003531 /* Store Init Req pointer, as this will be used for response */
3532 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003533 /* store Params pass it to WDI */
3534 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003535 status = WDI_PostAssocReq(wdiPostAssocReqParam,
3536 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003537 if(IS_WDI_STATUS_FAILURE(status))
3538 {
3539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3540 "Failure in Post Assoc WDI API, free all the memory " );
3541 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3542 pWDA->wdaWdiApiMsgParam = NULL;
3543 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003544 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003545 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
3546 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003547 return CONVERT_WDI2VOS_STATUS(status) ;
3548}
3549#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003550/*
3551 * FUNCTION: WDA_AddStaReqCallback
3552 * ADD STA req callback, send RSP back to PE
3553 */
3554void WDA_AddStaReqCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
3555 void* pUserData)
3556{
3557 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3558 tWDA_CbContext *pWDA;
3559 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003560 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003561 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003562 if(NULL == pWdaParams)
3563 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003565 VOS_ASSERT(0) ;
3566 return ;
3567 }
3568 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3569 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003570 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003571 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003572 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
3573 {
3574 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
3575 /*TODO: UMAC structure doesn't have these fields*/
3576 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
3577 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
3578 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
3579 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
3580 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
3581 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003582#ifdef FEATURE_WLAN_TDLS
3583 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
3584 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
3585#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003586 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003587#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003588 {
3589 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
3590 wdiConfigStaRsp->ucBssIdx;
3591 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
3592 WDA_VALID_STA_INDEX ;
3593 }
3594 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
3595 {
3596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003597 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003598 VOS_ASSERT(0) ;
3599 return ;
3600 }
3601 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003602 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3603 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003604 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003605 return ;
3606}
Jeff Johnson295189b2012-06-20 16:38:30 -07003607/*
3608 * FUNCTION: WDA_ConfigStaReq
3609 * Trigger Config STA processing in WDI
3610 */
3611VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
3612 tAddStaParams *addStaReqParam)
3613{
Jeff Johnson295189b2012-06-20 16:38:30 -07003614 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003615 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
3616 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
3617 sizeof(WDI_ConfigSTAReqParamsType)) ;
3618 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003620 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003621 if(NULL == wdiConfigStaReqParam)
3622 {
3623 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003624 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003625 VOS_ASSERT(0);
3626 return VOS_STATUS_E_NOMEM;
3627 }
3628 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3629 if(NULL == pWdaParams)
3630 {
3631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003632 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003633 VOS_ASSERT(0);
3634 vos_mem_free(wdiConfigStaReqParam);
3635 return VOS_STATUS_E_NOMEM;
3636 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003637 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003638 /* update STA params into WDI structure */
3639 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
3640 addStaReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003641 /* Store Init Req pointer, as this will be used for response */
3642 /* store Params pass it to WDI */
3643 pWdaParams->pWdaContext = pWDA;
3644 pWdaParams->wdaMsgParam = addStaReqParam;
3645 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003646 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
3647 (WDI_ConfigSTARspCb )WDA_AddStaReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003648 if(IS_WDI_STATUS_FAILURE(status))
3649 {
3650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3651 "Failure in Config STA WDI API, free all the memory " );
3652 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3653 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003654 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003655 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
3656 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003657 return CONVERT_WDI2VOS_STATUS(status) ;
3658}
Jeff Johnson295189b2012-06-20 16:38:30 -07003659/*
3660 * FUNCTION: WDA_DelBSSReqCallback
3661 * Dens DEL BSS RSP back to PE
3662 */
3663void WDA_DelBSSReqCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
3664 void* pUserData)
3665{
3666 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3667 tWDA_CbContext *pWDA;
3668 tDeleteBssParams *delBssReqParam;
3669 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003671 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003672 if(NULL == pWdaParams)
3673 {
3674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003675 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003676 VOS_ASSERT(0) ;
3677 return ;
3678 }
3679 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3680 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003681 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003682 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
3683 {
3684 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
3685 sizeof(tSirMacAddr)) ;
3686 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003687 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
3688 {
3689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003690 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003691 VOS_ASSERT(0) ;
3692 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003693 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
3694 {
3695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003696 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003697 VOS_ASSERT(0) ;
3698 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003699 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
3700 {
3701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003702 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003703 VOS_ASSERT(0) ;
3704 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003705 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3706 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003707 /* reset the the system role*/
3708 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
3709
3710 /* Reset the BA related information */
3711 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
3712 {
3713 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
3714 {
3715 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
3716 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
3717 /* Reset framesTxed counters here */
3718 for(tid = 0; tid < STACFG_MAX_TC; tid++)
3719 {
3720 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
3721 }
3722 }
3723 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003724 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003725 return ;
3726}
3727
Jeff Johnson295189b2012-06-20 16:38:30 -07003728/*
3729 * FUNCTION: WDA_ProcessDelBssReq
3730 * Init DEL BSS req with WDI
3731 */
3732VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
3733 tDeleteBssParams *delBssParam)
3734{
3735 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003736 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
3737 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
3738 sizeof(WDI_DelBSSReqParamsType)) ;
3739 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003741 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003742 if(NULL == wdiDelBssReqParam)
3743 {
3744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003745 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003746 VOS_ASSERT(0);
3747 return VOS_STATUS_E_NOMEM;
3748 }
3749 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3750 if(NULL == pWdaParams)
3751 {
3752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003753 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003754 VOS_ASSERT(0);
3755 vos_mem_free(wdiDelBssReqParam);
3756 return VOS_STATUS_E_NOMEM;
3757 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003758 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
3759 wdiDelBssReqParam->wdiReqStatusCB = NULL ;
3760
3761 /* Store Init Req pointer, as this will be used for response */
3762 /* store Params pass it to WDI */
3763 pWdaParams->pWdaContext = pWDA;
3764 pWdaParams->wdaMsgParam = delBssParam;
3765 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003766 status = WDI_DelBSSReq(wdiDelBssReqParam,
3767 (WDI_DelBSSRspCb )WDA_DelBSSReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003768 if(IS_WDI_STATUS_FAILURE(status))
3769 {
3770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3771 "Failure in Del BSS WDI API, free all the memory " );
3772 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3773 vos_mem_free(pWdaParams) ;
3774 delBssParam->status = eSIR_FAILURE ;
3775 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
3776 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003777 return CONVERT_WDI2VOS_STATUS(status) ;
3778}
Jeff Johnson295189b2012-06-20 16:38:30 -07003779/*
3780 * FUNCTION: WDA_DelSTAReqCallback
3781 * Dens DEL STA RSP back to PE
3782 */
3783void WDA_DelSTAReqCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
3784 void* pUserData)
3785{
3786 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3787 tWDA_CbContext *pWDA;
3788 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003790 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003791 if(NULL == pWdaParams)
3792 {
3793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003794 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003795 VOS_ASSERT(0) ;
3796 return ;
3797 }
3798 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3799 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003800 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003801 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
3802 {
3803 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
3804 {
3805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003806 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003807 VOS_ASSERT(0) ;
3808 }
3809 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
3810 }
3811 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3812 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003813 /*Reset the BA information corresponding to this STAIdx */
3814 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
3815 WDA_INVALID_STA_INDEX;
3816 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
3817
3818 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003819 return ;
3820}
Jeff Johnson295189b2012-06-20 16:38:30 -07003821/*
3822 * FUNCTION: WDA_ProcessDelStaReq
3823 * Init DEL STA req with WDI
3824 */
3825VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
3826 tDeleteStaParams *delStaParam)
3827{
3828 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003829 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
3830 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
3831 sizeof(WDI_DelSTAReqParamsType)) ;
3832 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003834 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003835 if(NULL == wdiDelStaReqParam)
3836 {
3837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003838 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003839 VOS_ASSERT(0);
3840 return VOS_STATUS_E_NOMEM;
3841 }
3842 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3843 if(NULL == pWdaParams)
3844 {
3845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003846 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003847 VOS_ASSERT(0);
3848 vos_mem_free(wdiDelStaReqParam);
3849 return VOS_STATUS_E_NOMEM;
3850 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003851 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
3852 wdiDelStaReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003853 /* Store Init Req pointer, as this will be used for response */
3854 /* store Params pass it to WDI */
3855 pWdaParams->pWdaContext = pWDA;
3856 pWdaParams->wdaMsgParam = delStaParam;
3857 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003858 status = WDI_DelSTAReq(wdiDelStaReqParam,
3859 (WDI_DelSTARspCb )WDA_DelSTAReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003860 if(IS_WDI_STATUS_FAILURE(status))
3861 {
3862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3863 "Failure in Del STA WDI API, free all the memory status = %d",
3864 status );
3865 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3866 vos_mem_free(pWdaParams) ;
3867 delStaParam->status = eSIR_FAILURE ;
3868 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
3869 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003870 return CONVERT_WDI2VOS_STATUS(status) ;
3871}
Jeff Johnson295189b2012-06-20 16:38:30 -07003872void WDA_ProcessAddStaSelfRsp(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
3873{
3874 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3875 tWDA_CbContext *pWDA;
3876 tAddStaSelfParams *pAddStaSelfRsp = NULL;
3877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003878 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003879 if(NULL == pWdaParams)
3880 {
3881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003882 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003883 VOS_ASSERT(0) ;
3884 return ;
3885 }
3886 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3887 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003888 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3889 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003890 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
3891 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
3892 pwdiAddSTASelfRsp->macSelfSta,
3893 sizeof(pAddStaSelfRsp->selfMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003894 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003895 return ;
3896}
Jeff Johnson295189b2012-06-20 16:38:30 -07003897/*
3898 * FUNCTION: WDA_ProcessAddStaSelfReq
3899 *
3900 */
3901VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
3902{
3903 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003904 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003905 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
3906 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
3907 sizeof(WDI_AddSTASelfReqParamsType)) ;
3908 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003910 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003911 if( NULL == wdiAddStaSelfReq )
3912 {
3913 VOS_ASSERT( 0 );
3914 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003915 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003916 return( VOS_STATUS_E_NOMEM );
3917 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003918 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003919 if( NULL == pWdaParams )
3920 {
3921 VOS_ASSERT( 0 );
3922 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003923 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003924 vos_mem_free(wdiAddStaSelfReq) ;
3925 return( VOS_STATUS_E_NOMEM );
3926 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003927 wdiAddStaSelfReq->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003928 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
Kiran Kumar Lokere0ad5cd32013-06-25 11:26:22 -07003929 wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07003930 /* Store Init Req pointer, as this will be used for response */
3931 /* store Params pass it to WDI */
3932 pWdaParams->pWdaContext = pWDA;
3933 pWdaParams->wdaMsgParam = pAddStaSelfReq;
3934 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
Jeff Johnson43971f52012-07-17 12:26:56 -07003935 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq, WDA_ProcessAddStaSelfRsp, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003936
Jeff Johnson43971f52012-07-17 12:26:56 -07003937 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003938 {
3939 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3940 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07003941 wstatus );
3942 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003943 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3944 vos_mem_free(pWdaParams) ;
3945 pAddStaSelfReq->status = eSIR_FAILURE ;
3946 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
3947 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003948 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003949}
Jeff Johnson295189b2012-06-20 16:38:30 -07003950/*
3951 * FUNCTION: WDA_DelSTASelfRespCallback
3952 *
3953 */
3954void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
3955 wdiDelStaSelfRspParams , void* pUserData)
3956{
3957 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3958 tWDA_CbContext *pWDA;
3959 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003961 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003962 if (NULL == pWdaParams)
3963 {
3964 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003965 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003966 VOS_ASSERT(0);
3967 return;
3968 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003969 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3970 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003971 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003972 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003973
3974 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3975 vos_mem_free(pWdaParams) ;
3976
3977 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003978 return ;
3979}
Jeff Johnson295189b2012-06-20 16:38:30 -07003980/*
3981 * FUNCTION: WDA_DelSTASelfReqCallback
3982 *
3983 */
3984void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
3985 void* pUserData)
3986{
3987 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3988 tWDA_CbContext *pWDA;
3989 tDelStaSelfParams *delStaSelfParams;
3990
3991 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05303992 "<------ %s, wdiStatus: %d pWdaParams: %p",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003993 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003994
3995 if (NULL == pWdaParams)
3996 {
3997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003998 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003999 VOS_ASSERT(0);
4000 return;
4001 }
4002
4003 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4004 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
4005
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004006 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004007
4008 if(IS_WDI_STATUS_FAILURE(wdiStatus))
4009 {
4010 VOS_ASSERT(0);
4011 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4012 vos_mem_free(pWdaParams) ;
4013 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
4014 }
4015
4016 return ;
4017}
4018
4019/*
4020 * FUNCTION: WDA_DelSTASelfReq
4021 * Trigger Config STA processing in WDI
4022 */
4023VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
4024 tDelStaSelfParams* pDelStaSelfReqParam)
4025{
4026 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004027 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004028 tWDA_ReqParams *pWdaParams = NULL;
4029 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
4030 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
4031 sizeof(WDI_DelSTASelfReqParamsType)) ;
4032
Jeff Johnson295189b2012-06-20 16:38:30 -07004033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004034 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004035 if( NULL == wdiDelStaSelfReq )
4036 {
4037 VOS_ASSERT( 0 );
4038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004039 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004040 return( VOS_STATUS_E_NOMEM );
4041 }
4042
4043 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4044 if( NULL == pWdaParams )
4045 {
4046 VOS_ASSERT( 0 );
4047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004048 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004049 vos_mem_free(wdiDelStaSelfReq) ;
4050 return( VOS_STATUS_E_NOMEM );
4051 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004052 pWdaParams->pWdaContext = pWDA;
4053 /* Store param pointer as passed in by caller */
4054 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
4055 /* store Params pass it to WDI */
4056 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07004057 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
4058 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
4059
4060 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
4061 wdiDelStaSelfReq->pUserData = pWdaParams;
4062
Jeff Johnson43971f52012-07-17 12:26:56 -07004063 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07004064 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
4065
Jeff Johnson43971f52012-07-17 12:26:56 -07004066 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004067 {
4068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
4069 "Failure in Del Sta Self REQ WDI API, free all the memory " );
4070 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07004071 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004072 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4073 vos_mem_free(pWdaParams) ;
4074 pDelStaSelfReqParam->status = eSIR_FAILURE ;
4075 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
4076 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004077 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004078}
4079
Jeff Johnson295189b2012-06-20 16:38:30 -07004080/*
4081 * FUNCTION: WDA_SendMsg
4082 * Send Message back to PE
4083 */
4084void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
4085 void *pBodyptr, tANI_U32 bodyVal)
4086{
4087 tSirMsgQ msg = {0} ;
4088 tANI_U32 status = VOS_STATUS_SUCCESS ;
4089 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07004090 msg.type = msgType;
4091 msg.bodyval = bodyVal;
4092 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07004093 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07004094 if (VOS_STATUS_SUCCESS != status)
4095 {
4096 if(NULL != pBodyptr)
4097 {
4098 vos_mem_free(pBodyptr);
4099 }
4100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004101 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004102 VOS_ASSERT(0) ;
4103 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004104 return ;
4105}
Jeff Johnson295189b2012-06-20 16:38:30 -07004106/*
4107 * FUNCTION: WDA_UpdateBSSParams
4108 * Translated WDA/PE BSS info into WDI BSS info..
4109 */
4110void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
4111 WDI_ConfigBSSReqInfoType *wdiBssParams,
4112 tAddBssParams *wdaBssParams)
4113{
4114 v_U8_t keyIndex = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004115 /* copy bssReq Params to WDI structure */
4116 vos_mem_copy(wdiBssParams->macBSSID,
4117 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
4118 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
4119 sizeof(tSirMacAddr)) ;
4120 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
4121 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
4122 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004123 wdiBssParams->ucShortSlotTimeSupported =
4124 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004125 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
4126 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
4127 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
4128 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
4129 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
4130
4131 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
4132 wdiBssParams->ucTXOPProtectionFullSupport =
4133 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004134 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
4135 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004136 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004137 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
4138 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
4139 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
4140 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
4141
Chet Lanctot186b5732013-03-18 10:26:30 -07004142 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
4143
Jeff Johnson295189b2012-06-20 16:38:30 -07004144 /* copy SSID into WDI structure */
4145 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
4146 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
4147 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004148 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
4149 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004150 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07004151#ifdef WLAN_FEATURE_VOWIFI
4152 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
4153#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004154 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07004155 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07004156#ifdef WLAN_FEATURE_VOWIFI_11R
4157 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07004158 if(wdiBssParams->bExtSetStaKeyParamValid)
4159 {
4160 /* copy set STA key params to WDI structure */
4161 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
4162 wdaBssParams->extSetStaKeyParam.staIdx;
4163 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
4164 wdaBssParams->extSetStaKeyParam.encType;
4165 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
4166 wdaBssParams->extSetStaKeyParam.wepType;
4167 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
4168 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004169 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
4170 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004171 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004172 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
4173 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4174 {
4175 WDA_GetWepKeysFromCfg( pWDA,
4176 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
4177 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
4178 wdiBssParams->wdiExtSetKeyParam.wdiKey );
4179 }
4180 else
4181 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004182 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4183 keyIndex++)
4184 {
4185 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
4186 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
4187 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
4188 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
4189 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
4190 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004191 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
4192 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4193 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
4194 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
4195 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
4196 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
4197 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
4198 wdaBssParams->extSetStaKeyParam.key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4199 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004200 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
4201 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004202 }
4203 }
4204 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
4205 }
4206 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
4207 {
4208 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
4209 sizeof(wdaBssParams->extSetStaKeyParam) );
4210 }
4211#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07004212#ifdef WLAN_FEATURE_11AC
4213 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
4214 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
4215#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004216
4217 return ;
4218}
Jeff Johnson295189b2012-06-20 16:38:30 -07004219/*
4220 * FUNCTION: WDA_UpdateSTAParams
4221 * Translated WDA/PE BSS info into WDI BSS info..
4222 */
4223void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
4224 WDI_ConfigStaReqInfoType *wdiStaParams,
4225 tAddStaParams *wdaStaParams)
4226{
4227 tANI_U8 i = 0;
4228 /* Update STA params */
4229 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
4230 sizeof(tSirMacAddr)) ;
4231 wdiStaParams->usAssocId = wdaStaParams->assocId;
4232 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07004233 wdiStaParams->staIdx = wdaStaParams->staIdx;
4234
Jeff Johnson295189b2012-06-20 16:38:30 -07004235 wdiStaParams->ucShortPreambleSupported =
4236 wdaStaParams->shortPreambleSupported;
4237 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
4238 sizeof(tSirMacAddr)) ;
4239 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
4240
4241 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
4242
4243 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
4244 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
4245 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
4246 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
4247 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
4248 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
4249 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
4250
4251 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
4252 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07004253 wdiStaParams->wdiSupportedRates.opRateMode =
4254 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004255 for(i = 0;i < WDI_NUM_11B_RATES;i++)
4256 {
4257 wdiStaParams->wdiSupportedRates.llbRates[i] =
4258 wdaStaParams->supportedRates.llbRates[i];
4259 }
4260 for(i = 0;i < WDI_NUM_11A_RATES;i++)
4261 {
4262 wdiStaParams->wdiSupportedRates.llaRates[i] =
4263 wdaStaParams->supportedRates.llaRates[i];
4264 }
4265 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
4266 {
4267 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
4268 wdaStaParams->supportedRates.aniLegacyRates[i];
4269 }
4270 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
4271 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07004272#ifdef WLAN_FEATURE_11AC
4273 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
4274 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
4275 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
4276 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
4277#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004278 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
4279 {
4280 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
4281 wdaStaParams->supportedRates.supportedMCSSet[i];
4282 }
4283 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
4284 wdaStaParams->supportedRates.rxHighestDataRate;
4285
4286 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
4287
4288 wdiStaParams->wdiAction = wdaStaParams->updateSta;
4289
4290 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
4291 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
4292 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
4293
4294 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
4295 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
4296 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
4297 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07004298 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07004299#ifdef WLAN_FEATURE_11AC
4300 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
4301 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08004302 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07004303#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08004304 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
4305 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07004306 return ;
4307}
Jeff Johnson295189b2012-06-20 16:38:30 -07004308/*
4309 * -------------------------------------------------------------------------
4310 * CFG update to WDI
4311 * -------------------------------------------------------------------------
4312 */
4313
4314 /*
4315 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
4316 * Convert the WNI CFG ID to HAL CFG ID
4317 */
Jeff Johnsone7245742012-09-05 17:12:55 -07004318static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07004319{
4320 switch(wniCfgId)
4321 {
4322 case WNI_CFG_STA_ID:
4323 return QWLAN_HAL_CFG_STA_ID;
4324 case WNI_CFG_CURRENT_TX_ANTENNA:
4325 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
4326 case WNI_CFG_CURRENT_RX_ANTENNA:
4327 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
4328 case WNI_CFG_LOW_GAIN_OVERRIDE:
4329 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
4330 case WNI_CFG_POWER_STATE_PER_CHAIN:
4331 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
4332 case WNI_CFG_CAL_PERIOD:
4333 return QWLAN_HAL_CFG_CAL_PERIOD;
4334 case WNI_CFG_CAL_CONTROL:
4335 return QWLAN_HAL_CFG_CAL_CONTROL;
4336 case WNI_CFG_PROXIMITY:
4337 return QWLAN_HAL_CFG_PROXIMITY;
4338 case WNI_CFG_NETWORK_DENSITY:
4339 return QWLAN_HAL_CFG_NETWORK_DENSITY;
4340 case WNI_CFG_MAX_MEDIUM_TIME:
4341 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
4342 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
4343 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
4344 case WNI_CFG_RTS_THRESHOLD:
4345 return QWLAN_HAL_CFG_RTS_THRESHOLD;
4346 case WNI_CFG_SHORT_RETRY_LIMIT:
4347 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
4348 case WNI_CFG_LONG_RETRY_LIMIT:
4349 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
4350 case WNI_CFG_FRAGMENTATION_THRESHOLD:
4351 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
4352 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
4353 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
4354 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
4355 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
4356 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
4357 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
4358 case WNI_CFG_FIXED_RATE:
4359 return QWLAN_HAL_CFG_FIXED_RATE;
4360 case WNI_CFG_RETRYRATE_POLICY:
4361 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
4362 case WNI_CFG_RETRYRATE_SECONDARY:
4363 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
4364 case WNI_CFG_RETRYRATE_TERTIARY:
4365 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
4366 case WNI_CFG_FORCE_POLICY_PROTECTION:
4367 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
4368 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
4369 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
4370 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
4371 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
4372 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
4373 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
4374 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
4375 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
4376 case WNI_CFG_MAX_BA_SESSIONS:
4377 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
4378 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
4379 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
4380 case WNI_CFG_PS_ENABLE_BCN_FILTER:
4381 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
4382 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
4383 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
4384 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
4385 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
4386 case WNI_CFG_STATS_PERIOD:
4387 return QWLAN_HAL_CFG_STATS_PERIOD;
4388 case WNI_CFG_CFP_MAX_DURATION:
4389 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
4390#if 0 /*This is not part of CFG*/
4391 case WNI_CFG_FRAME_TRANS_ENABLED:
4392 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
4393#endif
4394 case WNI_CFG_DTIM_PERIOD:
4395 return QWLAN_HAL_CFG_DTIM_PERIOD;
4396 case WNI_CFG_EDCA_WME_ACBK:
4397 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
4398 case WNI_CFG_EDCA_WME_ACBE:
4399 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
4400 case WNI_CFG_EDCA_WME_ACVI:
4401 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
4402 case WNI_CFG_EDCA_WME_ACVO:
4403 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
4404#if 0
4405 case WNI_CFG_TELE_BCN_WAKEUP_EN:
4406 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
4407 case WNI_CFG_TELE_BCN_TRANS_LI:
4408 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
4409 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
4410 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
4411 case WNI_CFG_TELE_BCN_MAX_LI:
4412 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
4413 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
4414 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
4415#endif
4416 case WNI_CFG_ENABLE_CLOSE_LOOP:
4417 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08004418 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
4419 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
Jeff Johnson295189b2012-06-20 16:38:30 -07004420 default:
4421 {
4422 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004423 "There is no HAL CFG Id corresponding to WNI CFG Id: %d",
Jeff Johnson295189b2012-06-20 16:38:30 -07004424 wniCfgId);
4425 return VOS_STATUS_E_INVAL;
4426 }
4427 }
4428}
Jeff Johnson295189b2012-06-20 16:38:30 -07004429/*
4430 * FUNCTION: WDA_UpdateCfgCallback
4431 *
4432 */
4433void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
4434{
4435 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4436 WDI_UpdateCfgReqParamsType *wdiCfgParam =
4437 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004439 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004440 /*
4441 * currently there is no response message is expected between PE and
4442 * WDA, Failure return from WDI is a ASSERT condition
4443 */
4444 if(WDI_STATUS_SUCCESS != wdiStatus)
4445 {
4446 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004447 "%s: CFG (%d) config failure", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07004448 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
4449 }
4450
4451 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
4452 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4453 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004454 return ;
4455}
Jeff Johnson295189b2012-06-20 16:38:30 -07004456/*
4457 * FUNCTION: WDA_UpdateCfg
4458 *
4459 */
4460VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
4461{
4462
4463 WDI_Status status = WDI_STATUS_SUCCESS ;
4464 tANI_U32 val =0;
4465 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
4466 tHalCfg *configData;
4467 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
4468 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07004469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004470 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004471 if (NULL == pMac )
4472 {
4473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004474 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004475 return VOS_STATUS_E_FAILURE;
4476 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004477 if(WDA_START_STATE != pWDA->wdaState)
4478 {
4479 return VOS_STATUS_E_FAILURE;
4480 }
4481
4482 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
4483 {
4484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004485 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004486 VOS_ASSERT(0);
4487 return VOS_STATUS_E_FAILURE;
4488 }
4489
4490 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
4491 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004492 if(NULL == wdiCfgReqParam)
4493 {
4494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004495 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004496 VOS_ASSERT(0);
4497 return VOS_STATUS_E_NOMEM;
4498 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004499 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
4500 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004501 if(NULL == wdiCfgReqParam->pConfigBuffer)
4502 {
4503 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004504 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004505 vos_mem_free(wdiCfgReqParam);
4506 VOS_ASSERT(0);
4507 return VOS_STATUS_E_NOMEM;
4508 }
4509
4510 /*convert the WNI CFG Id to HAL CFG Id*/
4511 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
4512 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
4513
4514 /*TODO: revisit this for handling string parameters */
4515 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
4516 &val) != eSIR_SUCCESS)
4517 {
4518 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004519 "Failed to cfg get id %d", cfgParam->bodyval);
Jeff Johnson295189b2012-06-20 16:38:30 -07004520 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
4521 vos_mem_free(wdiCfgReqParam);
4522 return eSIR_FAILURE;
4523 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004524 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
4525 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
4526 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
4527 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
4528 wdiCfgReqParam->wdiReqStatusCB = NULL ;
4529
4530 /* store Params pass it to WDI */
4531 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004532#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
4533 status = WDI_UpdateCfgReq(wdiCfgReqParam,
4534 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004535 if(IS_WDI_STATUS_FAILURE(status))
4536 {
4537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4538 "Failure in Update CFG WDI API, free all the memory " );
4539 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4540 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4541 pWDA->wdaWdiCfgApiMsgParam = NULL;
4542 /* Failure is not expected */
4543 VOS_ASSERT(0) ;
4544 }
4545#else
4546 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4547 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4548 pWDA->wdaWdiCfgApiMsgParam = NULL;
4549#endif
4550 return CONVERT_WDI2VOS_STATUS(status) ;
4551}
4552
Jeff Johnson295189b2012-06-20 16:38:30 -07004553VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
4554 v_U8_t *pDefaultKeyId,
4555 v_U8_t *pNumKeys,
4556 WDI_KeysType *pWdiKeys )
4557{
4558 v_U32_t i, j, defKeyId = 0;
4559 v_U32_t val = SIR_MAC_KEY_LENGTH;
4560 VOS_STATUS status = WDI_STATUS_SUCCESS;
4561 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004562 if (NULL == pMac )
4563 {
4564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004565 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004566 return VOS_STATUS_E_FAILURE;
4567 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004568 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
4569 &defKeyId ))
4570 {
4571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4572 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
4573 }
4574
4575 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07004576 /* Need to extract ALL of the configured WEP Keys */
4577 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
4578 {
4579 val = SIR_MAC_KEY_LENGTH;
4580 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
4581 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
4582 pWdiKeys[j].key,
4583 &val ))
4584 {
4585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004586 "WEP Key index [%d] may not configured in CFG",i);
Jeff Johnson295189b2012-06-20 16:38:30 -07004587 }
4588 else
4589 {
4590 pWdiKeys[j].keyId = (tANI_U8) i;
4591 /*
4592 * Actually, a DC (Don't Care) because
4593 * this is determined (and set) by PE/MLME
4594 */
4595 pWdiKeys[j].unicast = 0;
4596 /*
4597 * Another DC (Don't Care)
4598 */
4599 pWdiKeys[j].keyDirection = eSIR_TX_RX;
4600 /* Another DC (Don't Care). Unused for WEP */
4601 pWdiKeys[j].paeRole = 0;
4602 /* Determined from wlan_cfgGetStr() above.*/
4603 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07004604 j++;
4605 *pNumKeys = (tANI_U8) j;
4606 }
4607 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004608 return status;
4609}
Jeff Johnson295189b2012-06-20 16:38:30 -07004610/*
4611 * FUNCTION: WDA_SetBssKeyReqCallback
4612 * send SET BSS key RSP back to PE
4613 */
4614void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
4615{
4616 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4617 tWDA_CbContext *pWDA;
4618 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004620 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004621 if(NULL == pWdaParams)
4622 {
4623 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004624 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004625 VOS_ASSERT(0) ;
4626 return ;
4627 }
4628 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4629 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004630 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4631 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004632 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004633 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004634 return ;
4635}
Jeff Johnson295189b2012-06-20 16:38:30 -07004636/*
4637 * FUNCTION: WDA_ProcessSetBssKeyReq
4638 * Request to WDI for programming the BSS key( key for
4639 * broadcast/multicast frames Encryption)
4640 */
4641VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
4642 tSetBssKeyParams *setBssKeyParams )
4643{
4644 WDI_Status status = WDI_STATUS_SUCCESS ;
4645 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
4646 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
4647 sizeof(WDI_SetBSSKeyReqParamsType)) ;
4648 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004649 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004651 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004652 if(NULL == wdiSetBssKeyParam)
4653 {
4654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004655 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004656 VOS_ASSERT(0);
4657 return VOS_STATUS_E_NOMEM;
4658 }
4659 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4660 if(NULL == pWdaParams)
4661 {
4662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004663 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004664 VOS_ASSERT(0);
4665 vos_mem_free(wdiSetBssKeyParam);
4666 return VOS_STATUS_E_NOMEM;
4667 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004668 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004669 /* copy set BSS params to WDI structure */
4670 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
4671 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
4672 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07004673 if(setBssKeyParams->encType != eSIR_ED_NONE)
4674 {
4675 if( setBssKeyParams->numKeys == 0 &&
4676 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
4677 setBssKeyParams->encType == eSIR_ED_WEP104))
4678 {
4679 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004680 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
4681 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
4682 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
4683 }
4684 else
4685 {
4686 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
4687 {
4688 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
4689 setBssKeyParams->key[keyIndex].keyId;
4690 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
4691 setBssKeyParams->key[keyIndex].unicast;
4692 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
4693 setBssKeyParams->key[keyIndex].keyDirection;
4694 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
4695 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4696 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
4697 setBssKeyParams->key[keyIndex].paeRole;
4698 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
4699 setBssKeyParams->key[keyIndex].keyLength;
4700 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
4701 setBssKeyParams->key[keyIndex].key,
4702 SIR_MAC_MAX_KEY_LENGTH);
4703 }
4704 }
4705 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004706 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
4707 setBssKeyParams->singleTidRc;
4708 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004709 /* Store set key pointer, as this will be used for response */
4710 /* store Params pass it to WDI */
4711 pWdaParams->pWdaContext = pWDA;
4712 pWdaParams->wdaMsgParam = setBssKeyParams;
4713 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004714 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
4715 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
4716
4717 if(IS_WDI_STATUS_FAILURE(status))
4718 {
4719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4720 "Failure in Set BSS Key Req WDI API, free all the memory " );
4721 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4722 vos_mem_free(pWdaParams) ;
4723 setBssKeyParams->status = eSIR_FAILURE ;
4724 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
4725 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004726 return CONVERT_WDI2VOS_STATUS(status) ;
4727}
Jeff Johnson295189b2012-06-20 16:38:30 -07004728/*
4729 * FUNCTION: WDA_RemoveBssKeyReqCallback
4730 * send SET BSS key RSP back to PE
4731 */
4732void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
4733{
4734 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4735 tWDA_CbContext *pWDA;
4736 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004738 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004739 if(NULL == pWdaParams)
4740 {
4741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004742 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004743 VOS_ASSERT(0) ;
4744 return ;
4745 }
4746 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4747 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004748 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4749 vos_mem_free(pWdaParams) ;
4750
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004751 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004752 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004753 return ;
4754}
Jeff Johnson295189b2012-06-20 16:38:30 -07004755/*
4756 * FUNCTION: WDA_ProcessRemoveBssKeyReq
4757 * Request to WDI to remove the BSS key( key for broadcast/multicast
4758 * frames Encryption)
4759 */
4760VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
4761 tRemoveBssKeyParams *removeBssKeyParams )
4762{
4763 WDI_Status status = WDI_STATUS_SUCCESS ;
4764 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
4765 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
4766 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
4767 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004768 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004769 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004770 if(NULL == wdiRemoveBssKeyParam)
4771 {
4772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004773 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004774 VOS_ASSERT(0);
4775 return VOS_STATUS_E_NOMEM;
4776 }
4777 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4778 if(NULL == pWdaParams)
4779 {
4780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004781 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004782 VOS_ASSERT(0);
4783 vos_mem_free(wdiRemoveBssKeyParam);
4784 return VOS_STATUS_E_NOMEM;
4785 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004786 /* copy Remove BSS key params to WDI structure*/
4787 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
4788 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
4789 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
4790 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
4791 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004792 /* Store remove key pointer, as this will be used for response */
4793 /* store Params pass it to WDI */
4794 pWdaParams->pWdaContext = pWDA;
4795 pWdaParams->wdaMsgParam = removeBssKeyParams;
4796 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004797 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
4798 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004799 if(IS_WDI_STATUS_FAILURE(status))
4800 {
4801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4802 "Failure in Remove BSS Key Req WDI API, free all the memory " );
4803 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4804 vos_mem_free(pWdaParams) ;
4805 removeBssKeyParams->status = eSIR_FAILURE ;
4806 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
4807 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004808 return CONVERT_WDI2VOS_STATUS(status) ;
4809}
Jeff Johnson295189b2012-06-20 16:38:30 -07004810/*
4811 * FUNCTION: WDA_SetBssKeyReqCallback
4812 * send SET BSS key RSP back to PE
4813 */
4814void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
4815{
4816 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4817 tWDA_CbContext *pWDA;
4818 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004820 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004821 if(NULL == pWdaParams)
4822 {
4823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004824 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004825 VOS_ASSERT(0) ;
4826 return ;
4827 }
4828 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4829 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004830 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4831 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004832 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004833 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004834 return ;
4835}
Jeff Johnson295189b2012-06-20 16:38:30 -07004836/*
4837 * FUNCTION: WDA_ProcessSetStaKeyReq
4838 * Request to WDI for programming the STA key( key for Unicast frames
4839 * Encryption)
4840 */
4841VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
4842 tSetStaKeyParams *setStaKeyParams )
4843{
4844 WDI_Status status = WDI_STATUS_SUCCESS ;
4845 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4846 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4847 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4848 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004849 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004851 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004852 if(NULL == wdiSetStaKeyParam)
4853 {
4854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004855 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004856 VOS_ASSERT(0);
4857 return VOS_STATUS_E_NOMEM;
4858 }
4859 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4860 if(NULL == pWdaParams)
4861 {
4862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004863 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004864 VOS_ASSERT(0);
4865 vos_mem_free(wdiSetStaKeyParam);
4866 return VOS_STATUS_E_NOMEM;
4867 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004868 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004869 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004870 /* copy set STA key params to WDI structure */
4871 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4872 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4873 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4874 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004875 if(setStaKeyParams->encType != eSIR_ED_NONE)
4876 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004877 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004878 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
4879 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4880 {
4881 WDA_GetWepKeysFromCfg( pWDA,
4882 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
4883 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
4884 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
4885 }
4886 else
4887 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004888 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4889 keyIndex++)
4890 {
4891 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4892 setStaKeyParams->key[keyIndex].keyId;
4893 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4894 setStaKeyParams->key[keyIndex].unicast;
4895 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4896 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004897 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4898 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4899 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4900 setStaKeyParams->key[keyIndex].paeRole;
4901 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4902 setStaKeyParams->key[keyIndex].keyLength;
4903 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4904 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4905 /* set default index to index which have key direction as WDI_TX_DEFAULT */
4906 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
4907 {
4908 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
4909 }
4910 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004911 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4912 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004913 }
4914 }
4915 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
4916 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004917 /* Store set key pointer, as this will be used for response */
4918 /* store Params pass it to WDI */
4919 pWdaParams->pWdaContext = pWDA;
4920 pWdaParams->wdaMsgParam = setStaKeyParams;
4921 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004922 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
4923 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004924 if(IS_WDI_STATUS_FAILURE(status))
4925 {
4926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4927 "Failure in set STA Key Req WDI API, free all the memory " );
4928 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4929 vos_mem_free(pWdaParams) ;
4930 setStaKeyParams->status = eSIR_FAILURE ;
4931 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
4932 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004933 return CONVERT_WDI2VOS_STATUS(status) ;
4934}
Jeff Johnson295189b2012-06-20 16:38:30 -07004935/*
4936 * FUNCTION: WDA_SetBcastStaKeyReqCallback
4937 * send SET Bcast STA key RSP back to PE
4938 */
4939void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
4940{
4941 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4942 tWDA_CbContext *pWDA;
4943 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004945 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004946 if(NULL == pWdaParams)
4947 {
4948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004949 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004950 VOS_ASSERT(0) ;
4951 return ;
4952 }
4953 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4954 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004955 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4956 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004957 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004958 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004959 return ;
4960}
4961
Jeff Johnson295189b2012-06-20 16:38:30 -07004962/*
4963 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
4964 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
4965 * Encryption)
4966 */
4967VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
4968 tSetStaKeyParams *setStaKeyParams )
4969{
4970 WDI_Status status = WDI_STATUS_SUCCESS ;
4971 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4972 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4973 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4974 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004975 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004977 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004978 if(NULL == wdiSetStaKeyParam)
4979 {
4980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004981 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004982 VOS_ASSERT(0);
4983 return VOS_STATUS_E_NOMEM;
4984 }
4985 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4986 if(NULL == pWdaParams)
4987 {
4988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004989 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004990 VOS_ASSERT(0);
4991 vos_mem_free(wdiSetStaKeyParam);
4992 return VOS_STATUS_E_NOMEM;
4993 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004994 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004995 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004996 /* copy set STA key params to WDI structure */
4997 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4998 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4999 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
5000 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005001 if(setStaKeyParams->encType != eSIR_ED_NONE)
5002 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005003 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5004 keyIndex++)
5005 {
5006 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
5007 setStaKeyParams->key[keyIndex].keyId;
5008 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
5009 setStaKeyParams->key[keyIndex].unicast;
5010 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
5011 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005012 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
5013 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5014 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
5015 setStaKeyParams->key[keyIndex].paeRole;
5016 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
5017 setStaKeyParams->key[keyIndex].keyLength;
5018 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
5019 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
5020 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005021 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
5022 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005023 }
5024 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07005025 /* Store set key pointer, as this will be used for response */
5026 /* store Params pass it to WDI */
5027 pWdaParams->pWdaContext = pWDA;
5028 pWdaParams->wdaMsgParam = setStaKeyParams;
5029 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005030 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
5031 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005032 if(IS_WDI_STATUS_FAILURE(status))
5033 {
5034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5035 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
5036 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5037 vos_mem_free(pWdaParams) ;
5038 setStaKeyParams->status = eSIR_FAILURE ;
5039 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
5040 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005041 return CONVERT_WDI2VOS_STATUS(status) ;
5042}
Jeff Johnson295189b2012-06-20 16:38:30 -07005043/*
5044 * FUNCTION: WDA_RemoveStaKeyReqCallback
5045 * send SET BSS key RSP back to PE
5046 */
5047void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
5048{
5049 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5050 tWDA_CbContext *pWDA;
5051 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005053 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005054 if(NULL == pWdaParams)
5055 {
5056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005057 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005058 VOS_ASSERT(0) ;
5059 return ;
5060 }
5061 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5062 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005063 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5064 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005065 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005066 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005067 return ;
5068}
5069
Jeff Johnson295189b2012-06-20 16:38:30 -07005070/*
5071 * FUNCTION: WDA_ProcessRemoveStaKeyReq
5072 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
5073 */
5074VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
5075 tRemoveStaKeyParams *removeStaKeyParams )
5076{
5077 WDI_Status status = WDI_STATUS_SUCCESS ;
5078 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
5079 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
5080 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
5081 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005082 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005083 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005084 if(NULL == wdiRemoveStaKeyParam)
5085 {
5086 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005087 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005088 VOS_ASSERT(0);
5089 return VOS_STATUS_E_NOMEM;
5090 }
5091 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5092 if(NULL == pWdaParams)
5093 {
5094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005095 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005096 VOS_ASSERT(0);
5097 vos_mem_free(wdiRemoveStaKeyParam);
5098 return VOS_STATUS_E_NOMEM;
5099 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005100 /* copy remove STA key params to WDI structure*/
5101 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
5102 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
5103 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
5104 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
5105 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005106 /* Store remove key pointer, as this will be used for response */
5107 /* store Params pass it to WDI */
5108 pWdaParams->pWdaContext = pWDA;
5109 pWdaParams->wdaMsgParam = removeStaKeyParams;
5110 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005111 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
5112 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005113 if(IS_WDI_STATUS_FAILURE(status))
5114 {
5115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5116 "Failure in remove STA Key Req WDI API, free all the memory " );
5117 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5118 vos_mem_free(pWdaParams) ;
5119 removeStaKeyParams->status = eSIR_FAILURE ;
5120 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
5121 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005122 return CONVERT_WDI2VOS_STATUS(status) ;
5123}
Jeff Johnson295189b2012-06-20 16:38:30 -07005124/*
5125 * FUNCTION: WDA_IsHandleSetLinkStateReq
5126 * Update the WDA state and return the status to handle this message or not
5127 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005128WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
5129 tWDA_CbContext *pWDA,
5130 tLinkStateParams *linkStateParams)
5131{
5132 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005133 switch(linkStateParams->state)
5134 {
5135 case eSIR_LINK_PREASSOC_STATE:
5136 case eSIR_LINK_BTAMP_PREASSOC_STATE:
5137 /*
5138 * set the WDA state to PRE ASSOC
5139 * copy the BSSID into pWDA to use it in join request and return,
5140 * No need to handle these messages.
5141 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005142 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
5143 {
5144 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07005145 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005146 }
5147 else
5148 {
5149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005150 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005151 VOS_ASSERT(0);
5152 }
5153
5154 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
5155 {
5156 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07005157 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005158 }
5159 else
5160 {
5161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005162 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005163 VOS_ASSERT(0);
5164 }
5165
Jeff Johnson295189b2012-06-20 16:38:30 -07005166 /* UMAC is issuing the setlink state with PREASSOC twice (before set
5167 *channel and after ) so reset the WDA state to ready when the second
5168 * time UMAC issue the link state with PREASSOC
5169 */
5170 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
5171 {
5172 /* RESET WDA state back to WDA_READY_STATE */
5173 pWDA->wdaState = WDA_READY_STATE;
5174 }
5175 else
5176 {
5177 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
5178 }
5179 //populate linkState info in WDACbCtxt
5180 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07005181 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07005182 default:
5183 if(pWDA->wdaState != WDA_READY_STATE)
5184 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005185 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
5186 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
5187 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
5188 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
5189 *the ASSERT in WDA_Stop during module unload.*/
5190 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
5191 {
5192 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005193 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005194 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005195 else
5196 {
5197 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005198 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005199 status = WDA_IGNORE_SET_LINK_STATE;
5200 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005201 }
5202 break;
5203 }
5204
5205 return status;
5206}
Jeff Johnson295189b2012-06-20 16:38:30 -07005207/*
5208 * FUNCTION: WDA_SetLinkStateCallback
5209 * call back function for set link state from WDI
5210 */
5211void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
5212{
5213 tWDA_CbContext *pWDA;
5214 tLinkStateParams *linkStateParams;
5215 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005217 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005218 if(NULL == pWdaParams)
5219 {
5220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005221 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005222 VOS_ASSERT(0) ;
5223 return ;
5224 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005225 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -07005226 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005227 /*
5228 * In STA mode start the BA activity check timer after association
5229 * and in AP mode start BA activity check timer after BSS start */
5230 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
5231 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07005232 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
5233 ((status == WDI_STATUS_SUCCESS) &&
5234 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07005235 {
5236 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5237 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005238 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005239 /*
5240 * No respone required for WDA_SET_LINK_STATE so free the request
5241 * param here
5242 */
5243 if( pWdaParams != NULL )
5244 {
5245 if( pWdaParams->wdaWdiApiMsgParam != NULL )
5246 {
5247 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5248 }
5249 vos_mem_free(pWdaParams);
5250 }
5251 return ;
5252}
Jeff Johnson295189b2012-06-20 16:38:30 -07005253/*
5254 * FUNCTION: WDA_ProcessSetLinkState
5255 * Request to WDI to set the link status.
5256 */
5257VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
5258 tLinkStateParams *linkStateParams)
5259{
5260 WDI_Status status = WDI_STATUS_SUCCESS ;
5261 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
5262 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
5263 sizeof(WDI_SetLinkReqParamsType)) ;
5264 tWDA_ReqParams *pWdaParams ;
5265 tpAniSirGlobal pMac;
5266 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
5267
5268 if(NULL == pMac)
5269 {
5270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005271 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005272 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005273 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005274 return VOS_STATUS_E_FAILURE;
5275 }
5276
5277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005278 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005279 if(NULL == wdiSetLinkStateParam)
5280 {
5281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005282 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005283 VOS_ASSERT(0);
5284 return VOS_STATUS_E_NOMEM;
5285 }
5286 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5287 if(NULL == pWdaParams)
5288 {
5289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005290 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005291 VOS_ASSERT(0);
5292 vos_mem_free(wdiSetLinkStateParam);
5293 return VOS_STATUS_E_NOMEM;
5294 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005295 if(WDA_IGNORE_SET_LINK_STATE ==
5296 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
5297 {
5298 status = WDI_STATUS_E_FAILURE;
5299 }
5300 else
5301 {
5302 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
5303 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005304 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
5305 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005306 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
5307 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005308 pWdaParams->pWdaContext = pWDA;
5309 /* Store remove key pointer, as this will be used for response */
5310 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005311 /* store Params pass it to WDI */
5312 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
5313 /* Stop Timer only other than GO role and concurrent session */
5314 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07005315 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005316 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
5317 {
5318 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5319 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005320 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
5321 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005322 if(IS_WDI_STATUS_FAILURE(status))
5323 {
5324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5325 "Failure in set link state Req WDI API, free all the memory " );
5326 }
5327 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005328 if(IS_WDI_STATUS_FAILURE(status))
5329 {
5330 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07005331 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005332 vos_mem_free(pWdaParams);
5333 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005334 return CONVERT_WDI2VOS_STATUS(status) ;
5335}
Jeff Johnson295189b2012-06-20 16:38:30 -07005336/*
5337 * FUNCTION: WDA_GetStatsReqParamsCallback
5338 * send the response to PE with Stats received from WDI
5339 */
5340void WDA_GetStatsReqParamsCallback(
5341 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
5342 void* pUserData)
5343{
5344 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
5345 tAniGetPEStatsRsp *pGetPEStatsRspParams;
5346
5347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005348 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005349 pGetPEStatsRspParams =
5350 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
5351 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
5352
5353 if(NULL == pGetPEStatsRspParams)
5354 {
5355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005356 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005357 VOS_ASSERT(0);
5358 return;
5359 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005360 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
5361 pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType;
5362 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
5363 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005364
5365 //Fill the Session Id Properly in PE
5366 pGetPEStatsRspParams->sessionId = 0;
5367 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005368 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005369 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
5370 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005371 vos_mem_copy( pGetPEStatsRspParams + 1,
5372 wdiGetStatsRsp + 1,
5373 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005374 /* send response to UMAC*/
5375 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP, pGetPEStatsRspParams , 0) ;
5376
5377 return;
5378}
5379
Jeff Johnson295189b2012-06-20 16:38:30 -07005380/*
5381 * FUNCTION: WDA_ProcessGetStatsReq
5382 * Request to WDI to get the statistics
5383 */
5384VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
5385 tAniGetPEStatsReq *pGetStatsParams)
5386{
5387 WDI_Status status = WDI_STATUS_SUCCESS ;
5388 WDI_GetStatsReqParamsType wdiGetStatsParam;
5389 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005390 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005391 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005392 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
5393 pGetStatsParams->staId;
5394 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
5395 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005396 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005397 status = WDI_GetStatsReq(&wdiGetStatsParam,
5398 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005399 if(IS_WDI_STATUS_FAILURE(status))
5400 {
5401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5402 "Failure in Get Stats Req WDI API, free all the memory " );
5403 pGetPEStatsRspParams =
5404 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
5405 if(NULL == pGetPEStatsRspParams)
5406 {
5407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005408 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005409 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005410 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005411 return VOS_STATUS_E_NOMEM;
5412 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005413 pGetPEStatsRspParams->msgType = WDA_GET_STATISTICS_RSP;
5414 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
5415 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
5416 pGetPEStatsRspParams->rc = eSIR_FAILURE;
5417 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP,
5418 (void *)pGetPEStatsRspParams, 0) ;
5419 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005420 /* Free the request message */
5421 vos_mem_free(pGetStatsParams);
5422 return CONVERT_WDI2VOS_STATUS(status);
5423}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005424
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08005425#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005426/*
5427 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
5428 * send the response to PE with roam Rssi received from WDI
5429 */
5430void WDA_GetRoamRssiReqParamsCallback(
5431 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
5432 void* pUserData)
5433{
5434 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5435 tWDA_CbContext *pWDA = NULL;
5436 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5437 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
5438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5439 "<------ %s " ,__func__);
5440 if(NULL == pWdaParams)
5441 {
5442 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5443 "%s: pWdaParams received NULL", __func__);
5444 VOS_ASSERT(0) ;
5445 return ;
5446 }
5447 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5448 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
5449
5450 if(NULL == pGetRoamRssiReqParams)
5451 {
5452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5453 "%s: pGetRoamRssiReqParams received NULL", __func__);
5454 VOS_ASSERT(0);
5455 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5456 vos_mem_free(pWdaParams);
5457 return ;
5458 }
5459 pGetRoamRssiRspParams =
5460 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5461
5462 if(NULL == pGetRoamRssiRspParams)
5463 {
5464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5465 "%s: VOS MEM Alloc Failure", __func__);
5466 VOS_ASSERT(0);
5467 return;
5468 }
5469 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
5470 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005471 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005472 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
5473 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
5474
5475 /* Assign get roam rssi req (backup) in to the response */
5476 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
5477
5478 /* free WDI command buffer */
5479 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5480 vos_mem_free(pWdaParams) ;
5481
5482 /* send response to UMAC*/
5483 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
5484
5485 return;
5486}
5487
5488
5489
5490/*
5491 * FUNCTION: WDA_ProcessGetRoamRssiReq
5492 * Request to WDI to get the statistics
5493 */
5494VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
5495 tAniGetRssiReq *pGetRoamRssiParams)
5496{
5497 WDI_Status status = WDI_STATUS_SUCCESS ;
5498 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
5499 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5500 tWDA_ReqParams *pWdaParams = NULL;
5501
5502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5503 "------> %s " ,__func__);
5504 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
5505 pGetRoamRssiParams->staId;
5506 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
5507
5508 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5509 if(NULL == pWdaParams)
5510 {
5511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5512 "%s: VOS MEM Alloc Failure", __func__);
5513 VOS_ASSERT(0);
5514 return VOS_STATUS_E_NOMEM;
5515 }
5516
5517 /* Store Init Req pointer, as this will be used for response */
5518 pWdaParams->pWdaContext = pWDA;
5519
5520 /* Take Get roam Rssi req backup as it stores the callback to be called after
5521 receiving the response */
5522 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
5523 pWdaParams->wdaWdiApiMsgParam = NULL;
5524
5525 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
5526 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
5527 if(IS_WDI_STATUS_FAILURE(status))
5528 {
5529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5530 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
5531 pGetRoamRssiRspParams =
5532 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5533 if(NULL == pGetRoamRssiRspParams)
5534 {
5535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5536 "%s: VOS MEM Alloc Failure", __func__);
5537 VOS_ASSERT(0);
Abhishek Singh1e2bfa32014-01-02 15:44:15 +05305538 vos_mem_free(pGetRoamRssiParams);
5539 vos_mem_free(pWdaParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005540 return VOS_STATUS_E_NOMEM;
5541 }
5542 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
5543 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
5544 pGetRoamRssiRspParams->rssi = 0;
5545 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
5546 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
5547 (void *)pGetRoamRssiRspParams, 0) ;
5548 }
5549 return CONVERT_WDI2VOS_STATUS(status);
5550}
5551#endif
5552
5553
Jeff Johnson295189b2012-06-20 16:38:30 -07005554/*
5555 * FUNCTION: WDA_UpdateEDCAParamCallback
5556 * call back function for Update EDCA params from WDI
5557 */
5558void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
5559{
5560 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5561 tEdcaParams *pEdcaParams;
5562
5563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005564 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005565 if(NULL == pWdaParams)
5566 {
5567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005568 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005569 VOS_ASSERT(0) ;
5570 return ;
5571 }
5572 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005573 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5574 vos_mem_free(pWdaParams);
5575 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005576 return ;
5577}
Jeff Johnson295189b2012-06-20 16:38:30 -07005578/*
5579 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
5580 * Request to WDI to Update the EDCA params.
5581 */
5582VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
5583 tEdcaParams *pEdcaParams)
5584{
5585 WDI_Status status = WDI_STATUS_SUCCESS ;
5586 WDI_UpdateEDCAParamsType *wdiEdcaParam =
5587 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
5588 sizeof(WDI_UpdateEDCAParamsType)) ;
5589 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005591 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005592 if(NULL == wdiEdcaParam)
5593 {
5594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005595 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005596 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005597 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005598 return VOS_STATUS_E_NOMEM;
5599 }
5600 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5601 if(NULL == pWdaParams)
5602 {
5603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005604 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005605 VOS_ASSERT(0);
5606 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005607 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005608 return VOS_STATUS_E_NOMEM;
5609 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005610 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
Bansidhar Gopalachari5dcf9e02013-07-29 19:53:58 -07005611 /*
5612 Since firmware is not using highperformance flag, we have removed
5613 this flag from wdiEDCAInfo structure to match sizeof the structure
5614 between host and firmware.In future if we are planning to use
5615 highperformance flag then Please define this flag in wdiEDCAInfo
5616 structure, update it here and send it to firmware. i.e.
5617 Following is the original line which we removed as part of the fix
5618 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid =
5619 pEdcaParams->highPerformance;
5620 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005621 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
5622 &pEdcaParams->acbe);
5623 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
5624 &pEdcaParams->acbk);
5625 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
5626 &pEdcaParams->acvi);
5627 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
5628 &pEdcaParams->acvo);
5629 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005630 pWdaParams->pWdaContext = pWDA;
5631 /* Store remove key pointer, as this will be used for response */
5632 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005633 /* store Params pass it to WDI */
5634 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005635 status = WDI_UpdateEDCAParams(wdiEdcaParam,
5636 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005637 if(IS_WDI_STATUS_FAILURE(status))
5638 {
5639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5640 "Failure in Update EDCA Params WDI API, free all the memory " );
5641 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5642 vos_mem_free(pWdaParams);
5643 vos_mem_free(pEdcaParams);
5644 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005645 return CONVERT_WDI2VOS_STATUS(status) ;
5646}
Jeff Johnson295189b2012-06-20 16:38:30 -07005647/*
5648 * FUNCTION: WDA_AddBAReqCallback
5649 * send ADD BA RSP back to PE
5650 */
5651void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
5652 void* pUserData)
5653{
5654 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5655 tWDA_CbContext *pWDA;
5656 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005658 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005659 if(NULL == pWdaParams)
5660 {
5661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005662 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005663 VOS_ASSERT(0) ;
5664 return ;
5665 }
5666 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5667 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005668 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5669 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005670 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005671 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005672 return ;
5673}
5674
Jeff Johnson295189b2012-06-20 16:38:30 -07005675/*
5676 * FUNCTION: WDA_ProcessAddBAReq
5677 * Request to WDI to Update the ADDBA REQ params.
5678 */
5679VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
5680 tANI_U16 baSessionID, tANI_U8 staIdx, tAddBAParams *pAddBAReqParams)
5681{
Jeff Johnson43971f52012-07-17 12:26:56 -07005682 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005683 WDI_AddBAReqParamsType *wdiAddBAReqParam =
5684 (WDI_AddBAReqParamsType *)vos_mem_malloc(
5685 sizeof(WDI_AddBAReqParamsType)) ;
5686 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005688 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005689 if(NULL == wdiAddBAReqParam)
5690 {
5691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005692 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005693 VOS_ASSERT(0);
5694 return VOS_STATUS_E_NOMEM;
5695 }
5696 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5697 if(NULL == pWdaParams)
5698 {
5699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005700 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005701 VOS_ASSERT(0);
5702 vos_mem_free(wdiAddBAReqParam);
5703 return VOS_STATUS_E_NOMEM;
5704 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005705 do
5706 {
5707 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005708 wdiAddBaInfo->ucSTAIdx = staIdx ;
5709 wdiAddBaInfo->ucBaSessionID = baSessionID ;
5710 wdiAddBaInfo->ucWinSize = WDA_BA_MAX_WINSIZE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005711 } while(0) ;
5712 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005713 pWdaParams->pWdaContext = pWDA;
5714 /* store Params pass it to WDI */
5715 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
5716 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07005717 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
5718 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005719
Jeff Johnson43971f52012-07-17 12:26:56 -07005720 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07005721 {
5722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07005723 "Failure in ADD BA REQ Params WDI API, free all the memory" );
5724 status = CONVERT_WDI2VOS_STATUS(wstatus);
5725 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005726 vos_mem_free(pWdaParams);
5727 pAddBAReqParams->status = eSIR_FAILURE;
5728 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5729 }
Jeff Johnson43971f52012-07-17 12:26:56 -07005730 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07005731}
Jeff Johnson295189b2012-06-20 16:38:30 -07005732/*
5733 * FUNCTION: WDA_AddBASessionReqCallback
5734 * send ADD BA SESSION RSP back to PE/(or TL)
5735 */
5736void WDA_AddBASessionReqCallback(
5737 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
5738{
5739 VOS_STATUS status = VOS_STATUS_SUCCESS ;
5740 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5741 tWDA_CbContext *pWDA;
5742 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005744 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005745 if(NULL == pWdaParams)
5746 {
5747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005748 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005749 VOS_ASSERT(0) ;
5750 return ;
5751 }
5752 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5753 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005754 if( NULL == pAddBAReqParams )
5755 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005757 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005758 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005759 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5760 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005761 return ;
5762 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005763 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5764 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005765 /*
5766 * if WDA in update TL state, update TL with BA session parama and send
5767 * another request to HAL(/WDI) (ADD_BA_REQ)
5768 */
5769
5770 if((VOS_STATUS_SUCCESS ==
5771 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
5772 (WDA_BA_UPDATE_TL_STATE == pWDA->wdaState))
5773 {
5774 /* Update TL with BA info received from HAL/WDI */
5775 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
5776 wdiAddBaSession->usBaSessionID,
5777 wdiAddBaSession->ucSTAIdx,
5778 wdiAddBaSession->ucBaTID,
5779 wdiAddBaSession->ucBaBufferSize,
5780 wdiAddBaSession->ucWinSize,
5781 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07005782 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
5783 wdiAddBaSession->ucSTAIdx, pAddBAReqParams) ;
5784 }
5785 else
5786 {
5787 pAddBAReqParams->status =
5788 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
5789
5790 /* Setting Flag to indicate that Set BA is success */
5791 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
5792 {
5793 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
5794 tANI_U8 tid = wdiAddBaSession->ucBaTID;
5795 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
5796 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005797 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5798 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005799 /*Reset the WDA state to READY */
5800 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005801 return ;
5802}
5803
Jeff Johnson295189b2012-06-20 16:38:30 -07005804/*
5805 * FUNCTION: WDA_ProcessAddBASessionReq
5806 * Request to WDI to Update the ADDBA REQ params.
5807 */
5808VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
5809 tAddBAParams *pAddBAReqParams)
5810{
5811 WDI_Status status = WDI_STATUS_SUCCESS ;
5812 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
5813 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
5814 sizeof(WDI_AddBASessionReqParamsType)) ;
5815 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005816 WLANTL_STAStateType tlSTAState = 0;
5817
Jeff Johnson295189b2012-06-20 16:38:30 -07005818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005819 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005820 if(NULL == wdiAddBASessionReqParam)
5821 {
5822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005823 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005824 VOS_ASSERT(0);
5825 return VOS_STATUS_E_NOMEM;
5826 }
5827 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5828 if(NULL == pWdaParams)
5829 {
5830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005831 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005832 VOS_ASSERT(0);
5833 vos_mem_free(wdiAddBASessionReqParam);
5834 return VOS_STATUS_E_NOMEM;
5835 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005836 /*
5837 * Populate ADD BA parameters and pass these paarmeters to WDI.
5838 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
5839 * the state to track if these is BA recipient case or BA initiator
5840 * case.
5841 */
5842 do
5843 {
5844 WDI_AddBASessionReqinfoType *wdiBAInfoType =
5845 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
5846 /* vos_mem_copy(wdiBAInfoType->macBSSID,
5847 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
5848 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
5849 vos_mem_copy(wdiBAInfoType->macPeerAddr,
5850 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005851 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07005852 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
5853 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
5854 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
5855 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
5856 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005857 /* check the BA direction and update state accordingly */
5858 (eBA_RECIPIENT == wdiBAInfoType->ucBaDirection)
5859 ? (pWDA->wdaState = WDA_BA_UPDATE_TL_STATE)
5860 : (pWDA->wdaState = WDA_BA_UPDATE_LIM_STATE);
5861
5862 }while(0) ;
5863 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005864 pWdaParams->pWdaContext = pWDA;
5865 /* Store ADD BA pointer, as this will be used for response */
5866 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
5867 /* store Params pass it to WDI */
5868 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005869
5870 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
5871 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
5872 */
5873 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
5874 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
5875 {
5876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005877 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.", pAddBAReqParams->staIdx, tlSTAState );
Hoonki Leea0631ce2013-04-15 16:59:08 -07005878 status = WDI_STATUS_E_NOT_ALLOWED;
5879 pAddBAReqParams->status =
5880 CONVERT_WDI2SIR_STATUS(status) ;
5881 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5882 /*Reset the WDA state to READY */
5883 pWDA->wdaState = WDA_READY_STATE;
5884 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5885 vos_mem_free(pWdaParams);
5886
5887 return CONVERT_WDI2VOS_STATUS(status) ;
5888 }
5889
Jeff Johnson295189b2012-06-20 16:38:30 -07005890 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
5891 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005892 if(IS_WDI_STATUS_FAILURE(status))
5893 {
5894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005895 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d", status);
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07005896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005897 "Send ADD BA failure response to PE");
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07005898 pAddBAReqParams->status =
5899 CONVERT_WDI2SIR_STATUS(status) ;
5900 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005901 /*Reset the WDA state to READY */
5902 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005903 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005904 vos_mem_free(pWdaParams);
5905 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005906 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005907}
Jeff Johnson295189b2012-06-20 16:38:30 -07005908/*
5909 * FUNCTION: WDA_DelBANotifyTL
5910 * send DEL BA IND to TL
5911 */
5912void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
5913 tDelBAParams *pDelBAReqParams)
5914{
5915 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
5916 //tSirMsgQ msg;
5917 vos_msg_t vosMsg;
5918 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005919 if(NULL == pDelBAInd)
5920 {
5921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005922 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005923 VOS_ASSERT(0) ;
5924 return;
5925 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005926 pDelBAInd->mesgType = WDA_DELETEBA_IND;
5927 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
5928 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
5929 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07005930
Jeff Johnson295189b2012-06-20 16:38:30 -07005931
5932 vosMsg.type = WDA_DELETEBA_IND;
5933 vosMsg.bodyptr = pDelBAInd;
5934 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
5935 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
5936 {
5937 vosStatus = VOS_STATUS_E_BADMSG;
5938 }
5939}
Jeff Johnson295189b2012-06-20 16:38:30 -07005940/*
5941 * FUNCTION: WDA_DelBAReqCallback
5942 * send DEL BA RSP back to PE
5943 */
5944void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
5945{
5946 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5947 tWDA_CbContext *pWDA;
5948 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005950 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005951 if(NULL == pWdaParams)
5952 {
5953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005954 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005955 VOS_ASSERT(0) ;
5956 return ;
5957 }
5958 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5959 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005960 /* Notify TL about DEL BA in case of recipinet */
5961 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
5962 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
5963 {
5964 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
5965 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005966 /*
5967 * No respone required for WDA_DELBA_IND so just free the request
5968 * param here
5969 */
5970 vos_mem_free(pDelBAReqParams);
5971 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5972 vos_mem_free(pWdaParams);
5973 return ;
5974}
5975
Jeff Johnson295189b2012-06-20 16:38:30 -07005976/*
5977 * FUNCTION: WDA_ProcessDelBAReq
5978 * Request to WDI to Update the DELBA REQ params.
5979 */
5980VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
5981 tDelBAParams *pDelBAReqParams)
5982{
5983 WDI_Status status = WDI_STATUS_SUCCESS ;
5984 WDI_DelBAReqParamsType *wdiDelBAReqParam =
5985 (WDI_DelBAReqParamsType *)vos_mem_malloc(
5986 sizeof(WDI_DelBAReqParamsType)) ;
5987 tWDA_ReqParams *pWdaParams ;
5988 tANI_U16 staIdx = 0;
5989 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005991 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005992 if(NULL == wdiDelBAReqParam)
5993 {
5994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005995 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005996 VOS_ASSERT(0);
5997 return VOS_STATUS_E_NOMEM;
5998 }
5999 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6000 if(NULL == pWdaParams)
6001 {
6002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006003 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006004 VOS_ASSERT(0);
6005 vos_mem_free(wdiDelBAReqParam);
6006 return VOS_STATUS_E_NOMEM;
6007 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006008 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
6009 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
6010 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
6011 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006012 pWdaParams->pWdaContext = pWDA;
6013 /* Store DEL BA pointer, as this will be used for response */
6014 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006015 /* store Params pass it to WDI */
6016 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006017 /* if BA exchange over the air is failed, clear this tid in BaBitmap
6018 * maintained in WDA, so that WDA can retry for another BA session
6019 */
6020 staIdx = pDelBAReqParams->staIdx;
6021 tid = pDelBAReqParams->baTID;
6022 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07006023 status = WDI_DelBAReq(wdiDelBAReqParam,
6024 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006025 if(IS_WDI_STATUS_FAILURE(status))
6026 {
6027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6028 "Failure in DEL BA REQ Params WDI API, free all the memory " );
6029 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6030 vos_mem_free(pWdaParams->wdaMsgParam);
6031 vos_mem_free(pWdaParams);
6032 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006033 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006034}
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006035
6036/*
6037 * FUNCTION: WDA_UpdateChReqCallback
6038 *
6039 */
6040void WDA_UpdateChReqCallback(WDI_Status status, void* pUserData)
6041{
6042 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6043 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam =
6044 (WDI_UpdateChReqParamsType *)pWdaParams->wdaWdiApiMsgParam;
6045 WDI_UpdateChannelReqType *pwdiUpdateChanReqType =
6046 &pwdiUpdateChReqParam->wdiUpdateChanParams;
6047 WDI_UpdateChannelReqinfoType *pChanInfoType =
6048 pwdiUpdateChanReqType->pchanParam;
6049 tSirUpdateChanList *pChanList =
6050 (tSirUpdateChanList *)pWdaParams->wdaMsgParam;
6051
6052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6053 "<------ %s " ,__func__);
6054 if(NULL == pWdaParams)
6055 {
6056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6057 "%s: pWdaParams received NULL", __func__);
6058 VOS_ASSERT(0);
6059 return;
6060 }
6061
6062 /*
6063 * currently there is no response message is expected between PE and
6064 * WDA, Failure return from WDI is a ASSERT condition
6065 */
6066 vos_mem_free(pChanInfoType);
6067 vos_mem_free(pChanList);
6068 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6069 vos_mem_free(pWdaParams);
6070
6071 return;
6072}
6073
6074/*
6075 * FUNCTION: WDA_ProcessUpdateChannelList
6076 * Request to WDI to Update the ChannelList params.
6077 */
6078VOS_STATUS WDA_ProcessUpdateChannelList(tWDA_CbContext *pWDA,
6079 tSirUpdateChanList *pChanList)
6080{
6081 WDI_Status status = WDI_STATUS_SUCCESS;
6082 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
6083 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
6084 WDI_UpdateChannelReqinfoType *pChanInfoType;
6085 tWDA_ReqParams *pWdaParams;
6086 wpt_uint8 i;
6087
6088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6089 "------> %s " ,__func__);
6090 if(NULL == pChanList)
6091 {
6092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6093 "%s: NULL pChanList", __func__);
6094 VOS_ASSERT(0);
6095 return VOS_STATUS_E_INVAL;
6096 }
6097
6098 if(!WDA_getFwWlanFeatCaps(UPDATE_CHANNEL_LIST))
6099 {
6100 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6101 "Update channel list capability Not Supported");
6102 vos_mem_free(pChanList);
6103 return VOS_STATUS_E_INVAL;
6104 }
6105
6106 pwdiUpdateChReqParam = (WDI_UpdateChReqParamsType *)vos_mem_malloc(
6107 sizeof(WDI_UpdateChReqParamsType));
6108 if(NULL == pwdiUpdateChReqParam)
6109 {
6110 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6111 "%s: VOS MEM Alloc Failed for WDI_UpdateChReqParamsType",
6112 __func__);
6113 VOS_ASSERT(0);
6114 vos_mem_free(pChanList);
6115 return VOS_STATUS_E_NOMEM;
6116 }
6117 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
6118 pChanInfoType = (WDI_UpdateChannelReqinfoType *)
6119 vos_mem_malloc(sizeof(WDI_UpdateChannelReqinfoType) *
6120 pChanList->numChan);
6121 if(NULL == pChanInfoType)
6122 {
6123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6124 "%s: VOS MEM Alloc Failure", __func__);
6125 VOS_ASSERT(0);
6126 vos_mem_free(pChanList);
6127 vos_mem_free(pwdiUpdateChReqParam);
6128 return VOS_STATUS_E_NOMEM;
6129 }
6130 vos_mem_zero(pChanInfoType, sizeof(WDI_UpdateChannelReqinfoType)
6131 * pChanList->numChan);
6132 pwdiUpdateChanReqType->pchanParam = pChanInfoType;
6133
6134 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
6135 if(NULL == pWdaParams)
6136 {
6137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6138 "%s: VOS MEM Alloc Failure", __func__);
6139 VOS_ASSERT(0);
6140 vos_mem_free(pChanList);
6141 vos_mem_free(pChanInfoType);
6142 vos_mem_free(pwdiUpdateChReqParam);
6143 return VOS_STATUS_E_NOMEM;
6144 }
6145 pwdiUpdateChanReqType->numchan = pChanList->numChan;
6146
6147 for(i = 0; i < pwdiUpdateChanReqType->numchan; i++)
6148 {
6149 pChanInfoType->mhz =
6150 vos_chan_to_freq(pChanList->chanParam[i].chanId);
6151
6152 pChanInfoType->band_center_freq1 = pChanInfoType->mhz;
6153 pChanInfoType->band_center_freq2 = 0;
6154
6155 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6156 "chan[%d] = %u", i, pChanInfoType->mhz);
6157 if (pChanList->chanParam[i].dfsSet)
6158 {
6159 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_PASSIVE);
6160 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6161 "chan[%d] DFS[%d]", pChanList->chanParam[i].chanId,
6162 pChanList->chanParam[i].dfsSet);
6163 }
6164
6165 if (pChanInfoType->mhz < WDA_2_4_GHZ_MAX_FREQ)
6166 {
6167 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11G);
6168 }
6169 else
6170 {
6171 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11A);
6172 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_HT);
6173 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_VHT);
6174 }
6175
6176 WDA_SET_CHANNEL_MAX_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
6177 WDA_SET_CHANNEL_REG_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
6178
6179 pChanInfoType++;
6180 }
6181
6182 pwdiUpdateChReqParam->wdiReqStatusCB = NULL;
6183 pWdaParams->pWdaContext = pWDA;
6184 pWdaParams->wdaMsgParam = (void *)pChanList;
6185 /* store Params pass it to WDI */
6186 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiUpdateChReqParam;
6187 status = WDI_UpdateChannelReq(pwdiUpdateChReqParam,
6188 (WDI_UpdateChannelRspCb)WDA_UpdateChReqCallback, pWdaParams);
6189 if(IS_WDI_STATUS_FAILURE(status))
6190 {
6191 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6192 "Failure in Update Channel REQ Params WDI API, free all the memory");
6193 vos_mem_free(pwdiUpdateChanReqType->pchanParam);
6194 vos_mem_free(pwdiUpdateChReqParam);
6195 vos_mem_free(pWdaParams->wdaMsgParam);
6196 vos_mem_free(pWdaParams);
6197 }
6198 return CONVERT_WDI2VOS_STATUS(status);
6199}
6200
Jeff Johnson295189b2012-06-20 16:38:30 -07006201/*
6202 * FUNCTION: WDA_AddTSReqCallback
6203 * send ADD TS RSP back to PE
6204 */
6205void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
6206{
6207 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6208 tWDA_CbContext *pWDA;
6209 tAddTsParams *pAddTsReqParams;
6210
6211 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006212 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006213 if(NULL == pWdaParams)
6214 {
6215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006216 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006217 VOS_ASSERT(0) ;
6218 return ;
6219 }
6220 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6221 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
6222 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6223 vos_mem_free(pWdaParams);
6224
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006225 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006226 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006227 return ;
6228}
6229
Jeff Johnson295189b2012-06-20 16:38:30 -07006230/*
6231 * FUNCTION: WDA_ProcessAddTSReq
6232 * Request to WDI to Update the ADD TS REQ params.
6233 */
6234VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
6235 tAddTsParams *pAddTsReqParams)
6236{
6237 WDI_Status status = WDI_STATUS_SUCCESS ;
6238 WDI_AddTSReqParamsType *wdiAddTSReqParam =
6239 (WDI_AddTSReqParamsType *)vos_mem_malloc(
6240 sizeof(WDI_AddTSReqParamsType)) ;
6241 tWDA_ReqParams *pWdaParams ;
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 == wdiAddTSReqParam)
6245 {
6246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006247 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006248 VOS_ASSERT(0);
6249 return VOS_STATUS_E_NOMEM;
6250 }
6251 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6252 if(NULL == pWdaParams)
6253 {
6254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006255 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006256 VOS_ASSERT(0);
6257 vos_mem_free(wdiAddTSReqParam);
6258 return VOS_STATUS_E_NOMEM;
6259 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006260 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
6261 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006262 //TS IE
6263 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
6264 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
6265 pAddTsReqParams->tspec.length;
6266
6267 //TS IE : TS INFO : TRAFFIC
6268 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
6269 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
6270 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
6271 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
6272 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
6273 pAddTsReqParams->tspec.tsinfo.traffic.psb;
6274 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
6275 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
6276 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
6277 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
6278 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
6279 pAddTsReqParams->tspec.tsinfo.traffic.direction;
6280 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
6281 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
6282 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
6283 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
6284
6285 //TS IE : TS INFO : SCHEDULE
6286 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
6287 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
6288 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
6289 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07006290 //TS IE
6291 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
6292 pAddTsReqParams->tspec.nomMsduSz;
6293 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
6294 pAddTsReqParams->tspec.maxMsduSz;
6295 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
6296 pAddTsReqParams->tspec.minSvcInterval;
6297 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
6298 pAddTsReqParams->tspec.maxSvcInterval;
6299 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
6300 pAddTsReqParams->tspec.inactInterval;
6301 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
6302 pAddTsReqParams->tspec.suspendInterval;
6303 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
6304 pAddTsReqParams->tspec.svcStartTime;
6305 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
6306 pAddTsReqParams->tspec.minDataRate;
6307 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
6308 pAddTsReqParams->tspec.meanDataRate;
6309 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
6310 pAddTsReqParams->tspec.peakDataRate;
6311 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
6312 pAddTsReqParams->tspec.maxBurstSz;
6313 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
6314 pAddTsReqParams->tspec.delayBound;
6315 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
6316 pAddTsReqParams->tspec.minPhyRate;
6317 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
6318 pAddTsReqParams->tspec.surplusBw;
6319 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
6320 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07006321 /* TODO: tAddTsParams doesn't have the following fields */
6322#if 0
6323 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
6324 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
6325 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
6326 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
6327#endif
6328 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
6329
6330 pWdaParams->pWdaContext = pWDA;
6331 /* Store ADD TS pointer, as this will be used for response */
6332 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006333 /* store Params pass it to WDI */
6334 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006335 status = WDI_AddTSReq(wdiAddTSReqParam,
6336 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006337 if(IS_WDI_STATUS_FAILURE(status))
6338 {
6339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6340 "Failure in ADD TS REQ Params WDI API, free all the memory " );
6341 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6342 vos_mem_free(pWdaParams);
6343 pAddTsReqParams->status = eSIR_FAILURE ;
6344 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
6345 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006346 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006347}
6348
Jeff Johnson295189b2012-06-20 16:38:30 -07006349/*
6350 * FUNCTION: WDA_DelTSReqCallback
6351 * send DEL TS RSP back to PE
6352 */
6353void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
6354{
6355 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006357 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006358 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6359 vos_mem_free(pWdaParams->wdaMsgParam) ;
6360 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006361 /*
6362 * No respone required for WDA_DEL_TS_REQ so just free the request
6363 * param here
6364 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006365 return ;
6366}
6367
Jeff Johnson295189b2012-06-20 16:38:30 -07006368/*
6369 * FUNCTION: WDA_ProcessDelTSReq
6370 * Request to WDI to Update the DELTS REQ params.
6371 */
6372VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
6373 tDelTsParams *pDelTSReqParams)
6374{
6375 WDI_Status status = WDI_STATUS_SUCCESS ;
6376 WDI_DelTSReqParamsType *wdiDelTSReqParam =
6377 (WDI_DelTSReqParamsType *)vos_mem_malloc(
6378 sizeof(WDI_DelTSReqParamsType)) ;
6379 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006381 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006382 if(NULL == wdiDelTSReqParam)
6383 {
6384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006385 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006386 VOS_ASSERT(0);
6387 return VOS_STATUS_E_NOMEM;
6388 }
6389 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6390 if(NULL == pWdaParams)
6391 {
6392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006393 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006394 VOS_ASSERT(0);
6395 vos_mem_free(wdiDelTSReqParam);
6396 return VOS_STATUS_E_NOMEM;
6397 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006398 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
6399 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
6400 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
6401 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
6402 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006403 pWdaParams->pWdaContext = pWDA;
6404 /* Store DEL TS pointer, as this will be used for response */
6405 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006406 /* store Params pass it to WDI */
6407 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006408 status = WDI_DelTSReq(wdiDelTSReqParam,
6409 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006410 if(IS_WDI_STATUS_FAILURE(status))
6411 {
6412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6413 "Failure in DEL TS REQ Params WDI API, free all the memory " );
6414 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6415 vos_mem_free(pWdaParams->wdaMsgParam);
6416 vos_mem_free(pWdaParams);
6417 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006418 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006419}
Jeff Johnson295189b2012-06-20 16:38:30 -07006420/*
6421 * FUNCTION: WDA_UpdateBeaconParamsCallback
6422 * Free the memory. No need to send any response to PE in this case
6423 */
6424void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
6425{
6426 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006428 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006429 if(NULL == pWdaParams)
6430 {
6431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006432 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006433 VOS_ASSERT(0) ;
6434 return ;
6435 }
6436 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6437 vos_mem_free(pWdaParams->wdaMsgParam) ;
6438 vos_mem_free(pWdaParams);
6439 /*
6440 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
6441 * param here
6442 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006443 return ;
6444}
Jeff Johnson295189b2012-06-20 16:38:30 -07006445/*
6446 * FUNCTION: WDA_ProcessUpdateBeaconParams
6447 * Request to WDI to send the beacon parameters to HAL to update the Hardware
6448 */
6449VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
6450 tUpdateBeaconParams *pUpdateBeaconParams)
6451{
6452 WDI_Status status = WDI_STATUS_SUCCESS ;
6453 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
6454 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
6455 sizeof(WDI_UpdateBeaconParamsType)) ;
6456 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006458 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006459 if(NULL == wdiUpdateBeaconParams)
6460 {
6461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006462 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006463 VOS_ASSERT(0);
6464 return VOS_STATUS_E_NOMEM;
6465 }
6466 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6467 if(NULL == pWdaParams)
6468 {
6469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006470 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006471 VOS_ASSERT(0);
6472 vos_mem_free(wdiUpdateBeaconParams);
6473 return VOS_STATUS_E_NOMEM;
6474 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006475 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
6476 pUpdateBeaconParams->bssIdx;
6477 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
6478 pUpdateBeaconParams->fShortPreamble;
6479 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
6480 pUpdateBeaconParams->fShortSlotTime;
6481 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
6482 pUpdateBeaconParams->beaconInterval;
6483 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
6484 pUpdateBeaconParams->llaCoexist;
6485 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
6486 pUpdateBeaconParams->llbCoexist;
6487 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
6488 pUpdateBeaconParams->llgCoexist;
6489 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
6490 pUpdateBeaconParams->ht20MhzCoexist;
6491 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
6492 pUpdateBeaconParams->llnNonGFCoexist;
6493 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
6494 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
6495 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
6496 pUpdateBeaconParams->fRIFSMode;
6497 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
6498 pUpdateBeaconParams->paramChangeBitmap;
6499 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
6500
6501 pWdaParams->pWdaContext = pWDA;
6502 /* Store UpdateBeacon Req pointer, as this will be used for response */
6503 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006504 /* store Params pass it to WDI */
6505 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006506 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
6507 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
6508 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006509 if(IS_WDI_STATUS_FAILURE(status))
6510 {
6511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6512 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
6513 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6514 vos_mem_free(pWdaParams->wdaMsgParam);
6515 vos_mem_free(pWdaParams);
6516 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006517 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006518}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08006519#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -07006520/*
6521 * FUNCTION: WDA_TSMStatsReqCallback
6522 * send TSM Stats RSP back to PE
6523 */
6524void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
6525{
6526 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6527 tWDA_CbContext *pWDA = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006528 tpAniGetTsmStatsRsp pTsmRspParams = NULL;
6529 tpAniGetTsmStatsReq pGetTsmStatsReqParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006530
6531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006532 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006533 if(NULL == pWdaParams)
6534 {
6535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006536 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006537 VOS_ASSERT(0) ;
6538 return ;
6539 }
6540 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006541 pGetTsmStatsReqParams = (tAniGetTsmStatsReq *)pWdaParams->wdaMsgParam;
6542
6543 if(NULL == pGetTsmStatsReqParams)
6544 {
6545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6546 "%s: pGetTsmStatsReqParams received NULL", __func__);
6547 VOS_ASSERT(0);
6548 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6549 vos_mem_free(pWdaParams);
6550 return;
6551 }
6552
6553 pTsmRspParams =
6554 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
Jeff Johnson295189b2012-06-20 16:38:30 -07006555 if( NULL == pTsmRspParams )
6556 {
6557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006558 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006559 VOS_ASSERT( 0 );
6560 return ;
6561 }
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006562 vos_mem_set(pTsmRspParams, sizeof(tAniGetTsmStatsRsp), 0);
6563 pTsmRspParams->rc = pwdiTSMStatsRspParams->wdiStatus;
6564 pTsmRspParams->staId = pGetTsmStatsReqParams->staId;
6565
Jeff Johnson295189b2012-06-20 16:38:30 -07006566 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
6567 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
6568 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
6569 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
6570 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
6571 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
6572 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
6573 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
6574 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
6575 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006576
6577 /* Assign get tsm stats req req (backup) in to the response */
6578 pTsmRspParams->tsmStatsReq = pGetTsmStatsReqParams;
6579
6580 /* free WDI command buffer */
6581 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6582 vos_mem_free(pWdaParams);
6583
Jeff Johnson295189b2012-06-20 16:38:30 -07006584 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006585 return ;
6586}
6587
6588
Jeff Johnson295189b2012-06-20 16:38:30 -07006589/*
6590 * FUNCTION: WDA_ProcessTsmStatsReq
6591 * Request to WDI to get the TSM Stats params.
6592 */
6593VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006594 tpAniGetTsmStatsReq pTsmStats)
Jeff Johnson295189b2012-06-20 16:38:30 -07006595{
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006596 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006597 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006598 tWDA_ReqParams *pWdaParams = NULL;
6599 tAniGetTsmStatsRsp *pGetTsmStatsRspParams = NULL;
6600
Jeff Johnson295189b2012-06-20 16:38:30 -07006601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006602 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006603 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
6604 sizeof(WDI_TSMStatsReqParamsType));
6605 if(NULL == wdiTSMReqParam)
6606 {
6607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006608 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006609 VOS_ASSERT(0);
6610 return VOS_STATUS_E_NOMEM;
6611 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006612 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6613 if(NULL == pWdaParams)
6614 {
6615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006616 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006617 VOS_ASSERT(0);
6618 vos_mem_free(wdiTSMReqParam);
6619 return VOS_STATUS_E_NOMEM;
6620 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006621 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
6622 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
6623 pTsmStats->bssId,
6624 sizeof(wpt_macAddr));
6625 wdiTSMReqParam->wdiReqStatusCB = NULL ;
6626
6627 pWdaParams->pWdaContext = pWDA;
6628 /* Store TSM Stats pointer, as this will be used for response */
6629 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006630 pWdaParams->wdaWdiApiMsgParam = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006631 status = WDI_TSMStatsReq(wdiTSMReqParam,
6632 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006633 if(IS_WDI_STATUS_FAILURE(status))
6634 {
6635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6636 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006637 vos_mem_free(pWdaParams);
6638
6639 pGetTsmStatsRspParams =
6640 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
6641 if(NULL == pGetTsmStatsRspParams)
6642 {
6643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6644 "%s: VOS MEM Alloc Failure", __func__);
6645 VOS_ASSERT(0);
6646 vos_mem_free(pTsmStats);
6647 return VOS_STATUS_E_NOMEM;
6648 }
6649 pGetTsmStatsRspParams->staId = pTsmStats->staId;
6650 pGetTsmStatsRspParams->rc = eSIR_FAILURE;
6651 pGetTsmStatsRspParams->tsmStatsReq = pTsmStats;
6652
6653 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pGetTsmStatsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006654 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006655 return CONVERT_WDI2VOS_STATUS(status) ;
6656}
6657#endif
6658/*
6659 * FUNCTION: WDA_SendBeaconParamsCallback
6660 * No need to send any response to PE in this case
6661 */
6662void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
6663{
6664
Jeff Johnson295189b2012-06-20 16:38:30 -07006665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006666 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006667 return ;
6668}
Jeff Johnson295189b2012-06-20 16:38:30 -07006669/*
6670 * FUNCTION: WDA_ProcessSendBeacon
6671 * Request to WDI to send the beacon template to HAL to update the TPE memory and
6672 * start beacon trasmission
6673 */
6674VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
6675 tSendbeaconParams *pSendbeaconParams)
6676{
6677 WDI_Status status = WDI_STATUS_SUCCESS ;
6678 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006680 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006681 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
6682 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
6683 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
6684 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07006685 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
6686 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05306687 /* p2pIeOffset should be atleast greater than timIeOffset */
6688 if ((pSendbeaconParams->p2pIeOffset != 0) &&
6689 (pSendbeaconParams->p2pIeOffset <
6690 pSendbeaconParams->timIeOffset))
6691 {
6692 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6693 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
6694 VOS_ASSERT( 0 );
6695 return WDI_STATUS_E_FAILURE;
6696 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006697 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
6698 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07006699 /* Copy the beacon template to local buffer */
6700 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
6701 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
6702 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
6703
Jeff Johnson295189b2012-06-20 16:38:30 -07006704 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
6705 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006706 if(IS_WDI_STATUS_FAILURE(status))
6707 {
6708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6709 "Failure in SEND BEACON REQ Params WDI API" );
6710 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006711 vos_mem_free(pSendbeaconParams);
6712 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07006713}
Jeff Johnson295189b2012-06-20 16:38:30 -07006714/*
6715 * FUNCTION: WDA_UpdateProbeRspParamsCallback
6716 * No need to send any response to PE in this case
6717 */
6718void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
6719{
Jeff Johnson295189b2012-06-20 16:38:30 -07006720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006721 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006722 return ;
6723}
6724
Jeff Johnson295189b2012-06-20 16:38:30 -07006725/*
6726 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
6727 * Request to WDI to send the probe response template to HAL to update the TPE memory and
6728 * send probe response
6729 */
6730VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
6731 tSendProbeRespParams *pSendProbeRspParams)
6732{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006733 WDI_Status status = WDI_STATUS_SUCCESS;
6734 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
6735 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006737 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006738
6739 if (!wdiSendProbeRspParam)
6740 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
6741
Jeff Johnson295189b2012-06-20 16:38:30 -07006742 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006743 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07006744 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006745 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07006746 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07006747 /* Copy the Probe Response template to local buffer */
6748 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006749 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07006750 pSendProbeRspParams->pProbeRespTemplate,
6751 pSendProbeRspParams->probeRespTemplateLen);
6752 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006753 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07006754 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
6755 WDI_PROBE_REQ_BITMAP_IE_LEN);
6756
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006757 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006758
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006759 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07006760 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006761 if(IS_WDI_STATUS_FAILURE(status))
6762 {
6763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6764 "Failure in SEND Probe RSP Params WDI API" );
6765 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006766 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006767 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006768 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07006769}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08006770#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -07006771/*
6772 * FUNCTION: WDA_SetMaxTxPowerCallBack
6773 * send the response to PE with power value received from WDI
6774 */
6775void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
6776 void* pUserData)
6777{
6778 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6779 tWDA_CbContext *pWDA = NULL;
6780 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
6781
6782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006783 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006784 if(NULL == pWdaParams)
6785 {
6786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006787 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006788 VOS_ASSERT(0) ;
6789 return ;
6790 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006791 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6792 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006793 if( NULL == pMaxTxPowerParams )
6794 {
6795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006796 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07006797 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006798 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6799 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006800 return ;
6801 }
Jeff Johnsone7245742012-09-05 17:12:55 -07006802
Jeff Johnson295189b2012-06-20 16:38:30 -07006803
6804 /*need to free memory for the pointers used in the
6805 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07006806 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6807 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006808 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07006809
Jeff Johnson295189b2012-06-20 16:38:30 -07006810
6811 /* send response to UMAC*/
6812 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
6813
6814 return;
6815}
Jeff Johnson295189b2012-06-20 16:38:30 -07006816/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006817 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07006818 * Request to WDI to send set Max Tx Power Request
6819 */
6820 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
6821 tMaxTxPowerParams *MaxTxPowerParams)
6822{
6823 WDI_Status status = WDI_STATUS_SUCCESS;
6824 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
6825 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006826
Jeff Johnson295189b2012-06-20 16:38:30 -07006827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006828 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006829
Jeff Johnson295189b2012-06-20 16:38:30 -07006830 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
6831 sizeof(WDI_SetMaxTxPowerParamsType));
6832 if(NULL == wdiSetMaxTxPowerParams)
6833 {
6834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006835 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006836 VOS_ASSERT(0);
6837 return VOS_STATUS_E_NOMEM;
6838 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006839 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6840 if(NULL == pWdaParams)
6841 {
6842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006843 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006844 vos_mem_free(wdiSetMaxTxPowerParams);
6845 VOS_ASSERT(0);
6846 return VOS_STATUS_E_NOMEM;
6847 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006848 /* Copy.Max.Tx.Power Params to WDI structure */
6849 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
6850 MaxTxPowerParams->bssId,
6851 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006852 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
6853 MaxTxPowerParams->selfStaMacAddr,
6854 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006855 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
6856 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07006857 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006858 pWdaParams->pWdaContext = pWDA;
6859 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006860 /* store Params pass it to WDI */
6861 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006862 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
6863 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006864 if(IS_WDI_STATUS_FAILURE(status))
6865 {
6866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6867 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
6868 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6869 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006870 /* send response to UMAC*/
6871 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006872 }
6873 return CONVERT_WDI2VOS_STATUS(status);
6874
6875}
Jeff Johnson295189b2012-06-20 16:38:30 -07006876#endif
schang86c22c42013-03-13 18:41:24 -07006877
6878/*
Arif Hussaina5ebce02013-08-09 15:09:58 -07006879 * FUNCTION: WDA_SetMaxTxPowerPerBandCallBack
6880 * send the response to PE with power value received from WDI
6881 */
6882void WDA_SetMaxTxPowerPerBandCallBack(WDI_SetMaxTxPowerPerBandRspMsg
6883 *pwdiSetMaxTxPowerPerBandRsp,
6884 void* pUserData)
6885{
6886 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6887 tWDA_CbContext *pWDA = NULL;
6888 tMaxTxPowerPerBandParams *pMxTxPwrPerBandParams = NULL;
6889
6890 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6891 "<------ %s ", __func__);
6892 if (NULL == pWdaParams)
6893 {
6894 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6895 "%s: pWdaParams received NULL", __func__);
6896 VOS_ASSERT(0);
6897 return ;
6898 }
6899 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6900 pMxTxPwrPerBandParams = (tMaxTxPowerPerBandParams*)pWdaParams->wdaMsgParam;
6901 if ( NULL == pMxTxPwrPerBandParams )
6902 {
6903 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6904 "%s: pMxTxPwrPerBandParams received NULL ", __func__);
6905 VOS_ASSERT(0);
6906 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6907 vos_mem_free(pWdaParams);
6908 return;
6909 }
6910
6911 /*need to free memory for the pointers used in the
6912 WDA Process.Set Max Tx Power Req function*/
6913 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6914 vos_mem_free(pWdaParams);
6915 pMxTxPwrPerBandParams->power = pwdiSetMaxTxPowerPerBandRsp->ucPower;
6916
6917 /* send response to UMAC*/
6918 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
6919 pMxTxPwrPerBandParams, 0);
6920
6921 return;
6922}
6923
6924/*
6925 * FUNCTION: WDA_ProcessSetMaxTxPowerPerBandReq
6926 * Request to WDI to send set Max Tx Power Per band Request
6927 */
6928 VOS_STATUS WDA_ProcessSetMaxTxPowerPerBandReq(tWDA_CbContext *pWDA,
6929 tMaxTxPowerPerBandParams
6930 *MaxTxPowerPerBandParams)
6931{
6932 WDI_Status status = WDI_STATUS_SUCCESS;
6933 WDI_SetMaxTxPowerPerBandParamsType *wdiSetMxTxPwrPerBandParams = NULL;
6934 tWDA_ReqParams *pWdaParams = NULL;
6935
6936 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6937 "------> %s ", __func__);
6938
6939 wdiSetMxTxPwrPerBandParams = vos_mem_malloc(
6940 sizeof(WDI_SetMaxTxPowerPerBandParamsType));
6941
6942 if (NULL == wdiSetMxTxPwrPerBandParams)
6943 {
6944 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6945 "%s: VOS MEM Alloc Failure", __func__);
6946 VOS_ASSERT(0);
6947 return VOS_STATUS_E_NOMEM;
6948 }
6949 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
6950 if (NULL == pWdaParams)
6951 {
6952 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6953 "%s: VOS MEM Alloc Failure", __func__);
6954 vos_mem_free(wdiSetMxTxPwrPerBandParams);
6955 VOS_ASSERT(0);
6956 return VOS_STATUS_E_NOMEM;
6957 }
6958 /* Copy.Max.Tx.Power.Per.Band Params to WDI structure */
6959 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.bandInfo = \
6960 MaxTxPowerPerBandParams->bandInfo;
6961 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.ucPower = \
6962 MaxTxPowerPerBandParams->power;
6963 wdiSetMxTxPwrPerBandParams->wdiReqStatusCB = NULL;
6964 pWdaParams->pWdaContext = pWDA;
6965 pWdaParams->wdaMsgParam = (void *)MaxTxPowerPerBandParams;
6966 /* store Params pass it to WDI */
6967 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMxTxPwrPerBandParams;
6968 status = WDI_SetMaxTxPowerPerBandReq(wdiSetMxTxPwrPerBandParams,
6969 WDA_SetMaxTxPowerPerBandCallBack,
6970 pWdaParams);
6971 if (IS_WDI_STATUS_FAILURE(status))
6972 {
6973 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6974 "Failure in SET MAX TX Power REQ Params WDI API,"
6975 " free all the memory");
6976 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6977 vos_mem_free(pWdaParams);
6978 /* send response to UMAC*/
6979 WDA_SendMsg(pWDA,
6980 WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
6981 MaxTxPowerPerBandParams, 0);
6982 }
6983 return CONVERT_WDI2VOS_STATUS(status);
6984}
6985
6986/*
schang86c22c42013-03-13 18:41:24 -07006987 * FUNCTION: WDA_SetTxPowerCallBack
6988 * send the response to PE with power value received from WDI
6989 */
6990void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
6991 void* pUserData)
6992{
6993 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6994 tWDA_CbContext *pWDA = NULL;
6995 tSirSetTxPowerReq *pTxPowerParams = NULL;
6996
6997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6998 "<------ %s ", __func__);
6999 if(NULL == pWdaParams)
7000 {
7001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7002 "%s: pWdaParams received NULL", __func__);
7003 VOS_ASSERT(0) ;
7004 return ;
7005 }
7006 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7007 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
7008 if(NULL == pTxPowerParams)
7009 {
7010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7011 "%s: pTxPowerParams received NULL " ,__func__);
7012 VOS_ASSERT(0);
7013 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7014 vos_mem_free(pWdaParams);
7015 return ;
7016 }
7017
7018 /*need to free memory for the pointers used in the
7019 WDA Process.Set Max Tx Power Req function*/
7020 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7021 vos_mem_free(pWdaParams);
7022
7023 /* send response to UMAC*/
7024 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
7025 return;
7026}
7027
7028/*
7029 * FUNCTION: WDA_ProcessSetTxPowerReq
7030 * Request to WDI to send set Tx Power Request
7031 */
7032 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
7033 tSirSetTxPowerReq *txPowerParams)
7034{
7035 WDI_Status status = WDI_STATUS_SUCCESS;
7036 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
7037 tWDA_ReqParams *pWdaParams = NULL;
7038
7039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7040 "------> %s ", __func__);
7041
7042 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
7043 sizeof(WDI_SetTxPowerParamsType));
7044 if(NULL == wdiSetTxPowerParams)
7045 {
7046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7047 "%s: VOS MEM Alloc Failure", __func__);
7048 VOS_ASSERT(0);
7049 return VOS_STATUS_E_NOMEM;
7050 }
7051 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7052 if(NULL == pWdaParams)
7053 {
7054 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7055 "%s: VOS MEM Alloc Failure", __func__);
7056 vos_mem_free(wdiSetTxPowerParams);
7057 VOS_ASSERT(0);
7058 return VOS_STATUS_E_NOMEM;
7059 }
7060 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
7061 txPowerParams->bssIdx;
7062 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
7063 txPowerParams->mwPower;
7064 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
7065 pWdaParams->pWdaContext = pWDA;
7066 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
7067 /* store Params pass it to WDI */
7068 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
7069 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
7070 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
7071 if(IS_WDI_STATUS_FAILURE(status))
7072 {
7073 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7074 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
7075 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7076 vos_mem_free(pWdaParams);
7077 /* send response to UMAC*/
7078 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
7079 }
7080 return CONVERT_WDI2VOS_STATUS(status);
7081}
7082
Jeff Johnson295189b2012-06-20 16:38:30 -07007083/*
7084 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
7085 * Free the memory. No need to send any response to PE in this case
7086 */
7087void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
7088{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007089 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7090
Jeff Johnson295189b2012-06-20 16:38:30 -07007091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007092 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007093
7094 if(NULL == pWdaParams)
7095 {
7096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007097 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007098 VOS_ASSERT(0) ;
7099 return ;
7100 }
7101
7102 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7103 vos_mem_free(pWdaParams->wdaMsgParam) ;
7104 vos_mem_free(pWdaParams);
7105
Jeff Johnson295189b2012-06-20 16:38:30 -07007106 /*
7107 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
7108 * so just free the request param here
7109 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007110 return ;
7111}
7112
Jeff Johnson295189b2012-06-20 16:38:30 -07007113/*
7114 * FUNCTION: WDA_ProcessSetP2PGONOAReq
7115 * Request to WDI to set the P2P Group Owner Notice of Absence Req
7116 */
7117VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
7118 tP2pPsParams *pP2pPsConfigParams)
7119{
7120 WDI_Status status = WDI_STATUS_SUCCESS ;
7121 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
7122 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
7123 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007124 tWDA_ReqParams *pWdaParams = NULL;
7125
Jeff Johnson295189b2012-06-20 16:38:30 -07007126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007127 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007128 if(NULL == wdiSetP2PGONOAReqParam)
7129 {
7130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007131 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007132 VOS_ASSERT(0);
7133 return VOS_STATUS_E_NOMEM;
7134 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007135
7136 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7137 if(NULL == pWdaParams)
7138 {
7139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007140 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007141 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007142 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007143 VOS_ASSERT(0);
7144 return VOS_STATUS_E_NOMEM;
7145 }
7146
Jeff Johnson295189b2012-06-20 16:38:30 -07007147 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
7148 pP2pPsConfigParams->opp_ps;
7149 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
7150 pP2pPsConfigParams->ctWindow;
7151 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
7152 pP2pPsConfigParams->count;
7153 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
7154 pP2pPsConfigParams->duration;
7155 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
7156 pP2pPsConfigParams->interval;
7157 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
7158 pP2pPsConfigParams->single_noa_duration;
7159 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
7160 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007161
Jeff Johnson295189b2012-06-20 16:38:30 -07007162 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
7163 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007164 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
7165
Jeff Johnson295189b2012-06-20 16:38:30 -07007166 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007167 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
7168 pWdaParams->pWdaContext = pWDA;
7169
Jeff Johnson295189b2012-06-20 16:38:30 -07007170 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007171 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
7172
Jeff Johnson295189b2012-06-20 16:38:30 -07007173 if(IS_WDI_STATUS_FAILURE(status))
7174 {
7175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7176 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007177 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7178 vos_mem_free(pWdaParams->wdaMsgParam);
7179 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007180 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007181 return CONVERT_WDI2VOS_STATUS(status);
7182
Jeff Johnson295189b2012-06-20 16:38:30 -07007183}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307184
7185#ifdef FEATURE_WLAN_TDLS
7186/*
7187 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
7188 * Free the memory. No need to send any response to PE in this case
7189 */
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307190void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
7191 void* pUserData)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307192{
7193 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7194 tWDA_CbContext *pWDA = NULL;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307195 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307196
7197
7198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7199 "<------ %s " ,__func__);
7200 if(NULL == pWdaParams)
7201 {
7202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7203 "%s: pWdaParams received NULL", __func__);
7204 VOS_ASSERT(0) ;
7205 return ;
7206 }
7207 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
7208
7209 if(NULL == pWdaParams)
7210 {
7211 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7212 "%s: pWdaParams received NULL", __func__);
7213 VOS_ASSERT(0) ;
7214 return ;
7215 }
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307216 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
7217 if( NULL == pTdlsLinkEstablishParams )
7218 {
7219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7220 "%s: pTdlsLinkEstablishParams "
7221 "received NULL " ,__func__);
7222 VOS_ASSERT(0);
7223 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7224 vos_mem_free(pWdaParams);
7225 return ;
7226 }
7227 pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
7228 wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307229 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307230 vos_mem_free(pWdaParams);
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307231 /* send response to UMAC*/
7232 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
7233
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307234 return ;
7235}
7236
7237VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
7238 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
7239{
7240 WDI_Status status = WDI_STATUS_SUCCESS ;
7241 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
7242 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
7243 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
7244 tWDA_ReqParams *pWdaParams = NULL;
7245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7246 "------> %s " ,__func__);
7247 if(NULL == wdiSetTDLSLinkEstablishReqParam)
7248 {
7249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7250 "%s: VOS MEM Alloc Failure", __func__);
7251 VOS_ASSERT(0);
7252 return VOS_STATUS_E_NOMEM;
7253 }
7254 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7255 if(NULL == pWdaParams)
7256 {
7257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7258 "%s: VOS MEM Alloc Failure", __func__);
7259 vos_mem_free(pTdlsLinkEstablishParams);
7260 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
7261 VOS_ASSERT(0);
7262 return VOS_STATUS_E_NOMEM;
7263 }
7264 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307265 pTdlsLinkEstablishParams->staIdx;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307266 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307267 pTdlsLinkEstablishParams->isResponder;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307268 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307269 pTdlsLinkEstablishParams->uapsdQueues;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307270 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307271 pTdlsLinkEstablishParams->maxSp;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307272 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307273 pTdlsLinkEstablishParams->isBufsta;
Naresh Jayaramc7cbd782014-02-04 17:38:23 +05307274 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsOffChannelSupported =
7275 pTdlsLinkEstablishParams->isOffChannelSupported;
7276
7277 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannels,
7278 pTdlsLinkEstablishParams->validChannels,
7279 pTdlsLinkEstablishParams->validChannelsLen);
7280
7281 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannelsLen =
7282 pTdlsLinkEstablishParams->validChannelsLen;
7283
7284 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClasses,
7285 pTdlsLinkEstablishParams->validOperClasses,
7286 pTdlsLinkEstablishParams->validOperClassesLen);
7287 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClassesLen =
7288 pTdlsLinkEstablishParams->validOperClassesLen;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307289
7290 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
7291 /* Store msg pointer from PE, as this will be used for response */
7292 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
7293 /* store Params pass it to WDI */
7294 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
7295 pWdaParams->pWdaContext = pWDA;
7296
7297 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
7298 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
7299 WDA_SetTDLSLinkEstablishReqParamsCallback,
7300 pWdaParams);
7301 if(IS_WDI_STATUS_FAILURE(status))
7302 {
7303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7304 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
7305 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7306 vos_mem_free(pWdaParams->wdaMsgParam);
7307 vos_mem_free(pWdaParams);
7308 }
7309 return CONVERT_WDI2VOS_STATUS(status);
7310}
7311#endif
7312
7313
Jeff Johnson295189b2012-06-20 16:38:30 -07007314#ifdef WLAN_FEATURE_VOWIFI_11R
7315/*
7316 * FUNCTION: WDA_AggrAddTSReqCallback
7317 * send ADD AGGREGATED TS RSP back to PE
7318 */
7319void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
7320{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007321 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7322 tWDA_CbContext *pWDA;
7323 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007324 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07007325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007326 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007327 if(NULL == pWdaParams)
7328 {
7329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007330 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007331 VOS_ASSERT(0) ;
7332 return ;
7333 }
7334
7335 pWDA = pWdaParams->pWdaContext;
7336 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007337
7338 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
7339 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007340 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007341 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007342 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007343
7344 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7345 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007346 return ;
7347}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07007348/*
7349 * FUNCTION: WDA_ProcessAddTSReq
7350 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
7351 */
7352VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
7353 tAggrAddTsParams *pAggrAddTsReqParams)
7354{
7355 WDI_Status status = WDI_STATUS_SUCCESS ;
7356 int i;
7357 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007358 tWDA_ReqParams *pWdaParams = NULL;
7359
7360
Jeff Johnson295189b2012-06-20 16:38:30 -07007361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007362 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007363 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
7364 sizeof(WDI_AggrAddTSReqParamsType)) ;
7365 if(NULL == wdiAggrAddTSReqParam)
7366 {
7367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007368 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007369 VOS_ASSERT(0);
7370 return VOS_STATUS_E_NOMEM;
7371 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007372
7373
7374 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7375 if(NULL == pWdaParams)
7376 {
7377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007378 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007379 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007380 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007381 VOS_ASSERT(0);
7382 return VOS_STATUS_E_NOMEM;
7383 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007384 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
7385 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
7386 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07007387 for( i = 0; i < WDI_MAX_NO_AC; i++ )
7388 {
7389 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
7390 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
7391 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07007392 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
7393 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
7394 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
7395 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
7396 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
7397 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
7398 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
7399 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
7400 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
7401 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
7402 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
7403 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
7404 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
7405 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
7406 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
7407 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07007408 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
7409 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07007410 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
7411 pAggrAddTsReqParams->tspec[i].nomMsduSz;
7412 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
7413 pAggrAddTsReqParams->tspec[i].maxMsduSz;
7414 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
7415 pAggrAddTsReqParams->tspec[i].minSvcInterval;
7416 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
7417 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
7418 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
7419 pAggrAddTsReqParams->tspec[i].inactInterval;
7420 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
7421 pAggrAddTsReqParams->tspec[i].suspendInterval;
7422 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
7423 pAggrAddTsReqParams->tspec[i].svcStartTime;
7424 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
7425 pAggrAddTsReqParams->tspec[i].minDataRate;
7426 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
7427 pAggrAddTsReqParams->tspec[i].meanDataRate;
7428 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
7429 pAggrAddTsReqParams->tspec[i].peakDataRate;
7430 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
7431 pAggrAddTsReqParams->tspec[i].maxBurstSz;
7432 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
7433 pAggrAddTsReqParams->tspec[i].delayBound;
7434 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
7435 pAggrAddTsReqParams->tspec[i].minPhyRate;
7436 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
7437 pAggrAddTsReqParams->tspec[i].surplusBw;
7438 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
7439 pAggrAddTsReqParams->tspec[i].mediumTime;
7440 }
7441
7442 /* TODO: tAggrAddTsParams doesn't have the following fields */
7443#if 0
7444 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
7445 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
7446 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
7447 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
7448#endif
7449 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
7450
7451 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007452 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007453 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007454 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
7455
7456 pWdaParams->pWdaContext = pWDA;
7457
Jeff Johnson295189b2012-06-20 16:38:30 -07007458 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007459 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
7460
Jeff Johnson295189b2012-06-20 16:38:30 -07007461 if(IS_WDI_STATUS_FAILURE(status))
7462 {
7463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7464 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007465 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7466 vos_mem_free(pWdaParams);
7467
7468 /* send the failure response back to PE*/
7469 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
7470 {
7471 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
7472 }
7473
7474 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
7475 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007476 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007477 return CONVERT_WDI2VOS_STATUS(status) ;
7478}
7479#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07007480/*
7481 * FUNCTION: WDA_EnterImpsReqCallback
7482 * send Enter IMPS RSP back to PE
7483 */
7484void WDA_EnterImpsReqCallback(WDI_Status status, void* pUserData)
7485{
7486 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007488 "<------ %s " ,__func__);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007489 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007490 return ;
7491}
Jeff Johnson295189b2012-06-20 16:38:30 -07007492/*
7493 * FUNCTION: WDA_ProcessEnterImpsReq
7494 * Request to WDI to Enter IMPS power state.
7495 */
7496VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
7497{
7498 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007499 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007500 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007501 status = WDI_EnterImpsReq((WDI_EnterImpsRspCb)WDA_EnterImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007502 if(IS_WDI_STATUS_FAILURE(status))
7503 {
7504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7505 "Failure in Enter IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007506 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007507 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007508 return CONVERT_WDI2VOS_STATUS(status) ;
7509}
Jeff Johnson295189b2012-06-20 16:38:30 -07007510/*
7511 * FUNCTION: WDA_ExitImpsReqCallback
7512 * send Exit IMPS RSP back to PE
7513 */
7514void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
7515{
7516 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007518 "<------ %s " ,__func__);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007519 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007520 return ;
7521}
Jeff Johnson295189b2012-06-20 16:38:30 -07007522/*
7523 * FUNCTION: WDA_ProcessExitImpsReq
7524 * Request to WDI to Exit IMPS power state.
7525 */
7526VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
7527{
7528 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007530 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007531 status = WDI_ExitImpsReq((WDI_ExitImpsRspCb)WDA_ExitImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007532 if(IS_WDI_STATUS_FAILURE(status))
7533 {
7534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7535 "Failure in Exit IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007536 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007537 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007538 return CONVERT_WDI2VOS_STATUS(status) ;
7539}
Jeff Johnson295189b2012-06-20 16:38:30 -07007540/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007541 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007542 * send Enter BMPS RSP back to PE
7543 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007544void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007545{
7546 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7547 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007548 tEnterBmpsParams *pEnterBmpsRspParams;
7549
Jeff Johnson295189b2012-06-20 16:38:30 -07007550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007551 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007552 if(NULL == pWdaParams)
7553 {
7554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007555 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007556 VOS_ASSERT(0) ;
7557 return ;
7558 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007559
7560 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7561 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
7562
7563 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007564 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007565
7566 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007567 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007568 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
7569
Jeff Johnson295189b2012-06-20 16:38:30 -07007570 return ;
7571}
Jeff Johnson295189b2012-06-20 16:38:30 -07007572/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007573 * FUNCTION: WDA_EnterBmpsReqCallback
7574 * Free memory and send Enter BMPS RSP back to PE.
7575 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
7576 */
7577void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
7578{
7579 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7580 tWDA_CbContext *pWDA;
7581 tEnterBmpsParams *pEnterBmpsRspParams;
7582
7583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7584 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7585
7586 if(NULL == pWdaParams)
7587 {
7588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7589 "%s: pWdaParams received NULL", __func__);
7590 VOS_ASSERT(0);
7591 return;
7592 }
7593
7594 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7595 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
7596 pEnterBmpsRspParams->status = wdiStatus;
7597
7598 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7599 {
7600 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7601 vos_mem_free(pWdaParams);
7602 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
7603 }
7604
7605 return;
7606}
7607/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007608 * FUNCTION: WDA_ProcessEnterBmpsReq
7609 * Request to WDI to Enter BMPS power state.
7610 */
7611VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
7612 tEnterBmpsParams *pEnterBmpsReqParams)
7613{
7614 WDI_Status status = WDI_STATUS_SUCCESS;
7615 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
7616 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007618 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007619 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
7620 {
7621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007622 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007623 VOS_ASSERT(0);
7624 return VOS_STATUS_E_FAILURE;
7625 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007626 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
7627 if (NULL == wdiEnterBmpsReqParams)
7628 {
7629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007630 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007631 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007632 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
7633 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007634 return VOS_STATUS_E_NOMEM;
7635 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007636 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7637 if (NULL == pWdaParams)
7638 {
7639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007640 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007641 VOS_ASSERT(0);
7642 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007643 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
7644 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007645 return VOS_STATUS_E_NOMEM;
7646 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007647 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
7648 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
7649 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
7650 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08007651 // For ESE and 11R Roaming
Jeff Johnson295189b2012-06-20 16:38:30 -07007652 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
7653 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
7654 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -07007655 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
7656 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007657
Jeff Johnson295189b2012-06-20 16:38:30 -07007658 /* Store param pointer as passed in by caller */
7659 /* store Params pass it to WDI */
7660 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007661 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007662 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07007663 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007664 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007665 if (IS_WDI_STATUS_FAILURE(status))
7666 {
7667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7668 "Failure in Enter BMPS REQ WDI API, free all the memory" );
7669 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007670 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007671 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007672 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007673 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007674 return CONVERT_WDI2VOS_STATUS(status);
7675}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007676
7677
7678static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
7679 WDI_Status wdiStatus,
7680 tExitBmpsParams *pExitBmpsReqParams)
7681{
7682 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
7683
7684 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
7685}
7686
7687
Jeff Johnson295189b2012-06-20 16:38:30 -07007688/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007689 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007690 * send Exit BMPS RSP back to PE
7691 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007692void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007693{
7694 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7695 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007696 tExitBmpsParams *pExitBmpsRspParams;
7697
Jeff Johnson295189b2012-06-20 16:38:30 -07007698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007699 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007700 if(NULL == pWdaParams)
7701 {
7702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007703 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007704 VOS_ASSERT(0) ;
7705 return ;
7706 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007707
7708 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7709 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
7710
7711 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007712 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007713
Jeff Johnson295189b2012-06-20 16:38:30 -07007714 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7715 vos_mem_free(pWdaParams) ;
7716
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007717 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007718 return ;
7719}
Jeff Johnson295189b2012-06-20 16:38:30 -07007720/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007721 * FUNCTION: WDA_ExitBmpsReqCallback
7722 * Free memory and send Exit BMPS RSP back to PE.
7723 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
7724 */
7725void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
7726{
7727 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7728 tWDA_CbContext *pWDA;
7729 tExitBmpsParams *pExitBmpsRspParams;
7730
7731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7732 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7733
7734 if(NULL == pWdaParams)
7735 {
7736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7737 "%s: pWdaParams received NULL", __func__);
7738 VOS_ASSERT(0);
7739 return;
7740 }
7741
7742 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7743 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
7744 pExitBmpsRspParams->status = wdiStatus;
7745
7746 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7747 {
7748 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7749 vos_mem_free(pWdaParams);
7750 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
7751 }
7752
7753 return;
7754}
7755/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007756 * FUNCTION: WDA_ProcessExitBmpsReq
7757 * Request to WDI to Exit BMPS power state.
7758 */
7759VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
7760 tExitBmpsParams *pExitBmpsReqParams)
7761{
7762 WDI_Status status = WDI_STATUS_SUCCESS ;
7763 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
7764 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
7765 sizeof(WDI_ExitBmpsReqParamsType)) ;
7766 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007768 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007769 if(NULL == wdiExitBmpsReqParams)
7770 {
7771 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007772 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007773 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007774 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007775 return VOS_STATUS_E_NOMEM;
7776 }
7777 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7778 if(NULL == pWdaParams)
7779 {
7780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007781 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007782 VOS_ASSERT(0);
7783 vos_mem_free(wdiExitBmpsReqParams);
7784 return VOS_STATUS_E_NOMEM;
7785 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007786 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07007787
7788 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
7789
Yue Ma7f44bbe2013-04-12 11:47:39 -07007790 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
7791 wdiExitBmpsReqParams->pUserData = pWdaParams;
7792
Jeff Johnson295189b2012-06-20 16:38:30 -07007793 /* Store param pointer as passed in by caller */
7794 /* store Params pass it to WDI */
7795 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
7796 pWdaParams->pWdaContext = pWDA;
7797 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007798 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007799 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007800 if(IS_WDI_STATUS_FAILURE(status))
7801 {
7802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7803 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007804 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7805 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007806 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007807 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007808 return CONVERT_WDI2VOS_STATUS(status) ;
7809}
Jeff Johnson295189b2012-06-20 16:38:30 -07007810/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007811 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007812 * send Enter UAPSD RSP back to PE
7813 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007814void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007815{
7816 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7817 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007818 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007820 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007821 if(NULL == pWdaParams)
7822 {
7823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007824 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007825 VOS_ASSERT(0) ;
7826 return ;
7827 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007828
7829 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7830 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
7831
7832 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007833 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007834
Jeff Johnson295189b2012-06-20 16:38:30 -07007835 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7836 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007837 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007838 return ;
7839}
Jeff Johnson295189b2012-06-20 16:38:30 -07007840/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007841 * FUNCTION: WDA_EnterUapsdReqCallback
7842 * Free memory and send Enter UAPSD RSP back to PE.
7843 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
7844 */
7845void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
7846{
7847 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7848 tWDA_CbContext *pWDA;
7849 tUapsdParams *pEnterUapsdRsqParams;
7850
7851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7852 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7853
7854 if(NULL == pWdaParams)
7855 {
7856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7857 "%s: pWdaParams received NULL", __func__);
7858 VOS_ASSERT(0);
7859 return;
7860 }
7861
7862 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7863 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
7864 pEnterUapsdRsqParams->status = wdiStatus;
7865
7866 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7867 {
7868 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7869 vos_mem_free(pWdaParams);
7870 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
7871 }
7872
7873 return;
7874}
7875/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007876 * FUNCTION: WDA_ProcessEnterUapsdReq
7877 * Request to WDI to Enter UAPSD power state.
7878 */
7879VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
7880 tUapsdParams *pEnterUapsdReqParams)
7881{
7882 WDI_Status status = WDI_STATUS_SUCCESS ;
7883 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
7884 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
7885 sizeof(WDI_EnterUapsdReqParamsType)) ;
7886 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007888 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007889 if(NULL == wdiEnterUapsdReqParams)
7890 {
7891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007892 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007893 VOS_ASSERT(0);
7894 return VOS_STATUS_E_NOMEM;
7895 }
7896 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7897 if(NULL == pWdaParams)
7898 {
7899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007900 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007901 VOS_ASSERT(0);
7902 vos_mem_free(wdiEnterUapsdReqParams);
7903 return VOS_STATUS_E_NOMEM;
7904 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007905 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
7906 pEnterUapsdReqParams->beDeliveryEnabled;
7907 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
7908 pEnterUapsdReqParams->beTriggerEnabled;
7909 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
7910 pEnterUapsdReqParams->bkDeliveryEnabled;
7911 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
7912 pEnterUapsdReqParams->bkTriggerEnabled;
7913 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
7914 pEnterUapsdReqParams->viDeliveryEnabled;
7915 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
7916 pEnterUapsdReqParams->viTriggerEnabled;
7917 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
7918 pEnterUapsdReqParams->voDeliveryEnabled;
7919 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
7920 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07007921 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07007922
Yue Ma7f44bbe2013-04-12 11:47:39 -07007923 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
7924 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007925
Jeff Johnson295189b2012-06-20 16:38:30 -07007926 /* Store param pointer as passed in by caller */
7927 /* store Params pass it to WDI */
7928 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
7929 pWdaParams->pWdaContext = pWDA;
7930 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007931 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007932 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007933 if(IS_WDI_STATUS_FAILURE(status))
7934 {
7935 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7936 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
7937 vos_mem_free(pWdaParams->wdaMsgParam) ;
7938 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7939 vos_mem_free(pWdaParams) ;
7940 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007941 return CONVERT_WDI2VOS_STATUS(status) ;
7942}
Jeff Johnson295189b2012-06-20 16:38:30 -07007943/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007944 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007945 * send Exit UAPSD RSP back to PE
7946 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007947void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007948{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007949
7950 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7951 tWDA_CbContext *pWDA;
7952 tExitUapsdParams *pExitUapsdRspParams;
7953
Jeff Johnson295189b2012-06-20 16:38:30 -07007954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007955 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007956 if(NULL == pWdaParams)
7957 {
7958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007959 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007960 VOS_ASSERT(0);
7961 return;
7962 }
7963
7964 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7965 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
7966
7967 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007968 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007969
7970 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7971 vos_mem_free(pWdaParams) ;
7972
7973 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007974 return ;
7975}
Jeff Johnson295189b2012-06-20 16:38:30 -07007976/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007977 * FUNCTION: WDA_ExitUapsdReqCallback
7978 * Free memory and send Exit UAPSD RSP back to PE.
7979 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
7980 */
7981void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
7982{
7983 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7984 tWDA_CbContext *pWDA;
7985 tExitUapsdParams *pExitUapsdRspParams;
7986
7987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7988 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7989
7990 if(NULL == pWdaParams)
7991 {
7992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7993 "%s: pWdaParams received NULL", __func__);
7994 VOS_ASSERT(0);
7995 return;
7996 }
7997
7998 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7999 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
8000 pExitUapsdRspParams->status = wdiStatus;
8001
8002 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8003 {
8004 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8005 vos_mem_free(pWdaParams);
8006 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
8007 }
8008
8009 return;
8010}
8011/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008012 * FUNCTION: WDA_ProcessExitUapsdReq
8013 * Request to WDI to Exit UAPSD power state.
8014 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008015VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
8016 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008017{
8018 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008019 tWDA_ReqParams *pWdaParams ;
8020 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
8021 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
8022 sizeof(WDI_ExitUapsdReqParamsType)) ;
8023
Jeff Johnson295189b2012-06-20 16:38:30 -07008024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008025 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008026
8027 if(NULL == wdiExitUapsdReqParams)
8028 {
8029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008030 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008031 VOS_ASSERT(0);
8032 return VOS_STATUS_E_NOMEM;
8033 }
8034 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8035 if(NULL == pWdaParams)
8036 {
8037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008038 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008039 VOS_ASSERT(0);
8040 vos_mem_free(wdiExitUapsdReqParams);
8041 return VOS_STATUS_E_NOMEM;
8042 }
8043
8044 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008045 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
8046 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008047
8048 /* Store param pointer as passed in by caller */
8049 /* store Params pass it to WDI */
8050 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
8051 pWdaParams->pWdaContext = pWDA;
8052 pWdaParams->wdaMsgParam = pExitUapsdParams;
8053
Yue Ma7f44bbe2013-04-12 11:47:39 -07008054 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008055 if(IS_WDI_STATUS_FAILURE(status))
8056 {
8057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8058 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008059 vos_mem_free(pWdaParams->wdaMsgParam) ;
8060 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8061 vos_mem_free(pWdaParams) ;
8062
Jeff Johnson295189b2012-06-20 16:38:30 -07008063 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008064 return CONVERT_WDI2VOS_STATUS(status) ;
8065}
8066
Jeff Johnson295189b2012-06-20 16:38:30 -07008067/*
8068 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
8069 *
8070 */
8071void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
8072{
8073 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008075 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008076 if(NULL == pWdaParams)
8077 {
8078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008079 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008080 VOS_ASSERT(0) ;
8081 return ;
8082 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008083 if( pWdaParams != NULL )
8084 {
8085 if( pWdaParams->wdaWdiApiMsgParam != NULL )
8086 {
8087 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8088 }
8089 if( pWdaParams->wdaMsgParam != NULL )
8090 {
8091 vos_mem_free(pWdaParams->wdaMsgParam) ;
8092 }
8093 vos_mem_free(pWdaParams) ;
8094 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008095 return ;
8096}
Jeff Johnson295189b2012-06-20 16:38:30 -07008097/*
8098 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
8099 * Request to WDI to set the power save params at start.
8100 */
8101VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
8102 tSirPowerSaveCfg *pPowerSaveCfg)
8103{
8104 WDI_Status status = WDI_STATUS_SUCCESS ;
8105 tHalCfg *tlvStruct = NULL ;
8106 tANI_U8 *tlvStructStart = NULL ;
8107 v_PVOID_t *configParam;
8108 tANI_U32 configParamSize;
8109 tANI_U32 *configDataValue;
8110 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
8111 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008113 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008114 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
8115 {
8116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008117 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008118 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008119 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008120 return VOS_STATUS_E_FAILURE;
8121 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008122 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
8123 if (NULL == wdiPowerSaveCfg)
8124 {
8125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008126 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008127 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008128 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008129 return VOS_STATUS_E_NOMEM;
8130 }
8131 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8132 if(NULL == pWdaParams)
8133 {
8134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008135 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008136 VOS_ASSERT(0);
8137 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008138 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008139 return VOS_STATUS_E_NOMEM;
8140 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008141 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
8142 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07008143 if(NULL == configParam)
8144 {
8145 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08008146 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008147 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07008148 vos_mem_free(pWdaParams);
8149 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008150 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008151 return VOS_STATUS_E_NOMEM;
8152 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008153 vos_mem_set(configParam, configParamSize, 0);
8154 wdiPowerSaveCfg->pConfigBuffer = configParam;
8155 tlvStruct = (tHalCfg *)configParam;
8156 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008157 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
8158 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
8159 tlvStruct->length = sizeof(tANI_U32);
8160 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8161 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07008162 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8163 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008164 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
8165 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
8166 tlvStruct->length = sizeof(tANI_U32);
8167 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8168 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07008169 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8170 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008171 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
8172 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
8173 tlvStruct->length = sizeof(tANI_U32);
8174 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8175 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07008176 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8177 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008178 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
8179 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
8180 tlvStruct->length = sizeof(tANI_U32);
8181 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8182 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07008183 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8184 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008185 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
8186 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
8187 tlvStruct->length = sizeof(tANI_U32);
8188 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8189 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07008190 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8191 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008192 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
8193 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
8194 tlvStruct->length = sizeof(tANI_U32);
8195 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8196 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07008197 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8198 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008199 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
8200 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
8201 tlvStruct->length = sizeof(tANI_U32);
8202 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8203 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07008204 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8205 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008206 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
8207 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
8208 tlvStruct->length = sizeof(tANI_U32);
8209 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8210 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
8211 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8212 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008213 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
8214 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
8215 tlvStruct->length = sizeof(tANI_U32);
8216 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8217 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
8218 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8219 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008220 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
8221 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
8222 tlvStruct->length = sizeof(tANI_U32);
8223 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8224 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07008225 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8226 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008227 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
8228 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
8229 tlvStruct->length = sizeof(tANI_U32);
8230 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8231 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07008232 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8233 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008234 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008235 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008236 /* store Params pass it to WDI */
8237 pWdaParams->wdaMsgParam = configParam;
8238 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
8239 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07008240 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
8241 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008242 if(IS_WDI_STATUS_FAILURE(status))
8243 {
8244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8245 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
8246 vos_mem_free(pWdaParams->wdaMsgParam);
8247 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8248 vos_mem_free(pWdaParams);
8249 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008250 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008251 return CONVERT_WDI2VOS_STATUS(status);
8252}
Jeff Johnson295189b2012-06-20 16:38:30 -07008253/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008254 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008255 *
8256 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008257void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008258{
Yue Ma7f44bbe2013-04-12 11:47:39 -07008259 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8260
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__);
Yue Ma7f44bbe2013-04-12 11:47:39 -07008263
8264 if(NULL == pWdaParams)
8265 {
8266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8267 "%s: pWdaParams received NULL", __func__);
8268 VOS_ASSERT(0);
8269 return ;
8270 }
8271
8272 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07008273 vos_mem_free(pWdaParams);
8274
Jeff Johnson295189b2012-06-20 16:38:30 -07008275 return ;
8276}
Jeff Johnson295189b2012-06-20 16:38:30 -07008277/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008278 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
8279 * Free memory.
8280 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
8281 */
8282void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
8283{
8284 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8285
8286 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8287 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8288
8289 if(NULL == pWdaParams)
8290 {
8291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8292 "%s: pWdaParams received NULL", __func__);
8293 VOS_ASSERT(0);
8294 return;
8295 }
8296
8297 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8298 {
8299 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8300 vos_mem_free(pWdaParams);
8301 }
8302
8303 return;
8304}
8305/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008306 * FUNCTION: WDA_SetUapsdAcParamsReq
8307 * Request to WDI to set the UAPSD params for an ac (sta mode).
8308 */
8309VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
8310 tUapsdInfo *pUapsdInfo)
8311{
8312 WDI_Status status = WDI_STATUS_SUCCESS;
8313 tWDA_CbContext *pWDA = NULL ;
8314 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
8315 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
8316 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
8317 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008319 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008320 if(NULL == wdiUapsdParams)
8321 {
8322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008323 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008324 VOS_ASSERT(0);
8325 return VOS_STATUS_E_NOMEM;
8326 }
8327 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8328 if(NULL == pWdaParams)
8329 {
8330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008331 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008332 VOS_ASSERT(0);
8333 vos_mem_free(wdiUapsdParams);
8334 return VOS_STATUS_E_NOMEM;
8335 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008336 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
8337 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
8338 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
8339 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
8340 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
8341 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008342 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
8343 wdiUapsdParams->pUserData = pWdaParams;
8344
Jeff Johnson295189b2012-06-20 16:38:30 -07008345 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -07008346 pWdaParams->pWdaContext = pWDA;
8347 /* Store param pointer as passed in by caller */
8348 pWdaParams->wdaMsgParam = pUapsdInfo;
8349 /* store Params pass it to WDI */
8350 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008351 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008352 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07008353 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008354 if(IS_WDI_STATUS_FAILURE(status))
8355 {
8356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8357 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
8358 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8359 vos_mem_free(pWdaParams);
8360 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008361 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
8362 return VOS_STATUS_SUCCESS;
8363 else
8364 return VOS_STATUS_E_FAILURE;
8365
Jeff Johnson295189b2012-06-20 16:38:30 -07008366}
8367/*
8368 * FUNCTION: WDA_ClearUapsdAcParamsReq
8369 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
8370 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
8371 * and again enter the UPASD with the modified params. Hence the disable
8372 * function was kept empty.
8373 *
8374 */
8375VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
8376{
8377 /* do nothing */
8378 return VOS_STATUS_SUCCESS;
8379}
Jeff Johnson295189b2012-06-20 16:38:30 -07008380/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008381 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008382 *
8383 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008384void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008385{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008386 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8387
Jeff Johnson295189b2012-06-20 16:38:30 -07008388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008389 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008390
8391 if(NULL == pWdaParams)
8392 {
8393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008394 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008395 VOS_ASSERT(0) ;
8396 return ;
8397 }
8398
8399 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8400 vos_mem_free(pWdaParams->wdaMsgParam);
8401 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008402
Jeff Johnson295189b2012-06-20 16:38:30 -07008403 //print a msg, nothing else to do
8404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008405 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008406 return ;
8407}
Jeff Johnson295189b2012-06-20 16:38:30 -07008408/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008409 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
8410 * Free memory.
8411 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
8412 */
8413void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
8414{
8415 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8416
8417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8418 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8419
8420 if(NULL == pWdaParams)
8421 {
8422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8423 "%s: pWdaParams received NULL", __func__);
8424 VOS_ASSERT(0);
8425 return;
8426 }
8427
8428 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8429 {
8430 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8431 vos_mem_free(pWdaParams->wdaMsgParam);
8432 vos_mem_free(pWdaParams);
8433 }
8434
8435 return;
8436}
8437/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008438 * FUNCTION: WDA_UpdateUapsdParamsReq
8439 * Request to WDI to update UAPSD params (in softAP mode) for a station.
8440 */
8441VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
8442 tUpdateUapsdParams* pUpdateUapsdInfo)
8443{
8444 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008445 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008446 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
8447 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
8448 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008449 tWDA_ReqParams *pWdaParams = NULL;
8450
Jeff Johnson295189b2012-06-20 16:38:30 -07008451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008452 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008453 if(NULL == wdiUpdateUapsdParams)
8454 {
8455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008456 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008457 VOS_ASSERT(0);
8458 return VOS_STATUS_E_NOMEM;
8459 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008460 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
8461 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
8462 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008463 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
8464 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008465
8466 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8467 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008468 {
8469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008470 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008471 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008472 vos_mem_free(pUpdateUapsdInfo);
8473 vos_mem_free(wdiUpdateUapsdParams);
8474 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07008475 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008476 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008477 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07008478 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008479 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
8480 pWdaParams->pWdaContext = pWDA;
8481
Jeff Johnson43971f52012-07-17 12:26:56 -07008482 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008483 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008484 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008485
Jeff Johnson43971f52012-07-17 12:26:56 -07008486 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008487 {
8488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8489 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008490 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
8491 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8492 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008493 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008494 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008495 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008496}
Jeff Johnson295189b2012-06-20 16:38:30 -07008497/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008498 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008499 *
8500 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008501void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008502{
8503 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008505 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008506 if(WDI_STATUS_SUCCESS != wdiStatus)
8507 {
8508 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08008509 "%s: RXP config filter failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008510 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008511 if(NULL == pWdaParams)
8512 {
8513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008514 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008515 VOS_ASSERT(0) ;
8516 return ;
8517 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008518 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8519 vos_mem_free(pWdaParams->wdaMsgParam);
8520 vos_mem_free(pWdaParams);
8521 return ;
8522}
Jeff Johnson295189b2012-06-20 16:38:30 -07008523/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008524 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
8525 * Free memory.
8526 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
8527 */
8528void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
8529{
8530 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8531
8532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8533 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8534
8535 if(NULL == pWdaParams)
8536 {
8537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8538 "%s: pWdaParams received NULL", __func__);
8539 VOS_ASSERT(0);
8540 return;
8541 }
8542
8543 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8544 {
8545 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8546 vos_mem_free(pWdaParams->wdaMsgParam);
8547 vos_mem_free(pWdaParams);
8548 }
8549
8550 return;
8551}
8552/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008553 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
8554 *
8555 */
8556VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
8557 tSirWlanSetRxpFilters *pWlanSuspendParam)
8558{
Jeff Johnson295189b2012-06-20 16:38:30 -07008559 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008560 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008561 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams =
8562 (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
8563 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
8564 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008565 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008566 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008567 if(NULL == wdiRxpFilterParams)
8568 {
8569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008570 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008571 VOS_ASSERT(0);
8572 vos_mem_free(pWlanSuspendParam);
8573 return VOS_STATUS_E_NOMEM;
8574 }
8575 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8576 if(NULL == pWdaParams)
8577 {
8578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008579 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008580 VOS_ASSERT(0);
8581 vos_mem_free(wdiRxpFilterParams);
8582 vos_mem_free(pWlanSuspendParam);
8583 return VOS_STATUS_E_NOMEM;
8584 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008585 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
8586 pWlanSuspendParam->setMcstBcstFilter;
8587 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
8588 pWlanSuspendParam->configuredMcstBcstFilterSetting;
8589
Yue Ma7f44bbe2013-04-12 11:47:39 -07008590 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
8591 wdiRxpFilterParams->pUserData = pWdaParams;
8592
Jeff Johnson295189b2012-06-20 16:38:30 -07008593 pWdaParams->pWdaContext = pWDA;
8594 pWdaParams->wdaMsgParam = pWlanSuspendParam;
8595 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008596 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008597 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07008598 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008599 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008600 {
8601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8602 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008603 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008604 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8605 vos_mem_free(pWdaParams->wdaMsgParam);
8606 vos_mem_free(pWdaParams);
8607 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008608 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008609}
Jeff Johnson295189b2012-06-20 16:38:30 -07008610/*
8611 * FUNCTION: WDA_WdiIndicationCallback
8612 *
8613 */
8614void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
8615 void* pUserData)
8616{
8617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008618 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008619}
Jeff Johnson295189b2012-06-20 16:38:30 -07008620/*
8621 * FUNCTION: WDA_ProcessWlanSuspendInd
8622 *
8623 */
8624VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
8625 tSirWlanSuspendParam *pWlanSuspendParam)
8626{
8627 WDI_Status wdiStatus;
8628 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008630 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008631 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
8632 pWlanSuspendParam->configuredMcstBcstFilterSetting;
8633 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
8634 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07008636 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
8637 if(WDI_STATUS_PENDING == wdiStatus)
8638 {
8639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008640 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008641 }
8642 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
8643 {
8644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008645 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008646 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008647 vos_mem_free(pWlanSuspendParam);
8648 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
8649}
8650
Chet Lanctot186b5732013-03-18 10:26:30 -07008651#ifdef WLAN_FEATURE_11W
8652/*
8653 * FUNCTION: WDA_ProcessExcludeUnecryptInd
8654 *
8655 */
8656VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
8657 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
8658{
8659 WDI_Status wdiStatus;
8660 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
8661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8662 "------> %s ", __func__);
8663
8664 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
8665 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
8666 sizeof(tSirMacAddr));
8667
8668 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
8669 wdiExclUnencryptParams.pUserData = pWDA;
8670
8671 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
8672 if(WDI_STATUS_PENDING == wdiStatus)
8673 {
8674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8675 "Pending received for %s:%d ", __func__, __LINE__ );
8676 }
8677 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
8678 {
8679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8680 "Failure in %s:%d ", __func__, __LINE__ );
8681 }
8682 vos_mem_free(pExclUnencryptParam);
8683 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
8684}
8685#endif
8686
Jeff Johnson295189b2012-06-20 16:38:30 -07008687/*
8688 * FUNCTION: WDA_ProcessWlanResumeCallback
8689 *
8690 */
8691void WDA_ProcessWlanResumeCallback(
8692 WDI_SuspendResumeRspParamsType *resumeRspParams,
8693 void* pUserData)
8694{
8695 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008697 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008698 if(NULL == pWdaParams)
8699 {
8700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008701 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008702 VOS_ASSERT(0) ;
8703 return ;
8704 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008705 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
8706 {
8707 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08008708 "%s: Process Wlan Resume failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008709 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008710 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8711 vos_mem_free(pWdaParams->wdaMsgParam);
8712 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008713 return ;
8714}
Jeff Johnson295189b2012-06-20 16:38:30 -07008715/*
8716 * FUNCTION: WDA_ProcessWlanResumeReq
8717 *
8718 */
8719VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
8720 tSirWlanResumeParam *pWlanResumeParam)
8721{
8722 WDI_Status wdiStatus;
8723 WDI_ResumeParamsType *wdiResumeParams =
8724 (WDI_ResumeParamsType *)vos_mem_malloc(
8725 sizeof(WDI_ResumeParamsType) ) ;
8726 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008728 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008729 if(NULL == wdiResumeParams)
8730 {
8731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008732 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008733 VOS_ASSERT(0);
8734 return VOS_STATUS_E_NOMEM;
8735 }
8736 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8737 if(NULL == pWdaParams)
8738 {
8739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008740 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008741 VOS_ASSERT(0);
8742 vos_mem_free(wdiResumeParams);
8743 return VOS_STATUS_E_NOMEM;
8744 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008745 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
8746 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07008748 wdiResumeParams->wdiReqStatusCB = NULL;
8749 pWdaParams->wdaMsgParam = pWlanResumeParam;
8750 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
8751 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07008752 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
8753 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
8754 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008755 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8756 {
8757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8758 "Failure in Host Resume REQ WDI API, free all the memory " );
8759 VOS_ASSERT(0);
8760 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8761 vos_mem_free(pWdaParams->wdaMsgParam);
8762 vos_mem_free(pWdaParams);
8763 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008764 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
8765}
8766
Jeff Johnson295189b2012-06-20 16:38:30 -07008767/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008768 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008769 *
8770 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008771void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008772{
8773 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008775 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008776 if(NULL == pWdaParams)
8777 {
8778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008779 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008780 VOS_ASSERT(0) ;
8781 return ;
8782 }
8783
8784 vos_mem_free(pWdaParams->wdaMsgParam) ;
8785 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8786 vos_mem_free(pWdaParams) ;
8787 /*
8788 * No respone required for SetBeaconFilter req so just free the request
8789 * param here
8790 */
8791
Jeff Johnson295189b2012-06-20 16:38:30 -07008792 return ;
8793}
Jeff Johnson295189b2012-06-20 16:38:30 -07008794/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008795 * FUNCTION: WDA_SetBeaconFilterReqCallback
8796 * Free memory.
8797 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
8798 */
8799void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
8800{
8801 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8802
8803 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8804 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8805
8806 if(NULL == pWdaParams)
8807 {
8808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8809 "%s: pWdaParams received NULL", __func__);
8810 VOS_ASSERT(0);
8811 return;
8812 }
8813
8814 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8815 {
8816 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8817 vos_mem_free(pWdaParams->wdaMsgParam);
8818 vos_mem_free(pWdaParams);
8819 }
8820
8821 return;
8822}
8823/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008824 * FUNCTION: WDA_SetBeaconFilterReq
8825 * Request to WDI to send the beacon filtering related information.
8826 */
8827VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
8828 tBeaconFilterMsg* pBeaconFilterInfo)
8829{
8830 WDI_Status status = WDI_STATUS_SUCCESS;
8831 tANI_U8 *dstPtr, *srcPtr;
8832 tANI_U8 filterLength;
8833 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
8834 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
8835 sizeof(WDI_BeaconFilterReqParamsType) ) ;
8836 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008838 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008839 if(NULL == wdiBeaconFilterInfo)
8840 {
8841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008842 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008843 VOS_ASSERT(0);
8844 return VOS_STATUS_E_NOMEM;
8845 }
8846 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8847 if(NULL == pWdaParams)
8848 {
8849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008850 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008851 VOS_ASSERT(0);
8852 vos_mem_free(wdiBeaconFilterInfo);
8853 return VOS_STATUS_E_NOMEM;
8854 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008855 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
8856 pBeaconFilterInfo->beaconInterval;
8857 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
8858 pBeaconFilterInfo->capabilityInfo;
8859 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
8860 pBeaconFilterInfo->capabilityMask;
8861 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -07008862
8863 //Fill the BssIdx
8864 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
8865
Jeff Johnson295189b2012-06-20 16:38:30 -07008866 //Fill structure with info contained in the beaconFilterTable
8867 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
8868 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
8869 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
8870 if(WDI_BEACON_FILTER_LEN < filterLength)
8871 {
8872 filterLength = WDI_BEACON_FILTER_LEN;
8873 }
8874 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -07008875 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
8876 wdiBeaconFilterInfo->pUserData = pWdaParams;
8877
Jeff Johnson295189b2012-06-20 16:38:30 -07008878 /* Store param pointer as passed in by caller */
8879 /* store Params pass it to WDI */
8880 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
8881 pWdaParams->pWdaContext = pWDA;
8882 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
8883
Jeff Johnson295189b2012-06-20 16:38:30 -07008884 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008885 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008886 if(IS_WDI_STATUS_FAILURE(status))
8887 {
8888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8889 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
8890 vos_mem_free(pWdaParams->wdaMsgParam) ;
8891 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8892 vos_mem_free(pWdaParams) ;
8893 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008894 return CONVERT_WDI2VOS_STATUS(status) ;
8895}
Jeff Johnson295189b2012-06-20 16:38:30 -07008896/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008897 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008898 *
8899 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008900void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008901{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008902 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8903
Jeff Johnson295189b2012-06-20 16:38:30 -07008904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008905 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008906
8907 if(NULL == pWdaParams)
8908 {
8909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008910 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008911 VOS_ASSERT(0) ;
8912 return ;
8913 }
8914
8915 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8916 vos_mem_free(pWdaParams->wdaMsgParam);
8917 vos_mem_free(pWdaParams);
8918
Jeff Johnson295189b2012-06-20 16:38:30 -07008919 //print a msg, nothing else to do
8920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008921 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008922 return ;
8923}
Yue Ma7f44bbe2013-04-12 11:47:39 -07008924/*
8925 * FUNCTION: WDA_RemBeaconFilterReqCallback
8926 * Free memory.
8927 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
8928 */
8929void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
8930{
8931 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8932
8933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8934 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8935
8936 if(NULL == pWdaParams)
8937 {
8938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8939 "%s: pWdaParams received NULL", __func__);
8940 VOS_ASSERT(0);
8941 return;
8942 }
8943
8944 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8945 {
8946 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8947 vos_mem_free(pWdaParams->wdaMsgParam);
8948 vos_mem_free(pWdaParams);
8949 }
8950
8951 return;
8952}
Jeff Johnson295189b2012-06-20 16:38:30 -07008953 // TODO: PE does not have this feature for now implemented,
8954 // but the support for removing beacon filter exists between
8955 // HAL and FW. This function can be called whenever PE defines
8956 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -07008957/*
8958 * FUNCTION: WDA_RemBeaconFilterReq
8959 * Request to WDI to send the removal of beacon filtering related information.
8960 */
8961VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
8962 tRemBeaconFilterMsg* pBeaconFilterInfo)
8963{
8964 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008965 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008966 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
8967 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
8968 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008969 tWDA_ReqParams *pWdaParams ;
8970
Jeff Johnson295189b2012-06-20 16:38:30 -07008971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008972 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008973 if(NULL == wdiBeaconFilterInfo)
8974 {
8975 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008976 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008977 VOS_ASSERT(0);
8978 return VOS_STATUS_E_NOMEM;
8979 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008980 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8981 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008982 {
8983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008984 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008985 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008986 vos_mem_free(wdiBeaconFilterInfo);
8987 vos_mem_free(pBeaconFilterInfo);
8988 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07008989 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07008990
8991 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
8992 pBeaconFilterInfo->ucIeCount;
8993 //Fill structure with info contained in the ucRemIeId
8994 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
8995 pBeaconFilterInfo->ucRemIeId,
8996 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
8997 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
8998 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008999
9000 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009001 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07009002 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009003 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
9004
9005 pWdaParams->pWdaContext = pWDA;
9006
Jeff Johnson43971f52012-07-17 12:26:56 -07009007 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009008 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009009 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009010 {
9011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9012 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009013 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009014 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9015 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009016 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009017 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009018 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009019}
Jeff Johnson295189b2012-06-20 16:38:30 -07009020/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009021 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009022 *
9023 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009024void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009025{
9026 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009028 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009029 if(NULL == pWdaParams)
9030 {
9031 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009032 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009033 VOS_ASSERT(0) ;
9034 return ;
9035 }
9036
9037 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9038 vos_mem_free(pWdaParams) ;
9039
Jeff Johnson295189b2012-06-20 16:38:30 -07009040 return ;
9041}
Jeff Johnson295189b2012-06-20 16:38:30 -07009042/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009043 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
9044 * Free memory.
9045 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
9046 */
9047void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
9048{
9049 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9050
9051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9052 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9053
9054 if(NULL == pWdaParams)
9055 {
9056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9057 "%s: pWdaParams received NULL", __func__);
9058 VOS_ASSERT(0);
9059 return;
9060 }
9061
9062 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9063 {
9064 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9065 vos_mem_free(pWdaParams);
9066 }
9067
9068 return;
9069}
9070/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009071 * FUNCTION: WDA_SetRSSIThresholdsReq
9072 * Request to WDI to set the RSSI thresholds (sta mode).
9073 */
9074VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
9075{
9076 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009077 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009078 tWDA_CbContext *pWDA = NULL ;
9079 v_PVOID_t pVosContext = NULL;
9080 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
9081 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
9082 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
9083 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009084 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009085 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009086 if(NULL == wdiRSSIThresholdsInfo)
9087 {
9088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009089 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009090 VOS_ASSERT(0);
9091 return VOS_STATUS_E_NOMEM;
9092 }
9093 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9094 if(NULL == pWdaParams)
9095 {
9096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009097 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009098 VOS_ASSERT(0);
9099 vos_mem_free(wdiRSSIThresholdsInfo);
9100 return VOS_STATUS_E_NOMEM;
9101 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009102 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -07009103 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
9104 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
9105 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -07009106 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
9107 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
9108 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07009109 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
9110 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
9111 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009112 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
9113 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009114 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
9115 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
9116
Jeff Johnson295189b2012-06-20 16:38:30 -07009117 /* Store param pointer as passed in by caller */
9118 /* store Params pass it to WDI */
9119 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
9120 pWdaParams->pWdaContext = pWDA;
9121 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -07009122 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009123 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009124 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009125 {
9126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9127 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009128 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009129 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9130 vos_mem_free(pWdaParams) ;
9131 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009132 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009133
9134}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009135/*
Yue Madb90ac12013-04-04 13:39:13 -07009136 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009137 *
9138 */
Yue Madb90ac12013-04-04 13:39:13 -07009139void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009140{
9141 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9142
9143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009144 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009145 if(NULL == pWdaParams)
9146 {
9147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009148 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009149 VOS_ASSERT(0) ;
9150 return ;
9151 }
9152
9153 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9154 vos_mem_free(pWdaParams->wdaMsgParam);
9155 vos_mem_free(pWdaParams) ;
9156
9157 //print a msg, nothing else to do
9158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -07009159 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009160 return ;
9161}
Jeff Johnson295189b2012-06-20 16:38:30 -07009162/*
Yue Madb90ac12013-04-04 13:39:13 -07009163 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -07009164 * Free memory.
9165 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -07009166 */
9167void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
9168{
9169 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9170
9171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9172 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9173
9174 if(NULL == pWdaParams)
9175 {
9176 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9177 "%s: Invalid pWdaParams pointer", __func__);
9178 VOS_ASSERT(0);
9179 return;
9180 }
9181
9182 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9183 {
9184 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9185 vos_mem_free(pWdaParams->wdaMsgParam);
9186 vos_mem_free(pWdaParams);
9187 }
9188
9189 return;
9190}
9191/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009192 * FUNCTION: WDA_ProcessHostOffloadReq
9193 * Request to WDI to set the filter to minimize unnecessary host wakeup due
9194 * to broadcast traffic (sta mode).
9195 */
9196VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
9197 tSirHostOffloadReq *pHostOffloadParams)
9198{
9199 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009200 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009201 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
9202 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
9203 sizeof(WDI_HostOffloadReqParamsType)) ;
9204 tWDA_ReqParams *pWdaParams ;
9205
9206 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009207 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -07009208
9209 if(NULL == wdiHostOffloadInfo)
9210 {
9211 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009212 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009213 VOS_ASSERT(0);
9214 return VOS_STATUS_E_NOMEM;
9215 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009216 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9217 if(NULL == pWdaParams)
9218 {
9219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009220 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009221 VOS_ASSERT(0);
9222 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009223 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009224 return VOS_STATUS_E_NOMEM;
9225 }
9226
9227 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
9228 pHostOffloadParams->offloadType;
9229 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
9230 pHostOffloadParams->enableOrDisable;
9231
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009232 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
9233 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
9234
Jeff Johnson295189b2012-06-20 16:38:30 -07009235 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
9236 {
9237 case SIR_IPV4_ARP_REPLY_OFFLOAD:
9238 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
9239 pHostOffloadParams->params.hostIpv4Addr,
9240 4);
9241 break;
9242 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
9243 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
9244 pHostOffloadParams->params.hostIpv6Addr,
9245 16);
9246 break;
9247 case SIR_IPV6_NS_OFFLOAD:
9248 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
9249 pHostOffloadParams->params.hostIpv6Addr,
9250 16);
9251
9252#ifdef WLAN_NS_OFFLOAD
9253 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
9254 {
9255 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
9256 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
9257 16);
9258 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
9259 }
9260 else
9261 {
9262 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
9263 }
9264
9265 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
9266 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
9267 16);
9268 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
9269 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
9270 6);
9271
9272 //Only two are supported so let's go through them without a loop
9273 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
9274 {
9275 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
9276 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
9277 16);
9278 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
9279 }
9280 else
9281 {
9282 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
9283 }
9284
9285 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
9286 {
9287 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
9288 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
9289 16);
9290 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
9291 }
9292 else
9293 {
9294 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
9295 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +05309296 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
9297 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07009298 break;
9299#endif //WLAN_NS_OFFLOAD
9300 default:
9301 {
9302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9303 "No Handling for Offload Type %x in WDA "
9304 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
9305 //WDA_VOS_ASSERT(0) ;
9306 }
9307 }
Yue Madb90ac12013-04-04 13:39:13 -07009308 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
9309 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009310
Jeff Johnson295189b2012-06-20 16:38:30 -07009311 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009312 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009313 /* store Params pass it to WDI */
9314 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
9315 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009316
Jeff Johnson295189b2012-06-20 16:38:30 -07009317
Jeff Johnson43971f52012-07-17 12:26:56 -07009318 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -07009319 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009320
Jeff Johnson43971f52012-07-17 12:26:56 -07009321 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009322 {
9323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9324 "Failure in host offload REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009325 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009326 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9327 vos_mem_free(pWdaParams->wdaMsgParam);
9328 vos_mem_free(pWdaParams) ;
9329 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009330 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009331
9332}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009333/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009334 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009335 *
9336 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009337void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009338{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009339 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9340
Jeff Johnson295189b2012-06-20 16:38:30 -07009341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009342 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009343
9344 if(NULL == pWdaParams)
9345 {
9346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009347 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009348 VOS_ASSERT(0) ;
9349 return ;
9350 }
9351
9352 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9353 vos_mem_free(pWdaParams->wdaMsgParam);
9354 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -07009355
Jeff Johnson295189b2012-06-20 16:38:30 -07009356 //print a msg, nothing else to do
9357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009358 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009359 return ;
9360}
Jeff Johnson295189b2012-06-20 16:38:30 -07009361/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009362 * FUNCTION: WDA_KeepAliveReqCallback
9363 * Free memory.
9364 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
9365 */
9366void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
9367{
9368 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9369
9370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9371 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9372
9373 if(NULL == pWdaParams)
9374 {
9375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9376 "%s: pWdaParams received NULL", __func__);
9377 VOS_ASSERT(0);
9378 return;
9379 }
9380
9381 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9382 {
9383 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9384 vos_mem_free(pWdaParams->wdaMsgParam);
9385 vos_mem_free(pWdaParams);
9386 }
9387
9388 return;
9389}
9390/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009391 * FUNCTION: WDA_ProcessKeepAliveReq
9392 * Request to WDI to send Keep Alive packets to minimize unnecessary host
9393 * wakeup due to broadcast traffic (sta mode).
9394 */
9395VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
9396 tSirKeepAliveReq *pKeepAliveParams)
9397{
9398 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009399 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009400 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
9401 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
9402 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009403 tWDA_ReqParams *pWdaParams;
9404
Jeff Johnson295189b2012-06-20 16:38:30 -07009405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009406 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009407 if(NULL == wdiKeepAliveInfo)
9408 {
9409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009410 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009411 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009412 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009413 return VOS_STATUS_E_NOMEM;
9414 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009415
9416 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9417 if(NULL == pWdaParams)
9418 {
9419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009420 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009421 VOS_ASSERT(0);
9422 vos_mem_free(wdiKeepAliveInfo);
9423 vos_mem_free(pKeepAliveParams);
9424 return VOS_STATUS_E_NOMEM;
9425 }
9426
Jeff Johnson295189b2012-06-20 16:38:30 -07009427 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
9428 pKeepAliveParams->packetType;
9429 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
9430 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009431
9432 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
9433 pKeepAliveParams->bssId,
9434 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07009435
9436 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
9437 {
9438 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
9439 pKeepAliveParams->hostIpv4Addr,
9440 SIR_IPV4_ADDR_LEN);
9441 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
9442 pKeepAliveParams->destIpv4Addr,
9443 SIR_IPV4_ADDR_LEN);
9444 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
9445 pKeepAliveParams->destMacAddr,
9446 SIR_MAC_ADDR_LEN);
9447 }
9448 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
9449 {
9450 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
9451 SIR_IPV4_ADDR_LEN,
9452 0);
9453 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
9454 SIR_IPV4_ADDR_LEN,
9455 0);
9456 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
9457 SIR_MAC_ADDR_LEN,
9458 0);
9459 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009460 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
9461 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009462
Jeff Johnson295189b2012-06-20 16:38:30 -07009463 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009464 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009465 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009466 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
9467 pWdaParams->pWdaContext = pWDA;
9468
Jeff Johnson295189b2012-06-20 16:38:30 -07009469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
9470 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
9471 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
9472 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
9473 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
9474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
9475 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
9476 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
9477 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
9478 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
9479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9480 "WDA DMAC : %d:%d:%d:%d:%d:%d",
9481 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
9482 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
9483 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
9484 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
9485 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
9486 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
9487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9488 "TimePeriod %d PacketType %d",
9489 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
9490 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -07009491 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009492 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009493
Jeff Johnson43971f52012-07-17 12:26:56 -07009494 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009495 {
9496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9497 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009498 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009499 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9500 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009501 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009502 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009503 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009504
9505}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009506/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009507 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009508 *
9509 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009510void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009511 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
9512 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009513{
9514 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009516 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009517 if(NULL == pWdaParams)
9518 {
9519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009520 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009521 VOS_ASSERT(0) ;
9522 return ;
9523 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009524 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9525 vos_mem_free(pWdaParams->wdaMsgParam);
9526 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009527 return ;
9528}
Jeff Johnson295189b2012-06-20 16:38:30 -07009529/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009530 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
9531 * Free memory.
9532 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
9533 */
9534void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
9535{
9536 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9537
9538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9539 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9540
9541 if(NULL == pWdaParams)
9542 {
9543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9544 "%s: pWdaParams received NULL", __func__);
9545 VOS_ASSERT(0);
9546 return;
9547 }
9548
9549 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9550 {
9551 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9552 vos_mem_free(pWdaParams->wdaMsgParam);
9553 vos_mem_free(pWdaParams);
9554 }
9555
9556 return;
9557}
9558
9559/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009560 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
9561 * Request to WDI to add WOWL Bcast pattern
9562 */
9563VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
9564 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
9565{
9566 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009567 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009568 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
9569 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
9570 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
9571 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009573 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009574 if(NULL == wdiWowlAddBcPtrnInfo)
9575 {
9576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009577 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009578 VOS_ASSERT(0);
9579 return VOS_STATUS_E_NOMEM;
9580 }
9581 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9582 if(NULL == pWdaParams)
9583 {
9584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009585 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009586 VOS_ASSERT(0);
9587 vos_mem_free(wdiWowlAddBcPtrnInfo);
9588 return VOS_STATUS_E_NOMEM;
9589 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009590 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
9591 pWowlAddBcPtrnParams->ucPatternId;
9592 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
9593 pWowlAddBcPtrnParams->ucPatternByteOffset;
9594 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
9595 pWowlAddBcPtrnParams->ucPatternMaskSize;
9596 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
9597 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -07009598 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
9599 {
9600 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
9601 pWowlAddBcPtrnParams->ucPattern,
9602 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
9603 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
9604 pWowlAddBcPtrnParams->ucPatternMask,
9605 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
9606 }
9607 else
9608 {
9609 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
9610 pWowlAddBcPtrnParams->ucPattern,
9611 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9612 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
9613 pWowlAddBcPtrnParams->ucPatternMask,
9614 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9615
9616 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
9617 pWowlAddBcPtrnParams->ucPatternExt,
9618 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9619 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
9620 pWowlAddBcPtrnParams->ucPatternMaskExt,
9621 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9622 }
9623
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009624 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
9625 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
9626
Yue Ma7f44bbe2013-04-12 11:47:39 -07009627 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
9628 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009629 /* Store param pointer as passed in by caller */
9630 /* store Params pass it to WDI */
9631 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
9632 pWdaParams->pWdaContext = pWDA;
9633 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009634 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009635 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009636 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009637 {
9638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9639 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009640 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009641 vos_mem_free(pWdaParams->wdaMsgParam) ;
9642 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9643 vos_mem_free(pWdaParams) ;
9644 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009645 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009646
9647}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009648/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009649 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009650 *
9651 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009652void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009653 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
9654 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009655{
9656 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009658 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009659 if(NULL == pWdaParams)
9660 {
9661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009662 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009663 VOS_ASSERT(0) ;
9664 return ;
9665 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009666 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9667 vos_mem_free(pWdaParams->wdaMsgParam);
9668 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009669 return ;
9670}
Jeff Johnson295189b2012-06-20 16:38:30 -07009671/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009672 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
9673 * Free memory.
9674 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
9675 */
9676void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
9677{
9678 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9679
9680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9681 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9682
9683 if(NULL == pWdaParams)
9684 {
9685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9686 "%s: pWdaParams received NULL", __func__);
9687 VOS_ASSERT(0);
9688 return;
9689 }
9690
9691 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9692 {
9693 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9694 vos_mem_free(pWdaParams->wdaMsgParam);
9695 vos_mem_free(pWdaParams);
9696 }
9697
9698 return;
9699}
9700/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009701 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
9702 * Request to WDI to delete WOWL Bcast pattern
9703 */
9704VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
9705 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
9706{
9707 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009708 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009709 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
9710 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
9711 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
9712 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009714 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009715 if(NULL == wdiWowlDelBcPtrnInfo)
9716 {
9717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009718 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009719 VOS_ASSERT(0);
9720 return VOS_STATUS_E_NOMEM;
9721 }
9722 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9723 if(NULL == pWdaParams)
9724 {
9725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009726 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009727 VOS_ASSERT(0);
9728 vos_mem_free(wdiWowlDelBcPtrnInfo);
9729 return VOS_STATUS_E_NOMEM;
9730 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009731 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
9732 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009733
9734 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
9735 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
9736
Yue Ma7f44bbe2013-04-12 11:47:39 -07009737 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
9738 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009739 /* Store param pointer as passed in by caller */
9740 /* store Params pass it to WDI */
9741 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
9742 pWdaParams->pWdaContext = pWDA;
9743 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009744 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009745 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009746 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009747 {
9748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9749 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009750 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009751 vos_mem_free(pWdaParams->wdaMsgParam) ;
9752 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9753 vos_mem_free(pWdaParams) ;
9754 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009755 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009756
9757}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009758/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009759 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009760 *
9761 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009762void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009763{
9764 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9765 tWDA_CbContext *pWDA;
9766 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009768 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009769 if(NULL == pWdaParams)
9770 {
9771 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009772 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009773 VOS_ASSERT(0) ;
9774 return ;
9775 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009776 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
9777 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
9778
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009779 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
9780
Jeff Johnson295189b2012-06-20 16:38:30 -07009781 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9782 vos_mem_free(pWdaParams) ;
9783
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009784 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009785 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -07009786 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009787 return ;
9788}
Jeff Johnson295189b2012-06-20 16:38:30 -07009789/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009790 * FUNCTION: WDA_WowlEnterReqCallback
9791 * Free memory and send WOWL Enter RSP back to PE.
9792 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
9793 */
9794void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
9795{
9796 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9797 tWDA_CbContext *pWDA;
9798 tSirHalWowlEnterParams *pWowlEnterParams;
9799
9800 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9801 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9802
9803 if(NULL == pWdaParams)
9804 {
9805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9806 "%s: pWdaParams received NULL", __func__);
9807 VOS_ASSERT(0);
9808 return;
9809 }
9810
9811 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9812 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
9813 pWowlEnterParams->status = wdiStatus;
9814
9815 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9816 {
9817 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9818 vos_mem_free(pWdaParams);
9819 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
9820 }
9821
9822 return;
9823}
9824/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009825 * FUNCTION: WDA_ProcessWowlEnterReq
9826 * Request to WDI to enter WOWL
9827 */
9828VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
9829 tSirHalWowlEnterParams *pWowlEnterParams)
9830{
9831 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009832 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009833 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
9834 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
9835 sizeof(WDI_WowlEnterReqParamsType)) ;
9836 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009838 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009839 if(NULL == wdiWowlEnterInfo)
9840 {
9841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009842 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009843 VOS_ASSERT(0);
9844 return VOS_STATUS_E_NOMEM;
9845 }
9846 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9847 if(NULL == pWdaParams)
9848 {
9849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009850 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009851 VOS_ASSERT(0);
9852 vos_mem_free(wdiWowlEnterInfo);
9853 return VOS_STATUS_E_NOMEM;
9854 }
Kumar Anandaca924e2013-07-22 14:35:34 -07009855
9856 vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
9857
Jeff Johnson295189b2012-06-20 16:38:30 -07009858 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
9859 pWowlEnterParams->magicPtrn,
9860 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07009861 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
9862 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07009863 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
9864 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07009865 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
9866 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07009867 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
9868 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07009869 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
9870 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07009871 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
9872 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07009873 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
9874 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -07009875 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
9876 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -07009877#ifdef WLAN_WAKEUP_EVENTS
9878 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
9879 pWowlEnterParams->ucWoWEAPIDRequestEnable;
9880
9881 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
9882 pWowlEnterParams->ucWoWEAPOL4WayEnable;
9883
9884 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
9885 pWowlEnterParams->ucWowNetScanOffloadMatch;
9886
9887 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
9888 pWowlEnterParams->ucWowGTKRekeyError;
9889
9890 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
9891 pWowlEnterParams->ucWoWBSSConnLoss;
9892#endif // WLAN_WAKEUP_EVENTS
9893
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009894 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
9895 pWowlEnterParams->bssIdx;
9896
Yue Ma7f44bbe2013-04-12 11:47:39 -07009897 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
9898 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009899 /* Store param pointer as passed in by caller */
9900 /* store Params pass it to WDI */
9901 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
9902 pWdaParams->pWdaContext = pWDA;
9903 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009904 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009905 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009906 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009907 {
9908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9909 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009910 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009911 vos_mem_free(pWdaParams->wdaMsgParam) ;
9912 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9913 vos_mem_free(pWdaParams) ;
9914 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009915 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009916
9917}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009918/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009919 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009920 *
9921 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009922void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009923{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009924 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9925 tWDA_CbContext *pWDA;
9926 tSirHalWowlExitParams *pWowlExitParams;
9927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009928 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009929 if(NULL == pWdaParams)
9930 {
9931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009932 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009933 VOS_ASSERT(0) ;
9934 return ;
9935 }
9936 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
9937 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
9938
9939 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009940 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009941
9942 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9943 vos_mem_free(pWdaParams) ;
9944
Jeff Johnson295189b2012-06-20 16:38:30 -07009945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009946 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009947 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009948 return ;
9949}
Jeff Johnson295189b2012-06-20 16:38:30 -07009950/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009951 * FUNCTION: WDA_WowlExitReqCallback
9952 * Free memory and send WOWL Exit RSP back to PE.
9953 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
9954 */
9955void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
9956{
9957 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9958 tWDA_CbContext *pWDA;
9959 tSirHalWowlExitParams *pWowlExitParams;
9960
9961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9962 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9963
9964 if(NULL == pWdaParams)
9965 {
9966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9967 "%s: pWdaParams received NULL", __func__);
9968 VOS_ASSERT(0);
9969 return;
9970 }
9971
9972 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9973 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
9974 pWowlExitParams->status = wdiStatus;
9975
9976 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9977 {
9978 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9979 vos_mem_free(pWdaParams);
9980 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
9981 }
9982
9983 return;
9984}
9985/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009986 * FUNCTION: WDA_ProcessWowlExitReq
9987 * Request to WDI to add WOWL Bcast pattern
9988 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009989VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
9990 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009991{
9992 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009993 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009994 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
9995 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
9996 sizeof(WDI_WowlExitReqParamsType)) ;
9997 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009999 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010000 if(NULL == wdiWowlExitInfo)
10001 {
10002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010003 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010004 VOS_ASSERT(0);
10005 return VOS_STATUS_E_NOMEM;
10006 }
10007 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10008 if(NULL == pWdaParams)
10009 {
10010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010011 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010012 VOS_ASSERT(0);
10013 vos_mem_free(wdiWowlExitInfo);
10014 return VOS_STATUS_E_NOMEM;
10015 }
10016
10017 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
10018 pWowlExitParams->bssIdx;
10019
Yue Ma7f44bbe2013-04-12 11:47:39 -070010020 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
10021 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010022
10023 /* Store param pointer as passed in by caller */
10024 /* store Params pass it to WDI */
10025 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
10026 pWdaParams->pWdaContext = pWDA;
10027 pWdaParams->wdaMsgParam = pWowlExitParams;
10028
10029 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010030 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010031
Jeff Johnson43971f52012-07-17 12:26:56 -070010032 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010033 {
10034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10035 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010036 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010037 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10038 vos_mem_free(pWdaParams->wdaMsgParam);
10039 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010040 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010041 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010042}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010043/*
10044 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
10045 * Request to WDI to determine whether a given station is capable of
10046 * using HW-based frame translation
10047 */
10048v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
10049 tANI_U8 staIdx)
10050{
10051 return WDI_IsHwFrameTxTranslationCapable(staIdx);
10052}
Jeff Johnson295189b2012-06-20 16:38:30 -070010053/*
10054 * FUNCTION: WDA_NvDownloadReqCallback
10055 * send NV Download RSP back to PE
10056 */
10057void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
10058 void* pUserData)
10059{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010060
10061 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
10062 tWDA_CbContext *pWDA;
10063
Jeff Johnson295189b2012-06-20 16:38:30 -070010064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010065 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010066
10067 if(NULL == pWdaParams)
10068 {
10069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010070 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010071 VOS_ASSERT(0) ;
10072 return ;
10073 }
10074
10075 pWDA = pWdaParams->pWdaContext;
10076
Jeff Johnson295189b2012-06-20 16:38:30 -070010077 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010078 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10079 vos_mem_free(pWdaParams);
10080
Jeff Johnson295189b2012-06-20 16:38:30 -070010081 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070010082 return ;
10083}
Jeff Johnson295189b2012-06-20 16:38:30 -070010084/*
10085 * FUNCTION: WDA_ProcessNvDownloadReq
10086 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
10087 */
10088VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
10089{
10090 /* Initialize the local Variables*/
10091 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
10092 v_VOID_t *pNvBuffer=NULL;
10093 v_SIZE_t bufferSize = 0;
10094 WDI_Status status = WDI_STATUS_E_FAILURE;
10095 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010096 tWDA_ReqParams *pWdaParams ;
10097
Jeff Johnson295189b2012-06-20 16:38:30 -070010098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010099 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010100 if(NULL == pWDA)
10101 {
10102 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010103 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010104 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070010105 return VOS_STATUS_E_FAILURE;
10106 }
10107
10108 /* Get the NV structure base address and size from VOS */
Prasanna Kumarf6c94ae2013-04-11 20:05:21 -070010109 vos_nv_getNVEncodedBuffer(&pNvBuffer,&bufferSize);
10110
Jeff Johnson295189b2012-06-20 16:38:30 -070010111 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
10112 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010113 if(NULL == wdiNvDownloadReqParam)
10114 {
10115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010116 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010117 VOS_ASSERT(0);
10118 return VOS_STATUS_E_NOMEM;
10119 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010120 /* Copy Params to wdiNvDownloadReqParam*/
10121 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
10122 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010123
10124 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10125 if(NULL == pWdaParams)
10126 {
10127 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010128 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010129 VOS_ASSERT(0);
10130 vos_mem_free(wdiNvDownloadReqParam);
10131 return VOS_STATUS_E_NOMEM;
10132 }
10133
Jeff Johnson295189b2012-06-20 16:38:30 -070010134 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010135 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
10136 pWdaParams->wdaMsgParam = NULL;
10137 pWdaParams->pWdaContext = pWDA;
10138
10139
Jeff Johnson295189b2012-06-20 16:38:30 -070010140 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010141
Jeff Johnson295189b2012-06-20 16:38:30 -070010142 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010143 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
10144
Jeff Johnson295189b2012-06-20 16:38:30 -070010145 if(IS_WDI_STATUS_FAILURE(status))
10146 {
10147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10148 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010149 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10150 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010151 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010152 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010153}
10154/*
10155 * FUNCTION: WDA_FlushAcReqCallback
10156 * send Flush AC RSP back to TL
10157 */
10158void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
10159{
10160 vos_msg_t wdaMsg = {0} ;
10161 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10162 tFlushACReq *pFlushACReqParams;
10163 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010165 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010166 if(NULL == pWdaParams)
10167 {
10168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010169 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010170 VOS_ASSERT(0) ;
10171 return ;
10172 }
10173
10174 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
10175 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
10176 if(NULL == pFlushACRspParams)
10177 {
10178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010179 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010180 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010181 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010182 return ;
10183 }
10184 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
10185 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
10186 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
10187 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
10188 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010189 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010190 vos_mem_free(pWdaParams->wdaMsgParam) ;
10191 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10192 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010193 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
10194 wdaMsg.bodyptr = (void *)pFlushACRspParams;
10195 // POST message to TL
10196 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
10197
Jeff Johnson295189b2012-06-20 16:38:30 -070010198 return ;
10199}
Jeff Johnson295189b2012-06-20 16:38:30 -070010200/*
10201 * FUNCTION: WDA_ProcessFlushAcReq
10202 * Request to WDI to Update the DELBA REQ params.
10203 */
10204VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
10205 tFlushACReq *pFlushAcReqParams)
10206{
10207 WDI_Status status = WDI_STATUS_SUCCESS ;
10208 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
10209 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
10210 sizeof(WDI_FlushAcReqParamsType)) ;
10211 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010212 if(NULL == wdiFlushAcReqParam)
10213 {
10214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010215 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010216 VOS_ASSERT(0);
10217 return VOS_STATUS_E_NOMEM;
10218 }
10219 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10220 if(NULL == pWdaParams)
10221 {
10222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010223 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010224 VOS_ASSERT(0);
10225 vos_mem_free(wdiFlushAcReqParam);
10226 return VOS_STATUS_E_NOMEM;
10227 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010229 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010230 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
10231 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
10232 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
10233 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -070010234 /* Store Flush AC pointer, as this will be used for response */
10235 /* store Params pass it to WDI */
10236 pWdaParams->pWdaContext = pWDA;
10237 pWdaParams->wdaMsgParam = pFlushAcReqParams;
10238 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010239 status = WDI_FlushAcReq(wdiFlushAcReqParam,
10240 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010241 if(IS_WDI_STATUS_FAILURE(status))
10242 {
10243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10244 "Failure in Flush AC REQ Params WDI API, free all the memory " );
10245 vos_mem_free(pWdaParams->wdaMsgParam) ;
10246 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10247 vos_mem_free(pWdaParams) ;
10248 //TODO: respond to TL with failure
10249 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010250 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010251}
Jeff Johnson295189b2012-06-20 16:38:30 -070010252/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010253 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010254 *
10255 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010256void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010257{
10258 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10259 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -070010260 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010261
10262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010263 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010264 if(NULL == pWdaParams)
10265 {
10266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010267 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010268 VOS_ASSERT(0) ;
10269 return ;
10270 }
10271 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10272 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
10273 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
10274 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
10275 {
10276 pWDA->wdaAmpSessionOn = VOS_FALSE;
10277 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010278 vos_mem_free(pWdaParams->wdaMsgParam) ;
10279 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10280 vos_mem_free(pWdaParams) ;
10281 /*
10282 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
10283 * param here
10284 */
Jeff Johnson295189b2012-06-20 16:38:30 -070010285 return ;
10286}
Yue Ma7f44bbe2013-04-12 11:47:39 -070010287/*
10288 * FUNCTION: WDA_BtAmpEventReqCallback
10289 * Free memory.
10290 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
10291 */
10292void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
10293{
10294 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10295 tWDA_CbContext *pWDA;
10296 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010297
Yue Ma7f44bbe2013-04-12 11:47:39 -070010298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10299 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10300
10301 if(NULL == pWdaParams)
10302 {
10303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10304 "%s: pWdaParams received NULL", __func__);
10305 VOS_ASSERT(0);
10306 return;
10307 }
10308
10309 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10310 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
10311
10312 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
10313 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
10314 {
10315 pWDA->wdaAmpSessionOn = VOS_FALSE;
10316 }
10317
10318 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10319 {
10320 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10321 vos_mem_free(pWdaParams->wdaMsgParam);
10322 vos_mem_free(pWdaParams);
10323 }
10324
10325 return;
10326}
Jeff Johnson295189b2012-06-20 16:38:30 -070010327/*
10328 * FUNCTION: WDA_ProcessBtAmpEventReq
10329 * Request to WDI to Update with BT AMP events.
10330 */
10331VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
10332 tSmeBtAmpEvent *pBtAmpEventParams)
10333{
10334 WDI_Status status = WDI_STATUS_SUCCESS ;
10335 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
10336 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
10337 sizeof(WDI_BtAmpEventParamsType)) ;
10338 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010340 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010341 if(NULL == wdiBtAmpEventParam)
10342 {
10343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010344 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010345 VOS_ASSERT(0);
10346 return VOS_STATUS_E_NOMEM;
10347 }
10348 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10349 if(NULL == pWdaParams)
10350 {
10351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010352 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010353 VOS_ASSERT(0);
10354 vos_mem_free(wdiBtAmpEventParam);
10355 return VOS_STATUS_E_NOMEM;
10356 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010357 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
10358 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010359 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
10360 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010361 /* Store BT AMP event pointer, as this will be used for response */
10362 /* store Params pass it to WDI */
10363 pWdaParams->pWdaContext = pWDA;
10364 pWdaParams->wdaMsgParam = pBtAmpEventParams;
10365 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010366 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010367 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010368 if(IS_WDI_STATUS_FAILURE(status))
10369 {
10370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10371 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
10372 vos_mem_free(pWdaParams->wdaMsgParam) ;
10373 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10374 vos_mem_free(pWdaParams) ;
10375 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010376 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
10377 {
10378 pWDA->wdaAmpSessionOn = VOS_TRUE;
10379 }
10380 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010381}
10382
Jeff Johnson295189b2012-06-20 16:38:30 -070010383/*
10384 * FUNCTION: WDA_FTMCommandReqCallback
10385 * Handle FTM CMD response came from HAL
10386 * Route responce to HDD FTM
10387 */
10388void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
10389 void *usrData)
10390{
10391 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010392 if((NULL == pWDA) || (NULL == ftmCmdRspData))
10393 {
10394 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053010395 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070010396 return;
10397 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010398 /* Release Current FTM Command Request */
10399 vos_mem_free(pWDA->wdaFTMCmdReq);
10400 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010401 /* Post FTM Responce to HDD FTM */
10402 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070010403 return;
10404}
Jeff Johnson295189b2012-06-20 16:38:30 -070010405/*
10406 * FUNCTION: WDA_ProcessFTMCommand
10407 * Send FTM command to WDI
10408 */
10409VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
10410 tPttMsgbuffer *pPTTFtmCmd)
10411{
10412 WDI_Status status = WDI_STATUS_SUCCESS;
10413 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010414 ftmCMDReq = (WDI_FTMCommandReqType *)
10415 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
10416 if(NULL == ftmCMDReq)
10417 {
10418 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10419 "WDA FTM Command buffer alloc fail");
10420 return VOS_STATUS_E_NOMEM;
10421 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010422 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
10423 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -070010424 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -070010425 /* Send command to WDI */
10426 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070010427 return status;
10428}
Jeff Johnsone7245742012-09-05 17:12:55 -070010429#ifdef FEATURE_OEM_DATA_SUPPORT
10430/*
10431 * FUNCTION: WDA_StartOemDataReqCallback
10432 *
10433 */
10434void WDA_StartOemDataReqCallback(
10435 WDI_oemDataRspParamsType *wdiOemDataRspParams,
10436 void* pUserData)
10437{
10438 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010439 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10440 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -070010441 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010442
Jeff Johnsone7245742012-09-05 17:12:55 -070010443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010444 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010445
10446 if(NULL == pWdaParams)
10447 {
10448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010449 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010450 VOS_ASSERT(0) ;
10451 return ;
10452 }
10453 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10454
Jeff Johnsone7245742012-09-05 17:12:55 -070010455 if(NULL == pWDA)
10456 {
10457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010458 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070010459 VOS_ASSERT(0);
10460 return ;
10461 }
10462
10463 /*
10464 * Allocate memory for response params sent to PE
10465 */
10466 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
10467
10468 // Check if memory is allocated for OemdataMeasRsp Params.
10469 if(NULL == pOemDataRspParams)
10470 {
10471 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10472 "OEM DATA WDA callback alloc fail");
10473 VOS_ASSERT(0) ;
10474 return;
10475 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010476
Jeff Johnsone7245742012-09-05 17:12:55 -070010477 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010478 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10479 vos_mem_free(pWdaParams->wdaMsgParam);
10480 vos_mem_free(pWdaParams) ;
10481
Jeff Johnsone7245742012-09-05 17:12:55 -070010482 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080010483 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -070010484 * Also, here success always means that we have atleast one BSSID.
10485 */
10486 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
10487
10488 //enable Tx
10489 status = WDA_ResumeDataTx(pWDA);
10490 if(status != VOS_STATUS_SUCCESS)
10491 {
10492 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
10493 }
10494 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
10495 return ;
10496}
10497/*
10498 * FUNCTION: WDA_ProcessStartOemDataReq
10499 * Send Start Oem Data Req to WDI
10500 */
10501VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
10502 tStartOemDataReq *pOemDataReqParams)
10503{
10504 WDI_Status status = WDI_STATUS_SUCCESS;
10505 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010506 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -070010507
10508 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
10509
10510 if(NULL == wdiOemDataReqParams)
10511 {
10512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010513 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070010514 VOS_ASSERT(0);
10515 return VOS_STATUS_E_NOMEM;
10516 }
10517
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010518 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
10519 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
10520 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
10521 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -070010522
10523 wdiOemDataReqParams->wdiReqStatusCB = NULL;
10524
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010525 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10526 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -070010527 {
10528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010529 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070010530 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010531 vos_mem_free(pOemDataReqParams);
10532 VOS_ASSERT(0);
10533 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -070010534 }
Jeff Johnsone7245742012-09-05 17:12:55 -070010535
Bernald44a1ae2013-01-09 08:30:39 -080010536 pWdaParams->pWdaContext = (void*)pWDA;
10537 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
10538 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010539
10540 status = WDI_StartOemDataReq(wdiOemDataReqParams,
10541 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070010542
10543 if(IS_WDI_STATUS_FAILURE(status))
10544 {
10545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10546 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010547 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10548 vos_mem_free(pWdaParams->wdaMsgParam);
10549 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070010550 }
10551 return CONVERT_WDI2VOS_STATUS(status) ;
10552}
10553#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070010554/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010555 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010556 *
10557 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010558void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010559{
10560 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010562 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010563 if(NULL == pWdaParams)
10564 {
10565 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010566 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010567 VOS_ASSERT(0) ;
10568 return ;
10569 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010570
10571 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10572 vos_mem_free(pWdaParams->wdaMsgParam);
10573 vos_mem_free(pWdaParams);
10574
10575 return ;
10576}
10577/*
10578 * FUNCTION: WDA_SetTxPerTrackingReqCallback
10579 * Free memory.
10580 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
10581 */
10582void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
10583{
10584 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10585
10586 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10587 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10588
10589 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010590 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070010591 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10592 "%s: pWdaParams received NULL", __func__);
10593 VOS_ASSERT(0);
10594 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070010595 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010596
10597 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010598 {
10599 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -070010600 vos_mem_free(pWdaParams->wdaMsgParam);
10601 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010602 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010603
10604 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070010605}
Jeff Johnson295189b2012-06-20 16:38:30 -070010606#ifdef WLAN_FEATURE_GTK_OFFLOAD
10607/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010608 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010609 *
10610 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010611void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010612 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010613{
10614 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10615
10616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010617 "<------ %s " ,__func__);
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080010618 if(NULL == pWdaParams)
10619 {
10620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10621 "%s: pWdaParams received NULL", __func__);
10622 VOS_ASSERT(0);
10623 return;
10624 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010625
Jeff Johnson295189b2012-06-20 16:38:30 -070010626 vos_mem_free(pWdaParams->wdaMsgParam) ;
10627 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10628 vos_mem_free(pWdaParams) ;
10629
10630 //print a msg, nothing else to do
10631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010632 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010633
10634 return ;
10635}
Yue Ma7f44bbe2013-04-12 11:47:39 -070010636/*
10637 * FUNCTION: WDA_GTKOffloadReqCallback
10638 * Free memory.
10639 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
10640 */
10641void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
10642{
10643 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010644
Yue Ma7f44bbe2013-04-12 11:47:39 -070010645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10646 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10647
10648 if(NULL == pWdaParams)
10649 {
10650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10651 "%s: pWdaParams received NULL", __func__);
10652 VOS_ASSERT(0);
10653 return;
10654 }
10655
10656 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10657 {
10658 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10659 vos_mem_free(pWdaParams->wdaMsgParam);
10660 vos_mem_free(pWdaParams);
10661 }
10662
10663 return;
10664}
Jeff Johnson295189b2012-06-20 16:38:30 -070010665/*
10666 * FUNCTION: WDA_ProcessGTKOffloadReq
10667 * Request to WDI to set the filter to minimize unnecessary host wakeup due
10668 * to broadcast traffic (sta mode).
10669 */
10670VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
10671 tpSirGtkOffloadParams pGtkOffloadParams)
10672{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010673 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010674 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
10675 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
10676 sizeof(WDI_GtkOffloadReqMsg)) ;
10677 tWDA_ReqParams *pWdaParams ;
10678
10679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010680 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010681
10682 if(NULL == wdiGtkOffloadReqMsg)
10683 {
10684 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010685 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010686 VOS_ASSERT(0);
10687 return VOS_STATUS_E_NOMEM;
10688 }
10689
10690 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10691 if(NULL == pWdaParams)
10692 {
10693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010694 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010695 VOS_ASSERT(0);
10696 vos_mem_free(wdiGtkOffloadReqMsg);
10697 return VOS_STATUS_E_NOMEM;
10698 }
10699
10700 //
10701 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
10702 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010703
10704 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010705 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010706
Jeff Johnson295189b2012-06-20 16:38:30 -070010707 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
10708 // Copy KCK
10709 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
10710 // Copy KEK
10711 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
10712 // Copy KeyReplayCounter
10713 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
10714 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
10715
Yue Ma7f44bbe2013-04-12 11:47:39 -070010716 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
10717 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010718
Jeff Johnson295189b2012-06-20 16:38:30 -070010719
10720 /* Store Params pass it to WDI */
10721 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
10722 pWdaParams->pWdaContext = pWDA;
10723 /* Store param pointer as passed in by caller */
10724 pWdaParams->wdaMsgParam = pGtkOffloadParams;
10725
Yue Ma7f44bbe2013-04-12 11:47:39 -070010726 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010727
10728 if(IS_WDI_STATUS_FAILURE(status))
10729 {
10730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10731 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
10732 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10733 vos_mem_free(pWdaParams->wdaMsgParam);
10734 vos_mem_free(pWdaParams);
10735 }
10736
10737 return CONVERT_WDI2VOS_STATUS(status) ;
10738}
10739
10740/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010741 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010742 *
10743 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010744void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010745 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010746{
10747 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10748 tWDA_CbContext *pWDA;
10749 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Nirav Shah374de6e2014-02-13 16:40:01 +053010750 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070010751 vos_msg_t vosMsg;
10752
10753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010754 "<------ %s " ,__func__);
Nirav Shah374de6e2014-02-13 16:40:01 +053010755
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080010756 if(NULL == pWdaParams)
10757 {
10758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10759 "%s: pWdaParams received NULL", __func__);
10760 VOS_ASSERT(0);
10761 return;
10762 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010763
Nirav Shah374de6e2014-02-13 16:40:01 +053010764 pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams));
10765 if(NULL == pGtkOffloadGetInfoRsp)
10766 {
10767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10768 "%s: vos_mem_malloc failed ", __func__);
10769 VOS_ASSERT(0);
10770 return;
10771 }
10772
Jeff Johnson295189b2012-06-20 16:38:30 -070010773 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
10774 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
10775
10776 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
10777 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
10778
10779 /* Message Header */
10780 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
Kiran Kumar Lokerefdf42412013-07-17 17:40:58 -070010781 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010782
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010783 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
10784 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
10785 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
10786 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
10787 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070010788
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010789 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
10790 pwdiGtkOffloadGetInfoRsparams->bssId,
10791 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010792 /* VOS message wrapper */
10793 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
10794 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
10795 vosMsg.bodyval = 0;
10796
10797 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10798 {
10799 /* free the mem and return */
10800 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
10801 }
10802
10803 vos_mem_free(pWdaParams->wdaMsgParam) ;
10804 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10805 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010806
10807 return;
10808}
10809/*
10810 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
10811 * Free memory and send RSP back to SME.
10812 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
10813 */
10814void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
10815{
10816 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10817 vos_msg_t vosMsg;
10818
10819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10820 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10821
10822 if(NULL == pWdaParams)
10823 {
10824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10825 "%s: pWdaParams received NULL", __func__);
10826 VOS_ASSERT(0);
10827 return;
10828 }
10829
10830 /* VOS message wrapper */
10831 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
10832 vosMsg.bodyptr = NULL;
10833 vosMsg.bodyval = 0;
10834
10835 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10836 {
10837 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10838 vos_mem_free(pWdaParams->wdaMsgParam);
10839 vos_mem_free(pWdaParams);
10840 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
10841 }
10842
10843 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070010844}
10845#endif
10846
10847/*
10848 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
10849 * Request to WDI to set Tx Per Tracking configurations
10850 */
10851VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
10852{
10853 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010854 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010855 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
10856 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
10857 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
10858 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010860 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010861 if(NULL == pwdiSetTxPerTrackingReqParams)
10862 {
10863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010864 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010865 vos_mem_free(pTxPerTrackingParams);
10866 VOS_ASSERT(0);
10867 return VOS_STATUS_E_NOMEM;
10868 }
10869 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10870 if(NULL == pWdaParams)
10871 {
10872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010873 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010874 vos_mem_free(pwdiSetTxPerTrackingReqParams);
10875 vos_mem_free(pTxPerTrackingParams);
10876 VOS_ASSERT(0);
10877 return VOS_STATUS_E_NOMEM;
10878 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010879 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
10880 pTxPerTrackingParams->ucTxPerTrackingEnable;
10881 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
10882 pTxPerTrackingParams->ucTxPerTrackingPeriod;
10883 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
10884 pTxPerTrackingParams->ucTxPerTrackingRatio;
10885 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
10886 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010887 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
10888 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010889 /* Store param pointer as passed in by caller */
10890 /* store Params pass it to WDI
10891 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
10892 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
10893 pWdaParams->pWdaContext = pWDA;
10894 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010895 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010896 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010897 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010898 {
10899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10900 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010901 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010902 vos_mem_free(pWdaParams->wdaMsgParam) ;
10903 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10904 vos_mem_free(pWdaParams) ;
10905 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010906 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010907
10908}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010909/*
10910 * FUNCTION: WDA_HALDumpCmdCallback
10911 * Send the VOS complete .
10912 */
10913void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
10914 void* pUserData)
10915{
10916 tANI_U8 *buffer = NULL;
10917 tWDA_CbContext *pWDA = NULL;
10918 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010919 if(NULL == pWdaParams)
10920 {
10921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010922 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010923 VOS_ASSERT(0) ;
10924 return ;
10925 }
10926
10927 pWDA = pWdaParams->pWdaContext;
10928 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010929 if(wdiRspParams->usBufferLen > 0)
10930 {
10931 /*Copy the Resp data to UMAC supplied buffer*/
10932 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
10933 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010934 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10935 vos_mem_free(pWdaParams);
10936
10937 /* Indicate VOSS about the start complete */
10938 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070010939 return ;
10940}
10941
Jeff Johnson295189b2012-06-20 16:38:30 -070010942/*
10943 * FUNCTION: WDA_ProcessHALDumpCmdReq
10944 * Send Dump command to WDI
10945 */
10946VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
10947 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
10948 tANI_U32 arg4, tANI_U8 *pBuffer)
10949{
10950 WDI_Status status = WDI_STATUS_SUCCESS;
10951 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
10952 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
10953 tWDA_ReqParams *pWdaParams ;
10954 pVosContextType pVosContext = NULL;
10955 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010956 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
10957 (void *)pMac);
Katya Nigame4bafe02014-02-28 15:37:57 +053010958 if(pVosContext)
10959 {
10960 if (pVosContext->isLogpInProgress)
10961 {
10962 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
10963 "%s:LOGP in Progress. Ignore!!!", __func__);
10964 return VOS_STATUS_E_BUSY;
10965 }
10966 }
10967 else
10968 {
10969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10970 "%s: VOS Context Null", __func__);
10971 return VOS_STATUS_E_RESOURCES;
10972 }
10973
Jeff Johnson295189b2012-06-20 16:38:30 -070010974 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10975 if(NULL == pWdaParams)
10976 {
10977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010978 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010979 return VOS_STATUS_E_NOMEM;
10980 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010981 /* Allocate memory WDI request structure*/
10982 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
10983 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
10984 if(NULL == wdiHALDumpCmdReqParam)
10985 {
10986 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10987 "WDA HAL DUMP Command buffer alloc fail");
10988 vos_mem_free(pWdaParams);
10989 return WDI_STATUS_E_FAILURE;
10990 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010991 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070010992 /* Extract the arguments */
10993 wdiHalDumpCmdInfo->command = cmd;
10994 wdiHalDumpCmdInfo->argument1 = arg1;
10995 wdiHalDumpCmdInfo->argument2 = arg2;
10996 wdiHalDumpCmdInfo->argument3 = arg3;
10997 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070010998 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010999 pWdaParams->pWdaContext = pVosContext->pWDAContext;
11000
11001 /* Response message will be passed through the buffer */
11002 pWdaParams->wdaMsgParam = (void *)pBuffer;
11003
11004 /* store Params pass it to WDI */
11005 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011006 /* Send command to WDI */
11007 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback, pWdaParams);
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -080011008 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent), WDA_DUMPCMD_WAIT_TIMEOUT );
Jeff Johnson295189b2012-06-20 16:38:30 -070011009 if ( vStatus != VOS_STATUS_SUCCESS )
11010 {
11011 if ( vStatus == VOS_STATUS_E_TIMEOUT )
11012 {
11013 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011014 "%s: Timeout occurred before WDA_HALDUMP complete",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011015 }
11016 else
11017 {
11018 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011019 "%s: WDA_HALDUMP reporting other error",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011020 }
11021 VOS_ASSERT(0);
11022 }
11023 return status;
11024}
Jeff Johnson295189b2012-06-20 16:38:30 -070011025#ifdef WLAN_FEATURE_GTK_OFFLOAD
11026/*
11027 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
11028 * Request to WDI to get GTK Offload Information
11029 */
11030VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
11031 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
11032{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011033 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011034 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
11035 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
11036 tWDA_ReqParams *pWdaParams ;
11037
11038 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
11039 {
11040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011041 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011042 VOS_ASSERT(0);
11043 return VOS_STATUS_E_NOMEM;
11044 }
11045
11046 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11047 if(NULL == pWdaParams)
11048 {
11049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011050 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011051 VOS_ASSERT(0);
11052 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
11053 return VOS_STATUS_E_NOMEM;
11054 }
11055
Yue Ma7f44bbe2013-04-12 11:47:39 -070011056 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
11057 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011058
Jeff Johnson295189b2012-06-20 16:38:30 -070011059 /* Store Params pass it to WDI */
11060 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
11061 pWdaParams->pWdaContext = pWDA;
11062 /* Store param pointer as passed in by caller */
11063 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
11064
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011065 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011066 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011067
Yue Ma7f44bbe2013-04-12 11:47:39 -070011068 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011069
11070 if(IS_WDI_STATUS_FAILURE(status))
11071 {
11072 /* failure returned by WDI API */
11073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11074 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
11075 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11076 vos_mem_free(pWdaParams) ;
11077 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
11078 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
11079 }
11080
11081 return CONVERT_WDI2VOS_STATUS(status) ;
11082}
11083#endif // WLAN_FEATURE_GTK_OFFLOAD
11084
11085/*
Yue Mab9c86f42013-08-14 15:59:08 -070011086 * FUNCTION: WDA_ProcessAddPeriodicTxPtrnInd
11087 *
11088 */
11089VOS_STATUS WDA_ProcessAddPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
11090 tSirAddPeriodicTxPtrn *pAddPeriodicTxPtrnParams)
11091{
11092 WDI_Status wdiStatus;
11093 WDI_AddPeriodicTxPtrnParamsType *addPeriodicTxPtrnParams;
11094
11095 addPeriodicTxPtrnParams =
11096 vos_mem_malloc(sizeof(WDI_AddPeriodicTxPtrnParamsType));
11097
11098 if (NULL == addPeriodicTxPtrnParams)
11099 {
11100 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11101 "%s: Not able to allocate memory for addPeriodicTxPtrnParams!",
11102 __func__);
11103
11104 return VOS_STATUS_E_NOMEM;
11105 }
11106
11107 vos_mem_copy(&(addPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams),
11108 pAddPeriodicTxPtrnParams, sizeof(tSirAddPeriodicTxPtrn));
11109
11110 addPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
11111 addPeriodicTxPtrnParams->pUserData = pWDA;
11112
11113 wdiStatus = WDI_AddPeriodicTxPtrnInd(addPeriodicTxPtrnParams);
11114
11115 if (WDI_STATUS_PENDING == wdiStatus)
11116 {
11117 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11118 "Pending received for %s:%d", __func__, __LINE__ );
11119 }
11120 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11121 {
11122 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11123 "Failure in %s:%d", __func__, __LINE__ );
11124 }
11125
11126 vos_mem_free(addPeriodicTxPtrnParams);
11127
11128 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11129}
11130
11131/*
11132 * FUNCTION: WDA_ProcessDelPeriodicTxPtrnInd
11133 *
11134 */
11135VOS_STATUS WDA_ProcessDelPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
11136 tSirDelPeriodicTxPtrn *pDelPeriodicTxPtrnParams)
11137{
11138 WDI_Status wdiStatus;
11139 WDI_DelPeriodicTxPtrnParamsType *delPeriodicTxPtrnParams;
11140
11141 delPeriodicTxPtrnParams =
11142 vos_mem_malloc(sizeof(WDI_DelPeriodicTxPtrnParamsType));
11143
11144 if (NULL == delPeriodicTxPtrnParams)
11145 {
11146 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11147 "%s: Not able to allocate memory for delPeriodicTxPtrnParams!",
11148 __func__);
11149
11150 return VOS_STATUS_E_NOMEM;
11151 }
11152
11153 vos_mem_copy(&(delPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams),
11154 pDelPeriodicTxPtrnParams, sizeof(tSirDelPeriodicTxPtrn));
11155
11156 delPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
11157 delPeriodicTxPtrnParams->pUserData = pWDA;
11158
11159 wdiStatus = WDI_DelPeriodicTxPtrnInd(delPeriodicTxPtrnParams);
11160
11161 if (WDI_STATUS_PENDING == wdiStatus)
11162 {
11163 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11164 "Pending received for %s:%d", __func__, __LINE__ );
11165 }
11166 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11167 {
11168 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11169 "Failure in %s:%d", __func__, __LINE__ );
11170 }
11171
11172 vos_mem_free(delPeriodicTxPtrnParams);
11173
11174 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11175}
11176
Rajeev79dbe4c2013-10-05 11:03:42 +053011177#ifdef FEATURE_WLAN_BATCH_SCAN
11178/*
11179 * FUNCTION: WDA_ProcessStopBatchScanInd
11180 *
11181 * DESCRIPTION: This function sends stop batch scan inidcation message to WDI
11182 *
11183 * PARAM:
11184 * pWDA: pointer to WDA context
11185 * pReq: pointer to stop batch scan request
11186 */
11187VOS_STATUS WDA_ProcessStopBatchScanInd(tWDA_CbContext *pWDA,
11188 tSirStopBatchScanInd *pReq)
11189{
11190 WDI_Status wdiStatus;
11191 WDI_StopBatchScanIndType wdiReq;
11192
11193 wdiReq.param = pReq->param;
11194
11195 wdiStatus = WDI_StopBatchScanInd(&wdiReq);
11196
11197 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11198 {
11199 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11200 "Stop batch scan ind failed %s:%d", __func__, wdiStatus);
11201 }
11202
11203 vos_mem_free(pReq);
11204
11205 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11206}
11207/*==========================================================================
11208 FUNCTION WDA_ProcessTriggerBatchScanResultInd
11209
11210 DESCRIPTION
11211 API to pull batch scan result from FW
11212
11213 PARAMETERS
11214 pWDA: Pointer to WDA context
11215 pGetBatchScanReq: Pointer to get batch scan result indication
11216
11217 RETURN VALUE
11218 NONE
11219
11220===========================================================================*/
11221VOS_STATUS WDA_ProcessTriggerBatchScanResultInd(tWDA_CbContext *pWDA,
11222 tSirTriggerBatchScanResultInd *pReq)
11223{
11224 WDI_Status wdiStatus;
11225 WDI_TriggerBatchScanResultIndType wdiReq;
11226
11227 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11228 "------> %s " ,__func__);
11229
11230 wdiReq.param = pReq->param;
11231
11232 wdiStatus = WDI_TriggerBatchScanResultInd(&wdiReq);
11233
11234 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11235 {
11236 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11237 "Trigger batch scan result ind failed %s:%d",
11238 __func__, wdiStatus);
11239 }
11240
11241 vos_mem_free(pReq);
11242
11243 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11244}
11245
11246/*==========================================================================
11247 FUNCTION WDA_SetBatchScanRespCallback
11248
11249 DESCRIPTION
11250 API to process set batch scan response from FW
11251
11252 PARAMETERS
11253 pRsp: Pointer to set batch scan response
11254 pUserData: Pointer to user data
11255
11256 RETURN VALUE
11257 NONE
11258
11259===========================================================================*/
11260void WDA_SetBatchScanRespCallback
11261(
11262 WDI_SetBatchScanRspType *pRsp,
11263 void* pUserData
11264)
11265{
11266 tSirSetBatchScanRsp *pHddSetBatchScanRsp;
11267 tpAniSirGlobal pMac;
11268 void *pCallbackContext;
11269 tWDA_CbContext *pWDA = NULL ;
11270 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11271
11272
11273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11274 "<------ %s " ,__func__);
11275 if (NULL == pWdaParams)
11276 {
11277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11278 "%s: pWdaParams received NULL", __func__);
11279 VOS_ASSERT(0) ;
11280 return ;
11281 }
11282
11283 /*extract WDA context*/
11284 pWDA = pWdaParams->pWdaContext;
11285 if (NULL == pWDA)
11286 {
11287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11288 "%s:pWDA is NULL can't invole HDD callback",
11289 __func__);
11290 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11291 vos_mem_free(pWdaParams->wdaMsgParam);
11292 vos_mem_free(pWdaParams);
11293 VOS_ASSERT(0);
11294 return;
11295 }
11296
11297 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11298 vos_mem_free(pWdaParams->wdaMsgParam);
11299 vos_mem_free(pWdaParams);
11300
11301 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
11302 if (NULL == pMac)
11303 {
11304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11305 "%s:pMac is NULL", __func__);
11306 VOS_ASSERT(0);
11307 return;
11308 }
11309
11310 pHddSetBatchScanRsp =
11311 (tSirSetBatchScanRsp *)vos_mem_malloc(sizeof(tSirSetBatchScanRsp));
11312 if (NULL == pHddSetBatchScanRsp)
11313 {
11314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11315 "%s: VOS MEM Alloc Failure can't invoke HDD callback", __func__);
11316 VOS_ASSERT(0);
11317 return;
11318 }
11319
11320 pHddSetBatchScanRsp->nScansToBatch = pRsp->nScansToBatch;
11321
11322 pCallbackContext = pMac->pmc.setBatchScanReqCallbackContext;
11323 /*call hdd callback with set batch scan response data*/
11324 if(pMac->pmc.setBatchScanReqCallback)
11325 {
11326 pMac->pmc.setBatchScanReqCallback(pCallbackContext, pHddSetBatchScanRsp);
11327 }
11328 else
11329 {
11330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11331 "%s:HDD callback is null", __func__);
11332 VOS_ASSERT(0);
11333 }
11334
11335 vos_mem_free(pHddSetBatchScanRsp);
11336 return ;
11337}
11338
11339/*==========================================================================
11340 FUNCTION WDA_ProcessSetBatchScanReq
11341
11342 DESCRIPTION
11343 API to send set batch scan request to WDI
11344
11345 PARAMETERS
11346 pWDA: Pointer to WDA context
11347 pSetBatchScanReq: Pointer to set batch scan req
11348
11349 RETURN VALUE
11350 NONE
11351
11352===========================================================================*/
11353VOS_STATUS WDA_ProcessSetBatchScanReq(tWDA_CbContext *pWDA,
11354 tSirSetBatchScanReq *pSetBatchScanReq)
11355{
11356 WDI_Status status;
11357 tWDA_ReqParams *pWdaParams ;
11358 WDI_SetBatchScanReqType *pWdiSetBatchScanReq;
11359
11360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11361 "------> %s " ,__func__);
11362
11363 pWdiSetBatchScanReq =
11364 (WDI_SetBatchScanReqType *)vos_mem_malloc(sizeof(WDI_SetBatchScanReqType));
11365 if (NULL == pWdiSetBatchScanReq)
11366 {
11367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11368 "%s: VOS MEM Alloc Failure", __func__);
11369 vos_mem_free(pSetBatchScanReq);
11370 VOS_ASSERT(0);
11371 return VOS_STATUS_E_NOMEM;
11372 }
11373
11374 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
11375 if (NULL == pWdaParams)
11376 {
11377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11378 "%s: VOS MEM Alloc Failure", __func__);
11379 VOS_ASSERT(0);
11380 vos_mem_free(pSetBatchScanReq);
11381 vos_mem_free(pWdiSetBatchScanReq);
11382 return VOS_STATUS_E_NOMEM;
11383 }
11384
11385 pWdiSetBatchScanReq->scanFrequency = pSetBatchScanReq->scanFrequency;
11386 pWdiSetBatchScanReq->numberOfScansToBatch =
11387 pSetBatchScanReq->numberOfScansToBatch;
11388 pWdiSetBatchScanReq->bestNetwork = pSetBatchScanReq->bestNetwork;
11389 pWdiSetBatchScanReq->rfBand = pSetBatchScanReq->rfBand;
11390 pWdiSetBatchScanReq->rtt = pSetBatchScanReq->rtt;
11391
11392 pWdaParams->wdaWdiApiMsgParam = pWdiSetBatchScanReq;
11393 pWdaParams->pWdaContext = pWDA;
11394 pWdaParams->wdaMsgParam = pSetBatchScanReq;
11395
11396 status = WDI_SetBatchScanReq(pWdiSetBatchScanReq, pWdaParams,
11397 (WDI_SetBatchScanCb)WDA_SetBatchScanRespCallback);
11398 if (IS_WDI_STATUS_FAILURE(status))
11399 {
11400 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11401 "Failure in Set Batch Scan REQ WDI API, free all the memory " );
11402 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11403 vos_mem_free(pWdaParams->wdaMsgParam);
11404 vos_mem_free(pWdaParams);
11405 }
11406 return CONVERT_WDI2VOS_STATUS(status);
11407}
11408
11409#endif
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053011410/*
11411 * FUNCTION: WDA_ProcessHT40OBSSScanInd
11412 *
11413 * DESCRIPTION: This function sends start/update OBSS scan
11414 * inidcation message to WDI
11415 *
11416 * PARAM:
11417 * pWDA: pointer to WDA context
11418 * pReq: pointer to start OBSS scan request
11419 */
11420VOS_STATUS WDA_ProcessHT40OBSSScanInd(tWDA_CbContext *pWDA,
11421 tSirHT40OBSSScanInd *pReq)
11422{
11423 WDI_Status status;
11424 WDI_HT40ObssScanParamsType wdiOBSSScanParams;
11425 WDI_HT40ObssScanIndType *pWdiOBSSScanInd;
Rajeev79dbe4c2013-10-05 11:03:42 +053011426
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053011427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11428 "------> %s " ,__func__);
11429 wdiOBSSScanParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
11430 wdiOBSSScanParams.pUserData = pWDA;
11431
11432 pWdiOBSSScanInd = &(wdiOBSSScanParams.wdiHT40ObssScanParam);
11433 pWdiOBSSScanInd->cmdType = pReq->cmdType;
11434 pWdiOBSSScanInd->scanType = pReq->scanType;
11435 pWdiOBSSScanInd->OBSSScanActiveDwellTime =
11436 pReq->OBSSScanActiveDwellTime;
11437 pWdiOBSSScanInd->OBSSScanPassiveDwellTime =
11438 pReq->OBSSScanPassiveDwellTime;
11439 pWdiOBSSScanInd->BSSChannelWidthTriggerScanInterval =
11440 pReq->BSSChannelWidthTriggerScanInterval;
11441 pWdiOBSSScanInd->BSSWidthChannelTransitionDelayFactor =
11442 pReq->BSSWidthChannelTransitionDelayFactor;
11443 pWdiOBSSScanInd->OBSSScanActiveTotalPerChannel =
11444 pReq->OBSSScanActiveTotalPerChannel;
11445 pWdiOBSSScanInd->OBSSScanPassiveTotalPerChannel =
11446 pReq->OBSSScanPassiveTotalPerChannel;
11447 pWdiOBSSScanInd->OBSSScanActivityThreshold =
11448 pReq->OBSSScanActivityThreshold;
11449 pWdiOBSSScanInd->channelCount = pReq->channelCount;
11450 vos_mem_copy(pWdiOBSSScanInd->channels,
11451 pReq->channels,
11452 pReq->channelCount);
11453 pWdiOBSSScanInd->selfStaIdx = pReq->selfStaIdx;
11454 pWdiOBSSScanInd->fortyMHZIntolerent = pReq->fortyMHZIntolerent;
11455 pWdiOBSSScanInd->bssIdx = pReq->bssIdx;
11456 pWdiOBSSScanInd->currentOperatingClass = pReq->currentOperatingClass;
11457 pWdiOBSSScanInd->ieFieldLen = pReq->ieFieldLen;
11458
11459 vos_mem_copy(pWdiOBSSScanInd->ieField,
11460 pReq->ieField,
11461 pReq->ieFieldLen);
11462
11463 status = WDI_HT40OBSSScanInd(&wdiOBSSScanParams);
11464 if (WDI_STATUS_PENDING == status)
11465 {
11466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11467 "Pending received for %s:%d ",__func__,__LINE__ );
11468 }
11469 else if (WDI_STATUS_SUCCESS_SYNC != status)
11470 {
11471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11472 "Failure in %s:%d ",__func__,__LINE__ );
11473 }
11474 return CONVERT_WDI2VOS_STATUS(status) ;
11475}
11476/*
11477 * FUNCTION: WDA_ProcessHT40OBSSStopScanInd
11478 *
11479 * DESCRIPTION: This function sends stop OBSS scan inidcation message to WDI
11480 *
11481 * PARAM:
11482 * pWDA: pointer to WDA context
11483 * pReq: pointer to stop batch scan request
11484 */
11485VOS_STATUS WDA_ProcessHT40OBSSStopScanInd(tWDA_CbContext *pWDA,
11486 tANI_U8 *bssIdx)
11487{
11488 WDI_Status status;
11489
11490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11491 "------> %s " ,__func__);
11492
11493 status = WDI_HT40OBSSStopScanInd(*bssIdx);
11494 if (WDI_STATUS_PENDING == status)
11495 {
11496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11497 "Pending received for %s:%d ",__func__,__LINE__ );
11498 }
11499 else if (WDI_STATUS_SUCCESS_SYNC != status)
11500 {
11501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11502 "Failure in %s:%d ",__func__,__LINE__ );
11503 }
11504 return CONVERT_WDI2VOS_STATUS(status) ;
11505}
Yue Mab9c86f42013-08-14 15:59:08 -070011506/*
Chittajit Mitraf5413a42013-10-18 14:20:08 -070011507 * FUNCTION: WDA_ProcessRateUpdateInd
11508 *
11509 */
11510VOS_STATUS WDA_ProcessRateUpdateInd(tWDA_CbContext *pWDA,
11511 tSirRateUpdateInd *pRateUpdateParams)
11512{
11513 WDI_Status wdiStatus;
11514 WDI_RateUpdateIndParams rateUpdateParams;
11515
11516 vos_mem_copy(rateUpdateParams.bssid,
11517 pRateUpdateParams->bssid, sizeof(tSirMacAddr));
11518
11519 rateUpdateParams.ucastDataRateTxFlag =
11520 pRateUpdateParams->ucastDataRateTxFlag;
11521 rateUpdateParams.reliableMcastDataRateTxFlag =
11522 pRateUpdateParams->reliableMcastDataRateTxFlag;
11523 rateUpdateParams.mcastDataRate24GHzTxFlag =
11524 pRateUpdateParams->mcastDataRate24GHzTxFlag;
11525 rateUpdateParams.mcastDataRate5GHzTxFlag =
11526 pRateUpdateParams->mcastDataRate5GHzTxFlag;
11527
11528 rateUpdateParams.ucastDataRate = pRateUpdateParams->ucastDataRate;
11529 rateUpdateParams.reliableMcastDataRate =
11530 pRateUpdateParams->reliableMcastDataRate;
11531 rateUpdateParams.mcastDataRate24GHz = pRateUpdateParams->mcastDataRate24GHz;
11532 rateUpdateParams.mcastDataRate5GHz = pRateUpdateParams->mcastDataRate5GHz;
11533
11534 rateUpdateParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
11535 rateUpdateParams.pUserData = pWDA;
11536
11537 wdiStatus = WDI_RateUpdateInd(&rateUpdateParams);
11538
11539 if (WDI_STATUS_PENDING == wdiStatus)
11540 {
11541 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11542 "Pending received for %s:%d", __func__, __LINE__ );
11543 }
11544 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11545 {
11546 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11547 "Failure in %s:%d", __func__, __LINE__ );
11548 }
11549
11550 vos_mem_free(pRateUpdateParams);
11551
11552 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11553}
11554
11555/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011556 * -------------------------------------------------------------------------
11557 * DATA interface with WDI for Mgmt Frames
11558 * -------------------------------------------------------------------------
11559 */
Jeff Johnson295189b2012-06-20 16:38:30 -070011560/*
11561 * FUNCTION: WDA_TxComplete
11562 * Callback function for the WDA_TxPacket
11563 */
11564VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
11565 VOS_STATUS status )
11566{
11567
11568 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
11569 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011570 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011571
11572 if(NULL == wdaContext)
11573 {
11574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11575 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011576 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011577 VOS_ASSERT(0);
11578 return VOS_STATUS_E_FAILURE;
11579 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011580
11581 /*Check if frame was timed out or not*/
11582 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
11583 (v_PVOID_t)&uUserData);
11584
11585 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
11586 {
11587 /*Discard frame - no further processing is needed*/
11588 vos_pkt_return_packet(pData);
11589 return VOS_STATUS_SUCCESS;
11590 }
11591
Jeff Johnson295189b2012-06-20 16:38:30 -070011592 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
11593 if( NULL!=wdaContext->pTxCbFunc)
11594 {
11595 /*check if packet is freed already*/
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053011596 if(vos_atomic_set((uintptr_t*)&wdaContext->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED) == (uintptr_t)pData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011597 {
11598 wdaContext->pTxCbFunc(pMac, pData);
11599 }
11600 else
11601 {
11602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053011603 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011604 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070011605 //Return from here since we reaching here because the packet already timeout
11606 return status;
11607 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011608 }
11609
11610 /*
11611 * Trigger the event to bring the HAL TL Tx complete function to come
11612 * out of wait
11613 * Let the coe above to complete the packet first. When this event is set,
11614 * the thread waiting for the event may run and set Vospacket_freed causing the original
11615 * packet not being freed.
11616 */
11617 status = vos_event_set(&wdaContext->txFrameEvent);
11618 if(!VOS_IS_STATUS_SUCCESS(status))
11619 {
11620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011621 "NEW VOS Event Set failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011622 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011623 return status;
11624}
Jeff Johnson295189b2012-06-20 16:38:30 -070011625/*
11626 * FUNCTION: WDA_TxPacket
11627 * Forward TX management frame to WDI
11628 */
11629VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
11630 void *pFrmBuf,
11631 tANI_U16 frmLen,
11632 eFrameType frmType,
11633 eFrameTxDir txDir,
11634 tANI_U8 tid,
11635 pWDATxRxCompFunc pCompFunc,
11636 void *pData,
11637 pWDAAckFnTxComp pAckTxComp,
Kanchanapally, Vidyullathaf9426e52013-12-24 17:28:54 +053011638 tANI_U32 txFlag)
Jeff Johnson295189b2012-06-20 16:38:30 -070011639{
11640 VOS_STATUS status = VOS_STATUS_SUCCESS ;
11641 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
11642 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
11643 tANI_U8 eventIdx = 0;
11644 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
11645 tpAniSirGlobal pMac;
Jeff Johnson295189b2012-06-20 16:38:30 -070011646 if((NULL == pWDA)||(NULL == pFrmBuf))
11647 {
11648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053011649 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011650 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070011651 VOS_ASSERT(0);
11652 return VOS_STATUS_E_FAILURE;
11653 }
11654
11655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011656 "Tx Mgmt Frame Subtype: %d alloc(%p)", pFc->subType, pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070011657 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
11658 if(NULL == pMac)
11659 {
11660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011661 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011662 VOS_ASSERT(0);
11663 return VOS_STATUS_E_FAILURE;
11664 }
11665
11666
11667
11668 /* store the call back function in WDA context */
11669 pWDA->pTxCbFunc = pCompFunc;
11670 /* store the call back for the function of ackTxComplete */
11671 if( pAckTxComp )
11672 {
Jeff Johnsone7245742012-09-05 17:12:55 -070011673 if( NULL != pWDA->pAckTxCbFunc )
11674 {
11675 /* Already TxComp is active no need to active again */
11676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011677 "There is already one request pending for tx complete");
Jeff Johnsone7245742012-09-05 17:12:55 -070011678 pWDA->pAckTxCbFunc( pMac, 0);
11679 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011680
Jeff Johnsone7245742012-09-05 17:12:55 -070011681 if( VOS_STATUS_SUCCESS !=
11682 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11683 {
11684 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11685 "Tx Complete timeout Timer Stop Failed ");
11686 }
11687 else
11688 {
11689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080011690 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070011691 }
11692 }
11693
11694 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
11695 pWDA->pAckTxCbFunc = pAckTxComp;
11696 if( VOS_STATUS_SUCCESS !=
11697 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
11698 {
11699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11700 "Tx Complete Timer Start Failed ");
11701 pWDA->pAckTxCbFunc = NULL;
11702 return eHAL_STATUS_FAILURE;
11703 }
11704 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011705 /* Reset the event to be not signalled */
11706 status = vos_event_reset(&pWDA->txFrameEvent);
11707 if(!VOS_IS_STATUS_SUCCESS(status))
11708 {
11709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011710 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011711 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
11712 if( pAckTxComp )
11713 {
11714 pWDA->pAckTxCbFunc = NULL;
11715 if( VOS_STATUS_SUCCESS !=
11716 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11717 {
11718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11719 "Tx Complete timeout Timer Stop Failed ");
11720 }
11721 }
11722 return VOS_STATUS_E_FAILURE;
11723 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011724
11725 /* If Peer Sta mask is set don't overwrite to self sta */
11726 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070011727 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011728 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070011729 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011730 else
11731 {
Ganesh K08bce952012-12-13 15:04:41 -080011732 /* Get system role, use the self station if in unknown role or STA role */
11733 systemRole = wdaGetGlobalSystemRole(pMac);
11734 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
11735 (( eSYSTEM_STA_ROLE == systemRole )
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080011736#if defined FEATURE_WLAN_ESE || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080011737 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011738#endif
Ganesh K08bce952012-12-13 15:04:41 -080011739 ))
11740 {
11741 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
11742 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080011743 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011744
Jeff Johnsone7245742012-09-05 17:12:55 -070011745 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
11746 disassoc frame reaches the HW, HAL has already deleted the peer station */
11747 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070011748 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080011749 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070011750 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070011751 {
Jeff Johnson295189b2012-06-20 16:38:30 -070011752 /*Send Probe request frames on self sta idx*/
11753 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070011754 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011755 /* Since we donot want probe responses to be retried, send probe responses
11756 through the NO_ACK queues */
11757 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
11758 {
11759 //probe response is sent out using self station and no retries options.
11760 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
11761 }
11762 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
11763 {
11764 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
11765 }
11766 }
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053011767 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011768
11769 /*Set frame tag to 0
11770 We will use the WDA user data in order to tag a frame as expired*/
11771 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
11772 (v_PVOID_t)0);
11773
11774
11775 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
11776 frmLen, ucTypeSubType, tid,
11777 WDA_TxComplete, NULL, txFlag)) != VOS_STATUS_SUCCESS)
11778 {
11779 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011780 "Sending Mgmt Frame failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011781 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053011782 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 -070011783 if( pAckTxComp )
11784 {
11785 pWDA->pAckTxCbFunc = NULL;
11786 if( VOS_STATUS_SUCCESS !=
11787 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11788 {
11789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11790 "Tx Complete timeout Timer Stop Failed ");
11791 }
11792 }
11793 return VOS_STATUS_E_FAILURE;
11794 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011795 /*
11796 * Wait for the event to be set by the TL, to get the response of TX
11797 * complete, this event should be set by the Callback function called by TL
11798 */
11799 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
11800 &eventIdx);
11801 if(!VOS_IS_STATUS_SUCCESS(status))
11802 {
11803 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11804 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011805 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011806 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
11807 after the packet gets completed(packet freed once)*/
11808
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070011809 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
Mihir Shete40a55652014-03-02 14:14:47 +053011810 WDA_TransportChannelDebug(pMac, 1, WPAL_DEBUG_TX_DESC_RESYNC);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070011811
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011812 /*Tag Frame as timed out for later deletion*/
11813 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
11814 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
11815
Jeff Johnson295189b2012-06-20 16:38:30 -070011816 /* check whether the packet was freed already,so need not free again when
11817 * TL calls the WDA_Txcomplete routine
11818 */
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053011819 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED);
11820 /*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 -070011821 {
11822 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011823 } */
11824
Jeff Johnson295189b2012-06-20 16:38:30 -070011825 if( pAckTxComp )
11826 {
11827 pWDA->pAckTxCbFunc = NULL;
11828 if( VOS_STATUS_SUCCESS !=
11829 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11830 {
11831 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11832 "Tx Complete timeout Timer Stop Failed ");
11833 }
11834 }
11835 status = VOS_STATUS_E_FAILURE;
11836 }
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +053011837#ifdef WLAN_DUMP_MGMTFRAMES
11838 if (VOS_IS_STATUS_SUCCESS(status))
11839 {
11840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11841 "%s() TX packet : SubType %d", __func__,pFc->subType);
11842 VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11843 pData, frmLen);
11844 }
11845#endif
11846
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080011847 if (VOS_IS_STATUS_SUCCESS(status))
11848 {
11849 if (pMac->fEnableDebugLog & 0x1)
11850 {
11851 if ((pFc->type == SIR_MAC_MGMT_FRAME) &&
11852 (pFc->subType != SIR_MAC_MGMT_PROBE_REQ) &&
11853 (pFc->subType != SIR_MAC_MGMT_PROBE_RSP))
11854 {
11855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "TX MGMT - Type %hu, SubType %hu",
11856 pFc->type, pFc->subType);
11857 }
11858 }
11859 }
11860
11861
Jeff Johnson295189b2012-06-20 16:38:30 -070011862 return status;
11863}
Jeff Johnson295189b2012-06-20 16:38:30 -070011864/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011865 * FUNCTION: WDA_ProcessDHCPStartInd
11866 * Forward DHCP Start to WDI
11867 */
11868static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
11869 tAniDHCPInd *dhcpStartInd)
11870{
11871 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053011872 WDI_DHCPInd wdiDHCPInd;
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011873
c_hpothu0b0cab72014-02-13 21:52:40 +053011874 wdiDHCPInd.device_mode = dhcpStartInd->device_mode;
11875 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStartInd->macAddr,
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011876 sizeof(tSirMacAddr));
11877
c_hpothu0b0cab72014-02-13 21:52:40 +053011878 status = WDI_dhcpStartInd(&wdiDHCPInd);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011879
c_hpothu0b0cab72014-02-13 21:52:40 +053011880 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011881 {
c_hpothu0b0cab72014-02-13 21:52:40 +053011882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11883 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011884 }
c_hpothu0b0cab72014-02-13 21:52:40 +053011885 else if (WDI_STATUS_SUCCESS_SYNC != status)
11886 {
11887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11888 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
11889 }
11890
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011891 vos_mem_free(dhcpStartInd);
11892 return CONVERT_WDI2VOS_STATUS(status) ;
11893}
11894
11895 /*
11896 * FUNCTION: WDA_ProcessDHCPStopInd
11897 * Forward DHCP Stop to WDI
11898 */
11899 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
11900 tAniDHCPInd *dhcpStopInd)
11901 {
11902 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053011903 WDI_DHCPInd wdiDHCPInd;
11904
11905 wdiDHCPInd.device_mode = dhcpStopInd->device_mode;
11906 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
11907
11908 status = WDI_dhcpStopInd(&wdiDHCPInd);
11909
11910 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011911 {
c_hpothu0b0cab72014-02-13 21:52:40 +053011912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11913 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011914 }
c_hpothu0b0cab72014-02-13 21:52:40 +053011915 else if (WDI_STATUS_SUCCESS_SYNC != status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011916 {
c_hpothu0b0cab72014-02-13 21:52:40 +053011917 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11918 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011919 }
c_hpothu0b0cab72014-02-13 21:52:40 +053011920
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011921 vos_mem_free(dhcpStopInd);
c_hpothu0b0cab72014-02-13 21:52:40 +053011922
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011923 return CONVERT_WDI2VOS_STATUS(status) ;
11924 }
11925
11926/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011927 * FUNCTION: WDA_McProcessMsg
11928 * Trigger DAL-AL to start CFG download
11929 */
11930VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
11931{
11932 VOS_STATUS status = VOS_STATUS_SUCCESS;
11933 tWDA_CbContext *pWDA = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011934 if(NULL == pMsg)
11935 {
11936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011937 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011938 VOS_ASSERT(0);
11939 return VOS_STATUS_E_FAILURE;
11940 }
11941
11942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011943 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070011944
11945 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
11946 if(NULL == pWDA )
11947 {
11948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011949 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011950 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070011951 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070011952 return VOS_STATUS_E_FAILURE;
11953 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011954 /* Process all the WDA messages.. */
11955 switch( pMsg->type )
11956 {
11957 case WNI_CFG_DNLD_REQ:
11958 {
11959 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070011960 /* call WDA complete event if config download success */
11961 if( VOS_IS_STATUS_SUCCESS(status) )
11962 {
11963 vos_WDAComplete_cback(pVosContext);
11964 }
11965 else
11966 {
11967 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11968 "WDA Config Download failure" );
11969 }
11970 break ;
11971 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011972 /*
11973 * Init SCAN request from PE, convert it into DAL format
11974 * and send it to DAL
11975 */
11976 case WDA_INIT_SCAN_REQ:
11977 {
11978 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
11979 break ;
11980 }
11981 /* start SCAN request from PE */
11982 case WDA_START_SCAN_REQ:
11983 {
11984 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
11985 break ;
11986 }
11987 /* end SCAN request from PE */
11988 case WDA_END_SCAN_REQ:
11989 {
11990 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
11991 break ;
11992 }
11993 /* end SCAN request from PE */
11994 case WDA_FINISH_SCAN_REQ:
11995 {
11996 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
11997 break ;
11998 }
11999 /* join request from PE */
12000 case WDA_CHNL_SWITCH_REQ:
12001 {
12002 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
12003 {
12004 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
12005 }
12006 else
12007 {
Kalikinkar dhara1e83b772014-02-06 12:59:22 -080012008 if (IS_FEATURE_SUPPORTED_BY_FW(CH_SWITCH_V1) &&
12009 eHAL_CHANNEL_SWITCH_SOURCE_CSA ==
12010 ((tSwitchChannelParams*)pMsg->bodyptr)->channelSwitchSrc )
12011 {
12012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12013 "call ProcessChannelSwitchReq_V1" );
12014 WDA_ProcessChannelSwitchReq_V1(pWDA,
12015 (tSwitchChannelParams*)pMsg->bodyptr) ;
12016 }
12017 else
12018 {
12019 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12020 "call ProcessChannelSwitchReq" );
12021 WDA_ProcessChannelSwitchReq(pWDA,
12022 (tSwitchChannelParams*)pMsg->bodyptr) ;
12023 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012024 }
12025 break ;
12026 }
12027 /* ADD BSS request from PE */
12028 case WDA_ADD_BSS_REQ:
12029 {
12030 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
12031 break ;
12032 }
12033 case WDA_ADD_STA_REQ:
12034 {
12035 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
12036 break ;
12037 }
12038 case WDA_DELETE_BSS_REQ:
12039 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012040 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
12041 break ;
12042 }
12043 case WDA_DELETE_STA_REQ:
12044 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012045 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
12046 break ;
12047 }
12048 case WDA_CONFIG_PARAM_UPDATE_REQ:
12049 {
12050 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
12051 break ;
12052 }
12053 case WDA_SET_BSSKEY_REQ:
12054 {
12055 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
12056 break ;
12057 }
12058 case WDA_SET_STAKEY_REQ:
12059 {
12060 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
12061 break ;
12062 }
12063 case WDA_SET_STA_BCASTKEY_REQ:
12064 {
12065 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
12066 break ;
12067 }
12068 case WDA_REMOVE_BSSKEY_REQ:
12069 {
12070 WDA_ProcessRemoveBssKeyReq(pWDA,
12071 (tRemoveBssKeyParams *)pMsg->bodyptr);
12072 break ;
12073 }
12074 case WDA_REMOVE_STAKEY_REQ:
12075 {
12076 WDA_ProcessRemoveStaKeyReq(pWDA,
12077 (tRemoveStaKeyParams *)pMsg->bodyptr);
12078 break ;
12079 }
12080 case WDA_REMOVE_STA_BCASTKEY_REQ:
12081 {
12082 /* TODO: currently UMAC is not sending this request, Add the code for
12083 handling this request when UMAC supports */
12084 break;
12085 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080012086#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -070012087 case WDA_TSM_STATS_REQ:
12088 {
Srinivas Girigowda5cecb202013-10-08 09:13:25 -070012089 WDA_ProcessTsmStatsReq(pWDA, (tpAniGetTsmStatsReq)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012090 break;
12091 }
12092#endif
12093 case WDA_UPDATE_EDCA_PROFILE_IND:
12094 {
12095 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
12096 break;
12097 }
12098 case WDA_ADD_TS_REQ:
12099 {
12100 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
12101 break;
12102 }
12103 case WDA_DEL_TS_REQ:
12104 {
12105 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
12106 break;
12107 }
12108 case WDA_ADDBA_REQ:
12109 {
12110 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
12111 break;
12112 }
12113 case WDA_DELBA_IND:
12114 {
12115 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
12116 break;
12117 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080012118 case WDA_UPDATE_CHAN_LIST_REQ:
12119 {
12120 WDA_ProcessUpdateChannelList(pWDA,
12121 (tSirUpdateChanList *)pMsg->bodyptr);
12122 break;
12123 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012124 case WDA_SET_LINK_STATE:
12125 {
12126 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
12127 break;
12128 }
12129 case WDA_GET_STATISTICS_REQ:
12130 {
12131 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
12132 break;
12133 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080012134#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080012135 case WDA_GET_ROAM_RSSI_REQ:
12136 {
12137 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
12138 break;
12139 }
12140#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070012141 case WDA_PWR_SAVE_CFG:
12142 {
12143 if(pWDA->wdaState == WDA_READY_STATE)
12144 {
12145 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
12146 }
12147 else
12148 {
12149 if(NULL != pMsg->bodyptr)
12150 {
12151 vos_mem_free(pMsg->bodyptr);
12152 }
12153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12154 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
12155 }
12156 break;
12157 }
12158 case WDA_ENTER_IMPS_REQ:
12159 {
12160 if(pWDA->wdaState == WDA_READY_STATE)
12161 {
12162 WDA_ProcessEnterImpsReq(pWDA);
12163 }
12164 else
12165 {
12166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12167 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
12168 }
12169 break;
12170 }
12171 case WDA_EXIT_IMPS_REQ:
12172 {
12173 if(pWDA->wdaState == WDA_READY_STATE)
12174 {
12175 WDA_ProcessExitImpsReq(pWDA);
12176 }
12177 else
12178 {
12179 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12180 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
12181 }
12182 break;
12183 }
12184 case WDA_ENTER_BMPS_REQ:
12185 {
12186 if(pWDA->wdaState == WDA_READY_STATE)
12187 {
12188 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
12189 }
12190 else
12191 {
12192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12193 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
12194 }
12195 break;
12196 }
12197 case WDA_EXIT_BMPS_REQ:
12198 {
12199 if(pWDA->wdaState == WDA_READY_STATE)
12200 {
12201 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
12202 }
12203 else
12204 {
12205 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12206 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
12207 }
12208 break;
12209 }
12210 case WDA_ENTER_UAPSD_REQ:
12211 {
12212 if(pWDA->wdaState == WDA_READY_STATE)
12213 {
12214 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
12215 }
12216 else
12217 {
12218 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12219 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
12220 }
12221 break;
12222 }
12223 case WDA_EXIT_UAPSD_REQ:
12224 {
12225 if(pWDA->wdaState == WDA_READY_STATE)
12226 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012227 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012228 }
12229 else
12230 {
12231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12232 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
12233 }
12234 break;
12235 }
12236 case WDA_UPDATE_UAPSD_IND:
12237 {
12238 if(pWDA->wdaState == WDA_READY_STATE)
12239 {
12240 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
12241 }
12242 else
12243 {
12244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12245 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
12246 }
12247 break;
12248 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012249 case WDA_REGISTER_PE_CALLBACK :
12250 {
12251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12252 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
12253 /*TODO: store the PE callback */
12254 /* Do Nothing? MSG Body should be freed at here */
12255 if(NULL != pMsg->bodyptr)
12256 {
12257 vos_mem_free(pMsg->bodyptr);
12258 }
12259 break;
12260 }
12261 case WDA_SYS_READY_IND :
12262 {
12263 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12264 "Handling msg type WDA_SYS_READY_IND " );
12265 pWDA->wdaState = WDA_READY_STATE;
12266 if(NULL != pMsg->bodyptr)
12267 {
12268 vos_mem_free(pMsg->bodyptr);
12269 }
12270 break;
12271 }
12272 case WDA_BEACON_FILTER_IND :
12273 {
12274 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
12275 break;
12276 }
12277 case WDA_BTC_SET_CFG:
12278 {
12279 /*TODO: handle this while dealing with BTC */
12280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12281 "Handling msg type WDA_BTC_SET_CFG " );
12282 /* Do Nothing? MSG Body should be freed at here */
12283 if(NULL != pMsg->bodyptr)
12284 {
12285 vos_mem_free(pMsg->bodyptr);
12286 }
12287 break;
12288 }
12289 case WDA_SIGNAL_BT_EVENT:
12290 {
12291 /*TODO: handle this while dealing with BTC */
12292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12293 "Handling msg type WDA_SIGNAL_BT_EVENT " );
12294 /* Do Nothing? MSG Body should be freed at here */
12295 if(NULL != pMsg->bodyptr)
12296 {
12297 vos_mem_free(pMsg->bodyptr);
12298 }
12299 break;
12300 }
12301 case WDA_CFG_RXP_FILTER_REQ:
12302 {
12303 WDA_ProcessConfigureRxpFilterReq(pWDA,
12304 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
12305 break;
12306 }
12307 case WDA_SET_HOST_OFFLOAD:
12308 {
12309 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
12310 break;
12311 }
12312 case WDA_SET_KEEP_ALIVE:
12313 {
12314 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
12315 break;
12316 }
12317#ifdef WLAN_NS_OFFLOAD
12318 case WDA_SET_NS_OFFLOAD:
12319 {
12320 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
12321 break;
12322 }
12323#endif //WLAN_NS_OFFLOAD
12324 case WDA_ADD_STA_SELF_REQ:
12325 {
12326 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
12327 break;
12328 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012329 case WDA_DEL_STA_SELF_REQ:
12330 {
12331 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
12332 break;
12333 }
12334 case WDA_WOWL_ADD_BCAST_PTRN:
12335 {
12336 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
12337 break;
12338 }
12339 case WDA_WOWL_DEL_BCAST_PTRN:
12340 {
12341 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
12342 break;
12343 }
12344 case WDA_WOWL_ENTER_REQ:
12345 {
12346 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
12347 break;
12348 }
12349 case WDA_WOWL_EXIT_REQ:
12350 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012351 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012352 break;
12353 }
12354 case WDA_TL_FLUSH_AC_REQ:
12355 {
12356 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
12357 break;
12358 }
12359 case WDA_SIGNAL_BTAMP_EVENT:
12360 {
12361 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
12362 break;
12363 }
12364#ifdef WDA_UT
12365 case WDA_WDI_EVENT_MSG:
12366 {
12367 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
12368 break ;
12369 }
12370#endif
12371 case WDA_UPDATE_BEACON_IND:
12372 {
12373 WDA_ProcessUpdateBeaconParams(pWDA,
12374 (tUpdateBeaconParams *)pMsg->bodyptr);
12375 break;
12376 }
12377 case WDA_SEND_BEACON_REQ:
12378 {
12379 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
12380 break;
12381 }
12382 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
12383 {
12384 WDA_ProcessUpdateProbeRspTemplate(pWDA,
12385 (tSendProbeRespParams *)pMsg->bodyptr);
12386 break;
12387 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080012388#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -070012389 case WDA_SET_MAX_TX_POWER_REQ:
12390 {
12391 WDA_ProcessSetMaxTxPowerReq(pWDA,
12392 (tMaxTxPowerParams *)pMsg->bodyptr);
12393 break;
12394 }
12395#endif
Arif Hussaina5ebce02013-08-09 15:09:58 -070012396 case WDA_SET_MAX_TX_POWER_PER_BAND_REQ:
12397 {
12398 WDA_ProcessSetMaxTxPowerPerBandReq(pWDA, (tMaxTxPowerPerBandParams *)
12399 pMsg->bodyptr);
12400 break;
12401 }
schang86c22c42013-03-13 18:41:24 -070012402 case WDA_SET_TX_POWER_REQ:
12403 {
12404 WDA_ProcessSetTxPowerReq(pWDA,
12405 (tSirSetTxPowerReq *)pMsg->bodyptr);
12406 break;
12407 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012408 case WDA_SET_P2P_GO_NOA_REQ:
12409 {
12410 WDA_ProcessSetP2PGONOAReq(pWDA,
12411 (tP2pPsParams *)pMsg->bodyptr);
12412 break;
12413 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012414 /* timer related messages */
12415 case WDA_TIMER_BA_ACTIVITY_REQ:
12416 {
12417 WDA_BaCheckActivity(pWDA) ;
12418 break ;
12419 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012420
12421 /* timer related messages */
12422 case WDA_TIMER_TRAFFIC_STATS_IND:
12423 {
12424 WDA_TimerTrafficStatsInd(pWDA);
12425 break;
12426 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012427#ifdef WLAN_FEATURE_VOWIFI_11R
12428 case WDA_AGGR_QOS_REQ:
12429 {
12430 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
12431 break;
12432 }
12433#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070012434 case WDA_FTM_CMD_REQ:
12435 {
12436 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
12437 break ;
12438 }
Jeff Johnsone7245742012-09-05 17:12:55 -070012439#ifdef FEATURE_OEM_DATA_SUPPORT
12440 case WDA_START_OEM_DATA_REQ:
12441 {
12442 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
12443 break;
12444 }
12445#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070012446 /* Tx Complete Time out Indication */
12447 case WDA_TX_COMPLETE_TIMEOUT_IND:
12448 {
12449 WDA_ProcessTxCompleteTimeOutInd(pWDA);
12450 break;
12451 }
12452 case WDA_WLAN_SUSPEND_IND:
12453 {
12454 WDA_ProcessWlanSuspendInd(pWDA,
12455 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
12456 break;
12457 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012458 case WDA_WLAN_RESUME_REQ:
12459 {
12460 WDA_ProcessWlanResumeReq(pWDA,
12461 (tSirWlanResumeParam *)pMsg->bodyptr) ;
12462 break;
12463 }
12464
12465 case WDA_UPDATE_CF_IND:
12466 {
12467 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
12468 pMsg->bodyptr = NULL;
12469 break;
12470 }
12471#ifdef FEATURE_WLAN_SCAN_PNO
12472 case WDA_SET_PNO_REQ:
12473 {
12474 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
12475 break;
12476 }
12477 case WDA_UPDATE_SCAN_PARAMS_REQ:
12478 {
12479 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
12480 break;
12481 }
12482 case WDA_SET_RSSI_FILTER_REQ:
12483 {
12484 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
12485 break;
12486 }
12487#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012488#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012489 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012490 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012491 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012492 break;
12493 }
12494#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070012495 case WDA_SET_TX_PER_TRACKING_REQ:
12496 {
12497 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
12498 break;
12499 }
12500
12501#ifdef WLAN_FEATURE_PACKET_FILTERING
12502 case WDA_8023_MULTICAST_LIST_REQ:
12503 {
12504 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
12505 break;
12506 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012507 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
12508 {
12509 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
12510 break;
12511 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012512 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
12513 {
12514 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
12515 break;
12516 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012517 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
12518 {
12519 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
12520 break;
12521 }
12522#endif // WLAN_FEATURE_PACKET_FILTERING
12523
12524
12525 case WDA_TRANSMISSION_CONTROL_IND:
12526 {
12527 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
12528 break;
12529 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012530 case WDA_SET_POWER_PARAMS_REQ:
12531 {
12532 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
12533 break;
12534 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012535#ifdef WLAN_FEATURE_GTK_OFFLOAD
12536 case WDA_GTK_OFFLOAD_REQ:
12537 {
12538 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
12539 break;
12540 }
12541
12542 case WDA_GTK_OFFLOAD_GETINFO_REQ:
12543 {
12544 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
12545 break;
12546 }
12547#endif //WLAN_FEATURE_GTK_OFFLOAD
12548
12549 case WDA_SET_TM_LEVEL_REQ:
12550 {
12551 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
12552 break;
12553 }
Sandeep Puligilla60342762014-01-30 21:05:37 +053012554
Mohit Khanna4a70d262012-09-11 16:30:12 -070012555 case WDA_UPDATE_OP_MODE:
12556 {
Sandeep Puligilla60342762014-01-30 21:05:37 +053012557 if(WDA_getHostWlanFeatCaps(HT40_OBSS_SCAN) &&
12558 WDA_getFwWlanFeatCaps(HT40_OBSS_SCAN))
12559 {
12560 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
12561 }
12562 else if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
Mohit Khanna4a70d262012-09-11 16:30:12 -070012563 {
12564 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
12565 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
12566 else
12567 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012568 " VHT OpMode Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070012569 }
12570 else
12571 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012572 " 11AC Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070012573 break;
12574 }
Chet Lanctot186b5732013-03-18 10:26:30 -070012575#ifdef WLAN_FEATURE_11W
12576 case WDA_EXCLUDE_UNENCRYPTED_IND:
12577 {
12578 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
12579 break;
12580 }
12581#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053012582#ifdef FEATURE_WLAN_TDLS
12583 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
12584 {
12585 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
12586 break;
12587 }
12588#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012589 case WDA_DHCP_START_IND:
12590 {
12591 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
12592 break;
12593 }
12594 case WDA_DHCP_STOP_IND:
12595 {
12596 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
12597 break;
12598 }
Leo Chang9056f462013-08-01 19:21:11 -070012599#ifdef FEATURE_WLAN_LPHB
12600 case WDA_LPHB_CONF_REQ:
12601 {
12602 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
12603 break;
12604 }
12605#endif
Yue Mab9c86f42013-08-14 15:59:08 -070012606 case WDA_ADD_PERIODIC_TX_PTRN_IND:
12607 {
12608 WDA_ProcessAddPeriodicTxPtrnInd(pWDA,
12609 (tSirAddPeriodicTxPtrn *)pMsg->bodyptr);
12610 break;
12611 }
12612 case WDA_DEL_PERIODIC_TX_PTRN_IND:
12613 {
12614 WDA_ProcessDelPeriodicTxPtrnInd(pWDA,
12615 (tSirDelPeriodicTxPtrn *)pMsg->bodyptr);
12616 break;
12617 }
12618
Rajeev79dbe4c2013-10-05 11:03:42 +053012619#ifdef FEATURE_WLAN_BATCH_SCAN
12620 case WDA_SET_BATCH_SCAN_REQ:
12621 {
12622 WDA_ProcessSetBatchScanReq(pWDA,
12623 (tSirSetBatchScanReq *)pMsg->bodyptr);
12624 break;
12625 }
Chittajit Mitraf5413a42013-10-18 14:20:08 -070012626 case WDA_RATE_UPDATE_IND:
12627 {
12628 WDA_ProcessRateUpdateInd(pWDA, (tSirRateUpdateInd *)pMsg->bodyptr);
12629 break;
12630 }
Rajeev79dbe4c2013-10-05 11:03:42 +053012631 case WDA_TRIGGER_BATCH_SCAN_RESULT_IND:
12632 {
12633 WDA_ProcessTriggerBatchScanResultInd(pWDA,
12634 (tSirTriggerBatchScanResultInd *)pMsg->bodyptr);
12635 break;
12636 }
12637 case WDA_STOP_BATCH_SCAN_IND:
12638 {
12639 WDA_ProcessStopBatchScanInd(pWDA,
12640 (tSirStopBatchScanInd *)pMsg->bodyptr);
12641 break;
12642 }
12643#endif
12644
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053012645 case WDA_HT40_OBSS_SCAN_IND:
12646 {
12647 WDA_ProcessHT40OBSSScanInd(pWDA,
12648 (tSirHT40OBSSScanInd *)pMsg->bodyptr);
12649 break;
12650 }
12651 case WDA_HT40_OBSS_STOP_SCAN_IND:
12652 {
12653 WDA_ProcessHT40OBSSStopScanInd(pWDA,
12654 (tANI_U8*)pMsg->bodyptr);
12655 break;
12656 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012657 default:
12658 {
12659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12660 "No Handling for msg type %x in WDA "
12661 ,pMsg->type);
12662 /* Do Nothing? MSG Body should be freed at here */
12663 if(NULL != pMsg->bodyptr)
12664 {
12665 vos_mem_free(pMsg->bodyptr);
12666 }
12667 //WDA_VOS_ASSERT(0) ;
12668 }
12669 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012670 return status ;
12671}
12672
Jeff Johnson295189b2012-06-20 16:38:30 -070012673/*
12674 * FUNCTION: WDA_LowLevelIndCallback
12675 * IND API callback from WDI, send Ind to PE
12676 */
12677void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
12678 void* pUserData )
12679{
12680 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
12681#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
12682 tSirRSSINotification rssiNotification;
12683#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070012684 if(NULL == pWDA)
12685 {
12686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012687 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012688 VOS_ASSERT(0);
12689 return ;
12690 }
12691
12692 switch(wdiLowLevelInd->wdiIndicationType)
12693 {
12694 case WDI_RSSI_NOTIFICATION_IND:
12695 {
12696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12697 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012698#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
12699 rssiNotification.bReserved =
12700 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
12701 rssiNotification.bRssiThres1NegCross =
12702 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
12703 rssiNotification.bRssiThres1PosCross =
12704 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
12705 rssiNotification.bRssiThres2NegCross =
12706 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
12707 rssiNotification.bRssiThres2PosCross =
12708 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
12709 rssiNotification.bRssiThres3NegCross =
12710 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
12711 rssiNotification.bRssiThres3PosCross =
12712 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080012713 rssiNotification.avgRssi = (v_S7_t)
12714 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070012715 WLANTL_BMPSRSSIRegionChangedNotification(
12716 pWDA->pVosContext,
12717 &rssiNotification);
12718#endif
12719 break ;
12720 }
12721 case WDI_MISSED_BEACON_IND:
12722 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080012723 tpSirSmeMissedBeaconInd pMissBeacInd =
12724 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070012725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12726 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012727 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080012728 if(NULL == pMissBeacInd)
12729 {
12730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12731 "%s: VOS MEM Alloc Failure", __func__);
12732 break;
12733 }
12734 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
12735 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
12736 pMissBeacInd->bssIdx =
12737 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
12738 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012739 break ;
12740 }
12741 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
12742 {
12743 /* TODO: Decode Ind and send Ind to PE */
12744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12745 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
12746 break ;
12747 }
12748
12749 case WDI_MIC_FAILURE_IND:
12750 {
12751 tpSirSmeMicFailureInd pMicInd =
12752 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
12753
12754 if(NULL == pMicInd)
12755 {
12756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012757 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012758 break;
12759 }
12760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12761 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012762 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
12763 pMicInd->length = sizeof(tSirSmeMicFailureInd);
12764 vos_mem_copy(pMicInd->bssId,
12765 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
12766 sizeof(tSirMacAddr));
12767 vos_mem_copy(pMicInd->info.srcMacAddr,
12768 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
12769 sizeof(tSirMacAddr));
12770 vos_mem_copy(pMicInd->info.taMacAddr,
12771 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
12772 sizeof(tSirMacAddr));
12773 vos_mem_copy(pMicInd->info.dstMacAddr,
12774 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
12775 sizeof(tSirMacAddr));
12776 vos_mem_copy(pMicInd->info.rxMacAddr,
12777 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
12778 sizeof(tSirMacAddr));
12779 pMicInd->info.multicast =
12780 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
12781 pMicInd->info.keyId=
12782 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
12783 pMicInd->info.IV1=
12784 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
12785 vos_mem_copy(pMicInd->info.TSC,
12786 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070012787 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
12788 (void *)pMicInd , 0) ;
12789 break ;
12790 }
12791 case WDI_FATAL_ERROR_IND:
12792 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070012793 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070012794 /* TODO: Decode Ind and send Ind to PE */
12795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12796 "Received WDI_FATAL_ERROR_IND from WDI ");
12797 break ;
12798 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012799 case WDI_DEL_STA_IND:
12800 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012801 tpDeleteStaContext pDelSTACtx =
12802 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
12803
12804 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12805 "Received WDI_DEL_STA_IND from WDI ");
12806 if(NULL == pDelSTACtx)
12807 {
12808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012809 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012810 break;
12811 }
12812 vos_mem_copy(pDelSTACtx->addr2,
12813 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
12814 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012815 vos_mem_copy(pDelSTACtx->bssId,
12816 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
12817 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012818 pDelSTACtx->assocId =
12819 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
12820 pDelSTACtx->reasonCode =
12821 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
12822 pDelSTACtx->staId =
12823 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070012824 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
12825 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012826 break ;
12827 }
12828 case WDI_COEX_IND:
12829 {
12830 tANI_U32 index;
12831 vos_msg_t vosMsg;
12832 tSirSmeCoexInd *pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
12833 if(NULL == pSmeCoexInd)
12834 {
12835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012836 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012837 break;
12838 }
12839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12840 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012841 /* Message Header */
12842 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
12843 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070012844 /* Info from WDI Indication */
12845 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
12846 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
12847 {
12848 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
12849 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012850 /* VOS message wrapper */
12851 vosMsg.type = eWNI_SME_COEX_IND;
12852 vosMsg.bodyptr = (void *)pSmeCoexInd;
12853 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070012854 /* Send message to SME */
12855 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12856 {
12857 /* free the mem and return */
12858 vos_mem_free((v_VOID_t *)pSmeCoexInd);
12859 }
12860 else
12861 {
12862 /* DEBUG */
12863 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12864 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
12865 pSmeCoexInd->coexIndType,
12866 pSmeCoexInd->coexIndData[0],
12867 pSmeCoexInd->coexIndData[1],
12868 pSmeCoexInd->coexIndData[2],
12869 pSmeCoexInd->coexIndData[3]);
12870 }
12871 break;
12872 }
12873 case WDI_TX_COMPLETE_IND:
12874 {
12875 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
12876 /* Calling TxCompleteAck Indication from wda context*/
12877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12878 "Complete Indication received from HAL");
12879 if( pWDA->pAckTxCbFunc )
12880 {
12881 if( VOS_STATUS_SUCCESS !=
12882 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12883 {
12884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12885 "Tx Complete timeout Timer Stop Failed ");
12886 }
12887 pWDA->pAckTxCbFunc( pMac, wdiLowLevelInd->wdiIndicationData.tx_complete_status);
12888 pWDA->pAckTxCbFunc = NULL;
12889 }
12890 else
12891 {
12892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12893 "Tx Complete Indication is received after timeout ");
12894 }
12895 break;
12896 }
Viral Modid86bde22012-12-10 13:09:21 -080012897 case WDI_P2P_NOA_START_IND :
12898 {
12899 tSirP2PNoaStart *pP2pNoaStart =
12900 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
12901
12902 if (NULL == pP2pNoaStart)
12903 {
12904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12905 "Memory allocation failure, "
12906 "WDI_P2P_NOA_START_IND not forwarded");
12907 break;
12908 }
12909 pP2pNoaStart->status =
12910 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
12911 pP2pNoaStart->bssIdx =
12912 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
12913 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
12914 (void *)pP2pNoaStart , 0) ;
12915 break;
12916 }
12917
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053012918#ifdef FEATURE_WLAN_TDLS
12919 case WDI_TDLS_IND :
12920 {
12921 tSirTdlsInd *pTdlsInd =
12922 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
12923
12924 if (NULL == pTdlsInd)
12925 {
12926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12927 "Memory allocation failure, "
12928 "WDI_TDLS_IND not forwarded");
12929 break;
12930 }
12931 pTdlsInd->status =
12932 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
12933 pTdlsInd->assocId =
12934 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
12935 pTdlsInd->staIdx =
12936 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
12937 pTdlsInd->reasonCode =
12938 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
12939 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
12940 (void *)pTdlsInd , 0) ;
12941 break;
12942 }
12943#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070012944 case WDI_P2P_NOA_ATTR_IND :
12945 {
12946 tSirP2PNoaAttr *pP2pNoaAttr =
12947 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12949 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070012950 if (NULL == pP2pNoaAttr)
12951 {
12952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12953 "Memory allocation failure, "
12954 "WDI_P2P_NOA_ATTR_IND not forwarded");
12955 break;
12956 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012957 pP2pNoaAttr->index =
12958 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
12959 pP2pNoaAttr->oppPsFlag =
12960 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
12961 pP2pNoaAttr->ctWin =
12962 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
12963
12964 pP2pNoaAttr->uNoa1IntervalCnt =
12965 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
12966 pP2pNoaAttr->uNoa1Duration =
12967 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
12968 pP2pNoaAttr->uNoa1Interval =
12969 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
12970 pP2pNoaAttr->uNoa1StartTime =
12971 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070012972 pP2pNoaAttr->uNoa2IntervalCnt =
12973 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
12974 pP2pNoaAttr->uNoa2Duration =
12975 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
12976 pP2pNoaAttr->uNoa2Interval =
12977 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
12978 pP2pNoaAttr->uNoa2StartTime =
12979 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070012980 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
12981 (void *)pP2pNoaAttr , 0) ;
12982 break;
12983 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012984#ifdef FEATURE_WLAN_SCAN_PNO
12985 case WDI_PREF_NETWORK_FOUND_IND:
12986 {
12987 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070012988 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
12989 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
12990 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
12991 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
12992
Jeff Johnson295189b2012-06-20 16:38:30 -070012993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12994 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070012995 if (NULL == pPrefNetworkFoundInd)
12996 {
12997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12998 "Memory allocation failure, "
12999 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
Kiet Lamb537cfb2013-11-07 12:56:49 +053013000 if (NULL !=
13001 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
13002 {
13003 wpalMemoryFree(
13004 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData
13005 );
13006 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
13007 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013008 break;
13009 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013010 /* Message Header */
13011 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070013012 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070013013
13014 /* Info from WDI Indication */
13015 pPrefNetworkFoundInd->ssId.length =
13016 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070013017 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070013018 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
13019 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
13020 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070013021 if (NULL !=
13022 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
13023 {
13024 pPrefNetworkFoundInd->frameLength =
13025 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
13026 vos_mem_copy( pPrefNetworkFoundInd->data,
13027 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
13028 pPrefNetworkFoundInd->frameLength);
13029 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
13030 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
13031 }
13032 else
13033 {
13034 pPrefNetworkFoundInd->frameLength = 0;
13035 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013036 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070013037 /* VOS message wrapper */
13038 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
13039 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
13040 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013041 /* Send message to SME */
13042 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13043 {
13044 /* free the mem and return */
13045 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
13046 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013047 break;
13048 }
13049#endif // FEATURE_WLAN_SCAN_PNO
13050
13051#ifdef WLAN_WAKEUP_EVENTS
13052 case WDI_WAKE_REASON_IND:
13053 {
13054 vos_msg_t vosMsg;
13055 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
13056 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
13057 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
13058
13059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13060 "[WAKE_REASON WDI] WAKE_REASON_IND Type (0x%x) data (ulReason=0x%x, ulReasonArg=0x%x, ulStoredDataLen=0x%x)",
13061 wdiLowLevelInd->wdiIndicationType,
13062 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
13063 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
13064 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
13065
13066 if (NULL == pWakeReasonInd)
13067 {
13068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13069 "Memory allocation failure, "
13070 "WDI_WAKE_REASON_IND not forwarded");
13071 break;
13072 }
13073
13074 vos_mem_zero(pWakeReasonInd, allocSize);
13075
13076 /* Message Header */
13077 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
13078 pWakeReasonInd->mesgLen = allocSize;
13079
13080 /* Info from WDI Indication */
13081 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
13082 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
13083 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
13084 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
13085 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
13086 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
13087 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
13088 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
13089
13090 /* VOS message wrapper */
13091 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
13092 vosMsg.bodyptr = (void *) pWakeReasonInd;
13093 vosMsg.bodyval = 0;
13094
13095 /* Send message to SME */
13096 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13097 {
13098 /* free the mem and return */
13099 vos_mem_free((v_VOID_t *) pWakeReasonInd);
13100 }
13101
13102 break;
13103 }
13104#endif // WLAN_WAKEUP_EVENTS
13105
13106 case WDI_TX_PER_HIT_IND:
13107 {
13108 vos_msg_t vosMsg;
13109 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
13110 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
13111 /* VOS message wrapper */
13112 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
13113 vosMsg.bodyptr = NULL;
13114 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013115 /* Send message to SME */
13116 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13117 {
13118 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
13119 }
13120 break;
13121 }
13122
Leo Chang9056f462013-08-01 19:21:11 -070013123#ifdef FEATURE_WLAN_LPHB
Leo Changd9df8aa2013-09-26 13:32:26 -070013124 case WDI_LPHB_IND:
Leo Chang9056f462013-08-01 19:21:11 -070013125 {
Leo Changd9df8aa2013-09-26 13:32:26 -070013126 vos_msg_t vosMsg;
13127 tSirLPHBInd *lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070013128
Leo Changd9df8aa2013-09-26 13:32:26 -070013129 lphbInd =
13130 (tSirLPHBInd *)vos_mem_malloc(sizeof(tSirLPHBInd));
13131 if (NULL == lphbInd)
Leo Chang9056f462013-08-01 19:21:11 -070013132 {
13133 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13134 "%s: LPHB IND buffer alloc Fail", __func__);
13135 return ;
13136 }
13137
Leo Changd9df8aa2013-09-26 13:32:26 -070013138 lphbInd->sessionIdx =
Leo Chang9056f462013-08-01 19:21:11 -070013139 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
Leo Changd9df8aa2013-09-26 13:32:26 -070013140 lphbInd->protocolType =
Leo Chang9056f462013-08-01 19:21:11 -070013141 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
Leo Changd9df8aa2013-09-26 13:32:26 -070013142 lphbInd->eventReason =
Leo Chang9056f462013-08-01 19:21:11 -070013143 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
13144
13145 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Leo Changd9df8aa2013-09-26 13:32:26 -070013146 "Get WDI_LPHB_IND bssIdx %d",
Leo Chang9056f462013-08-01 19:21:11 -070013147 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
13148
Leo Changd9df8aa2013-09-26 13:32:26 -070013149 vosMsg.type = eWNI_SME_LPHB_IND;
13150 vosMsg.bodyptr = lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070013151 vosMsg.bodyval = 0;
13152 /* Send message to SME */
13153 if (VOS_STATUS_SUCCESS !=
13154 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13155 {
13156 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
13157 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
Leo Changd9df8aa2013-09-26 13:32:26 -070013158 vos_mem_free(lphbInd);
Leo Chang9056f462013-08-01 19:21:11 -070013159 }
13160 break;
13161 }
13162#endif /* FEATURE_WLAN_LPHB */
Yue Mab9c86f42013-08-14 15:59:08 -070013163 case WDI_PERIODIC_TX_PTRN_FW_IND:
13164 {
13165 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13166 "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, "
13167 "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__,
13168 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx,
13169 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx,
13170 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status,
13171 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap);
13172
13173 break;
13174 }
Leo Chang9056f462013-08-01 19:21:11 -070013175
Ravi Joshid2ca7c42013-07-23 08:37:49 -070013176 case WDI_IBSS_PEER_INACTIVITY_IND:
13177 {
13178 tSirIbssPeerInactivityInd *pIbssInd =
13179 (tSirIbssPeerInactivityInd *)
13180 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
13181
13182 if (NULL == pIbssInd)
13183 {
13184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13185 "Memory allocation failure, "
13186 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
13187 break;
13188 }
13189
13190 pIbssInd->bssIdx =
13191 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
13192 pIbssInd->staIdx =
13193 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
13194 vos_mem_copy(pIbssInd->peerAddr,
13195 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
13196 sizeof(tSirMacAddr));
13197 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
13198 break;
13199 }
13200
Rajeev79dbe4c2013-10-05 11:03:42 +053013201#ifdef FEATURE_WLAN_BATCH_SCAN
13202 case WDI_BATCH_SCAN_RESULT_IND:
13203 {
13204 void *pBatchScanResult;
13205 void *pCallbackContext;
13206 tpAniSirGlobal pMac;
13207
13208 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13209 "Received WDI_BATCHSCAN_RESULT_IND from FW");
13210
13211 /*sanity check*/
13212 if(NULL == pWDA)
13213 {
13214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13215 "%s:pWDA is NULL", __func__);
13216 VOS_ASSERT(0);
13217 return;
13218 }
13219
13220 pBatchScanResult =
13221 (void *)wdiLowLevelInd->wdiIndicationData.pBatchScanResult;
13222 if (NULL == pBatchScanResult)
13223 {
13224 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13225 "%s:Batch scan result from FW is null can't invoke HDD callback",
13226 __func__);
13227 VOS_ASSERT(0);
13228 return;
13229 }
13230
13231 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13232 if (NULL == pMac)
13233 {
13234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13235 "%s:pMac is NULL", __func__);
13236 VOS_ASSERT(0);
13237 return;
13238 }
13239
13240 pCallbackContext = pMac->pmc.batchScanResultCallbackContext;
13241 /*call hdd callback with set batch scan response data*/
13242 if(pMac->pmc.batchScanResultCallback)
13243 {
13244 pMac->pmc.batchScanResultCallback(pCallbackContext,
13245 pBatchScanResult);
13246 }
13247 else
13248 {
13249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13250 "%s:HDD callback is null", __func__);
13251 VOS_ASSERT(0);
13252 }
13253 break;
13254 }
13255#endif
13256
Leo Chang0b0e45a2013-12-15 15:18:55 -080013257#ifdef FEATURE_WLAN_CH_AVOID
13258 case WDI_CH_AVOID_IND:
13259 {
13260 vos_msg_t vosMsg;
13261 tSirChAvoidIndType *chAvoidInd;
13262
13263 chAvoidInd =
13264 (tSirChAvoidIndType *)vos_mem_malloc(sizeof(tSirChAvoidIndType));
13265 if (NULL == chAvoidInd)
13266 {
13267 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13268 "%s: CH_AVOID IND buffer alloc Fail", __func__);
13269 return ;
13270 }
13271
13272 chAvoidInd->avoidRangeCount =
13273 wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidRangeCount;
13274 wpalMemoryCopy((void *)chAvoidInd->avoidFreqRange,
13275 (void *)wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidFreqRange,
13276 chAvoidInd->avoidRangeCount * sizeof(tSirChAvoidFreqType));
13277
13278 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13279 "%s : WDA CH avoid notification", __func__);
13280
13281 vosMsg.type = eWNI_SME_CH_AVOID_IND;
13282 vosMsg.bodyptr = chAvoidInd;
13283 vosMsg.bodyval = 0;
13284 /* Send message to SME */
13285 if (VOS_STATUS_SUCCESS !=
13286 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13287 {
13288 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13289 "post eWNI_SME_CH_AVOID_IND to SME Failed");
13290 vos_mem_free(chAvoidInd);
13291 }
13292 break;
13293 }
13294#endif /* FEATURE_WLAN_CH_AVOID */
13295
Jeff Johnson295189b2012-06-20 16:38:30 -070013296 default:
13297 {
13298 /* TODO error */
13299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13300 "Received UNKNOWN Indication from WDI ");
13301 }
13302 }
13303 return ;
13304}
13305
Jeff Johnson295189b2012-06-20 16:38:30 -070013306/*
13307 * BA related processing in WDA.
13308 */
Jeff Johnson295189b2012-06-20 16:38:30 -070013309void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
13310 void* pUserData)
13311{
13312 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13313 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070013314 if(NULL == pWdaParams)
13315 {
13316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013317 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013318 VOS_ASSERT(0) ;
13319 return ;
13320 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013321 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070013322 vos_mem_free(pWdaParams->wdaMsgParam) ;
13323 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13324 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013326 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013327 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
13328 {
13329 tANI_U8 i = 0 ;
13330 tBaActivityInd *baActivityInd = NULL ;
13331 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
13332 tANI_U8 allocSize = sizeof(tBaActivityInd)
13333 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
13334 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
13335 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013336 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013337 if(NULL == baActivityInd)
13338 {
13339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013340 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013341 VOS_ASSERT(0) ;
13342 return;
13343 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013344 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
13345 sizeof(tSirMacAddr)) ;
13346 baActivityInd->baCandidateCnt = baCandidateCount ;
13347
13348 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
13349 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
13350
13351 for(i = 0 ; i < baCandidateCount ; i++)
13352 {
13353 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013354 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
13355 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013356 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
13357 {
13358 baCandidate->baInfo[tid].fBaEnable =
13359 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
13360 baCandidate->baInfo[tid].startingSeqNum =
13361 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
13362 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070013363 wdiBaCandidate++ ;
13364 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013365 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013366 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
13367 }
13368 else
13369 {
13370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13371 "BA Trigger RSP with Failure received ");
13372 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013373 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013374}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013375
13376
13377/*
13378 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
13379 * during MCC
13380 */
13381void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
13382{
13383 wpt_uint32 enabled;
13384 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
13385 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
13386 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
13387
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053013388 if (NULL == pMac )
13389 {
13390 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13391 "%s: Invoked with invalid MAC context ", __func__ );
13392 VOS_ASSERT(0);
13393 return;
13394 }
13395
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013396 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
13397 != eSIR_SUCCESS)
13398 {
13399 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13400 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
13401 return;
13402 }
13403
13404 if(!enabled)
13405 {
13406 return;
13407 }
13408
13409 if(NULL == pWDA)
13410 {
13411 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13412 "%s:WDA context is NULL", __func__);
13413 VOS_ASSERT(0);
13414 return;
13415 }
13416
13417 if(activate)
13418 {
13419 if( VOS_STATUS_SUCCESS !=
13420 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
13421 {
13422 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13423 "Traffic Stats Timer Start Failed ");
13424 return;
13425 }
13426 WDI_DS_ActivateTrafficStats();
13427 }
13428 else
13429 {
13430 WDI_DS_DeactivateTrafficStats();
13431 WDI_DS_ClearTrafficStats();
13432
13433 if( VOS_STATUS_SUCCESS !=
13434 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
13435 {
13436 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13437 "Traffic Stats Timer Stop Failed ");
13438 return;
13439 }
13440 }
13441}
13442
13443/*
13444 * Traffic Stats Timer handler
13445 */
13446void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
13447{
13448 WDI_Status wdiStatus;
13449 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
13450 WDI_TrafficStatsIndType trafficStatsIndParams;
13451 wpt_uint32 length, enabled;
13452 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13453
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053013454 if (NULL == pMac )
13455 {
13456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13457 "%s: Invoked with invalid MAC context ", __func__ );
13458 VOS_ASSERT(0);
13459 return;
13460 }
13461
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013462 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
13463 != eSIR_SUCCESS)
13464 {
13465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13466 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
13467 return;
13468 }
13469
13470 if(!enabled)
13471 {
13472 WDI_DS_DeactivateTrafficStats();
13473 return;
13474 }
13475
13476 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
13477
13478 if(pWdiTrafficStats != NULL)
13479 {
13480 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
13481 trafficStatsIndParams.length = length;
13482 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080013483 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013484 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
13485 trafficStatsIndParams.pUserData = pWDA;
13486
13487 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
13488
13489 if(WDI_STATUS_PENDING == wdiStatus)
13490 {
13491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13492 "Pending received for %s:%d ",__func__,__LINE__ );
13493 }
13494 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
13495 {
13496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13497 "Failure in %s:%d ",__func__,__LINE__ );
13498 }
13499
13500 WDI_DS_ClearTrafficStats();
13501 }
13502 else
13503 {
13504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
13505 "pWdiTrafficStats is Null");
13506 }
13507
13508 if( VOS_STATUS_SUCCESS !=
13509 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
13510 {
13511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
13512 "Traffic Stats Timer Start Failed ");
13513 return;
13514 }
13515}
13516
Jeff Johnson295189b2012-06-20 16:38:30 -070013517/*
13518 * BA Activity check timer handler
13519 */
13520void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
13521{
13522 tANI_U8 curSta = 0 ;
13523 tANI_U8 tid = 0 ;
13524 tANI_U8 size = 0 ;
13525 tANI_U8 baCandidateCount = 0 ;
13526 tANI_U8 newBaCandidate = 0 ;
13527 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
13528
13529 if(NULL == pWDA)
13530 {
13531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013532 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013533 VOS_ASSERT(0);
13534 return ;
13535 }
13536 if(WDA_MAX_STA < pWDA->wdaMaxSta)
13537 {
13538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13539 "Inconsistent STA entries in WDA");
13540 VOS_ASSERT(0) ;
13541 }
13542 /* walk through all STA entries and find out TX packet count */
13543 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
13544 {
Gopichand Nakkala976e3252013-01-03 15:45:56 -080013545#ifdef WLAN_SOFTAP_VSTA_FEATURE
13546 // We can only do BA on "hard" STAs.
13547 if (!(IS_HWSTA_IDX(curSta)))
13548 {
13549 continue;
13550 }
13551#endif //WLAN_SOFTAP_VSTA_FEATURE
13552 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
13553 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070013554 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013555 tANI_U32 txPktCount = 0 ;
13556 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013557 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070013558 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
13559 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070013560 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
13561 curSta, tid, &txPktCount)))
13562 {
13563#if 0
13564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
13565 "************* %d:%d, %d ",curSta, txPktCount,
13566 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
13567#endif
13568 if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070013569 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Jeff Johnson295189b2012-06-20 16:38:30 -070013570 && (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
13571 curSta, tid)))
13572 {
13573 /* get prepare for sending message to HAL */
13574 //baCandidate[baCandidateCount].staIdx = curSta ;
13575 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
13576 newBaCandidate = WDA_ENABLE_BA ;
13577 }
13578 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
13579 }
13580 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013581 /* fill the entry for all the sta with given TID's */
13582 if(WDA_ENABLE_BA == newBaCandidate)
13583 {
13584 /* move to next BA candidate */
13585 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
13586 size += sizeof(WDI_TriggerBAReqCandidateType) ;
13587 baCandidateCount++ ;
13588 newBaCandidate = WDA_DISABLE_BA ;
13589 }
13590 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013591 /* prepare and send message to hal */
13592 if( 0 < baCandidateCount)
13593 {
13594 WDI_Status status = WDI_STATUS_SUCCESS ;
13595 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
13596 tWDA_ReqParams *pWdaParams =
13597 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013598 if(NULL == pWdaParams)
13599 {
13600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013601 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013602 VOS_ASSERT(0) ;
13603 return;
13604 }
13605 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
13606 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
13607 if(NULL == wdiTriggerBaReq)
13608 {
13609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013610 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013611 VOS_ASSERT(0) ;
13612 vos_mem_free(pWdaParams);
13613 return;
13614 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013615 do
13616 {
13617 WDI_TriggerBAReqinfoType *triggerBaInfo =
13618 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
13619 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
13620 /* TEMP_FIX: Need to see if WDI need check for assoc session for
13621 * for each request */
13622 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
13623 triggerBaInfo->ucBASessionID = 0;
13624 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
13625 } while(0) ;
13626 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
13627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013628 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013629 pWdaParams->pWdaContext = pWDA;
13630 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
13631 pWdaParams->wdaMsgParam = NULL;
13632 status = WDI_TriggerBAReq(wdiTriggerBaReq,
13633 WDA_TriggerBaReqCallback, pWdaParams) ;
13634 if(IS_WDI_STATUS_FAILURE(status))
13635 {
13636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13637 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
13638 vos_mem_free(pWdaParams->wdaMsgParam) ;
13639 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13640 vos_mem_free(pWdaParams) ;
13641 }
13642 }
13643 else
13644 {
13645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
13646 "There is no TID for initiating BA");
13647 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013648 if( VOS_STATUS_SUCCESS !=
13649 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
13650 {
13651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13652 "BA Activity Timer Stop Failed ");
13653 return ;
13654 }
13655 if( VOS_STATUS_SUCCESS !=
13656 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
13657 {
13658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13659 "BA Activity Timer Start Failed ");
13660 return;
13661 }
13662 return ;
13663}
Jeff Johnson295189b2012-06-20 16:38:30 -070013664/*
13665 * WDA common routine to create timer used by WDA.
13666 */
13667static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
13668{
Jeff Johnson295189b2012-06-20 16:38:30 -070013669 VOS_STATUS status = VOS_STATUS_SUCCESS ;
13670 tANI_U32 val = 0 ;
13671 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13672
13673 if(NULL == pMac)
13674 {
13675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013676 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013677 VOS_ASSERT(0);
13678 return VOS_STATUS_E_FAILURE;
13679 }
13680 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
13681 != eSIR_SUCCESS)
13682 {
13683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13684 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
13685 return VOS_STATUS_E_FAILURE;
13686 }
13687 val = SYS_MS_TO_TICKS(val) ;
13688
13689 /* BA activity check timer */
13690 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
13691 "BA Activity Check timer", WDA_TimerHandler,
13692 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
13693 if(status != TX_SUCCESS)
13694 {
13695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13696 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013697 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013698 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013699 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013700 /* Tx Complete Timeout timer */
13701 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
13702 "Tx Complete Check timer", WDA_TimerHandler,
13703 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013704 if(status != TX_SUCCESS)
13705 {
13706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13707 "Unable to create Tx Complete Timeout timer");
13708 /* Destroy timer of BA activity check timer */
13709 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
13710 if(status != TX_SUCCESS)
13711 {
13712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13713 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013714 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013715 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013716 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013717 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013718
13719 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
13720
13721 /* Traffic Stats timer */
13722 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
13723 "Traffic Stats timer", WDA_TimerHandler,
13724 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
13725 if(status != TX_SUCCESS)
13726 {
13727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13728 "Unable to create traffic stats timer");
13729 /* Destroy timer of BA activity check timer */
13730 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
13731 if(status != TX_SUCCESS)
13732 {
13733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13734 "Unable to Destroy BA activity timer");
13735 }
13736 /* Destroy timer of tx complete timer */
13737 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
13738 if(status != TX_SUCCESS)
13739 {
13740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13741 "Unable to Tx complete timer");
13742 }
13743 return VOS_STATUS_E_FAILURE ;
13744 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013745 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013746}
Jeff Johnson295189b2012-06-20 16:38:30 -070013747/*
13748 * WDA common routine to destroy timer used by WDA.
13749 */
13750static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
13751{
13752 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013753 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
13754 if(status != TX_SUCCESS)
13755 {
13756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13757 "Unable to Destroy Tx Complete Timeout timer");
13758 return eSIR_FAILURE ;
13759 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013760 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
13761 if(status != TX_SUCCESS)
13762 {
13763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13764 "Unable to Destroy BA activity timer");
13765 return eSIR_FAILURE ;
13766 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013767 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
13768 if(status != TX_SUCCESS)
13769 {
13770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13771 "Unable to Destroy traffic stats timer");
13772 return eSIR_FAILURE ;
13773 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013774 return eSIR_SUCCESS ;
13775}
Jeff Johnson295189b2012-06-20 16:38:30 -070013776/*
13777 * WDA timer handler.
13778 */
13779void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
13780{
13781 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
13782 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013783 /*
13784 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
13785 */
13786 wdaMsg.type = timerInfo ;
13787 wdaMsg.bodyptr = NULL;
13788 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013789 /* post the message.. */
13790 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
13791 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
13792 {
13793 vosStatus = VOS_STATUS_E_BADMSG;
13794 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013795}
Jeff Johnson295189b2012-06-20 16:38:30 -070013796/*
13797 * WDA Tx Complete timeout Indication.
13798 */
13799void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
13800{
13801 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013802 if( pWDA->pAckTxCbFunc )
13803 {
13804 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013805 "TxComplete timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070013806 pWDA->pAckTxCbFunc( pMac, 0);
13807 pWDA->pAckTxCbFunc = NULL;
13808 }
13809 else
13810 {
13811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013812 "There is no request pending for TxComplete and wait timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070013813 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013814}
Jeff Johnson295189b2012-06-20 16:38:30 -070013815/*
13816 * WDA Set REG Domain to VOS NV
13817 */
Abhishek Singha306a442013-11-07 18:39:01 +053013818eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId,
13819 tAniBool sendRegHint)
Jeff Johnson295189b2012-06-20 16:38:30 -070013820{
Abhishek Singha306a442013-11-07 18:39:01 +053013821 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId, sendRegHint))
Jeff Johnson295189b2012-06-20 16:38:30 -070013822 {
13823 return eHAL_STATUS_INVALID_PARAMETER;
13824 }
13825 return eHAL_STATUS_SUCCESS;
13826}
Jeff Johnson295189b2012-06-20 16:38:30 -070013827
Jeff Johnson295189b2012-06-20 16:38:30 -070013828#ifdef FEATURE_WLAN_SCAN_PNO
13829/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013830 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013831 *
13832 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013833void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013834{
13835 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053013836 tSirPNOScanReq *pPNOScanReqParams;
13837
Jeff Johnson295189b2012-06-20 16:38:30 -070013838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053013839 "<------ %s, wdiStatus: %d",__func__, status);
Yue Ma7f44bbe2013-04-12 11:47:39 -070013840 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070013841 {
13842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013843 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013844 VOS_ASSERT(0) ;
13845 return ;
13846 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013847
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053013848 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
13849 if(pPNOScanReqParams->statusCallback)
13850 {
13851 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
13852 (status == WDI_STATUS_SUCCESS) ?
13853 VOS_STATUS_SUCCESS : VOS_STATUS_E_FAILURE);
13854 }
13855
Yue Ma7f44bbe2013-04-12 11:47:39 -070013856 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13857 vos_mem_free(pWdaParams->wdaMsgParam);
13858 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013859
13860 return ;
13861}
Jeff Johnson295189b2012-06-20 16:38:30 -070013862/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013863 * FUNCTION: WDA_PNOScanReqCallback
13864 * Free memory.
13865 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
13866 */
13867void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013868{
Yue Ma7f44bbe2013-04-12 11:47:39 -070013869 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053013870 tSirPNOScanReq *pPNOScanReqParams;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013871
13872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13873 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13874
13875 if(NULL == pWdaParams)
13876 {
13877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13878 "%s: pWdaParams received NULL", __func__);
13879 VOS_ASSERT(0);
13880 return;
13881 }
13882
13883 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13884 {
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053013885 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
13886 if(pPNOScanReqParams->statusCallback)
13887 {
13888 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
13889 VOS_STATUS_E_FAILURE);
13890 }
13891
Yue Ma7f44bbe2013-04-12 11:47:39 -070013892 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13893 vos_mem_free(pWdaParams->wdaMsgParam);
13894 vos_mem_free(pWdaParams);
13895 }
13896
13897 return;
13898}
13899/*
13900 * FUNCTION: WDA_UpdateScanParamsRespCallback
13901 *
13902 */
13903void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
13904{
13905 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013907 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070013908 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070013909 {
13910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013911 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013912 VOS_ASSERT(0) ;
13913 return ;
13914 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013915
13916 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13917 vos_mem_free(pWdaParams->wdaMsgParam);
13918 vos_mem_free(pWdaParams);
13919
Jeff Johnson295189b2012-06-20 16:38:30 -070013920 return ;
13921}
Jeff Johnson295189b2012-06-20 16:38:30 -070013922/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013923 * FUNCTION: WDA_UpdateScanParamsReqCallback
13924 * Free memory.
13925 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
13926 */
13927void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
13928{
13929 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13930
13931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13932 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13933
13934 if(NULL == pWdaParams)
13935 {
13936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13937 "%s: pWdaParams received NULL", __func__);
13938 VOS_ASSERT(0);
13939 return;
13940 }
13941
13942 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13943 {
13944 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13945 vos_mem_free(pWdaParams->wdaMsgParam);
13946 vos_mem_free(pWdaParams);
13947 }
13948
13949 return;
13950}
13951/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013952 * FUNCTION: WDA_ProcessSetPreferredNetworkList
13953 * Request to WDI to set Preferred Network List.Offload
13954 */
13955VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
13956 tSirPNOScanReq *pPNOScanReqParams)
13957{
Jeff Johnson43971f52012-07-17 12:26:56 -070013958 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013959 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
13960 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
13961 tWDA_ReqParams *pWdaParams ;
13962 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070013963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013964 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013965 if(NULL == pwdiPNOScanReqInfo)
13966 {
13967 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013968 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013969 VOS_ASSERT(0);
13970 return VOS_STATUS_E_NOMEM;
13971 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013972 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13973 if(NULL == pWdaParams)
13974 {
13975 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013976 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013977 VOS_ASSERT(0);
13978 vos_mem_free(pwdiPNOScanReqInfo);
13979 return VOS_STATUS_E_NOMEM;
13980 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013981 //
13982 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
13983 //
13984 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
13985 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070013986 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
13987 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
13988 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013989 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
13990 {
13991 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
13992 &pPNOScanReqParams->aNetworks[i],
13993 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
13994 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013995 /*Scan timer intervals*/
13996 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
13997 &pPNOScanReqParams->scanTimers,
13998 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070013999 /*Probe template for 2.4GHz band*/
14000 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
14001 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
14002 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070014003 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
14004 pPNOScanReqParams->p24GProbeTemplate,
14005 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070014006 /*Probe template for 5GHz band*/
14007 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
14008 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
14009 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070014010 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
14011 pPNOScanReqParams->p5GProbeTemplate,
14012 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070014013 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
14014 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014015
Jeff Johnson295189b2012-06-20 16:38:30 -070014016 /* Store Params pass it to WDI */
14017 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
14018 pWdaParams->pWdaContext = pWDA;
14019 /* Store param pointer as passed in by caller */
14020 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014021 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014022 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014023 if(IS_WDI_STATUS_FAILURE(status))
14024 {
14025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14026 "Failure in Set PNO REQ WDI API, free all the memory " );
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014027 if(pPNOScanReqParams->statusCallback)
14028 {
14029 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
14030 VOS_STATUS_E_FAILURE);
14031 }
14032
Jeff Johnson295189b2012-06-20 16:38:30 -070014033 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14034 vos_mem_free(pWdaParams->wdaMsgParam);
14035 pWdaParams->wdaWdiApiMsgParam = NULL;
14036 pWdaParams->wdaMsgParam = NULL;
14037 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014038 return CONVERT_WDI2VOS_STATUS(status) ;
14039}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014040
14041#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
14042
14043void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
14044{
14045 /*Convert the CSR Auth types to WDI Auth types */
14046 switch (csrAuthType)
14047 {
14048 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
14049 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
14050 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080014051#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014052 case eCSR_AUTH_TYPE_CCKM_WPA:
14053 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
14054 break;
14055#endif
14056 case eCSR_AUTH_TYPE_WPA:
14057 *AuthType = eWDA_AUTH_TYPE_WPA;
14058 break;
14059 case eCSR_AUTH_TYPE_WPA_PSK:
14060 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
14061 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080014062#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014063 case eCSR_AUTH_TYPE_CCKM_RSN:
14064 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
14065 break;
14066#endif
14067 case eCSR_AUTH_TYPE_RSN:
14068 *AuthType = eWDA_AUTH_TYPE_RSN;
14069 break;
14070 case eCSR_AUTH_TYPE_RSN_PSK:
14071 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
14072 break;
14073#if defined WLAN_FEATURE_VOWIFI_11R
14074 case eCSR_AUTH_TYPE_FT_RSN:
14075 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
14076 break;
14077 case eCSR_AUTH_TYPE_FT_RSN_PSK:
14078 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
14079 break;
14080#endif
14081#ifdef FEATURE_WLAN_WAPI
14082 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
14083 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
14084 break;
14085 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
14086 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
14087 break;
14088#endif /* FEATURE_WLAN_WAPI */
14089 case eCSR_AUTH_TYPE_SHARED_KEY:
14090 case eCSR_AUTH_TYPE_AUTOSWITCH:
14091 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
14092 break;
14093#if 0
14094 case eCSR_AUTH_TYPE_SHARED_KEY:
14095 *AuthType = eWDA_AUTH_TYPE_SHARED_KEY;
14096 break;
14097 case eCSR_AUTH_TYPE_AUTOSWITCH:
14098 *AuthType = eWDA_AUTH_TYPE_AUTOSWITCH;
14099#endif
14100 default:
14101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14102 "%s: Unknown Auth Type", __func__);
14103 break;
14104 }
14105}
14106void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
14107{
14108 switch (csrEncrType)
14109 {
14110 case eCSR_ENCRYPT_TYPE_NONE:
14111 *EncrType = WDI_ED_NONE;
14112 break;
14113 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
14114 case eCSR_ENCRYPT_TYPE_WEP40:
14115 *EncrType = WDI_ED_WEP40;
14116 break;
14117 case eCSR_ENCRYPT_TYPE_WEP104:
14118 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
14119 *EncrType = WDI_ED_WEP104;
14120 break;
14121 case eCSR_ENCRYPT_TYPE_TKIP:
14122 *EncrType = WDI_ED_TKIP;
14123 break;
14124 case eCSR_ENCRYPT_TYPE_AES:
14125 *EncrType = WDI_ED_CCMP;
14126 break;
14127#ifdef WLAN_FEATURE_11W
14128 case eCSR_ENCRYPT_TYPE_AES_CMAC:
14129 *EncrType = WDI_ED_AES_128_CMAC;
14130 break;
14131#endif
14132#ifdef FEATURE_WLAN_WAPI
14133 case eCSR_ENCRYPT_TYPE_WPI:
14134 *EncrType = WDI_ED_WPI;
14135 break;
14136#endif
14137 case eCSR_ENCRYPT_TYPE_ANY:
14138 *EncrType = WDI_ED_ANY;
14139 break;
14140
14141 default:
14142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14143 "%s: Unknown Encryption Type", __func__);
14144 break;
14145 }
14146}
14147
14148/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014149 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014150 * Request to WDI to set Roam Offload Scan
14151 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014152VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014153 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
14154{
14155 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014156 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
14157 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014158 tWDA_ReqParams *pWdaParams ;
14159 v_U8_t csrAuthType;
14160 WDI_RoamNetworkType *pwdiRoamNetworkType;
14161 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
14162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14163 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014164 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014165 {
14166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14167 "%s: VOS MEM Alloc Failure", __func__);
14168 VOS_ASSERT(0);
14169 return VOS_STATUS_E_NOMEM;
14170 }
14171 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14172 if (NULL == pWdaParams)
14173 {
14174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14175 "%s: VOS MEM Alloc Failure", __func__);
14176 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014177 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014178 return VOS_STATUS_E_NOMEM;
14179 }
14180
14181 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014182 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014183 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014184 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
14185 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014186 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
14187 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
14188 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
14189 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
14190 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
14191 sizeof(pwdiRoamNetworkType->currAPbssid));
14192 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
14193 csrAuthType);
14194 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
14195 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
14196 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
14197 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
14198 pwdiRoamOffloadScanInfo->LookupThreshold =
14199 pRoamOffloadScanReqParams->LookupThreshold ;
Varun Reddy Yeturu6c5e25c2014-01-09 21:55:37 -080014200 pwdiRoamOffloadScanInfo->RxSensitivityThreshold =
14201 pRoamOffloadScanReqParams->RxSensitivityThreshold;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014202 pwdiRoamOffloadScanInfo->RoamRssiDiff =
14203 pRoamOffloadScanReqParams->RoamRssiDiff ;
Sameer Thalappil4ae66ec2013-11-05 14:17:35 -080014204 pwdiRoamOffloadScanInfo->MAWCEnabled =
14205 pRoamOffloadScanReqParams->MAWCEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014206 pwdiRoamOffloadScanInfo->Command =
14207 pRoamOffloadScanReqParams->Command ;
14208 pwdiRoamOffloadScanInfo->StartScanReason =
14209 pRoamOffloadScanReqParams->StartScanReason ;
14210 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
14211 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
14212 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
14213 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
14214 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
14215 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
14216 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
14217 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
14218 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
14219 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080014220 pwdiRoamOffloadScanInfo->IsESEEnabled =
14221 pRoamOffloadScanReqParams->IsESEEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014222 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
14223 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
14224 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
14225 pwdiRoamNetworkType->ssId.ucLength =
14226 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
14227 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
14228 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
14229 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
14230 pwdiRoamNetworkType->ChannelCount =
14231 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
14232 pwdiRoamOffloadScanInfo->ChannelCacheType =
14233 pRoamOffloadScanReqParams->ChannelCacheType;
14234 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
14235 pRoamOffloadScanReqParams->ValidChannelList,
14236 pRoamOffloadScanReqParams->ValidChannelCount);
14237 pwdiRoamOffloadScanInfo->ValidChannelCount =
14238 pRoamOffloadScanReqParams->ValidChannelCount;
14239 pwdiRoamOffloadScanInfo->us24GProbeSize =
14240 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
14241 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
14242 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
14243 pRoamOffloadScanReqParams->p24GProbeTemplate,
14244 pwdiRoamOffloadScanInfo->us24GProbeSize);
14245 pwdiRoamOffloadScanInfo->us5GProbeSize =
14246 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
14247 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
14248 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
14249 pRoamOffloadScanReqParams->p5GProbeTemplate,
14250 pwdiRoamOffloadScanInfo->us5GProbeSize);
14251 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
14252 pRoamOffloadScanReqParams->MDID.mdiePresent;
14253 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
14254 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014255 pwdiRoamOffloadScanInfo->nProbes =
14256 pRoamOffloadScanReqParams->nProbes;
14257 pwdiRoamOffloadScanInfo->HomeAwayTime =
14258 pRoamOffloadScanReqParams->HomeAwayTime;
14259 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014260 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014261 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014262 pWdaParams->pWdaContext = pWDA;
14263 /* Store param pointer as passed in by caller */
14264 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014265 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014266 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
14267 if(IS_WDI_STATUS_FAILURE(status))
14268 {
14269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14270 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
14271 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14272 vos_mem_free(pWdaParams->wdaMsgParam);
14273 pWdaParams->wdaWdiApiMsgParam = NULL;
14274 pWdaParams->wdaMsgParam = NULL;
14275 }
14276 return CONVERT_WDI2VOS_STATUS(status) ;
14277}
14278#endif
14279
Jeff Johnson295189b2012-06-20 16:38:30 -070014280/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014281 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014282 *
14283 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014284void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014285{
14286 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14287
14288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014289 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014290
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053014291 if(NULL == pWdaParams)
14292 {
14293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014294 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053014295 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070014296 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053014297 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014298
Jeff Johnson295189b2012-06-20 16:38:30 -070014299 vos_mem_free(pWdaParams->wdaMsgParam) ;
14300 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14301 vos_mem_free(pWdaParams) ;
14302
14303 return ;
14304}
14305/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014306 * FUNCTION: WDA_RssiFilterReqCallback
14307 * Free memory.
14308 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
14309 */
14310void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
14311{
14312 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14313
14314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14315 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14316
14317 if(NULL == pWdaParams)
14318 {
14319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14320 "%s: pWdaParams received NULL", __func__);
14321 VOS_ASSERT(0);
14322 return;
14323 }
14324
14325 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14326 {
14327 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14328 vos_mem_free(pWdaParams->wdaMsgParam);
14329 vos_mem_free(pWdaParams);
14330 }
14331
14332 return;
14333}
14334/*
Jeff Johnson295189b2012-06-20 16:38:30 -070014335 * FUNCTION: WDA_ProcessSetPreferredNetworkList
14336 * Request to WDI to set Preferred Network List.Offload
14337 */
14338VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
14339 tSirSetRSSIFilterReq* pRssiFilterParams)
14340{
Jeff Johnson43971f52012-07-17 12:26:56 -070014341 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014342 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
14343 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
14344 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014346 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014347 if(NULL == pwdiSetRssiFilterReqInfo)
14348 {
14349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014350 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014351 VOS_ASSERT(0);
14352 return VOS_STATUS_E_NOMEM;
14353 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014354 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14355 if(NULL == pWdaParams)
14356 {
14357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014358 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014359 VOS_ASSERT(0);
14360 vos_mem_free(pwdiSetRssiFilterReqInfo);
14361 return VOS_STATUS_E_NOMEM;
14362 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014363 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070014364 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
14365 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014366
Jeff Johnson295189b2012-06-20 16:38:30 -070014367 /* Store Params pass it to WDI */
14368 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
14369 pWdaParams->pWdaContext = pWDA;
14370 /* Store param pointer as passed in by caller */
14371 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014372 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014373 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014374 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014375 if(IS_WDI_STATUS_FAILURE(status))
14376 {
14377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14378 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
14379 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14380 vos_mem_free(pWdaParams->wdaMsgParam);
14381 pWdaParams->wdaWdiApiMsgParam = NULL;
14382 pWdaParams->wdaMsgParam = NULL;
14383 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014384 return CONVERT_WDI2VOS_STATUS(status) ;
14385}
14386
Jeff Johnson295189b2012-06-20 16:38:30 -070014387/*
14388 * FUNCTION: WDA_ProcessUpdateScanParams
14389 * Request to WDI to update Scan Parameters
14390 */
14391VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
14392 tSirUpdateScanParams *pUpdateScanParams)
14393{
Jeff Johnson43971f52012-07-17 12:26:56 -070014394 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014395 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
14396 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
14397 sizeof(WDI_UpdateScanParamsInfoType)) ;
14398 tWDA_ReqParams *pWdaParams ;
14399 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070014400 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014401 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014402 if(NULL == wdiUpdateScanParamsInfoType)
14403 {
14404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014405 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014406 VOS_ASSERT(0);
14407 return VOS_STATUS_E_NOMEM;
14408 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014409 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14410 if ( NULL == pWdaParams )
14411 {
14412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014413 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014414 VOS_ASSERT(0);
14415 vos_mem_free(wdiUpdateScanParamsInfoType);
14416 return VOS_STATUS_E_NOMEM;
14417 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014418 //
14419 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
14420 //
Jeff Johnson295189b2012-06-20 16:38:30 -070014421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14422 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
14423 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
14424 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
Jeff Johnson9a9ed0d2013-11-26 13:36:52 -080014425 "sir struct %zu wdi struct %zu",
Jeff Johnson295189b2012-06-20 16:38:30 -070014426 pUpdateScanParams->b11dEnabled,
14427 pUpdateScanParams->b11dResolved,
14428 pUpdateScanParams->ucChannelCount,
14429 pUpdateScanParams->usPassiveMinChTime,
14430 pUpdateScanParams->usPassiveMaxChTime,
14431 pUpdateScanParams->usActiveMinChTime,
14432 pUpdateScanParams->usActiveMaxChTime,
14433 sizeof(tSirUpdateScanParams),
14434 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
14435
Jeff Johnson295189b2012-06-20 16:38:30 -070014436 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
14437 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070014438 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
14439 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070014440 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
14441 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070014442 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
14443 pUpdateScanParams->usActiveMaxChTime;
14444 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
14445 pUpdateScanParams->usActiveMinChTime;
14446 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
14447 pUpdateScanParams->usPassiveMaxChTime;
14448 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
14449 pUpdateScanParams->usPassiveMinChTime;
14450
Jeff Johnson295189b2012-06-20 16:38:30 -070014451 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053014452 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
14453 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070014454
Jeff Johnson295189b2012-06-20 16:38:30 -070014455 for ( i = 0; i <
14456 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
14457 i++)
14458 {
14459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14460 "Update Scan Parameters channel: %d",
14461 pUpdateScanParams->aChannels[i]);
14462
14463 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
14464 pUpdateScanParams->aChannels[i];
14465 }
14466
Yue Ma7f44bbe2013-04-12 11:47:39 -070014467 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
14468 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014469
Jeff Johnson295189b2012-06-20 16:38:30 -070014470 /* Store Params pass it to WDI */
14471 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
14472 pWdaParams->pWdaContext = pWDA;
14473 /* Store param pointer as passed in by caller */
14474 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070014475
Jeff Johnson295189b2012-06-20 16:38:30 -070014476
14477
14478 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014479 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014480 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014481 if(IS_WDI_STATUS_FAILURE(status))
14482 {
14483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14484 "Failure in Update Scan Params EQ WDI API, free all the memory " );
14485 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14486 vos_mem_free(pWdaParams->wdaMsgParam);
14487 vos_mem_free(pWdaParams);
14488 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014489 return CONVERT_WDI2VOS_STATUS(status) ;
14490}
14491#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014492
14493#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
14494/*
14495 * FUNCTION: WDA_RoamOffloadScanReqCallback
14496 *
14497 */
14498void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
14499{
14500 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070014501 vos_msg_t vosMsg;
14502 wpt_uint8 reason = 0;
14503
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070014504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014505 "<------ %s " ,__func__);
14506 if (NULL == pWdaParams)
14507 {
14508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14509 "%s: pWdaParams received NULL", __func__);
14510 VOS_ASSERT(0) ;
14511 return ;
14512 }
14513 if ( pWdaParams != NULL )
14514 {
14515 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
14516 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070014517 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014518 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14519 }
14520 if ( pWdaParams->wdaMsgParam != NULL)
14521 {
14522 vos_mem_free(pWdaParams->wdaMsgParam);
14523 }
14524
14525 vos_mem_free(pWdaParams) ;
14526 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070014527 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
14528 vosMsg.bodyptr = NULL;
14529 if (WDI_STATUS_SUCCESS != status)
14530 {
14531 reason = 0;
14532 }
14533 vosMsg.bodyval = reason;
14534 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14535 {
14536 /* free the mem and return */
14537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsone384c822013-10-30 12:21:17 -070014538 "%s: Failed to post the rsp to UMAC", __func__);
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070014539 }
14540
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014541 return ;
14542}
14543#endif
14544
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014545/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014546 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014547 *
14548 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014549void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014550{
14551 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14552
14553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14554 "<------ %s " ,__func__);
14555
14556 if(NULL == pWdaParams)
14557 {
14558 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14559 "%s: pWdaParams received NULL", __func__);
14560 VOS_ASSERT(0);
14561 return;
14562 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014563
14564 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14565 vos_mem_free(pWdaParams->wdaMsgParam);
14566 vos_mem_free(pWdaParams);
14567
14568 return;
14569}
14570/*
14571 * FUNCTION: WDA_SetPowerParamsReqCallback
14572 * Free memory.
14573 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
14574 */
14575void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
14576{
14577 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14578
14579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14580 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14581
14582 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014583 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070014584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14585 "%s: pWdaParams received NULL", __func__);
14586 VOS_ASSERT(0);
14587 return;
14588 }
14589
14590 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14591 {
14592 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14593 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014594 vos_mem_free(pWdaParams);
14595 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014596
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014597 return;
14598}
14599
Jeff Johnson295189b2012-06-20 16:38:30 -070014600#ifdef WLAN_FEATURE_PACKET_FILTERING
14601/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014602 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014603 *
14604 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014605void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014606 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
14607 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014608{
14609 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014610 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014611 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014612 if(NULL == pWdaParams)
14613 {
14614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014615 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014616 VOS_ASSERT(0) ;
14617 return ;
14618 }
14619
14620 vos_mem_free(pWdaParams->wdaMsgParam) ;
14621 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14622 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014623 //print a msg, nothing else to do
14624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014625 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070014626 return ;
14627}
Jeff Johnson295189b2012-06-20 16:38:30 -070014628/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014629 * FUNCTION: WDA_8023MulticastListReqCallback
14630 * Free memory.
14631 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
14632 */
14633void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
14634{
14635 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14636
14637 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14638 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14639
14640 if(NULL == pWdaParams)
14641 {
14642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14643 "%s: pWdaParams received NULL", __func__);
14644 VOS_ASSERT(0);
14645 return;
14646 }
14647
14648 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14649 {
14650 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14651 vos_mem_free(pWdaParams->wdaMsgParam);
14652 vos_mem_free(pWdaParams);
14653 }
14654
14655 return;
14656}
14657/*
Jeff Johnson295189b2012-06-20 16:38:30 -070014658 * FUNCTION: WDA_Process8023MulticastListReq
14659 * Request to WDI to add 8023 Multicast List
14660 */
14661VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
14662 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
14663{
Jeff Johnson43971f52012-07-17 12:26:56 -070014664 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014665 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
14666 tWDA_ReqParams *pWdaParams ;
14667 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070014668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014669 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014670 pwdiFltPktSetMcListReqParamsType =
14671 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
14672 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
14673 ) ;
14674 if(NULL == pwdiFltPktSetMcListReqParamsType)
14675 {
14676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014677 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014678 return VOS_STATUS_E_NOMEM;
14679 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014680 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14681 if(NULL == pWdaParams)
14682 {
14683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014684 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014685 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
14686 return VOS_STATUS_E_NOMEM;
14687 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014688
Jeff Johnson295189b2012-06-20 16:38:30 -070014689 //
14690 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
14691 //
14692 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070014693 pRcvFltMcAddrList->ulMulticastAddrCnt;
14694
14695 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
14696 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
14697 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
14698 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
14699
Jeff Johnson295189b2012-06-20 16:38:30 -070014700 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
14701 {
14702 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
14703 &(pRcvFltMcAddrList->multicastAddr[i]),
14704 sizeof(tSirMacAddr));
14705 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014706 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
14707 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014708
Jeff Johnson295189b2012-06-20 16:38:30 -070014709 /* Store Params pass it to WDI */
14710 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
14711 pWdaParams->pWdaContext = pWDA;
14712 /* Store param pointer as passed in by caller */
14713 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070014714 status = WDI_8023MulticastListReq(
14715 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014716 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014717 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014718 if(IS_WDI_STATUS_FAILURE(status))
14719 {
14720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14721 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
14722 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14723 vos_mem_free(pWdaParams->wdaMsgParam);
14724 vos_mem_free(pWdaParams);
14725 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014726 return CONVERT_WDI2VOS_STATUS(status) ;
14727}
Jeff Johnson295189b2012-06-20 16:38:30 -070014728/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014729 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014730 *
14731 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014732void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014733 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
14734 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014735{
14736 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014738 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014739 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070014740 if(NULL == pWdaParams)
14741 {
14742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014743 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014744 VOS_ASSERT(0) ;
14745 return ;
14746 }
14747
14748 vos_mem_free(pWdaParams->wdaMsgParam) ;
14749 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14750 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014751 //print a msg, nothing else to do
14752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014753 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070014754 return ;
14755}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014756
14757/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014758 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
14759 * Free memory.
14760 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014761 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014762void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014763 void* pUserData)
14764{
14765 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14766
14767 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14768 "<------ %s, wdiStatus: %d",
14769 __func__, wdiStatus);
14770
14771 if (NULL == pWdaParams)
14772 {
14773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14774 "%s: Invalid pWdaParams pointer", __func__);
14775 VOS_ASSERT(0);
14776 return;
14777 }
14778
14779 if (IS_WDI_STATUS_FAILURE(wdiStatus))
14780 {
14781 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14782 vos_mem_free(pWdaParams->wdaMsgParam);
14783 vos_mem_free(pWdaParams);
14784 }
14785
14786 return;
14787}
14788
Jeff Johnson295189b2012-06-20 16:38:30 -070014789/*
14790 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
14791 * Request to WDI to set Receive Filters
14792 */
14793VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
14794 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
14795{
Jeff Johnson43971f52012-07-17 12:26:56 -070014796 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014797 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
14798 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
14799 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
14800 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
14801 tWDA_ReqParams *pWdaParams ;
14802 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070014803 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014804 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014805 if(NULL == pwdiSetRcvPktFilterReqParamsType)
14806 {
14807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014808 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014809 VOS_ASSERT(0);
14810 return VOS_STATUS_E_NOMEM;
14811 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014812 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14813 if(NULL == pWdaParams)
14814 {
14815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014816 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014817 VOS_ASSERT(0);
14818 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
14819 return VOS_STATUS_E_NOMEM;
14820 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014821 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
14822 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
14823 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
14824 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070014825 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
14826 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
14827
14828 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
14829 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070014830
14831 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14832 "FID %d FT %d NParams %d CT %d",
14833 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
14834 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
14835 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
14836 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070014837 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
14838 {
14839 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
14840 &pRcvPktFilterCfg->paramsData[i],
14841 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070014842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014843 "Proto %d Comp Flag %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070014844 pwdiSetRcvPktFilterReqParamsType->
14845 wdiPktFilterCfg.paramsData[i].protocolLayer,
14846 pwdiSetRcvPktFilterReqParamsType->
14847 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070014848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014849 "Data Offset %d Data Len %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070014850 pwdiSetRcvPktFilterReqParamsType->
14851 wdiPktFilterCfg.paramsData[i].dataOffset,
14852 pwdiSetRcvPktFilterReqParamsType->
14853 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070014854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014855 "CData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070014856 pwdiSetRcvPktFilterReqParamsType->
14857 wdiPktFilterCfg.paramsData[i].compareData[0],
14858 pwdiSetRcvPktFilterReqParamsType->
14859 wdiPktFilterCfg.paramsData[i].compareData[1],
14860 pwdiSetRcvPktFilterReqParamsType->
14861 wdiPktFilterCfg.paramsData[i].compareData[2],
14862 pwdiSetRcvPktFilterReqParamsType->
14863 wdiPktFilterCfg.paramsData[i].compareData[3],
14864 pwdiSetRcvPktFilterReqParamsType->
14865 wdiPktFilterCfg.paramsData[i].compareData[4],
14866 pwdiSetRcvPktFilterReqParamsType->
14867 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070014868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014869 "MData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070014870 pwdiSetRcvPktFilterReqParamsType->
14871 wdiPktFilterCfg.paramsData[i].dataMask[0],
14872 pwdiSetRcvPktFilterReqParamsType->
14873 wdiPktFilterCfg.paramsData[i].dataMask[1],
14874 pwdiSetRcvPktFilterReqParamsType->
14875 wdiPktFilterCfg.paramsData[i].dataMask[2],
14876 pwdiSetRcvPktFilterReqParamsType->
14877 wdiPktFilterCfg.paramsData[i].dataMask[3],
14878 pwdiSetRcvPktFilterReqParamsType->
14879 wdiPktFilterCfg.paramsData[i].dataMask[4],
14880 pwdiSetRcvPktFilterReqParamsType->
14881 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070014882 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014883 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014884 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014885 /* Store Params pass it to WDI */
14886 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
14887 pWdaParams->pWdaContext = pWDA;
14888 /* Store param pointer as passed in by caller */
14889 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070014890 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014891 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014892 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014893 if(IS_WDI_STATUS_FAILURE(status))
14894 {
14895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14896 "Failure in SetFilter(),free all the memory,status %d ",status);
14897 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14898 vos_mem_free(pWdaParams->wdaMsgParam);
14899 vos_mem_free(pWdaParams);
14900 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014901 return CONVERT_WDI2VOS_STATUS(status) ;
14902}
Jeff Johnson295189b2012-06-20 16:38:30 -070014903/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014904 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014905 *
14906 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014907void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014908 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
14909 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014910{
14911 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14912 tWDA_CbContext *pWDA;
14913 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
14914 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
14915 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
14916 tANI_U8 i;
14917 vos_msg_t vosMsg;
14918
14919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014920 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014921 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
14922
Jeff Johnsone7245742012-09-05 17:12:55 -070014923 if(NULL == pRcvFltPktMatchCntRsp)
14924 {
14925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014926 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070014927 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014928 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070014929 return ;
14930 }
14931
Jeff Johnson295189b2012-06-20 16:38:30 -070014932 if(NULL == pWdaParams)
14933 {
14934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014935 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014936 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014937 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070014938 return ;
14939 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014940 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
14941 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070014942 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
14943 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
14944
14945 /* Message Header */
14946 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
14947 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
14948
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014949 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070014950
14951 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
14952 {
14953 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
14954 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
14955 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014956 /* VOS message wrapper */
14957 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
14958 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
14959 vosMsg.bodyval = 0;
14960 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14961 {
14962 /* free the mem and return */
14963 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
14964 }
14965
14966 vos_mem_free(pWdaParams->wdaMsgParam) ;
14967 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14968 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070014969
14970 return;
14971}
14972/*
14973 * FUNCTION: WDA_FilterMatchCountReqCallback
14974 * Free memory and send RSP back to SME.
14975 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
14976 */
14977void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
14978{
14979 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14980 vos_msg_t vosMsg;
14981
14982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14983 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14984
14985 if(NULL == pWdaParams)
14986 {
14987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14988 "%s: pWdaParams received NULL", __func__);
14989 VOS_ASSERT(0);
14990 return;
14991 }
14992
14993 /* VOS message wrapper */
14994 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
14995 vosMsg.bodyptr = NULL;
14996 vosMsg.bodyval = 0;
14997
14998 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14999 {
15000 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15001 vos_mem_free(pWdaParams->wdaMsgParam);
15002 vos_mem_free(pWdaParams);
15003 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
15004 }
15005
15006 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070015007}
Jeff Johnson295189b2012-06-20 16:38:30 -070015008/*
15009 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
15010 * Request to WDI to get PC Filter Match Count
15011 */
15012VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
15013{
Jeff Johnson43971f52012-07-17 12:26:56 -070015014 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015015 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
15016 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
15017 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015019 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015020 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
15021 {
15022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015023 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015024 VOS_ASSERT(0);
15025 return VOS_STATUS_E_NOMEM;
15026 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015027 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15028 if(NULL == pWdaParams)
15029 {
15030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015031 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015032 VOS_ASSERT(0);
15033 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
15034 return VOS_STATUS_E_NOMEM;
15035 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015036
Yue Ma7f44bbe2013-04-12 11:47:39 -070015037 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
15038 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015039
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015040 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
15041 pRcvFltPktMatchRsp->bssId,
15042 sizeof(wpt_macAddr));
15043
Jeff Johnson295189b2012-06-20 16:38:30 -070015044 /* Store Params pass it to WDI */
15045 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
15046 pWdaParams->pWdaContext = pWDA;
15047 /* Store param pointer as passed in by caller */
15048 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070015049 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015050 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015051 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015052 if(IS_WDI_STATUS_FAILURE(status))
15053 {
15054 /* failure returned by WDI API */
15055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15056 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
15057 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15058 vos_mem_free(pWdaParams) ;
15059 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
15060 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
15061 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015062 return CONVERT_WDI2VOS_STATUS(status) ;
15063}
Jeff Johnson295189b2012-06-20 16:38:30 -070015064/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015065 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015066 *
15067 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015068void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015069 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
15070 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015071{
15072 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070015073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015074 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015075/* WDA_VOS_ASSERT(NULL != pWdaParams); */
15076 if(NULL == pWdaParams)
15077 {
15078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015079 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015080 VOS_ASSERT(0) ;
15081 return ;
15082 }
15083
15084 vos_mem_free(pWdaParams->wdaMsgParam) ;
15085 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15086 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015087 //print a msg, nothing else to do
15088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015089 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070015090 return ;
15091}
Jeff Johnson295189b2012-06-20 16:38:30 -070015092/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015093 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
15094 * Free memory.
15095 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
15096 */
15097void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
15098{
15099 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15100
15101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15102 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15103
15104 if(NULL == pWdaParams)
15105 {
15106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15107 "%s: Invalid pWdaParams pointer", __func__);
15108 VOS_ASSERT(0);
15109 return;
15110 }
15111
15112 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15113 {
15114 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15115 vos_mem_free(pWdaParams->wdaMsgParam);
15116 vos_mem_free(pWdaParams);
15117 }
15118
15119 return;
15120}
15121/*
Jeff Johnson295189b2012-06-20 16:38:30 -070015122 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
15123 * Request to WDI to clear Receive Filters
15124 */
15125VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
15126 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
15127{
Jeff Johnson43971f52012-07-17 12:26:56 -070015128 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015129 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
15130 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
15131 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015132 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015133 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015134 if(NULL == pwdiRcvFltPktClearReqParamsType)
15135 {
15136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015137 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015138 VOS_ASSERT(0);
15139 return VOS_STATUS_E_NOMEM;
15140 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015141 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15142 if(NULL == pWdaParams)
15143 {
15144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015145 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015146 VOS_ASSERT(0);
15147 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
15148 return VOS_STATUS_E_NOMEM;
15149 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015150 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
15151 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070015152 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
15153 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
15154 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
15155 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070015156
Yue Ma7f44bbe2013-04-12 11:47:39 -070015157 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015158 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015159 /* Store Params pass it to WDI */
15160 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
15161 pWdaParams->pWdaContext = pWDA;
15162 /* Store param pointer as passed in by caller */
15163 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070015164 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015165 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015166 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015167 if(IS_WDI_STATUS_FAILURE(status))
15168 {
15169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15170 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
15171 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080015172 vos_mem_free(pWdaParams->wdaMsgParam);
15173 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015174 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015175 return CONVERT_WDI2VOS_STATUS(status) ;
15176}
15177#endif // WLAN_FEATURE_PACKET_FILTERING
15178
Jeff Johnson295189b2012-06-20 16:38:30 -070015179/*
15180 * FUNCTION: WDA_ProcessSetPowerParamsReq
15181 * Request to WDI to set power params
15182 */
15183VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
15184 tSirSetPowerParamsReq *pPowerParams)
15185{
Jeff Johnson43971f52012-07-17 12:26:56 -070015186 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015187 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
15188 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015189 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015191 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015192 if(NULL == pwdiSetPowerParamsReqInfo)
15193 {
15194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015195 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015196 VOS_ASSERT(0);
15197 return VOS_STATUS_E_NOMEM;
15198 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015199 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15200 if(NULL == pWdaParams)
15201 {
15202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015203 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015204 VOS_ASSERT(0);
15205 vos_mem_free(pwdiSetPowerParamsReqInfo);
15206 return VOS_STATUS_E_NOMEM;
15207 }
Jeff Johnsone7245742012-09-05 17:12:55 -070015208
Jeff Johnson295189b2012-06-20 16:38:30 -070015209
15210 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
15211 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070015212 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
15213 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070015214 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
15215 pPowerParams->uListenInterval;
15216 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
15217 pPowerParams->uBcastMcastFilter;
15218 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
15219 pPowerParams->uEnableBET;
15220 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
15221 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070015222 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
15223 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070015224 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
15225 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015226
Jeff Johnson295189b2012-06-20 16:38:30 -070015227 /* Store Params pass it to WDI */
15228 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
15229 pWdaParams->pWdaContext = pWDA;
15230 /* Store param pointer as passed in by caller */
15231 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015232 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015233 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015234 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015235 if(IS_WDI_STATUS_FAILURE(status))
15236 {
15237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15238 "Failure in Set power params REQ WDI API, free all the memory " );
15239 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15240 vos_mem_free(pWdaParams->wdaMsgParam);
15241 pWdaParams->wdaWdiApiMsgParam = NULL;
15242 pWdaParams->wdaMsgParam = NULL;
15243 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015244 return CONVERT_WDI2VOS_STATUS(status) ;
15245}
15246
15247/*
15248 * FUNCTION: WDA_SetTmLevelRspCallback
15249 * Set TM Level response
15250 */
15251void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
15252{
15253 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15254
15255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015256 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015257
15258 if(NULL == pWdaParams)
15259 {
15260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015261 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015262 VOS_ASSERT(0) ;
15263 return ;
15264 }
15265
15266 /* Dose not need to send notification to upper layer
15267 * Just free allocated resources */
15268 if( pWdaParams != NULL )
15269 {
15270 if( pWdaParams->wdaWdiApiMsgParam != NULL )
15271 {
15272 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15273 }
15274 vos_mem_free(pWdaParams->wdaMsgParam) ;
15275 vos_mem_free(pWdaParams) ;
15276 }
15277}
15278
15279/*
15280 * FUNCTION: WDA_ProcessSetTmLevelReq
15281 * Set TM Level request
15282 */
15283VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
15284 tAniSetTmLevelReq *setTmLevelReq)
15285{
15286 WDI_Status status = WDI_STATUS_SUCCESS ;
15287 tWDA_ReqParams *pWdaParams ;
15288 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
15289 (WDI_SetTmLevelReqType *)vos_mem_malloc(
15290 sizeof(WDI_SetTmLevelReqType)) ;
15291 if(NULL == wdiSetTmLevelReq)
15292 {
15293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015294 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015295 VOS_ASSERT(0);
15296 return VOS_STATUS_E_NOMEM;
15297 }
15298
15299 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15300 if(NULL == pWdaParams)
15301 {
15302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015303 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015304 VOS_ASSERT(0);
15305 vos_mem_free(wdiSetTmLevelReq);
15306 return VOS_STATUS_E_NOMEM;
15307 }
15308
15309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015310 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015311
15312 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
15313 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
15314
15315 pWdaParams->pWdaContext = pWDA;
15316 pWdaParams->wdaMsgParam = setTmLevelReq;
15317 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
15318
15319 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
15320 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
15321
15322 if(IS_WDI_STATUS_FAILURE(status))
15323 {
15324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080015325 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070015326 vos_mem_free(pWdaParams->wdaMsgParam) ;
15327 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15328 vos_mem_free(pWdaParams) ;
15329 }
15330
15331 return CONVERT_WDI2VOS_STATUS(status) ;
15332}
15333
15334VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
15335 tpTxControlParams pTxCtrlParam)
15336{
15337 VOS_STATUS wdaStatus;
15338
15339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015340 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015341 if( pTxCtrlParam == NULL )
15342 {
15343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015344 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015345 return VOS_STATUS_E_FAILURE;
15346 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015347 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
15348 {
15349 wdaStatus = WDA_SuspendDataTx(pWDA);
15350 }
15351 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
15352 {
15353 wdaStatus = WDA_ResumeDataTx(pWDA);
15354 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015355 return wdaStatus;
15356}
15357
15358 /* FUNCTION WDA_featureCapsExchange
15359 * WDA API to invoke capability exchange between host and FW.
15360 */
15361void WDA_featureCapsExchange(v_PVOID_t pVosContext)
15362{
15363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015364 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070015365 WDI_featureCapsExchangeReq( NULL, pVosContext);
15366}
15367
Yathish9f22e662012-12-10 14:21:35 -080015368/* FUNCTION WDA_disableCapablityFeature
15369 * WDA API to diable Active mode offload in host.
15370 */
15371void WDA_disableCapablityFeature(tANI_U8 feature_index)
15372{
15373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15374 "%s:enter", __func__ );
15375 WDI_disableCapablityFeature(feature_index);
15376}
15377
Jeff Johnson295189b2012-06-20 16:38:30 -070015378 /* FUNCTION WDA_getHostWlanFeatCaps
15379 * Wrapper for WDI API, that will return if the feature (enum value).passed
15380 * to this API is supported or not in Host
15381 * return value
15382 * 0 - implies feature is NOT Supported
15383 * any non zero value - implies feature is SUPPORTED
15384 */
15385tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
15386{
15387 return WDI_getHostWlanFeatCaps(featEnumValue);
15388}
15389
15390 /* FUNCTION WDA_getFwWlanFeatCaps
15391 * Wrapper for WDI API, that will return if the feature (enum value).passed
15392 * to this API is supported or not in FW
15393 * return value
15394 * 0 - implies feature is NOT Supported
15395 * any non zero value - implies feature is SUPPORTED
15396 */
15397tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
15398{
15399 return WDI_getFwWlanFeatCaps(featEnumValue);
15400}
15401
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015402
Jeff Johnson295189b2012-06-20 16:38:30 -070015403/*
15404 * FUNCTION: WDA_shutdown
15405 * Shutdown WDA/WDI without handshaking with Riva.
15406 * Synchronous function.
15407 */
15408VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
15409{
15410 WDI_Status wdiStatus;
15411 //tANI_U8 eventIdx = 0;
15412 VOS_STATUS status = VOS_STATUS_SUCCESS;
15413 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070015414 if (NULL == pWDA)
15415 {
15416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015417 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070015418 VOS_ASSERT(0);
15419 return VOS_STATUS_E_FAILURE;
15420 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015421 /* FTM mode stay START_STATE */
15422 if( (WDA_READY_STATE != pWDA->wdaState) &&
15423 (WDA_INIT_STATE != pWDA->wdaState) &&
15424 (WDA_START_STATE != pWDA->wdaState) )
15425 {
15426 VOS_ASSERT(0);
15427 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015428
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015429 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
15430 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -070015431 {
15432 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015433 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070015434 }
Leo Chang9d76f622013-08-23 16:34:52 -070015435 else
15436 {
15437 vos_event_destroy(&pWDA->ftmStopDoneEvent);
15438 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015439
Jeff Johnson295189b2012-06-20 16:38:30 -070015440 /* call WDI shutdown */
15441 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070015442 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
15443 {
15444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15445 "error in WDA Stop" );
15446 status = VOS_STATUS_E_FAILURE;
15447 }
15448 /* WDI stop is synchrnous, shutdown is complete when it returns */
15449 pWDA->wdaState = WDA_STOP_STATE;
15450
Jeff Johnson295189b2012-06-20 16:38:30 -070015451 /* shutdown should perform the stop & close actions. */
15452 /* Destroy the event */
15453 status = vos_event_destroy(&pWDA->txFrameEvent);
15454 if(!VOS_IS_STATUS_SUCCESS(status))
15455 {
15456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015457 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070015458 status = VOS_STATUS_E_FAILURE;
15459 }
15460 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
15461 if(!VOS_IS_STATUS_SUCCESS(status))
15462 {
15463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015464 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070015465 status = VOS_STATUS_E_FAILURE;
15466 }
15467 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
15468 if(!VOS_IS_STATUS_SUCCESS(status))
15469 {
15470 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015471 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070015472 status = VOS_STATUS_E_FAILURE;
15473 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015474 /* free WDA context */
15475 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
15476 if ( !VOS_IS_STATUS_SUCCESS(status) )
15477 {
15478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15479 "error in WDA close " );
15480 status = VOS_STATUS_E_FAILURE;
15481 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015482 return status;
15483}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080015484
Jeff Johnsone7245742012-09-05 17:12:55 -070015485/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080015486 * FUNCTION: WDA_setNeedShutdown
15487 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070015488 */
15489
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080015490void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070015491{
15492 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070015493 if(pWDA == NULL)
15494 {
15495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15496 "Could not get the WDA Context pointer" );
15497 return;
15498 }
Jeff Johnsone7245742012-09-05 17:12:55 -070015499 pWDA->needShutdown = TRUE;
15500}
15501/*
15502 * FUNCTION: WDA_needShutdown
15503 * WDA needs a shutdown
15504 */
15505
15506v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
15507{
15508 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070015509 if(pWDA == NULL)
15510 {
15511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15512 "Could not get the WDA Context pointer" );
15513 return 0;
15514 }
15515 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070015516}
15517
Mohit Khanna4a70d262012-09-11 16:30:12 -070015518#ifdef WLAN_FEATURE_11AC
15519/*
15520 * FUNCTION: WDA_SetBeaconFilterReqCallback
15521 *
15522 */
15523void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
15524{
15525 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015527 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070015528 if(NULL == pWdaParams)
15529 {
15530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015531 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070015532 VOS_ASSERT(0) ;
15533 return ;
15534 }
Jeff Johnsone7245742012-09-05 17:12:55 -070015535
Mohit Khanna4a70d262012-09-11 16:30:12 -070015536 vos_mem_free(pWdaParams->wdaMsgParam) ;
15537 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15538 vos_mem_free(pWdaParams) ;
15539 /*
15540 * No respone required for SetBeaconFilter req so just free the request
15541 * param here
15542 */
15543
15544 return ;
15545}
15546
15547VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
15548 tUpdateVHTOpMode *pData)
15549{
15550 WDI_Status status = WDI_STATUS_SUCCESS ;
15551 tWDA_ReqParams *pWdaParams ;
15552 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
15553 sizeof(WDI_UpdateVHTOpMode)) ;
15554 if(NULL == wdiTemp)
15555 {
15556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015557 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070015558 VOS_ASSERT(0);
15559 return VOS_STATUS_E_NOMEM;
15560 }
15561 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15562 if(NULL == pWdaParams)
15563 {
15564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015565 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070015566 VOS_ASSERT(0);
15567 vos_mem_free(wdiTemp);
15568 return VOS_STATUS_E_NOMEM;
15569 }
15570
15571 wdiTemp->opMode = pData->opMode;
15572 wdiTemp->staId = pData->staId;
15573
15574 pWdaParams->pWdaContext = pWDA;
15575 /* Store Req pointer, as this will be used for response */
15576 pWdaParams->wdaMsgParam = (void *)pData;
15577 /* store Params pass it to WDI */
15578 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
15579
15580 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
15581
15582 if(IS_WDI_STATUS_FAILURE(status))
15583 {
15584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15585 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
15586 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15587 vos_mem_free(pWdaParams->wdaMsgParam);
15588 vos_mem_free(pWdaParams);
15589 }
15590 return CONVERT_WDI2VOS_STATUS(status) ;
15591}
15592#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015593
15594/*==========================================================================
15595 FUNCTION WDA_TransportChannelDebug
15596
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070015597 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015598 Display Transport Channel debugging information
15599 User may request to display DXE channel snapshot
15600 Or if host driver detects any abnormal stcuk may display
15601
15602 PARAMETERS
schang6295e542013-03-12 15:31:23 -070015603 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080015604 displaySnapshot : Display DXE snapshot option
Mihir Shete40a55652014-03-02 14:14:47 +053015605 debugFlags : Enable stall detect features
15606 defined by WPAL_DeviceDebugFlags
15607 These features may effect
15608 data performance.
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015609
15610 RETURN VALUE
15611 NONE
15612
15613===========================================================================*/
15614void WDA_TransportChannelDebug
15615(
schang6295e542013-03-12 15:31:23 -070015616 tpAniSirGlobal pMac,
15617 v_BOOL_t displaySnapshot,
Mihir Shete40a55652014-03-02 14:14:47 +053015618 v_U8_t debugFlags
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015619)
15620{
Mihir Shete40a55652014-03-02 14:14:47 +053015621 WDI_TransportChannelDebug(displaySnapshot, debugFlags);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015622 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070015623}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070015624
15625/*==========================================================================
15626 FUNCTION WDA_SetEnableSSR
15627
15628 DESCRIPTION
15629 API to enable/disable SSR on WDI timeout
15630
15631 PARAMETERS
15632 enableSSR : enable/disable SSR
15633
15634 RETURN VALUE
15635 NONE
15636
15637===========================================================================*/
15638void WDA_SetEnableSSR(v_BOOL_t enableSSR)
15639{
15640 WDI_SetEnableSSR(enableSSR);
15641}
Leo Chang9056f462013-08-01 19:21:11 -070015642
15643#ifdef FEATURE_WLAN_LPHB
15644/*
15645 * FUNCTION: WDA_LPHBconfRspCallback
15646 *
15647 */
15648void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
15649{
15650 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15651
15652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15653 "<------ %s " ,__func__);
15654 if (NULL == pWdaParams)
15655 {
15656 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15657 "%s: pWdaParams received NULL", __func__);
15658 VOS_ASSERT(0) ;
15659 return ;
15660 }
15661
15662 /* Do not need to send notification to upper layer
15663 * Just free allocated resources */
15664 if (pWdaParams != NULL)
15665 {
15666 if (pWdaParams->wdaWdiApiMsgParam != NULL)
15667 {
15668 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15669 }
15670 vos_mem_free(pWdaParams->wdaMsgParam) ;
15671 vos_mem_free(pWdaParams) ;
15672 }
15673
15674 return;
15675}
15676
15677/*
15678 * FUNCTION: WDA_ProcessLPHBConfReq
15679 *
15680 */
15681VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
15682 tSirLPHBReq *pData)
15683{
15684 WDI_Status wdiStatus;
15685 tWDA_ReqParams *pWdaParams ;
15686
15687 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15688 "------> %s " , __func__);
15689
15690 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15691 if (NULL == pWdaParams)
15692 {
15693 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15694 "%s: VOS MEM Alloc Failure", __func__);
15695 VOS_ASSERT(0);
15696 vos_mem_free(pData);
15697 return VOS_STATUS_E_NOMEM;
15698 }
15699
15700 pWdaParams->pWdaContext = pWDA;
15701 pWdaParams->wdaMsgParam = (void *)pData;
15702 pWdaParams->wdaWdiApiMsgParam = NULL;
15703
15704 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
15705 if (WDI_STATUS_PENDING == wdiStatus)
15706 {
15707 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15708 "Pending received for %s:%d ", __func__, __LINE__);
15709 }
15710 else if (WDI_STATUS_SUCCESS != wdiStatus)
15711 {
15712 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15713 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
15714 vos_mem_free(pWdaParams->wdaMsgParam);
15715 vos_mem_free(pWdaParams);
15716 }
15717
15718 return CONVERT_WDI2VOS_STATUS(wdiStatus);
15719}
15720#endif /* FEATURE_WLAN_LPHB */
15721